#define RTL8169_TX_TIMEOUT     (6*HZ)
 #define RTL8169_PHY_TIMEOUT    (10*HZ)
 
+#define RTL_EEPROM_SIG         cpu_to_le32(0x8129)
+#define RTL_EEPROM_SIG_MASK    cpu_to_le32(0xffff)
+#define RTL_EEPROM_SIG_ADDR    0x0000
+
 /* write/read MMIO register */
 #define RTL_W8(reg, val8)      writeb ((val8), ioaddr + (reg))
 #define RTL_W16(reg, val16)    writew ((val16), ioaddr + (reg))
                                 void __iomem *ioaddr)
 {
        struct pci_dev *pdev = tp->pci_dev;
-       u8 cfg1;
        int vpd_cap;
+       __le32 sig;
        u8 mac[8];
+       u8 cfg1;
 
        cfg1 = RTL_R8(Config1);
        if (!(cfg1  & VPD)) {
        if (!vpd_cap)
                return;
 
-       /* MAC address is stored in EEPROM at offset 0x0e
+       if (rtl_eeprom_read(pdev, vpd_cap, RTL_EEPROM_SIG_ADDR, &sig) < 0)
+               return;
+
+       if ((sig & RTL_EEPROM_SIG_MASK) != RTL_EEPROM_SIG) {
+               dev_info(&pdev->dev, "Missing EEPROM signature: %08x\n", sig);
+               return;
+       }
+
+       /*
+        * MAC address is stored in EEPROM at offset 0x0e
         * Realtek says: "The VPD address does not have to be a DWORD-aligned
         * address as defined in the PCI 2.2 Specifications, but the VPD data
         * is always consecutive 4-byte data starting from the VPD address
                         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