Quellcode durchsuchen

[realtek] Use explicit values for RCR.RXFTH and RCR.MXDMA

Some RTL8169 cards (observed with an RTL8169SC) power up with invalid
values in RCR.RXFTH and RCR.MXDMA, causing receive DMA to fail.  Fix
by setting explicit values for both fields.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
tags/v1.20.1
Michael Brown vor 11 Jahren
Ursprung
Commit
5d05220ee0
2 geänderte Dateien mit 10 neuen und 2 gelöschten Zeilen
  1. 4
    2
      src/drivers/net/realtek.c
  2. 6
    0
      src/drivers/net/realtek.h

+ 4
- 2
src/drivers/net/realtek.c Datei anzeigen

@@ -526,8 +526,10 @@ static int realtek_open ( struct net_device *netdev ) {
526 526
 
527 527
 	/* Configure receiver */
528 528
 	rcr = readl ( rtl->regs + RTL_RCR );
529
-	rcr &= ~( RTL_RCR_RBLEN_MASK );
530
-	rcr |= ( RTL_RCR_RBLEN_DEFAULT | RTL_RCR_WRAP | RTL_RCR_AB |
529
+	rcr &= ~( RTL_RCR_RXFTH_MASK | RTL_RCR_RBLEN_MASK |
530
+		  RTL_RCR_MXDMA_MASK );
531
+	rcr |= ( RTL_RCR_RXFTH_DEFAULT | RTL_RCR_RBLEN_DEFAULT |
532
+		 RTL_RCR_MXDMA_DEFAULT | RTL_RCR_WRAP | RTL_RCR_AB |
531 533
 		 RTL_RCR_AM | RTL_RCR_APM | RTL_RCR_AAP );
532 534
 	writel ( rcr, rtl->regs + RTL_RCR );
533 535
 

+ 6
- 0
src/drivers/net/realtek.h Datei anzeigen

@@ -134,9 +134,15 @@ enum realtek_legacy_status {
134 134
 
135 135
 /** Receive (Rx) Configuration Register (dword) */
136 136
 #define RTL_RCR 0x44
137
+#define RTL_RCR_RXFTH(x)	( (x) << 13 ) /**< Receive FIFO threshold */
138
+#define RTL_RCR_RXFTH_MASK	RTL_RCR_RXFTH ( 0x7 )
139
+#define RTL_RCR_RXFTH_DEFAULT	RTL_RCR_RXFTH ( 0x7 /* Whole packet */ )
137 140
 #define RTL_RCR_RBLEN(x)	( (x) << 11 ) /**< Receive buffer length */
138 141
 #define RTL_RCR_RBLEN_MASK	RTL_RCR_RBLEN ( 0x3 )
139 142
 #define RTL_RCR_RBLEN_DEFAULT	RTL_RCR_RBLEN ( 0 /* 8kB */ )
143
+#define RTL_RCR_MXDMA(x)	( (x) << 8 ) /**< Max DMA burst size */
144
+#define RTL_RCR_MXDMA_MASK	RTL_RCR_MXDMA ( 0x7 )
145
+#define RTL_RCR_MXDMA_DEFAULT	RTL_RCR_MXDMA ( 0x7 /* Unlimited */ )
140 146
 #define RTL_RCR_WRAP		0x00000080UL /**< Overrun receive buffer */
141 147
 #define RTL_RCR_9356SEL		0x00000040UL /**< EEPROM is a 93C56 */
142 148
 #define RTL_RCR_AB		0x00000008UL /**< Accept broadcast packets */

Laden…
Abbrechen
Speichern