The intel niantic nic is not happy if we leave a ring enabled but set its length to zero, so properly disable the ring when we exit. --- src/drivers/net/intel.c | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-)
diff --git a/src/drivers/net/intel.c b/src/drivers/net/intel.c index 626a0c3..fb99ba6 100644 --- a/src/drivers/net/intel.c +++ b/src/drivers/net/intel.c @@ -489,6 +489,9 @@ void intel_clear_descriptor ( struct intel_nic *intel, unsigned int reg ) { while ( (readl ( intel->regs + reg + INTEL_xDCTL ) & INTEL_xDCTL_ENABLE) != 0 ) DBGC ( intel, "WAITING FOR RXD RESET\n" ); + /* Datasheet says to sleep for at least 100 us, so 10 ms should be enough */ + mdelay ( 10 ); + /* Clear ring length */ writel ( 0, ( intel->regs + reg + INTEL_xDLEN ) ); @@ -508,13 +511,8 @@ void intel_clear_descriptor ( struct intel_nic *intel, unsigned int reg ) { * @v ring Descriptor ring */ void intel_destroy_ring ( struct intel_nic *intel, struct intel_ring *ring ) { - - /* Clear ring length */ - writel ( 0, ( intel->regs + ring->reg + INTEL_xDLEN ) ); - - /* Clear ring address */ - writel ( 0, ( intel->regs + ring->reg + INTEL_xDBAL ) ); - writel ( 0, ( intel->regs + ring->reg + INTEL_xDBAH ) ); + /* Clear descriptor */ + intel_clear_descriptor ( intel, ring->reg ); /* Free descriptor ring */ free_dma ( ring->desc, ring->len ); -- 2.5.0 _______________________________________________ ipxe-devel mailing list ipxe-devel@lists.ipxe.org https://lists.ipxe.org/mailman/listinfo.cgi/ipxe-devel