From b0ba8923330107ce539b6265af617e497ad5529d Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Thu, 23 Aug 2012 12:28:50 +0100 Subject: [PATCH] [realtek] Always set high dword of ring address registers Some RTL8169 cards (observed with an RTL8169SC) power up with garbage values in the ring address registers, and do not clear the registers on reset. Fix by always setting the high dword of the ring address registers. Signed-off-by: Michael Brown --- src/drivers/net/realtek.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/drivers/net/realtek.c b/src/drivers/net/realtek.c index 3c7b1f856..6a119db34 100644 --- a/src/drivers/net/realtek.c +++ b/src/drivers/net/realtek.c @@ -409,11 +409,9 @@ static int realtek_create_ring ( struct realtek_nic *rtl, /* Program ring address */ address = virt_to_bus ( ring->desc ); + writel ( ( ( ( uint64_t ) address ) >> 32 ), + rtl->regs + ring->reg + 4 ); writel ( ( address & 0xffffffffUL ), rtl->regs + ring->reg ); - if ( sizeof ( physaddr_t ) > sizeof ( uint32_t ) ) { - writel ( ( ( ( uint64_t ) address ) >> 32 ), - rtl->regs + ring->reg + 4 ); - } DBGC ( rtl, "REALTEK %p ring %02x is at [%08llx,%08llx)\n", rtl, ring->reg, ( ( unsigned long long ) address ), ( ( unsigned long long ) address + ring->len ) );