Patchwork rtl8102e: commit 7bf6bf480 zeroized MAC address

login
register
mail settings
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

fran├žois romieu - Oct. 15, 2008, 10:50 p.m.
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) ) ?
Ivan Vecera - Oct. 21, 2008, 11:15 a.m.
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