Просмотр исходного кода

[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 11 лет назад
Родитель
Сommit
b0ba892333
1 измененных файлов: 2 добавлений и 4 удалений
  1. 2
    4
      src/drivers/net/realtek.c

+ 2
- 4
src/drivers/net/realtek.c Просмотреть файл

@@ -409,11 +409,9 @@ static int realtek_create_ring ( struct realtek_nic *rtl,
409 409
 
410 410
 	/* Program ring address */
411 411
 	address = virt_to_bus ( ring->desc );
412
+	writel ( ( ( ( uint64_t ) address ) >> 32 ),
413
+		 rtl->regs + ring->reg + 4 );
412 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 415
 	DBGC ( rtl, "REALTEK %p ring %02x is at [%08llx,%08llx)\n",
418 416
 	       rtl, ring->reg, ( ( unsigned long long ) address ),
419 417
 	       ( ( unsigned long long ) address + ring->len ) );

Загрузка…
Отмена
Сохранить