Bläddra i källkod

[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 11 år sedan
förälder
incheckning
5d05220ee0
2 ändrade filer med 10 tillägg och 2 borttagningar
  1. 4
    2
      src/drivers/net/realtek.c
  2. 6
    0
      src/drivers/net/realtek.h

+ 4
- 2
src/drivers/net/realtek.c Visa fil

526
 
526
 
527
 	/* Configure receiver */
527
 	/* Configure receiver */
528
 	rcr = readl ( rtl->regs + RTL_RCR );
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
 		 RTL_RCR_AM | RTL_RCR_APM | RTL_RCR_AAP );
533
 		 RTL_RCR_AM | RTL_RCR_APM | RTL_RCR_AAP );
532
 	writel ( rcr, rtl->regs + RTL_RCR );
534
 	writel ( rcr, rtl->regs + RTL_RCR );
533
 
535
 

+ 6
- 0
src/drivers/net/realtek.h Visa fil

134
 
134
 
135
 /** Receive (Rx) Configuration Register (dword) */
135
 /** Receive (Rx) Configuration Register (dword) */
136
 #define RTL_RCR 0x44
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
 #define RTL_RCR_RBLEN(x)	( (x) << 11 ) /**< Receive buffer length */
140
 #define RTL_RCR_RBLEN(x)	( (x) << 11 ) /**< Receive buffer length */
138
 #define RTL_RCR_RBLEN_MASK	RTL_RCR_RBLEN ( 0x3 )
141
 #define RTL_RCR_RBLEN_MASK	RTL_RCR_RBLEN ( 0x3 )
139
 #define RTL_RCR_RBLEN_DEFAULT	RTL_RCR_RBLEN ( 0 /* 8kB */ )
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
 #define RTL_RCR_WRAP		0x00000080UL /**< Overrun receive buffer */
146
 #define RTL_RCR_WRAP		0x00000080UL /**< Overrun receive buffer */
141
 #define RTL_RCR_9356SEL		0x00000040UL /**< EEPROM is a 93C56 */
147
 #define RTL_RCR_9356SEL		0x00000040UL /**< EEPROM is a 93C56 */
142
 #define RTL_RCR_AB		0x00000008UL /**< Accept broadcast packets */
148
 #define RTL_RCR_AB		0x00000008UL /**< Accept broadcast packets */

Laddar…
Avbryt
Spara