| Submitter | françois romieu |
|---|---|
| Date | Oct. 15, 2008, 10:50 p.m. |
| Message ID | <20081015225023.GB12337@electric-eye.fr.zoreil.com> |
| Download | mbox | patch |
| Permalink | /patch/4645/ |
| State | Superseded |
| Delegated to: | Jeff Garzik |
| Headers | show |
Comments
Francois Romieu wrote: > c4p7n@capitanio.org <c4p7n@capitanio.org> : >> May be we are reading just by luck zeros and not a random perfectly >> sane address. > > I would use the attached patches. The former one is mostly Ivan's one > with some rework of the debug messages. The later checks the eeprom > for its signature. > > With these patches the driver notices that it can not get an address > for my 8168b but it works ok with my 8169 after both an hot and a > cold boot. Interestingly enough, the VPD is not enabled on the 8169 > during the first boot. > > Ivan, can you test them (and fix them afterwards :o) ) ? No problem found. Both 8168c (GIGA_MAC_VER_20) and 8102el (GIGA_MAC_VER_09) successfully loads MAC address from EEPROM (from power-off state and also after reboot). Ivan -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Patch
diff --git a/drivers/net/r8169.c b/drivers/net/r8169.c index c821da2..e80ca26 100644 --- a/drivers/net/r8169.c +++ b/drivers/net/r8169.c @@ -1947,11 +1947,11 @@ static void rtl_init_mac_address(struct rtl8169_private *tp, u8 cfg1; int vpd_cap; u8 mac[8]; - DECLARE_MAC_BUF(buf); cfg1 = RTL_R8(Config1); if (!(cfg1 & VPD)) { - dprintk("VPD access not enabled, enabling\n"); + if (netif_msg_probe(tp)) + dev_info(&pdev->dev, "VPD access disabled, enabling\n"); RTL_W8(Cfg9346, Cfg9346_Unlock); RTL_W8(Config1, cfg1 | VPD); RTL_W8(Cfg9346, Cfg9346_Lock); @@ -1969,14 +1969,22 @@ static void rtl_init_mac_address(struct rtl8169_private *tp, */ if (rtl_eeprom_read(pdev, vpd_cap, 0x000e, (__le32*)&mac[0]) < 0 || rtl_eeprom_read(pdev, vpd_cap, 0x0012, (__le32*)&mac[4]) < 0) { - dprintk("Reading MAC address from EEPROM failed\n"); + if (netif_msg_probe(tp)) { + dev_warn(&pdev->dev, + "reading MAC address from EEPROM failed\n"); + } return; } - dprintk("MAC address found in EEPROM: %s\n", print_mac(buf, mac)); + if (netif_msg_probe(tp)) { + DECLARE_MAC_BUF(buf); + + dev_info(&pdev->dev, "MAC address found in EEPROM: %s\n", + print_mac(buf, mac)); + } - /* Write MAC address */ - rtl_rar_set(tp, mac); + if (is_valid_ether_addr(mac)) + rtl_rar_set(tp, mac); } static int __devinit