diff options
| -rw-r--r-- | drivers/net/r8169.c | 987 |
1 files changed, 932 insertions, 55 deletions
diff --git a/drivers/net/r8169.c b/drivers/net/r8169.c index 50c6a3cfe439..83c47d95c3aa 100644 --- a/drivers/net/r8169.c +++ b/drivers/net/r8169.c | |||
| @@ -115,7 +115,9 @@ enum mac_version { | |||
| 115 | RTL_GIGA_MAC_VER_22 = 0x16, // 8168C | 115 | RTL_GIGA_MAC_VER_22 = 0x16, // 8168C |
| 116 | RTL_GIGA_MAC_VER_23 = 0x17, // 8168CP | 116 | RTL_GIGA_MAC_VER_23 = 0x17, // 8168CP |
| 117 | RTL_GIGA_MAC_VER_24 = 0x18, // 8168CP | 117 | RTL_GIGA_MAC_VER_24 = 0x18, // 8168CP |
| 118 | RTL_GIGA_MAC_VER_25 = 0x19 // 8168D | 118 | RTL_GIGA_MAC_VER_25 = 0x19, // 8168D |
| 119 | RTL_GIGA_MAC_VER_26 = 0x1a, // 8168D | ||
| 120 | RTL_GIGA_MAC_VER_27 = 0x1b // 8168DP | ||
| 119 | }; | 121 | }; |
| 120 | 122 | ||
| 121 | #define _R(NAME,MAC,MASK) \ | 123 | #define _R(NAME,MAC,MASK) \ |
| @@ -150,7 +152,9 @@ static const struct { | |||
| 150 | _R("RTL8168c/8111c", RTL_GIGA_MAC_VER_22, 0xff7e1880), // PCI-E | 152 | _R("RTL8168c/8111c", RTL_GIGA_MAC_VER_22, 0xff7e1880), // PCI-E |
| 151 | _R("RTL8168cp/8111cp", RTL_GIGA_MAC_VER_23, 0xff7e1880), // PCI-E | 153 | _R("RTL8168cp/8111cp", RTL_GIGA_MAC_VER_23, 0xff7e1880), // PCI-E |
| 152 | _R("RTL8168cp/8111cp", RTL_GIGA_MAC_VER_24, 0xff7e1880), // PCI-E | 154 | _R("RTL8168cp/8111cp", RTL_GIGA_MAC_VER_24, 0xff7e1880), // PCI-E |
| 153 | _R("RTL8168d/8111d", RTL_GIGA_MAC_VER_25, 0xff7e1880) // PCI-E | 155 | _R("RTL8168d/8111d", RTL_GIGA_MAC_VER_25, 0xff7e1880), // PCI-E |
| 156 | _R("RTL8168d/8111d", RTL_GIGA_MAC_VER_26, 0xff7e1880), // PCI-E | ||
| 157 | _R("RTL8168dp/8111dp", RTL_GIGA_MAC_VER_27, 0xff7e1880) // PCI-E | ||
| 154 | }; | 158 | }; |
| 155 | #undef _R | 159 | #undef _R |
| 156 | 160 | ||
| @@ -253,6 +257,13 @@ enum rtl8168_8101_registers { | |||
| 253 | DBG_REG = 0xd1, | 257 | DBG_REG = 0xd1, |
| 254 | #define FIX_NAK_1 (1 << 4) | 258 | #define FIX_NAK_1 (1 << 4) |
| 255 | #define FIX_NAK_2 (1 << 3) | 259 | #define FIX_NAK_2 (1 << 3) |
| 260 | EFUSEAR = 0xdc, | ||
| 261 | #define EFUSEAR_FLAG 0x80000000 | ||
| 262 | #define EFUSEAR_WRITE_CMD 0x80000000 | ||
| 263 | #define EFUSEAR_READ_CMD 0x00000000 | ||
| 264 | #define EFUSEAR_REG_MASK 0x03ff | ||
| 265 | #define EFUSEAR_REG_SHIFT 8 | ||
| 266 | #define EFUSEAR_DATA_MASK 0xff | ||
| 256 | }; | 267 | }; |
| 257 | 268 | ||
| 258 | enum rtl_register_content { | 269 | enum rtl_register_content { |
| @@ -568,6 +579,14 @@ static void mdio_patch(void __iomem *ioaddr, int reg_addr, int value) | |||
| 568 | mdio_write(ioaddr, reg_addr, mdio_read(ioaddr, reg_addr) | value); | 579 | mdio_write(ioaddr, reg_addr, mdio_read(ioaddr, reg_addr) | value); |
| 569 | } | 580 | } |
| 570 | 581 | ||
| 582 | static void mdio_plus_minus(void __iomem *ioaddr, int reg_addr, int p, int m) | ||
| 583 | { | ||
| 584 | int val; | ||
| 585 | |||
| 586 | val = mdio_read(ioaddr, reg_addr); | ||
| 587 | mdio_write(ioaddr, reg_addr, (val | p) & ~m); | ||
| 588 | } | ||
| 589 | |||
| 571 | static void rtl_mdio_write(struct net_device *dev, int phy_id, int location, | 590 | static void rtl_mdio_write(struct net_device *dev, int phy_id, int location, |
| 572 | int val) | 591 | int val) |
| 573 | { | 592 | { |
| @@ -651,6 +670,24 @@ static u32 rtl_csi_read(void __iomem *ioaddr, int addr) | |||
| 651 | return value; | 670 | return value; |
| 652 | } | 671 | } |
| 653 | 672 | ||
| 673 | static u8 rtl8168d_efuse_read(void __iomem *ioaddr, int reg_addr) | ||
| 674 | { | ||
| 675 | u8 value = 0xff; | ||
| 676 | unsigned int i; | ||
| 677 | |||
| 678 | RTL_W32(EFUSEAR, (reg_addr & EFUSEAR_REG_MASK) << EFUSEAR_REG_SHIFT); | ||
| 679 | |||
| 680 | for (i = 0; i < 300; i++) { | ||
| 681 | if (RTL_R32(EFUSEAR) & EFUSEAR_FLAG) { | ||
| 682 | value = RTL_R32(EFUSEAR) & EFUSEAR_DATA_MASK; | ||
| 683 | break; | ||
| 684 | } | ||
| 685 | udelay(100); | ||
| 686 | } | ||
| 687 | |||
| 688 | return value; | ||
| 689 | } | ||
| 690 | |||
| 654 | static void rtl8169_irq_mask_and_ack(void __iomem *ioaddr) | 691 | static void rtl8169_irq_mask_and_ack(void __iomem *ioaddr) |
| 655 | { | 692 | { |
| 656 | RTL_W16(IntrMask, 0x0000); | 693 | RTL_W16(IntrMask, 0x0000); |
| @@ -1243,7 +1280,10 @@ static void rtl8169_get_mac_version(struct rtl8169_private *tp, | |||
| 1243 | int mac_version; | 1280 | int mac_version; |
| 1244 | } mac_info[] = { | 1281 | } mac_info[] = { |
| 1245 | /* 8168D family. */ | 1282 | /* 8168D family. */ |
| 1246 | { 0x7c800000, 0x28000000, RTL_GIGA_MAC_VER_25 }, | 1283 | { 0x7cf00000, 0x28300000, RTL_GIGA_MAC_VER_26 }, |
| 1284 | { 0x7cf00000, 0x28100000, RTL_GIGA_MAC_VER_25 }, | ||
| 1285 | { 0x7c800000, 0x28800000, RTL_GIGA_MAC_VER_27 }, | ||
| 1286 | { 0x7c800000, 0x28000000, RTL_GIGA_MAC_VER_26 }, | ||
| 1247 | 1287 | ||
| 1248 | /* 8168C family. */ | 1288 | /* 8168C family. */ |
| 1249 | { 0x7cf00000, 0x3ca00000, RTL_GIGA_MAC_VER_24 }, | 1289 | { 0x7cf00000, 0x3ca00000, RTL_GIGA_MAC_VER_24 }, |
| @@ -1648,74 +1688,903 @@ static void rtl8168c_4_hw_phy_config(void __iomem *ioaddr) | |||
| 1648 | rtl8168c_3_hw_phy_config(ioaddr); | 1688 | rtl8168c_3_hw_phy_config(ioaddr); |
| 1649 | } | 1689 | } |
| 1650 | 1690 | ||
| 1651 | static void rtl8168d_hw_phy_config(void __iomem *ioaddr) | 1691 | static void rtl8168d_1_hw_phy_config(void __iomem *ioaddr) |
| 1652 | { | 1692 | { |
| 1653 | struct phy_reg phy_reg_init_0[] = { | 1693 | static struct phy_reg phy_reg_init_0[] = { |
| 1654 | { 0x1f, 0x0001 }, | 1694 | { 0x1f, 0x0001 }, |
| 1655 | { 0x09, 0x2770 }, | 1695 | { 0x06, 0x4064 }, |
| 1656 | { 0x08, 0x04d0 }, | 1696 | { 0x07, 0x2863 }, |
| 1657 | { 0x0b, 0xad15 }, | 1697 | { 0x08, 0x059c }, |
| 1658 | { 0x0c, 0x5bf0 }, | 1698 | { 0x09, 0x26b4 }, |
| 1659 | { 0x1c, 0xf101 }, | 1699 | { 0x0a, 0x6a19 }, |
| 1700 | { 0x0b, 0xdcc8 }, | ||
| 1701 | { 0x10, 0xf06d }, | ||
| 1702 | { 0x14, 0x7f68 }, | ||
| 1703 | { 0x18, 0x7fd9 }, | ||
| 1704 | { 0x1c, 0xf0ff }, | ||
| 1705 | { 0x1d, 0x3d9c }, | ||
| 1660 | { 0x1f, 0x0003 }, | 1706 | { 0x1f, 0x0003 }, |
| 1661 | { 0x14, 0x94d7 }, | 1707 | { 0x12, 0xf49f }, |
| 1662 | { 0x12, 0xf4d6 }, | 1708 | { 0x13, 0x070b }, |
| 1663 | { 0x09, 0xca0f }, | 1709 | { 0x1a, 0x05ad }, |
| 1664 | { 0x1f, 0x0002 }, | 1710 | { 0x14, 0x94c0 } |
| 1665 | { 0x0b, 0x0b10 }, | 1711 | }; |
| 1666 | { 0x0c, 0xd1f7 }, | 1712 | static struct phy_reg phy_reg_init_1[] = { |
| 1667 | { 0x1f, 0x0002 }, | ||
| 1668 | { 0x06, 0x5461 }, | ||
| 1669 | { 0x1f, 0x0002 }, | 1713 | { 0x1f, 0x0002 }, |
| 1670 | { 0x05, 0x6662 }, | 1714 | { 0x06, 0x5561 }, |
| 1715 | { 0x1f, 0x0005 }, | ||
| 1716 | { 0x05, 0x8332 }, | ||
| 1717 | { 0x06, 0x5561 } | ||
| 1718 | }; | ||
| 1719 | static struct phy_reg phy_reg_init_2[] = { | ||
| 1720 | { 0x1f, 0x0005 }, | ||
| 1721 | { 0x05, 0xffc2 }, | ||
| 1722 | { 0x1f, 0x0005 }, | ||
| 1723 | { 0x05, 0x8000 }, | ||
| 1724 | { 0x06, 0xf8f9 }, | ||
| 1725 | { 0x06, 0xfaef }, | ||
| 1726 | { 0x06, 0x59ee }, | ||
| 1727 | { 0x06, 0xf8ea }, | ||
| 1728 | { 0x06, 0x00ee }, | ||
| 1729 | { 0x06, 0xf8eb }, | ||
| 1730 | { 0x06, 0x00e0 }, | ||
| 1731 | { 0x06, 0xf87c }, | ||
| 1732 | { 0x06, 0xe1f8 }, | ||
| 1733 | { 0x06, 0x7d59 }, | ||
| 1734 | { 0x06, 0x0fef }, | ||
| 1735 | { 0x06, 0x0139 }, | ||
| 1736 | { 0x06, 0x029e }, | ||
| 1737 | { 0x06, 0x06ef }, | ||
| 1738 | { 0x06, 0x1039 }, | ||
| 1739 | { 0x06, 0x089f }, | ||
| 1740 | { 0x06, 0x2aee }, | ||
| 1741 | { 0x06, 0xf8ea }, | ||
| 1742 | { 0x06, 0x00ee }, | ||
| 1743 | { 0x06, 0xf8eb }, | ||
| 1744 | { 0x06, 0x01e0 }, | ||
| 1745 | { 0x06, 0xf87c }, | ||
| 1746 | { 0x06, 0xe1f8 }, | ||
| 1747 | { 0x06, 0x7d58 }, | ||
| 1748 | { 0x06, 0x409e }, | ||
| 1749 | { 0x06, 0x0f39 }, | ||
| 1750 | { 0x06, 0x46aa }, | ||
| 1751 | { 0x06, 0x0bbf }, | ||
| 1752 | { 0x06, 0x8290 }, | ||
| 1753 | { 0x06, 0xd682 }, | ||
| 1754 | { 0x06, 0x9802 }, | ||
| 1755 | { 0x06, 0x014f }, | ||
| 1756 | { 0x06, 0xae09 }, | ||
| 1757 | { 0x06, 0xbf82 }, | ||
| 1758 | { 0x06, 0x98d6 }, | ||
| 1759 | { 0x06, 0x82a0 }, | ||
| 1760 | { 0x06, 0x0201 }, | ||
| 1761 | { 0x06, 0x4fef }, | ||
| 1762 | { 0x06, 0x95fe }, | ||
| 1763 | { 0x06, 0xfdfc }, | ||
| 1764 | { 0x06, 0x05f8 }, | ||
| 1765 | { 0x06, 0xf9fa }, | ||
| 1766 | { 0x06, 0xeef8 }, | ||
| 1767 | { 0x06, 0xea00 }, | ||
| 1768 | { 0x06, 0xeef8 }, | ||
| 1769 | { 0x06, 0xeb00 }, | ||
| 1770 | { 0x06, 0xe2f8 }, | ||
| 1771 | { 0x06, 0x7ce3 }, | ||
| 1772 | { 0x06, 0xf87d }, | ||
| 1773 | { 0x06, 0xa511 }, | ||
| 1774 | { 0x06, 0x1112 }, | ||
| 1775 | { 0x06, 0xd240 }, | ||
| 1776 | { 0x06, 0xd644 }, | ||
| 1777 | { 0x06, 0x4402 }, | ||
| 1778 | { 0x06, 0x8217 }, | ||
| 1779 | { 0x06, 0xd2a0 }, | ||
| 1780 | { 0x06, 0xd6aa }, | ||
| 1781 | { 0x06, 0xaa02 }, | ||
| 1782 | { 0x06, 0x8217 }, | ||
| 1783 | { 0x06, 0xae0f }, | ||
| 1784 | { 0x06, 0xa544 }, | ||
| 1785 | { 0x06, 0x4402 }, | ||
| 1786 | { 0x06, 0xae4d }, | ||
| 1787 | { 0x06, 0xa5aa }, | ||
| 1788 | { 0x06, 0xaa02 }, | ||
| 1789 | { 0x06, 0xae47 }, | ||
| 1790 | { 0x06, 0xaf82 }, | ||
| 1791 | { 0x06, 0x13ee }, | ||
| 1792 | { 0x06, 0x834e }, | ||
| 1793 | { 0x06, 0x00ee }, | ||
| 1794 | { 0x06, 0x834d }, | ||
| 1795 | { 0x06, 0x0fee }, | ||
| 1796 | { 0x06, 0x834c }, | ||
| 1797 | { 0x06, 0x0fee }, | ||
| 1798 | { 0x06, 0x834f }, | ||
| 1799 | { 0x06, 0x00ee }, | ||
| 1800 | { 0x06, 0x8351 }, | ||
| 1801 | { 0x06, 0x00ee }, | ||
| 1802 | { 0x06, 0x834a }, | ||
| 1803 | { 0x06, 0xffee }, | ||
| 1804 | { 0x06, 0x834b }, | ||
| 1805 | { 0x06, 0xffe0 }, | ||
| 1806 | { 0x06, 0x8330 }, | ||
| 1807 | { 0x06, 0xe183 }, | ||
| 1808 | { 0x06, 0x3158 }, | ||
| 1809 | { 0x06, 0xfee4 }, | ||
| 1810 | { 0x06, 0xf88a }, | ||
| 1811 | { 0x06, 0xe5f8 }, | ||
| 1812 | { 0x06, 0x8be0 }, | ||
| 1813 | { 0x06, 0x8332 }, | ||
| 1814 | { 0x06, 0xe183 }, | ||
| 1815 | { 0x06, 0x3359 }, | ||
| 1816 | { 0x06, 0x0fe2 }, | ||
| 1817 | { 0x06, 0x834d }, | ||
| 1818 | { 0x06, 0x0c24 }, | ||
| 1819 | { 0x06, 0x5af0 }, | ||
| 1820 | { 0x06, 0x1e12 }, | ||
| 1821 | { 0x06, 0xe4f8 }, | ||
| 1822 | { 0x06, 0x8ce5 }, | ||
| 1823 | { 0x06, 0xf88d }, | ||
| 1824 | { 0x06, 0xaf82 }, | ||
| 1825 | { 0x06, 0x13e0 }, | ||
| 1826 | { 0x06, 0x834f }, | ||
| 1827 | { 0x06, 0x10e4 }, | ||
| 1828 | { 0x06, 0x834f }, | ||
| 1829 | { 0x06, 0xe083 }, | ||
| 1830 | { 0x06, 0x4e78 }, | ||
| 1831 | { 0x06, 0x009f }, | ||
| 1832 | { 0x06, 0x0ae0 }, | ||
| 1833 | { 0x06, 0x834f }, | ||
| 1834 | { 0x06, 0xa010 }, | ||
| 1835 | { 0x06, 0xa5ee }, | ||
| 1836 | { 0x06, 0x834e }, | ||
| 1837 | { 0x06, 0x01e0 }, | ||
| 1838 | { 0x06, 0x834e }, | ||
| 1839 | { 0x06, 0x7805 }, | ||
| 1840 | { 0x06, 0x9e9a }, | ||
| 1841 | { 0x06, 0xe083 }, | ||
| 1842 | { 0x06, 0x4e78 }, | ||
| 1843 | { 0x06, 0x049e }, | ||
| 1844 | { 0x06, 0x10e0 }, | ||
| 1845 | { 0x06, 0x834e }, | ||
| 1846 | { 0x06, 0x7803 }, | ||
| 1847 | { 0x06, 0x9e0f }, | ||
| 1848 | { 0x06, 0xe083 }, | ||
| 1849 | { 0x06, 0x4e78 }, | ||
| 1850 | { 0x06, 0x019e }, | ||
| 1851 | { 0x06, 0x05ae }, | ||
| 1852 | { 0x06, 0x0caf }, | ||
| 1853 | { 0x06, 0x81f8 }, | ||
| 1854 | { 0x06, 0xaf81 }, | ||
| 1855 | { 0x06, 0xa3af }, | ||
| 1856 | { 0x06, 0x81dc }, | ||
| 1857 | { 0x06, 0xaf82 }, | ||
| 1858 | { 0x06, 0x13ee }, | ||
| 1859 | { 0x06, 0x8348 }, | ||
| 1860 | { 0x06, 0x00ee }, | ||
| 1861 | { 0x06, 0x8349 }, | ||
| 1862 | { 0x06, 0x00e0 }, | ||
| 1863 | { 0x06, 0x8351 }, | ||
| 1864 | { 0x06, 0x10e4 }, | ||
| 1865 | { 0x06, 0x8351 }, | ||
| 1866 | { 0x06, 0x5801 }, | ||
| 1867 | { 0x06, 0x9fea }, | ||
| 1868 | { 0x06, 0xd000 }, | ||
| 1869 | { 0x06, 0xd180 }, | ||
| 1870 | { 0x06, 0x1f66 }, | ||
| 1871 | { 0x06, 0xe2f8 }, | ||
| 1872 | { 0x06, 0xeae3 }, | ||
| 1873 | { 0x06, 0xf8eb }, | ||
| 1874 | { 0x06, 0x5af8 }, | ||
| 1875 | { 0x06, 0x1e20 }, | ||
| 1876 | { 0x06, 0xe6f8 }, | ||
| 1877 | { 0x06, 0xeae5 }, | ||
| 1878 | { 0x06, 0xf8eb }, | ||
| 1879 | { 0x06, 0xd302 }, | ||
| 1880 | { 0x06, 0xb3fe }, | ||
| 1881 | { 0x06, 0xe2f8 }, | ||
| 1882 | { 0x06, 0x7cef }, | ||
| 1883 | { 0x06, 0x325b }, | ||
| 1884 | { 0x06, 0x80e3 }, | ||
| 1885 | { 0x06, 0xf87d }, | ||
| 1886 | { 0x06, 0x9e03 }, | ||
| 1887 | { 0x06, 0x7dff }, | ||
| 1888 | { 0x06, 0xff0d }, | ||
| 1889 | { 0x06, 0x581c }, | ||
| 1890 | { 0x06, 0x551a }, | ||
| 1891 | { 0x06, 0x6511 }, | ||
| 1892 | { 0x06, 0xa190 }, | ||
| 1893 | { 0x06, 0xd3e2 }, | ||
| 1894 | { 0x06, 0x8348 }, | ||
| 1895 | { 0x06, 0xe383 }, | ||
| 1896 | { 0x06, 0x491b }, | ||
| 1897 | { 0x06, 0x56ab }, | ||
| 1898 | { 0x06, 0x08ef }, | ||
| 1899 | { 0x06, 0x56e6 }, | ||
| 1900 | { 0x06, 0x8348 }, | ||
| 1901 | { 0x06, 0xe783 }, | ||
| 1902 | { 0x06, 0x4910 }, | ||
| 1903 | { 0x06, 0xd180 }, | ||
| 1904 | { 0x06, 0x1f66 }, | ||
| 1905 | { 0x06, 0xa004 }, | ||
| 1906 | { 0x06, 0xb9e2 }, | ||
| 1907 | { 0x06, 0x8348 }, | ||
| 1908 | { 0x06, 0xe383 }, | ||
| 1909 | { 0x06, 0x49ef }, | ||
| 1910 | { 0x06, 0x65e2 }, | ||
| 1911 | { 0x06, 0x834a }, | ||
| 1912 | { 0x06, 0xe383 }, | ||
| 1913 | { 0x06, 0x4b1b }, | ||
| 1914 | { 0x06, 0x56aa }, | ||
| 1915 | { 0x06, 0x0eef }, | ||
| 1916 | { 0x06, 0x56e6 }, | ||
| 1917 | { 0x06, 0x834a }, | ||
| 1918 | { 0x06, 0xe783 }, | ||
| 1919 | { 0x06, 0x4be2 }, | ||
| 1920 | { 0x06, 0x834d }, | ||
| 1921 | { 0x06, 0xe683 }, | ||
| 1922 | { 0x06, 0x4ce0 }, | ||
| 1923 | { 0x06, 0x834d }, | ||
| 1924 | { 0x06, 0xa000 }, | ||
| 1925 | { 0x06, 0x0caf }, | ||
| 1926 | { 0x06, 0x81dc }, | ||
| 1927 | { 0x06, 0xe083 }, | ||
| 1928 | { 0x06, 0x4d10 }, | ||
| 1929 | { 0x06, 0xe483 }, | ||
| 1930 | { 0x06, 0x4dae }, | ||
| 1931 | { 0x06, 0x0480 }, | ||
| 1932 | { 0x06, 0xe483 }, | ||
| 1933 | { 0x06, 0x4de0 }, | ||
| 1934 | { 0x06, 0x834e }, | ||
| 1935 | { 0x06, 0x7803 }, | ||
| 1936 | { 0x06, 0x9e0b }, | ||
| 1937 | { 0x06, 0xe083 }, | ||
| 1938 | { 0x06, 0x4e78 }, | ||
| 1939 | { 0x06, 0x049e }, | ||
| 1940 | { 0x06, 0x04ee }, | ||
| 1941 | { 0x06, 0x834e }, | ||
| 1942 | { 0x06, 0x02e0 }, | ||
| 1943 | { 0x06, 0x8332 }, | ||
| 1944 | { 0x06, 0xe183 }, | ||
| 1945 | { 0x06, 0x3359 }, | ||
| 1946 | { 0x06, 0x0fe2 }, | ||
| 1947 | { 0x06, 0x834d }, | ||
| 1948 | { 0x06, 0x0c24 }, | ||
| 1949 | { 0x06, 0x5af0 }, | ||
| 1950 | { 0x06, 0x1e12 }, | ||
| 1951 | { 0x06, 0xe4f8 }, | ||
| 1952 | { 0x06, 0x8ce5 }, | ||
| 1953 | { 0x06, 0xf88d }, | ||
| 1954 | { 0x06, 0xe083 }, | ||
| 1955 | { 0x06, 0x30e1 }, | ||
| 1956 | { 0x06, 0x8331 }, | ||
| 1957 | { 0x06, 0x6801 }, | ||
| 1958 | { 0x06, 0xe4f8 }, | ||
| 1959 | { 0x06, 0x8ae5 }, | ||
| 1960 | { 0x06, 0xf88b }, | ||
| 1961 | { 0x06, 0xae37 }, | ||
| 1962 | { 0x06, 0xee83 }, | ||
| 1963 | { 0x06, 0x4e03 }, | ||
| 1964 | { 0x06, 0xe083 }, | ||
| 1965 | { 0x06, 0x4ce1 }, | ||
| 1966 | { 0x06, 0x834d }, | ||
| 1967 | { 0x06, 0x1b01 }, | ||
| 1968 | { 0x06, 0x9e04 }, | ||
| 1969 | { 0x06, 0xaaa1 }, | ||
| 1970 | { 0x06, 0xaea8 }, | ||
| 1971 | { 0x06, 0xee83 }, | ||
| 1972 | { 0x06, 0x4e04 }, | ||
| 1973 | { 0x06, 0xee83 }, | ||
| 1974 | { 0x06, 0x4f00 }, | ||
| 1975 | { 0x06, 0xaeab }, | ||
| 1976 | { 0x06, 0xe083 }, | ||
| 1977 | { 0x06, 0x4f78 }, | ||
| 1978 | { 0x06, 0x039f }, | ||
| 1979 | { 0x06, 0x14ee }, | ||
| 1980 | { 0x06, 0x834e }, | ||
| 1981 | { 0x06, 0x05d2 }, | ||
| 1982 | { 0x06, 0x40d6 }, | ||
| 1983 | { 0x06, 0x5554 }, | ||
| 1984 | { 0x06, 0x0282 }, | ||
| 1985 | { 0x06, 0x17d2 }, | ||
| 1986 | { 0x06, 0xa0d6 }, | ||
| 1987 | { 0x06, 0xba00 }, | ||
| 1988 | { 0x06, 0x0282 }, | ||
| 1989 | { 0x06, 0x17fe }, | ||
| 1990 | { 0x06, 0xfdfc }, | ||
| 1991 | { 0x06, 0x05f8 }, | ||
| 1992 | { 0x06, 0xe0f8 }, | ||
| 1993 | { 0x06, 0x60e1 }, | ||
| 1994 | { 0x06, 0xf861 }, | ||
| 1995 | { 0x06, 0x6802 }, | ||
| 1996 | { 0x06, 0xe4f8 }, | ||
| 1997 | { 0x06, 0x60e5 }, | ||
| 1998 | { 0x06, 0xf861 }, | ||
| 1999 | { 0x06, 0xe0f8 }, | ||
| 2000 | { 0x06, 0x48e1 }, | ||
| 2001 | { 0x06, 0xf849 }, | ||
| 2002 | { 0x06, 0x580f }, | ||
| 2003 | { 0x06, 0x1e02 }, | ||
| 2004 | { 0x06, 0xe4f8 }, | ||
| 2005 | { 0x06, 0x48e5 }, | ||
| 2006 | { 0x06, 0xf849 }, | ||
| 2007 | { 0x06, 0xd000 }, | ||
| 2008 | { 0x06, 0x0282 }, | ||
| 2009 | { 0x06, 0x5bbf }, | ||
| 2010 | { 0x06, 0x8350 }, | ||
| 2011 | { 0x06, 0xef46 }, | ||
| 2012 | { 0x06, 0xdc19 }, | ||
| 2013 | { 0x06, 0xddd0 }, | ||
| 2014 | { 0x06, 0x0102 }, | ||
| 2015 | { 0x06, 0x825b }, | ||
| 2016 | { 0x06, 0x0282 }, | ||
| 2017 | { 0x06, 0x77e0 }, | ||
| 2018 | { 0x06, 0xf860 }, | ||
| 2019 | { 0x06, 0xe1f8 }, | ||
| 2020 | { 0x06, 0x6158 }, | ||
| 2021 | { 0x06, 0xfde4 }, | ||
| 2022 | { 0x06, 0xf860 }, | ||
| 2023 | { 0x06, 0xe5f8 }, | ||
| 2024 | { 0x06, 0x61fc }, | ||
| 2025 | { 0x06, 0x04f9 }, | ||
| 2026 | { 0x06, 0xfafb }, | ||
| 2027 | { 0x06, 0xc6bf }, | ||
| 2028 | { 0x06, 0xf840 }, | ||
| 2029 | { 0x06, 0xbe83 }, | ||
| 2030 | { 0x06, 0x50a0 }, | ||
| 2031 | { 0x06, 0x0101 }, | ||
| 2032 | { 0x06, 0x071b }, | ||
| 2033 | { 0x06, 0x89cf }, | ||
| 2034 | { 0x06, 0xd208 }, | ||
| 2035 | { 0x06, 0xebdb }, | ||
| 2036 | { 0x06, 0x19b2 }, | ||
| 2037 | { 0x06, 0xfbff }, | ||
| 2038 | { 0x06, 0xfefd }, | ||
| 2039 | { 0x06, 0x04f8 }, | ||
| 2040 | { 0x06, 0xe0f8 }, | ||
| 2041 | { 0x06, 0x48e1 }, | ||
| 2042 | { 0x06, 0xf849 }, | ||
| 2043 | { 0x06, 0x6808 }, | ||
| 2044 | { 0x06, 0xe4f8 }, | ||
| 2045 | { 0x06, 0x48e5 }, | ||
| 2046 | { 0x06, 0xf849 }, | ||
| 2047 | { 0x06, 0x58f7 }, | ||
| 2048 | { 0x06, 0xe4f8 }, | ||
| 2049 | { 0x06, 0x48e5 }, | ||
| 2050 | { 0x06, 0xf849 }, | ||
| 2051 | { 0x06, 0xfc04 }, | ||
| 2052 | { 0x06, 0x4d20 }, | ||
| 2053 | { 0x06, 0x0002 }, | ||
| 2054 | { 0x06, 0x4e22 }, | ||
| 2055 | { 0x06, 0x0002 }, | ||
| 2056 | { 0x06, 0x4ddf }, | ||
| 2057 | { 0x06, 0xff01 }, | ||
| 2058 | { 0x06, 0x4edd }, | ||
| 2059 | { 0x06, 0xff01 }, | ||
| 2060 | { 0x05, 0x83d4 }, | ||
| 2061 | { 0x06, 0x8000 }, | ||
| 2062 | { 0x05, 0x83d8 }, | ||
| 2063 | { 0x06, 0x8051 }, | ||
| 2064 | { 0x02, 0x6010 }, | ||
| 2065 | { 0x03, 0xdc00 }, | ||
| 2066 | { 0x05, 0xfff6 }, | ||
| 2067 | { 0x06, 0x00fc }, | ||
| 1671 | { 0x1f, 0x0000 }, | 2068 | { 0x1f, 0x0000 }, |
| 1672 | { 0x14, 0x0060 }, | 2069 | |
| 1673 | { 0x1f, 0x0000 }, | 2070 | { 0x1f, 0x0000 }, |
| 1674 | { 0x0d, 0xf8a0 }, | 2071 | { 0x0d, 0xf880 }, |
| 2072 | { 0x1f, 0x0000 } | ||
| 2073 | }; | ||
| 2074 | |||
| 2075 | rtl_phy_write(ioaddr, phy_reg_init_0, ARRAY_SIZE(phy_reg_init_0)); | ||
| 2076 | |||
| 2077 | mdio_write(ioaddr, 0x1f, 0x0002); | ||
| 2078 | mdio_plus_minus(ioaddr, 0x0b, 0x0010, 0x00ef); | ||
| 2079 | mdio_plus_minus(ioaddr, 0x0c, 0xa200, 0x5d00); | ||
| 2080 | |||
| 2081 | rtl_phy_write(ioaddr, phy_reg_init_1, ARRAY_SIZE(phy_reg_init_1)); | ||
| 2082 | |||
| 2083 | if (rtl8168d_efuse_read(ioaddr, 0x01) == 0xb1) { | ||
| 2084 | struct phy_reg phy_reg_init[] = { | ||
| 2085 | { 0x1f, 0x0002 }, | ||
| 2086 | { 0x05, 0x669a }, | ||
| 2087 | { 0x1f, 0x0005 }, | ||
| 2088 | { 0x05, 0x8330 }, | ||
| 2089 | { 0x06, 0x669a }, | ||
| 2090 | { 0x1f, 0x0002 } | ||
| 2091 | }; | ||
| 2092 | int val; | ||
| 2093 | |||
| 2094 | rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init)); | ||
| 2095 | |||
| 2096 | val = mdio_read(ioaddr, 0x0d); | ||
| 2097 | |||
| 2098 | if ((val & 0x00ff) != 0x006c) { | ||
| 2099 | u32 set[] = { | ||
| 2100 | 0x0065, 0x0066, 0x0067, 0x0068, | ||
| 2101 | 0x0069, 0x006a, 0x006b, 0x006c | ||
| 2102 | }; | ||
| 2103 | int i; | ||
| 2104 | |||
| 2105 | mdio_write(ioaddr, 0x1f, 0x0002); | ||
| 2106 | |||
| 2107 | val &= 0xff00; | ||
| 2108 | for (i = 0; i < ARRAY_SIZE(set); i++) | ||
| 2109 | mdio_write(ioaddr, 0x0d, val | set[i]); | ||
| 2110 | } | ||
| 2111 | } else { | ||
| 2112 | struct phy_reg phy_reg_init[] = { | ||
| 2113 | { 0x1f, 0x0002 }, | ||
| 2114 | { 0x05, 0x6662 }, | ||
| 2115 | { 0x1f, 0x0005 }, | ||
| 2116 | { 0x05, 0x8330 }, | ||
| 2117 | { 0x06, 0x6662 } | ||
| 2118 | }; | ||
| 2119 | |||
| 2120 | rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init)); | ||
| 2121 | } | ||
| 2122 | |||
| 2123 | mdio_write(ioaddr, 0x1f, 0x0002); | ||
| 2124 | mdio_patch(ioaddr, 0x0d, 0x0300); | ||
| 2125 | mdio_patch(ioaddr, 0x0f, 0x0010); | ||
| 2126 | |||
| 2127 | mdio_write(ioaddr, 0x1f, 0x0002); | ||
| 2128 | mdio_plus_minus(ioaddr, 0x02, 0x0100, 0x0600); | ||
| 2129 | mdio_plus_minus(ioaddr, 0x03, 0x0000, 0xe000); | ||
| 2130 | |||
| 2131 | rtl_phy_write(ioaddr, phy_reg_init_2, ARRAY_SIZE(phy_reg_init_2)); | ||
| 2132 | } | ||
| 2133 | |||
| 2134 | static void rtl8168d_2_hw_phy_config(void __iomem *ioaddr) | ||
| 2135 | { | ||
| 2136 | static struct phy_reg phy_reg_init_0[] = { | ||
| 2137 | { 0x1f, 0x0001 }, | ||
| 2138 | { 0x06, 0x4064 }, | ||
| 2139 | { 0x07, 0x2863 }, | ||
| 2140 | { 0x08, 0x059c }, | ||
| 2141 | { 0x09, 0x26b4 }, | ||
| 2142 | { 0x0a, 0x6a19 }, | ||
| 2143 | { 0x0b, 0xdcc8 }, | ||
| 2144 | { 0x10, 0xf06d }, | ||
| 2145 | { 0x14, 0x7f68 }, | ||
| 2146 | { 0x18, 0x7fd9 }, | ||
| 2147 | { 0x1c, 0xf0ff }, | ||
| 2148 | { 0x1d, 0x3d9c }, | ||
| 2149 | { 0x1f, 0x0003 }, | ||
| 2150 | { 0x12, 0xf49f }, | ||
| 2151 | { 0x13, 0x070b }, | ||
| 2152 | { 0x1a, 0x05ad }, | ||
| 2153 | { 0x14, 0x94c0 }, | ||
| 2154 | |||
| 2155 | { 0x1f, 0x0002 }, | ||
| 2156 | { 0x06, 0x5561 }, | ||
| 2157 | { 0x1f, 0x0005 }, | ||
| 2158 | { 0x05, 0x8332 }, | ||
| 2159 | { 0x06, 0x5561 } | ||
| 2160 | }; | ||
| 2161 | static struct phy_reg phy_reg_init_1[] = { | ||
| 2162 | { 0x1f, 0x0005 }, | ||
| 2163 | { 0x05, 0xffc2 }, | ||
| 1675 | { 0x1f, 0x0005 }, | 2164 | { 0x1f, 0x0005 }, |
| 1676 | { 0x05, 0xffc2 } | 2165 | { 0x05, 0x8000 }, |
| 2166 | { 0x06, 0xf8f9 }, | ||
| 2167 | { 0x06, 0xfaee }, | ||
| 2168 | { 0x06, 0xf8ea }, | ||
| 2169 | { 0x06, 0x00ee }, | ||
| 2170 | { 0x06, 0xf8eb }, | ||
| 2171 | { 0x06, 0x00e2 }, | ||
| 2172 | { 0x06, 0xf87c }, | ||
| 2173 | { 0x06, 0xe3f8 }, | ||
| 2174 | { 0x06, 0x7da5 }, | ||
| 2175 | { 0x06, 0x1111 }, | ||
| 2176 | { 0x06, 0x12d2 }, | ||
| 2177 | { 0x06, 0x40d6 }, | ||
| 2178 | { 0x06, 0x4444 }, | ||
| 2179 | { 0x06, 0x0281 }, | ||
| 2180 | { 0x06, 0xc6d2 }, | ||
| 2181 | { 0x06, 0xa0d6 }, | ||
| 2182 | { 0x06, 0xaaaa }, | ||
| 2183 | { 0x06, 0x0281 }, | ||
| 2184 | { 0x06, 0xc6ae }, | ||
| 2185 | { 0x06, 0x0fa5 }, | ||
| 2186 | { 0x06, 0x4444 }, | ||
| 2187 | { 0x06, 0x02ae }, | ||
| 2188 | { 0x06, 0x4da5 }, | ||
| 2189 | { 0x06, 0xaaaa }, | ||
| 2190 | { 0x06, 0x02ae }, | ||
| 2191 | { 0x06, 0x47af }, | ||
| 2192 | { 0x06, 0x81c2 }, | ||
| 2193 | { 0x06, 0xee83 }, | ||
| 2194 | { 0x06, 0x4e00 }, | ||
| 2195 | { 0x06, 0xee83 }, | ||
| 2196 | { 0x06, 0x4d0f }, | ||
| 2197 | { 0x06, 0xee83 }, | ||
| 2198 | { 0x06, 0x4c0f }, | ||
| 2199 | { 0x06, 0xee83 }, | ||
| 2200 | { 0x06, 0x4f00 }, | ||
| 2201 | { 0x06, 0xee83 }, | ||
| 2202 | { 0x06, 0x5100 }, | ||
| 2203 | { 0x06, 0xee83 }, | ||
| 2204 | { 0x06, 0x4aff }, | ||
| 2205 | { 0x06, 0xee83 }, | ||
| 2206 | { 0x06, 0x4bff }, | ||
| 2207 | { 0x06, 0xe083 }, | ||
| 2208 | { 0x06, 0x30e1 }, | ||
| 2209 | { 0x06, 0x8331 }, | ||
| 2210 | { 0x06, 0x58fe }, | ||
| 2211 | { 0x06, 0xe4f8 }, | ||
| 2212 | { 0x06, 0x8ae5 }, | ||
| 2213 | { 0x06, 0xf88b }, | ||
| 2214 | { 0x06, 0xe083 }, | ||
| 2215 | { 0x06, 0x32e1 }, | ||
| 2216 | { 0x06, 0x8333 }, | ||
| 2217 | { 0x06, 0x590f }, | ||
| 2218 | { 0x06, 0xe283 }, | ||
| 2219 | { 0x06, 0x4d0c }, | ||
| 2220 | { 0x06, 0x245a }, | ||
| 2221 | { 0x06, 0xf01e }, | ||
| 2222 | { 0x06, 0x12e4 }, | ||
| 2223 | { 0x06, 0xf88c }, | ||
| 2224 | { 0x06, 0xe5f8 }, | ||
| 2225 | { 0x06, 0x8daf }, | ||
| 2226 | { 0x06, 0x81c2 }, | ||
| 2227 | { 0x06, 0xe083 }, | ||
| 2228 | { 0x06, 0x4f10 }, | ||
| 2229 | { 0x06, 0xe483 }, | ||
| 2230 | { 0x06, 0x4fe0 }, | ||
| 2231 | { 0x06, 0x834e }, | ||
| 2232 | { 0x06, 0x7800 }, | ||
| 2233 | { 0x06, 0x9f0a }, | ||
| 2234 | { 0x06, 0xe083 }, | ||
| 2235 | { 0x06, 0x4fa0 }, | ||
| 2236 | { 0x06, 0x10a5 }, | ||
| 2237 | { 0x06, 0xee83 }, | ||
| 2238 | { 0x06, 0x4e01 }, | ||
| 2239 | { 0x06, 0xe083 }, | ||
| 2240 | { 0x06, 0x4e78 }, | ||
| 2241 | { 0x06, 0x059e }, | ||
| 2242 | { 0x06, 0x9ae0 }, | ||
| 2243 | { 0x06, 0x834e }, | ||
| 2244 | { 0x06, 0x7804 }, | ||
| 2245 | { 0x06, 0x9e10 }, | ||
| 2246 | { 0x06, 0xe083 }, | ||
| 2247 | { 0x06, 0x4e78 }, | ||
| 2248 | { 0x06, 0x039e }, | ||
| 2249 | { 0x06, 0x0fe0 }, | ||
| 2250 | { 0x06, 0x834e }, | ||
| 2251 | { 0x06, 0x7801 }, | ||
| 2252 | { 0x06, 0x9e05 }, | ||
| 2253 | { 0x06, 0xae0c }, | ||
| 2254 | { 0x06, 0xaf81 }, | ||
| 2255 | { 0x06, 0xa7af }, | ||
| 2256 | { 0x06, 0x8152 }, | ||
| 2257 | { 0x06, 0xaf81 }, | ||
| 2258 | { 0x06, 0x8baf }, | ||
| 2259 | { 0x06, 0x81c2 }, | ||
| 2260 | { 0x06, 0xee83 }, | ||
| 2261 | { 0x06, 0x4800 }, | ||
| 2262 | { 0x06, 0xee83 }, | ||
| 2263 | { 0x06, 0x4900 }, | ||
| 2264 | { 0x06, 0xe083 }, | ||
| 2265 | { 0x06, 0x5110 }, | ||
| 2266 | { 0x06, 0xe483 }, | ||
| 2267 | { 0x06, 0x5158 }, | ||
| 2268 | { 0x06, 0x019f }, | ||
| 2269 | { 0x06, 0xead0 }, | ||
| 2270 | { 0x06, 0x00d1 }, | ||
| 2271 | { 0x06, 0x801f }, | ||
| 2272 | { 0x06, 0x66e2 }, | ||
| 2273 | { 0x06, 0xf8ea }, | ||
| 2274 | { 0x06, 0xe3f8 }, | ||
| 2275 | { 0x06, 0xeb5a }, | ||
| 2276 | { 0x06, 0xf81e }, | ||
| 2277 | { 0x06, 0x20e6 }, | ||
| 2278 | { 0x06, 0xf8ea }, | ||
| 2279 | { 0x06, 0xe5f8 }, | ||
| 2280 | { 0x06, 0xebd3 }, | ||
| 2281 | { 0x06, 0x02b3 }, | ||
| 2282 | { 0x06, 0xfee2 }, | ||
| 2283 | { 0x06, 0xf87c }, | ||
| 2284 | { 0x06, 0xef32 }, | ||
| 2285 | { 0x06, 0x5b80 }, | ||
| 2286 | { 0x06, 0xe3f8 }, | ||
| 2287 | { 0x06, 0x7d9e }, | ||
| 2288 | { 0x06, 0x037d }, | ||
| 2289 | { 0x06, 0xffff }, | ||
| 2290 | { 0x06, 0x0d58 }, | ||
| 2291 | { 0x06, 0x1c55 }, | ||
| 2292 | { 0x06, 0x1a65 }, | ||
| 2293 | { 0x06, 0x11a1 }, | ||
| 2294 | { 0x06, 0x90d3 }, | ||
| 2295 | { 0x06, 0xe283 }, | ||
| 2296 | { 0x06, 0x48e3 }, | ||
| 2297 | { 0x06, 0x8349 }, | ||
| 2298 | { 0x06, 0x1b56 }, | ||
| 2299 | { 0x06, 0xab08 }, | ||
| 2300 | { 0x06, 0xef56 }, | ||
| 2301 | { 0x06, 0xe683 }, | ||
| 2302 | { 0x06, 0x48e7 }, | ||
| 2303 | { 0x06, 0x8349 }, | ||
| 2304 | { 0x06, 0x10d1 }, | ||
| 2305 | { 0x06, 0x801f }, | ||
| 2306 | { 0x06, 0x66a0 }, | ||
| 2307 | { 0x06, 0x04b9 }, | ||
| 2308 | { 0x06, 0xe283 }, | ||
| 2309 | { 0x06, 0x48e3 }, | ||
| 2310 | { 0x06, 0x8349 }, | ||
| 2311 | { 0x06, 0xef65 }, | ||
| 2312 | { 0x06, 0xe283 }, | ||
| 2313 | { 0x06, 0x4ae3 }, | ||
| 2314 | { 0x06, 0x834b }, | ||
| 2315 | { 0x06, 0x1b56 }, | ||
| 2316 | { 0x06, 0xaa0e }, | ||
| 2317 | { 0x06, 0xef56 }, | ||
| 2318 | { 0x06, 0xe683 }, | ||
| 2319 | { 0x06, 0x4ae7 }, | ||
| 2320 | { 0x06, 0x834b }, | ||
| 2321 | { 0x06, 0xe283 }, | ||
| 2322 | { 0x06, 0x4de6 }, | ||
| 2323 | { 0x06, 0x834c }, | ||
| 2324 | { 0x06, 0xe083 }, | ||
| 2325 | { 0x06, 0x4da0 }, | ||
| 2326 | { 0x06, 0x000c }, | ||
| 2327 | { 0x06, 0xaf81 }, | ||
| 2328 | { 0x06, 0x8be0 }, | ||
| 2329 | { 0x06, 0x834d }, | ||
| 2330 | { 0x06, 0x10e4 }, | ||
| 2331 | { 0x06, 0x834d }, | ||
| 2332 | { 0x06, 0xae04 }, | ||
| 2333 | { 0x06, 0x80e4 }, | ||
| 2334 | { 0x06, 0x834d }, | ||
| 2335 | { 0x06, 0xe083 }, | ||
| 2336 | { 0x06, 0x4e78 }, | ||
| 2337 | { 0x06, 0x039e }, | ||
| 2338 | { 0x06, 0x0be0 }, | ||
| 2339 | { 0x06, 0x834e }, | ||
| 2340 | { 0x06, 0x7804 }, | ||
| 2341 | { 0x06, 0x9e04 }, | ||
| 2342 | { 0x06, 0xee83 }, | ||
| 2343 | { 0x06, 0x4e02 }, | ||
| 2344 | { 0x06, 0xe083 }, | ||
| 2345 | { 0x06, 0x32e1 }, | ||
| 2346 | { 0x06, 0x8333 }, | ||
| 2347 | { 0x06, 0x590f }, | ||
| 2348 | { 0x06, 0xe283 }, | ||
| 2349 | { 0x06, 0x4d0c }, | ||
| 2350 | { 0x06, 0x245a }, | ||
| 2351 | { 0x06, 0xf01e }, | ||
| 2352 | { 0x06, 0x12e4 }, | ||
| 2353 | { 0x06, 0xf88c }, | ||
| 2354 | { 0x06, 0xe5f8 }, | ||
| 2355 | { 0x06, 0x8de0 }, | ||
| 2356 | { 0x06, 0x8330 }, | ||
| 2357 | { 0x06, 0xe183 }, | ||
| 2358 | { 0x06, 0x3168 }, | ||
| 2359 | { 0x06, 0x01e4 }, | ||
| 2360 | { 0x06, 0xf88a }, | ||
| 2361 | { 0x06, 0xe5f8 }, | ||
| 2362 | { 0x06, 0x8bae }, | ||
| 2363 | { 0x06, 0x37ee }, | ||
| 2364 | { 0x06, 0x834e }, | ||
| 2365 | { 0x06, 0x03e0 }, | ||
| 2366 | { 0x06, 0x834c }, | ||
| 2367 | { 0x06, 0xe183 }, | ||
| 2368 | { 0x06, 0x4d1b }, | ||
| 2369 | { 0x06, 0x019e }, | ||
| 2370 | { 0x06, 0x04aa }, | ||
| 2371 | { 0x06, 0xa1ae }, | ||
| 2372 | { 0x06, 0xa8ee }, | ||
| 2373 | { 0x06, 0x834e }, | ||
| 2374 | { 0x06, 0x04ee }, | ||
| 2375 | { 0x06, 0x834f }, | ||
| 2376 | { 0x06, 0x00ae }, | ||
| 2377 | { 0x06, 0xabe0 }, | ||
| 2378 | { 0x06, 0x834f }, | ||
| 2379 | { 0x06, 0x7803 }, | ||
| 2380 | { 0x06, 0x9f14 }, | ||
| 2381 | { 0x06, 0xee83 }, | ||
| 2382 | { 0x06, 0x4e05 }, | ||
| 2383 | { 0x06, 0xd240 }, | ||
| 2384 | { 0x06, 0xd655 }, | ||
| 2385 | { 0x06, 0x5402 }, | ||
| 2386 | { 0x06, 0x81c6 }, | ||
| 2387 | { 0x06, 0xd2a0 }, | ||
| 2388 | { 0x06, 0xd6ba }, | ||
| 2389 | { 0x06, 0x0002 }, | ||
| 2390 | { 0x06, 0x81c6 }, | ||
| 2391 | { 0x06, 0xfefd }, | ||
| 2392 | { 0x06, 0xfc05 }, | ||
| 2393 | { 0x06, 0xf8e0 }, | ||
| 2394 | { 0x06, 0xf860 }, | ||
| 2395 | { 0x06, 0xe1f8 }, | ||
| 2396 | { 0x06, 0x6168 }, | ||
| 2397 | { 0x06, 0x02e4 }, | ||
| 2398 | { 0x06, 0xf860 }, | ||
| 2399 | { 0x06, 0xe5f8 }, | ||
| 2400 | { 0x06, 0x61e0 }, | ||
| 2401 | { 0x06, 0xf848 }, | ||
| 2402 | { 0x06, 0xe1f8 }, | ||
| 2403 | { 0x06, 0x4958 }, | ||
| 2404 | { 0x06, 0x0f1e }, | ||
| 2405 | { 0x06, 0x02e4 }, | ||
| 2406 | { 0x06, 0xf848 }, | ||
| 2407 | { 0x06, 0xe5f8 }, | ||
| 2408 | { 0x06, 0x49d0 }, | ||
| 2409 | { 0x06, 0x0002 }, | ||
| 2410 | { 0x06, 0x820a }, | ||
| 2411 | { 0x06, 0xbf83 }, | ||
| 2412 | { 0x06, 0x50ef }, | ||
| 2413 | { 0x06, 0x46dc }, | ||
| 2414 | { 0x06, 0x19dd }, | ||
| 2415 | { 0x06, 0xd001 }, | ||
| 2416 | { 0x06, 0x0282 }, | ||
| 2417 | { 0x06, 0x0a02 }, | ||
| 2418 | { 0x06, 0x8226 }, | ||
| 2419 | { 0x06, 0xe0f8 }, | ||
| 2420 | { 0x06, 0x60e1 }, | ||
| 2421 | { 0x06, 0xf861 }, | ||
| 2422 | { 0x06, 0x58fd }, | ||
| 2423 | { 0x06, 0xe4f8 }, | ||
| 2424 | { 0x06, 0x60e5 }, | ||
| 2425 | { 0x06, 0xf861 }, | ||
| 2426 | { 0x06, 0xfc04 }, | ||
| 2427 | { 0x06, 0xf9fa }, | ||
| 2428 | { 0x06, 0xfbc6 }, | ||
| 2429 | { 0x06, 0xbff8 }, | ||
| 2430 | { 0x06, 0x40be }, | ||
| 2431 | { 0x06, 0x8350 }, | ||
| 2432 | { 0x06, 0xa001 }, | ||
| 2433 | { 0x06, 0x0107 }, | ||
| 2434 | { 0x06, 0x1b89 }, | ||
| 2435 | { 0x06, 0xcfd2 }, | ||
| 2436 | { 0x06, 0x08eb }, | ||
| 2437 | { 0x06, 0xdb19 }, | ||
| 2438 | { 0x06, 0xb2fb }, | ||
| 2439 | { 0x06, 0xfffe }, | ||
| 2440 | { 0x06, 0xfd04 }, | ||
| 2441 | { 0x06, 0xf8e0 }, | ||
| 2442 | { 0x06, 0xf848 }, | ||
| 2443 | { 0x06, 0xe1f8 }, | ||
| 2444 | { 0x06, 0x4968 }, | ||
| 2445 | { 0x06, 0x08e4 }, | ||
| 2446 | { 0x06, 0xf848 }, | ||
| 2447 | { 0x06, 0xe5f8 }, | ||
| 2448 | { 0x06, 0x4958 }, | ||
| 2449 | { 0x06, 0xf7e4 }, | ||
| 2450 | { 0x06, 0xf848 }, | ||
| 2451 | { 0x06, 0xe5f8 }, | ||
| 2452 | { 0x06, 0x49fc }, | ||
| 2453 | { 0x06, 0x044d }, | ||
| 2454 | { 0x06, 0x2000 }, | ||
| 2455 | { 0x06, 0x024e }, | ||
| 2456 | { 0x06, 0x2200 }, | ||
| 2457 | { 0x06, 0x024d }, | ||
| 2458 | { 0x06, 0xdfff }, | ||
| 2459 | { 0x06, 0x014e }, | ||
| 2460 | { 0x06, 0xddff }, | ||
| 2461 | { 0x06, 0x0100 }, | ||
| 2462 | { 0x05, 0x83d8 }, | ||
| 2463 | { 0x06, 0x8000 }, | ||
| 2464 | { 0x03, 0xdc00 }, | ||
| 2465 | { 0x05, 0xfff6 }, | ||
| 2466 | { 0x06, 0x00fc }, | ||
| 2467 | { 0x1f, 0x0000 }, | ||
| 2468 | |||
| 2469 | { 0x1f, 0x0000 }, | ||
| 2470 | { 0x0d, 0xf880 }, | ||
| 2471 | { 0x1f, 0x0000 } | ||
| 1677 | }; | 2472 | }; |
| 1678 | 2473 | ||
| 1679 | rtl_phy_write(ioaddr, phy_reg_init_0, ARRAY_SIZE(phy_reg_init_0)); | 2474 | rtl_phy_write(ioaddr, phy_reg_init_0, ARRAY_SIZE(phy_reg_init_0)); |
| 1680 | 2475 | ||
| 1681 | if (mdio_read(ioaddr, 0x06) == 0xc400) { | 2476 | if (rtl8168d_efuse_read(ioaddr, 0x01) == 0xb1) { |
| 1682 | struct phy_reg phy_reg_init_1[] = { | 2477 | struct phy_reg phy_reg_init[] = { |
| 2478 | { 0x1f, 0x0002 }, | ||
| 2479 | { 0x05, 0x669a }, | ||
| 1683 | { 0x1f, 0x0005 }, | 2480 | { 0x1f, 0x0005 }, |
| 1684 | { 0x01, 0x0300 }, | 2481 | { 0x05, 0x8330 }, |
| 1685 | { 0x1f, 0x0000 }, | 2482 | { 0x06, 0x669a }, |
| 1686 | { 0x11, 0x401c }, | 2483 | |
| 1687 | { 0x16, 0x4100 }, | 2484 | { 0x1f, 0x0002 } |
| 2485 | }; | ||
| 2486 | int val; | ||
| 2487 | |||
| 2488 | rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init)); | ||
| 2489 | |||
| 2490 | val = mdio_read(ioaddr, 0x0d); | ||
| 2491 | if ((val & 0x00ff) != 0x006c) { | ||
| 2492 | u32 set[] = { | ||
| 2493 | 0x0065, 0x0066, 0x0067, 0x0068, | ||
| 2494 | 0x0069, 0x006a, 0x006b, 0x006c | ||
| 2495 | }; | ||
| 2496 | int i; | ||
| 2497 | |||
| 2498 | mdio_write(ioaddr, 0x1f, 0x0002); | ||
| 2499 | |||
| 2500 | val &= 0xff00; | ||
| 2501 | for (i = 0; i < ARRAY_SIZE(set); i++) | ||
| 2502 | mdio_write(ioaddr, 0x0d, val | set[i]); | ||
| 2503 | } | ||
| 2504 | } else { | ||
| 2505 | struct phy_reg phy_reg_init[] = { | ||
| 2506 | { 0x1f, 0x0002 }, | ||
| 2507 | { 0x05, 0x2642 }, | ||
| 1688 | { 0x1f, 0x0005 }, | 2508 | { 0x1f, 0x0005 }, |
| 1689 | { 0x07, 0x0010 }, | 2509 | { 0x05, 0x8330 }, |
| 1690 | { 0x05, 0x83dc }, | 2510 | { 0x06, 0x2642 } |
| 1691 | { 0x06, 0x087d }, | ||
| 1692 | { 0x05, 0x8300 }, | ||
| 1693 | { 0x06, 0x0101 }, | ||
| 1694 | { 0x06, 0x05f8 }, | ||
| 1695 | { 0x06, 0xf9fa }, | ||
| 1696 | { 0x06, 0xfbef }, | ||
| 1697 | { 0x06, 0x79e2 }, | ||
| 1698 | { 0x06, 0x835f }, | ||
| 1699 | { 0x06, 0xe0f8 }, | ||
| 1700 | { 0x06, 0x9ae1 }, | ||
| 1701 | { 0x06, 0xf89b }, | ||
| 1702 | { 0x06, 0xef31 }, | ||
| 1703 | { 0x06, 0x3b65 }, | ||
| 1704 | { 0x06, 0xaa07 }, | ||
| 1705 | { 0x06, 0x81e4 }, | ||
| 1706 | { 0x06, 0xf89a }, | ||
| 1707 | { 0x06, 0xe5f8 }, | ||
| 1708 | { 0x06, 0x9baf }, | ||
| 1709 | { 0x06, 0x06ae }, | ||
| 1710 | { 0x05, 0x83dc }, | ||
| 1711 | { 0x06, 0x8300 }, | ||
| 1712 | }; | 2511 | }; |
| 1713 | 2512 | ||
| 1714 | rtl_phy_write(ioaddr, phy_reg_init_1, | 2513 | rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init)); |
| 1715 | ARRAY_SIZE(phy_reg_init_1)); | ||
| 1716 | } | 2514 | } |
| 1717 | 2515 | ||
| 1718 | mdio_write(ioaddr, 0x1f, 0x0000); | 2516 | mdio_write(ioaddr, 0x1f, 0x0002); |
| 2517 | mdio_plus_minus(ioaddr, 0x02, 0x0100, 0x0600); | ||
| 2518 | mdio_plus_minus(ioaddr, 0x03, 0x0000, 0xe000); | ||
| 2519 | |||
| 2520 | mdio_write(ioaddr, 0x1f, 0x0001); | ||
| 2521 | mdio_write(ioaddr, 0x17, 0x0cc0); | ||
| 2522 | |||
| 2523 | mdio_write(ioaddr, 0x1f, 0x0002); | ||
| 2524 | mdio_patch(ioaddr, 0x0f, 0x0017); | ||
| 2525 | |||
| 2526 | rtl_phy_write(ioaddr, phy_reg_init_1, ARRAY_SIZE(phy_reg_init_1)); | ||
| 2527 | } | ||
| 2528 | |||
| 2529 | static void rtl8168d_3_hw_phy_config(void __iomem *ioaddr) | ||
| 2530 | { | ||
| 2531 | struct phy_reg phy_reg_init[] = { | ||
| 2532 | { 0x1f, 0x0002 }, | ||
| 2533 | { 0x10, 0x0008 }, | ||
| 2534 | { 0x0d, 0x006c }, | ||
| 2535 | |||
| 2536 | { 0x1f, 0x0000 }, | ||
| 2537 | { 0x0d, 0xf880 }, | ||
| 2538 | |||
| 2539 | { 0x1f, 0x0001 }, | ||
| 2540 | { 0x17, 0x0cc0 }, | ||
| 2541 | |||
| 2542 | { 0x1f, 0x0001 }, | ||
| 2543 | { 0x0b, 0xa4d8 }, | ||
| 2544 | { 0x09, 0x281c }, | ||
| 2545 | { 0x07, 0x2883 }, | ||
| 2546 | { 0x0a, 0x6b35 }, | ||
| 2547 | { 0x1d, 0x3da4 }, | ||
| 2548 | { 0x1c, 0xeffd }, | ||
| 2549 | { 0x14, 0x7f52 }, | ||
| 2550 | { 0x18, 0x7fc6 }, | ||
| 2551 | { 0x08, 0x0601 }, | ||
| 2552 | { 0x06, 0x4063 }, | ||
| 2553 | { 0x10, 0xf074 }, | ||
| 2554 | { 0x1f, 0x0003 }, | ||
| 2555 | { 0x13, 0x0789 }, | ||
| 2556 | { 0x12, 0xf4bd }, | ||
| 2557 | { 0x1a, 0x04fd }, | ||
| 2558 | { 0x14, 0x84b0 }, | ||
| 2559 | { 0x1f, 0x0000 }, | ||
| 2560 | { 0x00, 0x9200 }, | ||
| 2561 | |||
| 2562 | { 0x1f, 0x0005 }, | ||
| 2563 | { 0x01, 0x0340 }, | ||
| 2564 | { 0x1f, 0x0001 }, | ||
| 2565 | { 0x04, 0x4000 }, | ||
| 2566 | { 0x03, 0x1d21 }, | ||
| 2567 | { 0x02, 0x0c32 }, | ||
| 2568 | { 0x01, 0x0200 }, | ||
| 2569 | { 0x00, 0x5554 }, | ||
| 2570 | { 0x04, 0x4800 }, | ||
| 2571 | { 0x04, 0x4000 }, | ||
| 2572 | { 0x04, 0xf000 }, | ||
| 2573 | { 0x03, 0xdf01 }, | ||
| 2574 | { 0x02, 0xdf20 }, | ||
| 2575 | { 0x01, 0x101a }, | ||
| 2576 | { 0x00, 0xa0ff }, | ||
| 2577 | { 0x04, 0xf800 }, | ||
| 2578 | { 0x04, 0xf000 }, | ||
| 2579 | { 0x1f, 0x0000 }, | ||
| 2580 | |||
| 2581 | { 0x1f, 0x0007 }, | ||
| 2582 | { 0x1e, 0x0023 }, | ||
| 2583 | { 0x16, 0x0000 }, | ||
| 2584 | { 0x1f, 0x0000 } | ||
| 2585 | }; | ||
| 2586 | |||
| 2587 | rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init)); | ||
| 1719 | } | 2588 | } |
| 1720 | 2589 | ||
| 1721 | static void rtl8102e_hw_phy_config(void __iomem *ioaddr) | 2590 | static void rtl8102e_hw_phy_config(void __iomem *ioaddr) |
| @@ -1792,7 +2661,13 @@ static void rtl_hw_phy_config(struct net_device *dev) | |||
| 1792 | rtl8168cp_2_hw_phy_config(ioaddr); | 2661 | rtl8168cp_2_hw_phy_config(ioaddr); |
| 1793 | break; | 2662 | break; |
| 1794 | case RTL_GIGA_MAC_VER_25: | 2663 | case RTL_GIGA_MAC_VER_25: |
| 1795 | rtl8168d_hw_phy_config(ioaddr); | 2664 | rtl8168d_1_hw_phy_config(ioaddr); |
| 2665 | break; | ||
| 2666 | case RTL_GIGA_MAC_VER_26: | ||
| 2667 | rtl8168d_2_hw_phy_config(ioaddr); | ||
| 2668 | break; | ||
| 2669 | case RTL_GIGA_MAC_VER_27: | ||
| 2670 | rtl8168d_3_hw_phy_config(ioaddr); | ||
| 1796 | break; | 2671 | break; |
| 1797 | 2672 | ||
| 1798 | default: | 2673 | default: |
| @@ -2863,6 +3738,8 @@ static void rtl_hw_start_8168(struct net_device *dev) | |||
| 2863 | break; | 3738 | break; |
| 2864 | 3739 | ||
| 2865 | case RTL_GIGA_MAC_VER_25: | 3740 | case RTL_GIGA_MAC_VER_25: |
| 3741 | case RTL_GIGA_MAC_VER_26: | ||
| 3742 | case RTL_GIGA_MAC_VER_27: | ||
| 2866 | rtl_hw_start_8168d(ioaddr, pdev); | 3743 | rtl_hw_start_8168d(ioaddr, pdev); |
| 2867 | break; | 3744 | break; |
| 2868 | 3745 | ||
