diff options
author | Andrey Smirnov <andrew.smirnov@gmail.com> | 2019-02-06 17:22:04 -0800 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2019-02-11 08:47:46 +0100 |
commit | 20aa1645a30da4e8c911e28ae21d520a35f07bf9 (patch) | |
tree | 5bafa200eef94bf32e32399ceec792ce318166a0 /drivers/net/e1000 | |
parent | eeaf317545438286f8d6b044e672fcf320de44b5 (diff) | |
download | barebox-20aa1645a30da4e8c911e28ae21d520a35f07bf9.tar.gz barebox-20aa1645a30da4e8c911e28ae21d520a35f07bf9.tar.xz |
net/e1000: Fix incorrect "Rx ready" check
Due to wrong placement of parenthesis in
if (!(le32_to_cpu(rd->status)) & E1000_RXD_STAT_DD)
return 0;
instead of checking that E1000_RXD_STAT_DD is not set, the condition
ends up checking that "status" is 0.
Change the code to invert the condition tested and get rid of !
entirely.
Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com>
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'drivers/net/e1000')
-rw-r--r-- | drivers/net/e1000/main.c | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/drivers/net/e1000/main.c b/drivers/net/e1000/main.c index 5ab4eb3fd7..e793785e60 100644 --- a/drivers/net/e1000/main.c +++ b/drivers/net/e1000/main.c @@ -3396,18 +3396,21 @@ static int e1000_poll(struct eth_device *edev) rd = hw->rx_base + hw->rx_last; - if (!(le32_to_cpu(rd->status)) & E1000_RXD_STAT_DD) - return 0; + if (le32_to_cpu(rd->status) & E1000_RXD_STAT_DD) { + len = le32_to_cpu(rd->length); - len = le32_to_cpu(rd->length); + dma_sync_single_for_cpu(hw->packet_dma, len, + DMA_FROM_DEVICE); - dma_sync_single_for_cpu(hw->packet_dma, len, DMA_FROM_DEVICE); + net_receive(edev, hw->packet, len); - net_receive(edev, hw->packet, len); + dma_sync_single_for_device(hw->packet_dma, len, + DMA_FROM_DEVICE); + fill_rx(hw); + return 1; + } - dma_sync_single_for_device(hw->packet_dma, len, DMA_FROM_DEVICE); - fill_rx(hw); - return 1; + return 0; } static int e1000_transmit(struct eth_device *edev, void *txpacket, int length) |