diff options
author | cinap_lenrek <cinap_lenrek@gmx.de> | 2013-04-03 21:51:42 +0200 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@gmx.de> | 2013-04-03 21:51:42 +0200 |
commit | 6bef56f0376ea1459271bb1e23c48e358d0ae4d7 (patch) | |
tree | 73f64c06c2ee0ed9ee8c846337c0a1c8dbf856f0 /sys | |
parent | 81b394f30a2635a4be3630d4ca0d0e98f2c882bb (diff) |
intel ethernet: default to 16 byte cache line size when not properly initialized and disable checksum offload for igbe (from sources)
Diffstat (limited to 'sys')
-rw-r--r-- | sys/src/9/pc/ether82543gc.c | 17 | ||||
-rw-r--r-- | sys/src/9/pc/etherigbe.c | 29 |
2 files changed, 21 insertions, 25 deletions
diff --git a/sys/src/9/pc/ether82543gc.c b/sys/src/9/pc/ether82543gc.c index 8c6b56610..e90b84845 100644 --- a/sys/src/9/pc/ether82543gc.c +++ b/sys/src/9/pc/ether82543gc.c @@ -1278,16 +1278,13 @@ gc82543pci(void) } 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; diff --git a/sys/src/9/pc/etherigbe.c b/sys/src/9/pc/etherigbe.c index b5edff8f6..8375e9663 100644 --- a/sys/src/9/pc/etherigbe.c +++ b/sys/src/9/pc/etherigbe.c @@ -1099,9 +1099,9 @@ igberxinit(Ctlr* ctlr) 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 @@ igbemii(Ctlr* ctlr) * 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 @@ igbepci(void) } 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"); |