aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Brown <mcb30@ipxe.org>2012-08-23 12:28:50 +0100
committerMichael Brown <mcb30@ipxe.org>2012-08-23 13:35:54 +0100
commitb0ba8923330107ce539b6265af617e497ad5529d (patch)
treed3f53f728b34f4bdfb2228fdd8af7b1762f18d0f
parenta05871d89ad9b94248049c66f238092fc896e9aa (diff)
downloadipxe-b0ba8923330107ce539b6265af617e497ad5529d.zip
ipxe-b0ba8923330107ce539b6265af617e497ad5529d.tar.gz
ipxe-b0ba8923330107ce539b6265af617e497ad5529d.tar.bz2
[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 <mcb30@ipxe.org>
-rw-r--r--src/drivers/net/realtek.c6
1 files changed, 2 insertions, 4 deletions
diff --git a/src/drivers/net/realtek.c b/src/drivers/net/realtek.c
index 3c7b1f8..6a119db 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 ) );