git: 9front

Download patch

ref: 35d8ccee13d4b424a2a26bc32c068631cf113ea6
parent: 935300fd0379dfda01705d36b1f1351fa1fa7cae
author: cinap_lenrek <cinap_lenrek@gmx.de>
date: Wed Apr 3 17:51:42 EDT 2013

intel ethernet: default to 16 byte cache line size when not properly initialized and disable checksum offload for igbe (from sources)

--- a/sys/src/9/pc/ether82543gc.c
+++ b/sys/src/9/pc/ether82543gc.c
@@ -1278,16 +1278,13 @@
 		}
 		cls = pcicfgr8(p, PciCLS);
 		switch(cls){
-			case 0x00:
-			case 0xFF:
-				print("82543gc: unusable cache line size\n");
-				free(ctlr);
-				continue;
-			case 0x08:
-				break;
-			default:
-				print("82543gc: cache line size %d, expected 32\n",
-					cls*4);
+		case 0x08:
+		case 0x10:
+			break;
+		default:
+			print("82543gc: p->cls %#ux, setting to 0x10\n", p->cls);
+			p->cls = 0x10;
+			pcicfgw8(p, PciCLS, p->cls);
 		}
 		ctlr->port = p->mem[0].bar & ~0x0F;
 		ctlr->pcidev = p;
--- a/sys/src/9/pc/etherigbe.c
+++ b/sys/src/9/pc/etherigbe.c
@@ -1099,9 +1099,9 @@
 	csr32w(ctlr, Rxdctl, (8<<WthreshSHIFT)|(8<<HthreshSHIFT)|4);
 
 	/*
-	 * Enable checksum offload.
+	 * Disable checksum offload as it has known bugs.
 	 */
-	csr32w(ctlr, Rxcsum, Tuofl|Ipofl|(ETHERHDRSIZE<<PcssSHIFT));
+	csr32w(ctlr, Rxcsum, ETHERHDRSIZE<<PcssSHIFT);
 }
 
 static int
@@ -1469,8 +1469,10 @@
 		 * so bail.
 		 */
 		r = csr32r(ctlr, Ctrlext);
-		if(!(r & Mdro))
+		if(!(r & Mdro)) {
+			print("igbe: 82543gc Mdro not set\n");
 			return -1;
+		}
 		csr32w(ctlr, Ctrlext, r);
 		delay(20);
 		r = csr32r(ctlr, Ctrlext);
@@ -1953,18 +1955,15 @@
 		}
 		cls = pcicfgr8(p, PciCLS);
 		switch(cls){
-			default:
-				print("igbe: unexpected CLS - %d\n", cls*4);
-				break;
-			case 0x00:
-			case 0xFF:
-				cls = 0x08;
-				pcicfgw8(p, PciCLS, cls);
-				break;
-			case 0x08:
-			case 0x10:
-				break;
-		}
+		default:
+			print("igbe: p->cls %#ux, setting to 0x10\n", p->cls);
+			p->cls = 0x10;
+			pcicfgw8(p, PciCLS, p->cls);
+			break;
+		case 0x08:
+		case 0x10:
+			break;
+ 		}
 		ctlr = malloc(sizeof(Ctlr));
 		if(ctlr == nil){
 			print("igbe: can't allocate memory\n");
--