ソースを参照

[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年前
コミット
5d05220ee0
2個のファイルの変更10行の追加2行の削除
  1. 4
    2
      src/drivers/net/realtek.c
  2. 6
    0
      src/drivers/net/realtek.h

+ 4
- 2
src/drivers/net/realtek.c ファイルの表示

@@ -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 ファイルの表示

@@ -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 */

読み込み中…
キャンセル
保存