diff options
author | Tom Rini <trini@konsulko.com> | 2019-01-24 15:30:06 -0500 |
---|---|---|
committer | Tom Rini <trini@konsulko.com> | 2019-01-24 15:30:06 -0500 |
commit | 68489ed037530ec29fc0bc452ad6e4b0c5db02ec (patch) | |
tree | b1fb961b98f1e9a5ab5c3f0dc80fcfc32e00e689 /drivers/net/designware.c | |
parent | 0c3b301f79fcad081c8509ee4cb06e7b0478c8c1 (diff) | |
parent | 91c9cbabf935b37ab6c0b9b622e7faf0b350acb6 (diff) |
Merge branch 'master' of git://git.denx.de/u-boot-net
Diffstat (limited to 'drivers/net/designware.c')
-rw-r--r-- | drivers/net/designware.c | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/drivers/net/designware.c b/drivers/net/designware.c index 4fa26abc1b8..2c5d9560c58 100644 --- a/drivers/net/designware.c +++ b/drivers/net/designware.c @@ -380,24 +380,28 @@ static int _dw_eth_send(struct dw_eth_dev *priv, void *packet, int length) return -EPERM; } - length = max(length, ETH_ZLEN); - memcpy((void *)data_start, packet, length); + if (length < ETH_ZLEN) { + memset(&((char *)data_start)[length], 0, ETH_ZLEN - length); + length = ETH_ZLEN; + } /* Flush data to be sent */ flush_dcache_range(data_start, data_end); #if defined(CONFIG_DW_ALTDESCRIPTOR) desc_p->txrx_status |= DESC_TXSTS_TXFIRST | DESC_TXSTS_TXLAST; - desc_p->dmamac_cntl |= (length << DESC_TXCTRL_SIZE1SHFT) & - DESC_TXCTRL_SIZE1MASK; + desc_p->dmamac_cntl = (desc_p->dmamac_cntl & ~DESC_TXCTRL_SIZE1MASK) | + ((length << DESC_TXCTRL_SIZE1SHFT) & + DESC_TXCTRL_SIZE1MASK); desc_p->txrx_status &= ~(DESC_TXSTS_MSK); desc_p->txrx_status |= DESC_TXSTS_OWNBYDMA; #else - desc_p->dmamac_cntl |= ((length << DESC_TXCTRL_SIZE1SHFT) & - DESC_TXCTRL_SIZE1MASK) | DESC_TXCTRL_TXLAST | - DESC_TXCTRL_TXFIRST; + desc_p->dmamac_cntl = (desc_p->dmamac_cntl & ~DESC_TXCTRL_SIZE1MASK) | + ((length << DESC_TXCTRL_SIZE1SHFT) & + DESC_TXCTRL_SIZE1MASK) | DESC_TXCTRL_TXLAST | + DESC_TXCTRL_TXFIRST; desc_p->txrx_status = DESC_TXSTS_OWNBYDMA; #endif |