zynq_gem_recv() returns -1 when the current receive descriptor has no
new packet. net_lwip_rx() only treats -EAGAIN as a non-fatal empty
receive, so DHCP can abort on an idle poll now that it checks
net_lwip_poll().
Return -EAGAIN when the descriptor's new-packet bit is clear. Leave
received-frame processing and the errors for missing frame flags or
zero-length packets unchanged.
Fixes: 53a0ca3757fe ("net: lwip: finish DHCP before starting autoload")
Signed-off-by: James Hilliard <[email protected]>
---
drivers/net/zynq_gem.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/net/zynq_gem.c b/drivers/net/zynq_gem.c
index f570ae9ee73..957d5251cb8 100644
--- a/drivers/net/zynq_gem.c
+++ b/drivers/net/zynq_gem.c
@@ -772,7 +772,7 @@ static int zynq_gem_recv(struct udevice *dev, int flags,
uchar **packetp)
struct emac_bd *current_bd = &priv->rx_bd[priv->rxbd_current];
if (!(current_bd->addr & ZYNQ_GEM_RXBUF_NEW_MASK))
- return -1;
+ return -EAGAIN;
if (!(current_bd->status &
(ZYNQ_GEM_RXBUF_SOF_MASK | ZYNQ_GEM_RXBUF_EOF_MASK))) {
--
2.53.0