diff -r 19fee65295c6 sys/src/9/pc/ether82563.c --- a/sys/src/9/pc/ether82563.c Sat Jan 12 21:07:12 2019 +0100 +++ b/sys/src/9/pc/ether82563.c Sun Jan 13 15:18:29 2019 +0100 @@ -463,6 +463,7 @@ F79phy = 1<<5, Fnofct = 1<<6, Fbadcsum= 1<<7, + Fnofca = 1<<8, }; typedef struct Ctlrtype Ctlrtype; @@ -491,9 +492,9 @@ [i82580] "i82580", 9728, F75|F79phy, [i82583] "i82583", 1514, 0, [i210] "i210", 9728, F75|Fnofct|Fert, -[i217] "i217", 2048, Fload|Fert|Fnofct|Fbadcsum, /* 9018, but unstable above 2k */ -[i218] "i218", 9018, Fload|Fert|F79phy|Fnofct|Fbadcsum, -[i219] "i219", 9018, Fload|Fert|F79phy|Fnofct|Fbadcsum, +[i217] "i217", 2048, Fload|Fert|F79phy|Fnofct|Fnofca|Fbadcsum,/* 9018, but unstable above 2k */ +[i218] "i218", 9018, Fload|Fert|F79phy|Fnofct|Fnofca|Fbadcsum, +[i219] "i219", 9018, Fload|Fert|F79phy|Fnofct|Fnofca|Fbadcsum, [i350] "i350", 9728, F75|F79phy|Fnofct, }; @@ -1212,6 +1213,10 @@ goto next; } i = (phy>>8) & 3; + if(c->type == i217){ + print("i217: phy status %ux, speed %d\n", phy, i); + goto next; + } a = phy & Ans; if(a){ r = phyread(c, phyno, Phyctl); @@ -1785,8 +1790,10 @@ memset(ctlr->mta, 0, sizeof(ctlr->mta)); for(i = 0; i < 128; i++) csr32w(ctlr, Mta + i*4, 0); - csr32w(ctlr, Fcal, 0x00C28001); - csr32w(ctlr, Fcah, 0x0100); + if((flag & Fnofca) == 0){ + csr32w(ctlr, Fcal, 0x00C28001); + csr32w(ctlr, Fcah, 0x0100); + } if((flag & Fnofct) == 0) csr32w(ctlr, Fct, 0x8808); csr32w(ctlr, Fcttv, 0x0100);