Explorar el Código

[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>
tags/v1.20.1
Michael Brown hace 13 años
padre
commit
b0ba892333
Se han modificado 1 ficheros con 2 adiciones y 4 borrados
  1. 2
    4
      src/drivers/net/realtek.c

+ 2
- 4
src/drivers/net/realtek.c Ver fichero

409
 
409
 
410
 	/* Program ring address */
410
 	/* Program ring address */
411
 	address = virt_to_bus ( ring->desc );
411
 	address = virt_to_bus ( ring->desc );
412
+	writel ( ( ( ( uint64_t ) address ) >> 32 ),
413
+		 rtl->regs + ring->reg + 4 );
412
 	writel ( ( address & 0xffffffffUL ), rtl->regs + ring->reg );
414
 	writel ( ( address & 0xffffffffUL ), rtl->regs + ring->reg );
413
-	if ( sizeof ( physaddr_t ) > sizeof ( uint32_t ) ) {
414
-		writel ( ( ( ( uint64_t ) address ) >> 32 ),
415
-			 rtl->regs + ring->reg + 4 );
416
-	}
417
 	DBGC ( rtl, "REALTEK %p ring %02x is at [%08llx,%08llx)\n",
415
 	DBGC ( rtl, "REALTEK %p ring %02x is at [%08llx,%08llx)\n",
418
 	       rtl, ring->reg, ( ( unsigned long long ) address ),
416
 	       rtl, ring->reg, ( ( unsigned long long ) address ),
419
 	       ( ( unsigned long long ) address + ring->len ) );
417
 	       ( ( unsigned long long ) address + ring->len ) );

Loading…
Cancelar
Guardar