summaryrefslogtreecommitdiffstats
path: root/drivers/net/e1000
diff options
context:
space:
mode:
authorAndrey Smirnov <andrew.smirnov@gmail.com>2019-02-06 17:22:04 -0800
committerSascha Hauer <s.hauer@pengutronix.de>2019-02-11 08:47:46 +0100
commit20aa1645a30da4e8c911e28ae21d520a35f07bf9 (patch)
tree5bafa200eef94bf32e32399ceec792ce318166a0 /drivers/net/e1000
parenteeaf317545438286f8d6b044e672fcf320de44b5 (diff)
downloadbarebox-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.c19
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)