Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

r8169: revert "read MAC address from EEPROM on init"

This reverts commit 7bf6bf4803df1adc927f585168d2135fb019c698.

The code has both a short existence and an increasing track of failures
despite some work to amend it for -rc1. It is not just a matter of
reading the eeprom: sometimes the eeprom is read correctly, then the mac
address is not written correctly back into the mac registers.

Some chipsets seem to work reliably but it is not clear at this point if
the code can simply be made to work on a per-chipset basis and post -rc1
is not the place where I want to experiment these things.

Signed-off-by: Francois Romieu <romieu@fr.zoreil.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

authored by

Francois Romieu and committed by
Linus Torvalds
e383d564 1137fb67

-88
-88
drivers/net/r8169.c
··· 1915 1915 } 1916 1916 } 1917 1917 1918 - static int rtl_eeprom_read(struct pci_dev *pdev, int cap, int addr, __le32 *val) 1919 - { 1920 - int ret, count = 100; 1921 - u16 status = 0; 1922 - u32 value; 1923 - 1924 - ret = pci_write_config_word(pdev, cap + PCI_VPD_ADDR, addr); 1925 - if (ret < 0) 1926 - return ret; 1927 - 1928 - do { 1929 - udelay(10); 1930 - ret = pci_read_config_word(pdev, cap + PCI_VPD_ADDR, &status); 1931 - if (ret < 0) 1932 - return ret; 1933 - } while (!(status & PCI_VPD_ADDR_F) && --count); 1934 - 1935 - if (!(status & PCI_VPD_ADDR_F)) 1936 - return -ETIMEDOUT; 1937 - 1938 - ret = pci_read_config_dword(pdev, cap + PCI_VPD_DATA, &value); 1939 - if (ret < 0) 1940 - return ret; 1941 - 1942 - *val = cpu_to_le32(value); 1943 - 1944 - return 0; 1945 - } 1946 - 1947 - static void rtl_init_mac_address(struct rtl8169_private *tp, 1948 - void __iomem *ioaddr) 1949 - { 1950 - struct pci_dev *pdev = tp->pci_dev; 1951 - int vpd_cap; 1952 - __le32 sig; 1953 - u8 mac[8]; 1954 - u8 cfg1; 1955 - 1956 - cfg1 = RTL_R8(Config1); 1957 - if (!(cfg1 & VPD)) { 1958 - if (netif_msg_probe(tp)) 1959 - dev_info(&pdev->dev, "VPD access disabled, enabling\n"); 1960 - RTL_W8(Cfg9346, Cfg9346_Unlock); 1961 - RTL_W8(Config1, cfg1 | VPD); 1962 - RTL_W8(Cfg9346, Cfg9346_Lock); 1963 - } 1964 - 1965 - vpd_cap = pci_find_capability(pdev, PCI_CAP_ID_VPD); 1966 - if (!vpd_cap) 1967 - return; 1968 - 1969 - if (rtl_eeprom_read(pdev, vpd_cap, RTL_EEPROM_SIG_ADDR, &sig) < 0) 1970 - return; 1971 - 1972 - if ((sig & RTL_EEPROM_SIG_MASK) != RTL_EEPROM_SIG) { 1973 - dev_info(&pdev->dev, "Missing EEPROM signature: %08x\n", sig); 1974 - return; 1975 - } 1976 - 1977 - /* 1978 - * MAC address is stored in EEPROM at offset 0x0e 1979 - * Realtek says: "The VPD address does not have to be a DWORD-aligned 1980 - * address as defined in the PCI 2.2 Specifications, but the VPD data 1981 - * is always consecutive 4-byte data starting from the VPD address 1982 - * specified." 1983 - */ 1984 - if (rtl_eeprom_read(pdev, vpd_cap, 0x000e, (__le32*)&mac[0]) < 0 || 1985 - rtl_eeprom_read(pdev, vpd_cap, 0x0012, (__le32*)&mac[4]) < 0) { 1986 - if (netif_msg_probe(tp)) { 1987 - dev_warn(&pdev->dev, 1988 - "reading MAC address from EEPROM failed\n"); 1989 - } 1990 - return; 1991 - } 1992 - 1993 - if (netif_msg_probe(tp)) { 1994 - DECLARE_MAC_BUF(buf); 1995 - 1996 - dev_info(&pdev->dev, "MAC address found in EEPROM: %s\n", 1997 - print_mac(buf, mac)); 1998 - } 1999 - 2000 - if (is_valid_ether_addr(mac)) 2001 - rtl_rar_set(tp, mac); 2002 - } 2003 - 2004 1918 static int __devinit 2005 1919 rtl8169_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) 2006 1920 { ··· 2091 2177 spin_lock_init(&tp->lock); 2092 2178 2093 2179 tp->mmio_addr = ioaddr; 2094 - 2095 - rtl_init_mac_address(tp, ioaddr); 2096 2180 2097 2181 /* Get MAC address */ 2098 2182 for (i = 0; i < MAC_ADDR_LEN; i++)