as it turns out, the i217 uses flash, and not eeprom. this makes sense since it's a LOM chip, and it's cheaper to share the eeprom with the other function units. this should get the new haswell-based motherboards working. Reference: /n/atom/patch/applied2013/i217flash Date: Sat Oct 12 19:00:34 CES 2013 Signed-off-by: quanstro@quanstro.net --- /sys/src/9/pc/ether82563.c Sat Oct 12 18:59:20 2013 +++ /sys/src/9/pc/ether82563.c Sat Oct 12 18:59:22 2013 @@ -441,6 +441,7 @@ i82580, i82583, i210, + i217, i350, Nctlrtype, }; @@ -481,7 +482,8 @@ i82579, 9018, 2, "i82579", Fload|Fert|F79phy, i82580, 9728, 1, "i82580", F75|F79phy, i82583, 1514, 1, "i82583", 0, - i210, 9728, 1, "i210", F75|F79phy, + i210, 9728, 1, "i210", F75|F79phy|Fert, + i217, 9728, 1, "i217", F75|F79phy|Fert|Fload, i350, 9728, 1, "i350", F75|F79phy, }; @@ -764,7 +766,7 @@ x = addr[5]>>1; if(ctlr->type == i82566) x &= 31; - if(ctlr->type == i210) + if(ctlr->type == i210 || ctlr->type == i217) x &= 15; bit = ((addr[5] & 1)<<4)|(addr[4]>>4); /* @@ -1827,7 +1829,7 @@ csr32w(ctlr, Mta + i*4, 0); csr32w(ctlr, Fcal, 0x00C28001); csr32w(ctlr, Fcah, 0x0100); - if(ctlr->type != i82579 && ctlr->type != i210 && ctlr->type != i350) + if(ctlr->type != i82579 && ctlr->type != i210 && ctlr->type != i217 && ctlr->type != i350) csr32w(ctlr, Fct, 0x8808); csr32w(ctlr, Fcttv, 0x0100); csr32w(ctlr, Fcrtl, ctlr->fcrtl); @@ -1978,13 +1980,14 @@ case 0x1537: /* backplane */ case 0x1538: case 0x1539: /* i211 */ + return i210; case 0x153a: /* i217-lm */ case 0x153b: /* i217-v */ case 0x15a0: /* i218-lm */ case 0x15a1: /* i218-v */ case 0x15a2: /* i218-lm */ case 0x15a3: /* i218-v */ - return i210; + return i217; case 0x151f: /* “powerville” eeprom-less */ case 0x1521: /* copper */ case 0x1522: /* fiber */ @@ -2201,6 +2204,12 @@ } static int +i217pnp(Ether *e) +{ + return pnp(e, i210); +} + +static int i350pnp(Ether *e) { return pnp(e, i350); @@ -2230,6 +2239,7 @@ addethercard("i82580", i82580pnp); addethercard("i82583", i82583pnp); addethercard("i210", i210pnp); + addethercard("i217", i217pnp); addethercard("i350", i350pnp); addethercard("igbepcie", anypnp); } --- /sys/src/9/pcpae/ether82563.c Sat Oct 12 18:59:25 2013 +++ /sys/src/9/pcpae/ether82563.c Sat Oct 12 18:59:26 2013 @@ -441,6 +441,7 @@ i82580, i82583, i210, + i217, i350, Nctlrtype, }; @@ -481,7 +482,8 @@ i82579, 9018, 2, "i82579", Fload|Fert|F79phy, i82580, 9728, 1, "i82580", F75|F79phy, i82583, 1514, 1, "i82583", 0, - i210, 9728, 1, "i210", F75|F79phy, + i210, 9728, 1, "i210", F75|F79phy|Fert, + i217, 9728, 1, "i217", F75|F79phy|Fert|Fload, i350, 9728, 1, "i350", F75|F79phy, }; @@ -764,7 +766,7 @@ x = addr[5]>>1; if(ctlr->type == i82566) x &= 31; - if(ctlr->type == i210) + if(ctlr->type == i210 || ctlr->type == i217) x &= 15; bit = ((addr[5] & 1)<<4)|(addr[4]>>4); /* @@ -1827,7 +1829,7 @@ csr32w(ctlr, Mta + i*4, 0); csr32w(ctlr, Fcal, 0x00C28001); csr32w(ctlr, Fcah, 0x0100); - if(ctlr->type != i82579 && ctlr->type != i210 && ctlr->type != i350) + if(ctlr->type != i82579 && ctlr->type != i210 && ctlr->type != i217 && ctlr->type != i350) csr32w(ctlr, Fct, 0x8808); csr32w(ctlr, Fcttv, 0x0100); csr32w(ctlr, Fcrtl, ctlr->fcrtl); @@ -1978,13 +1980,14 @@ case 0x1537: /* backplane */ case 0x1538: case 0x1539: /* i211 */ + return i210; case 0x153a: /* i217-lm */ case 0x153b: /* i217-v */ case 0x15a0: /* i218-lm */ case 0x15a1: /* i218-v */ case 0x15a2: /* i218-lm */ case 0x15a3: /* i218-v */ - return i210; + return i217; case 0x151f: /* “powerville” eeprom-less */ case 0x1521: /* copper */ case 0x1522: /* fiber */ @@ -2201,6 +2204,12 @@ } static int +i217pnp(Ether *e) +{ + return pnp(e, i210); +} + +static int i350pnp(Ether *e) { return pnp(e, i350); @@ -2230,6 +2239,7 @@ addethercard("i82580", i82580pnp); addethercard("i82583", i82583pnp); addethercard("i210", i210pnp); + addethercard("i217", i217pnp); addethercard("i350", i350pnp); addethercard("igbepcie", anypnp); } --- /sys/src/nix/k10/ether82563.c Sat Oct 12 18:59:29 2013 +++ /sys/src/nix/k10/ether82563.c Sat Oct 12 18:59:30 2013 @@ -441,6 +441,7 @@ i82580, i82583, i210, + i217, i350, Nctlrtype, }; @@ -481,7 +482,8 @@ i82579, 9018, 2, "i82579", Fload|Fert|F79phy, i82580, 9728, 1, "i82580", F75|F79phy, i82583, 1514, 1, "i82583", 0, - i210, 9728, 1, "i210", F75|F79phy, + i210, 9728, 1, "i210", F75|F79phy|Fert, + i217, 9728, 1, "i217", F75|F79phy|Fert|Fload, i350, 9728, 1, "i350", F75|F79phy, }; @@ -764,7 +766,7 @@ x = addr[5]>>1; if(ctlr->type == i82566) x &= 31; - if(ctlr->type == i210) + if(ctlr->type == i210 || ctlr->type == i217) x &= 15; bit = ((addr[5] & 1)<<4)|(addr[4]>>4); /* @@ -1827,7 +1829,7 @@ csr32w(ctlr, Mta + i*4, 0); csr32w(ctlr, Fcal, 0x00C28001); csr32w(ctlr, Fcah, 0x0100); - if(ctlr->type != i82579 && ctlr->type != i210 && ctlr->type != i350) + if(ctlr->type != i82579 && ctlr->type != i210 && ctlr->type != i217 && ctlr->type != i350) csr32w(ctlr, Fct, 0x8808); csr32w(ctlr, Fcttv, 0x0100); csr32w(ctlr, Fcrtl, ctlr->fcrtl); @@ -1978,13 +1980,14 @@ case 0x1537: /* backplane */ case 0x1538: case 0x1539: /* i211 */ + return i210; case 0x153a: /* i217-lm */ case 0x153b: /* i217-v */ case 0x15a0: /* i218-lm */ case 0x15a1: /* i218-v */ case 0x15a2: /* i218-lm */ case 0x15a3: /* i218-v */ - return i210; + return i217; case 0x151f: /* “powerville” eeprom-less */ case 0x1521: /* copper */ case 0x1522: /* fiber */ @@ -2201,6 +2204,12 @@ } static int +i217pnp(Ether *e) +{ + return pnp(e, i210); +} + +static int i350pnp(Ether *e) { return pnp(e, i350); @@ -2230,6 +2239,7 @@ addethercard("i82580", i82580pnp); addethercard("i82583", i82583pnp); addethercard("i210", i210pnp); + addethercard("i217", i217pnp); addethercard("i350", i350pnp); addethercard("igbepcie", anypnp); }