Commit cf8a9ab7 authored by David S. Miller's avatar David S. Miller

Merge branch 'r8169-make-RTL8401-a-separate-chip-version'

Heiner Kallweit says:

====================
r8169: make RTL8401 a separate chip version

So far RTL8401 was treated like a RTL8101e, means we relied on the BIOS
to configure MAC and PHY properly. Make RTL8401 a separate chip version
and copy MAC / PHY config from r8101 vendor driver.
====================
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents d8a6472f cdafdc29
...@@ -26,7 +26,6 @@ enum mac_version { ...@@ -26,7 +26,6 @@ enum mac_version {
RTL_GIGA_MAC_VER_12, RTL_GIGA_MAC_VER_12,
RTL_GIGA_MAC_VER_13, RTL_GIGA_MAC_VER_13,
RTL_GIGA_MAC_VER_14, RTL_GIGA_MAC_VER_14,
RTL_GIGA_MAC_VER_15,
RTL_GIGA_MAC_VER_16, RTL_GIGA_MAC_VER_16,
RTL_GIGA_MAC_VER_17, RTL_GIGA_MAC_VER_17,
RTL_GIGA_MAC_VER_18, RTL_GIGA_MAC_VER_18,
......
...@@ -105,9 +105,8 @@ static const struct { ...@@ -105,9 +105,8 @@ static const struct {
[RTL_GIGA_MAC_VER_10] = {"RTL8101e" }, [RTL_GIGA_MAC_VER_10] = {"RTL8101e" },
[RTL_GIGA_MAC_VER_11] = {"RTL8168b/8111b" }, [RTL_GIGA_MAC_VER_11] = {"RTL8168b/8111b" },
[RTL_GIGA_MAC_VER_12] = {"RTL8168b/8111b" }, [RTL_GIGA_MAC_VER_12] = {"RTL8168b/8111b" },
[RTL_GIGA_MAC_VER_13] = {"RTL8101e" }, [RTL_GIGA_MAC_VER_13] = {"RTL8101e/RTL8100e" },
[RTL_GIGA_MAC_VER_14] = {"RTL8100e" }, [RTL_GIGA_MAC_VER_14] = {"RTL8401" },
[RTL_GIGA_MAC_VER_15] = {"RTL8100e" },
[RTL_GIGA_MAC_VER_16] = {"RTL8101e" }, [RTL_GIGA_MAC_VER_16] = {"RTL8101e" },
[RTL_GIGA_MAC_VER_17] = {"RTL8168b/8111b" }, [RTL_GIGA_MAC_VER_17] = {"RTL8168b/8111b" },
[RTL_GIGA_MAC_VER_18] = {"RTL8168cp/8111cp" }, [RTL_GIGA_MAC_VER_18] = {"RTL8168cp/8111cp" },
...@@ -2001,16 +2000,15 @@ static enum mac_version rtl8169_get_mac_version(u16 xid, bool gmii) ...@@ -2001,16 +2000,15 @@ static enum mac_version rtl8169_get_mac_version(u16 xid, bool gmii)
{ 0x7cf, 0x348, RTL_GIGA_MAC_VER_07 }, { 0x7cf, 0x348, RTL_GIGA_MAC_VER_07 },
{ 0x7cf, 0x248, RTL_GIGA_MAC_VER_07 }, { 0x7cf, 0x248, RTL_GIGA_MAC_VER_07 },
{ 0x7cf, 0x340, RTL_GIGA_MAC_VER_13 }, { 0x7cf, 0x340, RTL_GIGA_MAC_VER_13 },
/* RTL8401, reportedly works if treated as RTL8101e */ { 0x7cf, 0x240, RTL_GIGA_MAC_VER_14 },
{ 0x7cf, 0x240, RTL_GIGA_MAC_VER_13 },
{ 0x7cf, 0x343, RTL_GIGA_MAC_VER_10 }, { 0x7cf, 0x343, RTL_GIGA_MAC_VER_10 },
{ 0x7cf, 0x342, RTL_GIGA_MAC_VER_16 }, { 0x7cf, 0x342, RTL_GIGA_MAC_VER_16 },
{ 0x7c8, 0x348, RTL_GIGA_MAC_VER_09 }, { 0x7c8, 0x348, RTL_GIGA_MAC_VER_09 },
{ 0x7c8, 0x248, RTL_GIGA_MAC_VER_09 }, { 0x7c8, 0x248, RTL_GIGA_MAC_VER_09 },
{ 0x7c8, 0x340, RTL_GIGA_MAC_VER_16 }, { 0x7c8, 0x340, RTL_GIGA_MAC_VER_16 },
/* FIXME: where did these entries come from ? -- FR */ /* FIXME: where did these entries come from ? -- FR */
{ 0xfc8, 0x388, RTL_GIGA_MAC_VER_15 }, { 0xfc8, 0x388, RTL_GIGA_MAC_VER_13 },
{ 0xfc8, 0x308, RTL_GIGA_MAC_VER_14 }, { 0xfc8, 0x308, RTL_GIGA_MAC_VER_13 },
/* 8110 family. */ /* 8110 family. */
{ 0xfc8, 0x980, RTL_GIGA_MAC_VER_06 }, { 0xfc8, 0x980, RTL_GIGA_MAC_VER_06 },
...@@ -3403,6 +3401,19 @@ static void rtl_hw_start_8102e_3(struct rtl8169_private *tp) ...@@ -3403,6 +3401,19 @@ static void rtl_hw_start_8102e_3(struct rtl8169_private *tp)
rtl_ephy_write(tp, 0x03, 0xc2f9); rtl_ephy_write(tp, 0x03, 0xc2f9);
} }
static void rtl_hw_start_8401(struct rtl8169_private *tp)
{
static const struct ephy_info e_info_8401[] = {
{ 0x01, 0xffff, 0x6fe5 },
{ 0x03, 0xffff, 0x0599 },
{ 0x06, 0xffff, 0xaf25 },
{ 0x07, 0xffff, 0x8e68 },
};
rtl_ephy_init(tp, e_info_8401);
RTL_W8(tp, Config3, RTL_R8(tp, Config3) & ~Beacon_en);
}
static void rtl_hw_start_8105e_1(struct rtl8169_private *tp) static void rtl_hw_start_8105e_1(struct rtl8169_private *tp)
{ {
static const struct ephy_info e_info_8105e_1[] = { static const struct ephy_info e_info_8105e_1[] = {
...@@ -3616,8 +3627,7 @@ static void rtl_hw_config(struct rtl8169_private *tp) ...@@ -3616,8 +3627,7 @@ static void rtl_hw_config(struct rtl8169_private *tp)
[RTL_GIGA_MAC_VER_11] = rtl_hw_start_8168b, [RTL_GIGA_MAC_VER_11] = rtl_hw_start_8168b,
[RTL_GIGA_MAC_VER_12] = rtl_hw_start_8168b, [RTL_GIGA_MAC_VER_12] = rtl_hw_start_8168b,
[RTL_GIGA_MAC_VER_13] = NULL, [RTL_GIGA_MAC_VER_13] = NULL,
[RTL_GIGA_MAC_VER_14] = NULL, [RTL_GIGA_MAC_VER_14] = rtl_hw_start_8401,
[RTL_GIGA_MAC_VER_15] = NULL,
[RTL_GIGA_MAC_VER_16] = NULL, [RTL_GIGA_MAC_VER_16] = NULL,
[RTL_GIGA_MAC_VER_17] = rtl_hw_start_8168b, [RTL_GIGA_MAC_VER_17] = rtl_hw_start_8168b,
[RTL_GIGA_MAC_VER_18] = rtl_hw_start_8168cp_1, [RTL_GIGA_MAC_VER_18] = rtl_hw_start_8168cp_1,
......
...@@ -1091,6 +1091,13 @@ static void rtl8102e_hw_phy_config(struct rtl8169_private *tp, ...@@ -1091,6 +1091,13 @@ static void rtl8102e_hw_phy_config(struct rtl8169_private *tp,
rtl_writephy_batch(phydev, phy_reg_init); rtl_writephy_batch(phydev, phy_reg_init);
} }
static void rtl8401_hw_phy_config(struct rtl8169_private *tp,
struct phy_device *phydev)
{
phy_set_bits(phydev, 0x11, BIT(12));
phy_modify_paged(phydev, 0x0002, 0x0f, 0x0000, 0x0003);
}
static void rtl8105e_hw_phy_config(struct rtl8169_private *tp, static void rtl8105e_hw_phy_config(struct rtl8169_private *tp,
struct phy_device *phydev) struct phy_device *phydev)
{ {
...@@ -1261,8 +1268,7 @@ void r8169_hw_phy_config(struct rtl8169_private *tp, struct phy_device *phydev, ...@@ -1261,8 +1268,7 @@ void r8169_hw_phy_config(struct rtl8169_private *tp, struct phy_device *phydev,
[RTL_GIGA_MAC_VER_11] = rtl8168bb_hw_phy_config, [RTL_GIGA_MAC_VER_11] = rtl8168bb_hw_phy_config,
[RTL_GIGA_MAC_VER_12] = rtl8168bef_hw_phy_config, [RTL_GIGA_MAC_VER_12] = rtl8168bef_hw_phy_config,
[RTL_GIGA_MAC_VER_13] = NULL, [RTL_GIGA_MAC_VER_13] = NULL,
[RTL_GIGA_MAC_VER_14] = NULL, [RTL_GIGA_MAC_VER_14] = rtl8401_hw_phy_config,
[RTL_GIGA_MAC_VER_15] = NULL,
[RTL_GIGA_MAC_VER_16] = NULL, [RTL_GIGA_MAC_VER_16] = NULL,
[RTL_GIGA_MAC_VER_17] = rtl8168bef_hw_phy_config, [RTL_GIGA_MAC_VER_17] = rtl8168bef_hw_phy_config,
[RTL_GIGA_MAC_VER_18] = rtl8168cp_1_hw_phy_config, [RTL_GIGA_MAC_VER_18] = rtl8168cp_1_hw_phy_config,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment