Skip to content

Commit cf8a9ab

Browse files
committed
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: David S. Miller <[email protected]>
2 parents d8a6472 + cdafdc2 commit cf8a9ab

File tree

3 files changed

+27
-12
lines changed

3 files changed

+27
-12
lines changed

drivers/net/ethernet/realtek/r8169.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ enum mac_version {
2626
RTL_GIGA_MAC_VER_12,
2727
RTL_GIGA_MAC_VER_13,
2828
RTL_GIGA_MAC_VER_14,
29-
RTL_GIGA_MAC_VER_15,
3029
RTL_GIGA_MAC_VER_16,
3130
RTL_GIGA_MAC_VER_17,
3231
RTL_GIGA_MAC_VER_18,

drivers/net/ethernet/realtek/r8169_main.c

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -105,9 +105,8 @@ static const struct {
105105
[RTL_GIGA_MAC_VER_10] = {"RTL8101e" },
106106
[RTL_GIGA_MAC_VER_11] = {"RTL8168b/8111b" },
107107
[RTL_GIGA_MAC_VER_12] = {"RTL8168b/8111b" },
108-
[RTL_GIGA_MAC_VER_13] = {"RTL8101e" },
109-
[RTL_GIGA_MAC_VER_14] = {"RTL8100e" },
110-
[RTL_GIGA_MAC_VER_15] = {"RTL8100e" },
108+
[RTL_GIGA_MAC_VER_13] = {"RTL8101e/RTL8100e" },
109+
[RTL_GIGA_MAC_VER_14] = {"RTL8401" },
111110
[RTL_GIGA_MAC_VER_16] = {"RTL8101e" },
112111
[RTL_GIGA_MAC_VER_17] = {"RTL8168b/8111b" },
113112
[RTL_GIGA_MAC_VER_18] = {"RTL8168cp/8111cp" },
@@ -2001,16 +2000,15 @@ static enum mac_version rtl8169_get_mac_version(u16 xid, bool gmii)
20012000
{ 0x7cf, 0x348, RTL_GIGA_MAC_VER_07 },
20022001
{ 0x7cf, 0x248, RTL_GIGA_MAC_VER_07 },
20032002
{ 0x7cf, 0x340, RTL_GIGA_MAC_VER_13 },
2004-
/* RTL8401, reportedly works if treated as RTL8101e */
2005-
{ 0x7cf, 0x240, RTL_GIGA_MAC_VER_13 },
2003+
{ 0x7cf, 0x240, RTL_GIGA_MAC_VER_14 },
20062004
{ 0x7cf, 0x343, RTL_GIGA_MAC_VER_10 },
20072005
{ 0x7cf, 0x342, RTL_GIGA_MAC_VER_16 },
20082006
{ 0x7c8, 0x348, RTL_GIGA_MAC_VER_09 },
20092007
{ 0x7c8, 0x248, RTL_GIGA_MAC_VER_09 },
20102008
{ 0x7c8, 0x340, RTL_GIGA_MAC_VER_16 },
20112009
/* FIXME: where did these entries come from ? -- FR */
2012-
{ 0xfc8, 0x388, RTL_GIGA_MAC_VER_15 },
2013-
{ 0xfc8, 0x308, RTL_GIGA_MAC_VER_14 },
2010+
{ 0xfc8, 0x388, RTL_GIGA_MAC_VER_13 },
2011+
{ 0xfc8, 0x308, RTL_GIGA_MAC_VER_13 },
20142012

20152013
/* 8110 family. */
20162014
{ 0xfc8, 0x980, RTL_GIGA_MAC_VER_06 },
@@ -3403,6 +3401,19 @@ static void rtl_hw_start_8102e_3(struct rtl8169_private *tp)
34033401
rtl_ephy_write(tp, 0x03, 0xc2f9);
34043402
}
34053403

3404+
static void rtl_hw_start_8401(struct rtl8169_private *tp)
3405+
{
3406+
static const struct ephy_info e_info_8401[] = {
3407+
{ 0x01, 0xffff, 0x6fe5 },
3408+
{ 0x03, 0xffff, 0x0599 },
3409+
{ 0x06, 0xffff, 0xaf25 },
3410+
{ 0x07, 0xffff, 0x8e68 },
3411+
};
3412+
3413+
rtl_ephy_init(tp, e_info_8401);
3414+
RTL_W8(tp, Config3, RTL_R8(tp, Config3) & ~Beacon_en);
3415+
}
3416+
34063417
static void rtl_hw_start_8105e_1(struct rtl8169_private *tp)
34073418
{
34083419
static const struct ephy_info e_info_8105e_1[] = {
@@ -3616,8 +3627,7 @@ static void rtl_hw_config(struct rtl8169_private *tp)
36163627
[RTL_GIGA_MAC_VER_11] = rtl_hw_start_8168b,
36173628
[RTL_GIGA_MAC_VER_12] = rtl_hw_start_8168b,
36183629
[RTL_GIGA_MAC_VER_13] = NULL,
3619-
[RTL_GIGA_MAC_VER_14] = NULL,
3620-
[RTL_GIGA_MAC_VER_15] = NULL,
3630+
[RTL_GIGA_MAC_VER_14] = rtl_hw_start_8401,
36213631
[RTL_GIGA_MAC_VER_16] = NULL,
36223632
[RTL_GIGA_MAC_VER_17] = rtl_hw_start_8168b,
36233633
[RTL_GIGA_MAC_VER_18] = rtl_hw_start_8168cp_1,

drivers/net/ethernet/realtek/r8169_phy_config.c

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1091,6 +1091,13 @@ static void rtl8102e_hw_phy_config(struct rtl8169_private *tp,
10911091
rtl_writephy_batch(phydev, phy_reg_init);
10921092
}
10931093

1094+
static void rtl8401_hw_phy_config(struct rtl8169_private *tp,
1095+
struct phy_device *phydev)
1096+
{
1097+
phy_set_bits(phydev, 0x11, BIT(12));
1098+
phy_modify_paged(phydev, 0x0002, 0x0f, 0x0000, 0x0003);
1099+
}
1100+
10941101
static void rtl8105e_hw_phy_config(struct rtl8169_private *tp,
10951102
struct phy_device *phydev)
10961103
{
@@ -1261,8 +1268,7 @@ void r8169_hw_phy_config(struct rtl8169_private *tp, struct phy_device *phydev,
12611268
[RTL_GIGA_MAC_VER_11] = rtl8168bb_hw_phy_config,
12621269
[RTL_GIGA_MAC_VER_12] = rtl8168bef_hw_phy_config,
12631270
[RTL_GIGA_MAC_VER_13] = NULL,
1264-
[RTL_GIGA_MAC_VER_14] = NULL,
1265-
[RTL_GIGA_MAC_VER_15] = NULL,
1271+
[RTL_GIGA_MAC_VER_14] = rtl8401_hw_phy_config,
12661272
[RTL_GIGA_MAC_VER_16] = NULL,
12671273
[RTL_GIGA_MAC_VER_17] = rtl8168bef_hw_phy_config,
12681274
[RTL_GIGA_MAC_VER_18] = rtl8168cp_1_hw_phy_config,

0 commit comments

Comments
 (0)