From: 宋文武 <[email protected]> The RX_CTL_0 register includes the RX_EN receive-enable bit, which allwinner_sun8i_emac_can_receive() checks. That means that if the guest sets it we need to call qemu_flush_queued_packets() as we might now be able to handle them.
This fixes a bug where networking didn't work in u-boot on the orangepi-pc machine. Resolves: https://gitlab.com/qemu-project/qemu/-/work_items/3459 Signed-off-by: 宋文武 <[email protected]> Message-id: [email protected] Reviewed-by: Peter Maydell <[email protected]> [PMM: expanded commit message, removed unneeded RX_EN test] Signed-off-by: Peter Maydell <[email protected]> (cherry picked from commit a7f27d6903b30bcea21c46986cb7507edcbc970c) Signed-off-by: Michael Tokarev <[email protected]> diff --git a/hw/net/allwinner-sun8i-emac.c b/hw/net/allwinner-sun8i-emac.c index 5adb41dc46..5c1b75897d 100644 --- a/hw/net/allwinner-sun8i-emac.c +++ b/hw/net/allwinner-sun8i-emac.c @@ -727,6 +727,9 @@ static void allwinner_sun8i_emac_write(void *opaque, hwaddr offset, break; case REG_RX_CTL_0: /* Receive Control 0 */ s->rx_ctl0 = value; + if (allwinner_sun8i_emac_can_receive(nc)) { + qemu_flush_queued_packets(nc); + } break; case REG_RX_CTL_1: /* Receive Control 1 */ s->rx_ctl1 = value | RX_CTL1_RX_MD; -- 2.47.3
