Skip to content

Commit fef599f

Browse files
committed
Merge branch 'net-phy-realtek-complete-5gbps-support-and-replace-private-constants'
Heiner Kallweit says: ==================== net: phy: realtek: complete 5Gbps support and replace private constants Realtek maps standard C45 registers to vendor-specific registers which can be accessed via C22 w/o MMD. For an unknown reason C22 MMD access to C45 registers isn't supported for integrated PHY's. However the vendor-specific registers preserve the format of the C45 registers, so we can use standard constants. First two patches are cherry-picked from a series posted by Marek some time ago. RTL8126 supports 5Gbps, therefore add the missing 5Gbps support to rtl822x_config_aneg(). ==================== Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Jakub Kicinski <[email protected]>
2 parents 9736c64 + db1bb77 commit fef599f

File tree

2 files changed

+20
-18
lines changed

2 files changed

+20
-18
lines changed

drivers/net/phy/realtek.c

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -57,14 +57,6 @@
5757
#define RTL8366RB_POWER_SAVE 0x15
5858
#define RTL8366RB_POWER_SAVE_ON BIT(12)
5959

60-
#define RTL_SUPPORTS_5000FULL BIT(14)
61-
#define RTL_SUPPORTS_2500FULL BIT(13)
62-
#define RTL_SUPPORTS_10000FULL BIT(0)
63-
#define RTL_ADV_2500FULL BIT(7)
64-
#define RTL_LPADV_10000FULL BIT(11)
65-
#define RTL_LPADV_5000FULL BIT(6)
66-
#define RTL_LPADV_2500FULL BIT(5)
67-
6860
#define RTL9000A_GINMR 0x14
6961
#define RTL9000A_GINMR_LINK_STATUS BIT(4)
7062

@@ -674,11 +666,11 @@ static int rtl822x_get_features(struct phy_device *phydev)
674666
return val;
675667

676668
linkmode_mod_bit(ETHTOOL_LINK_MODE_2500baseT_Full_BIT,
677-
phydev->supported, val & RTL_SUPPORTS_2500FULL);
669+
phydev->supported, val & MDIO_PMA_SPEED_2_5G);
678670
linkmode_mod_bit(ETHTOOL_LINK_MODE_5000baseT_Full_BIT,
679-
phydev->supported, val & RTL_SUPPORTS_5000FULL);
671+
phydev->supported, val & MDIO_PMA_SPEED_5G);
680672
linkmode_mod_bit(ETHTOOL_LINK_MODE_10000baseT_Full_BIT,
681-
phydev->supported, val & RTL_SUPPORTS_10000FULL);
673+
phydev->supported, val & MDIO_SPEED_10G);
682674

683675
return genphy_read_abilities(phydev);
684676
}
@@ -688,14 +680,19 @@ static int rtl822x_config_aneg(struct phy_device *phydev)
688680
int ret = 0;
689681

690682
if (phydev->autoneg == AUTONEG_ENABLE) {
691-
u16 adv2500 = 0;
683+
u16 adv = 0;
692684

693685
if (linkmode_test_bit(ETHTOOL_LINK_MODE_2500baseT_Full_BIT,
694686
phydev->advertising))
695-
adv2500 = RTL_ADV_2500FULL;
687+
adv |= MDIO_AN_10GBT_CTRL_ADV2_5G;
688+
if (linkmode_test_bit(ETHTOOL_LINK_MODE_5000baseT_Full_BIT,
689+
phydev->advertising))
690+
adv |= MDIO_AN_10GBT_CTRL_ADV5G;
696691

697692
ret = phy_modify_paged_changed(phydev, 0xa5d, 0x12,
698-
RTL_ADV_2500FULL, adv2500);
693+
MDIO_AN_10GBT_CTRL_ADV2_5G |
694+
MDIO_AN_10GBT_CTRL_ADV5G,
695+
adv);
699696
if (ret < 0)
700697
return ret;
701698
}
@@ -714,11 +711,14 @@ static int rtl822x_read_status(struct phy_device *phydev)
714711
return lpadv;
715712

716713
linkmode_mod_bit(ETHTOOL_LINK_MODE_10000baseT_Full_BIT,
717-
phydev->lp_advertising, lpadv & RTL_LPADV_10000FULL);
714+
phydev->lp_advertising,
715+
lpadv & MDIO_AN_10GBT_STAT_LP10G);
718716
linkmode_mod_bit(ETHTOOL_LINK_MODE_5000baseT_Full_BIT,
719-
phydev->lp_advertising, lpadv & RTL_LPADV_5000FULL);
717+
phydev->lp_advertising,
718+
lpadv & MDIO_AN_10GBT_STAT_LP5G);
720719
linkmode_mod_bit(ETHTOOL_LINK_MODE_2500baseT_Full_BIT,
721-
phydev->lp_advertising, lpadv & RTL_LPADV_2500FULL);
720+
phydev->lp_advertising,
721+
lpadv & MDIO_AN_10GBT_STAT_LP2_5G);
722722
}
723723

724724
ret = genphy_read_status(phydev);
@@ -736,7 +736,7 @@ static bool rtlgen_supports_2_5gbps(struct phy_device *phydev)
736736
val = phy_read(phydev, 0x13);
737737
phy_write(phydev, RTL821x_PAGE_SELECT, 0);
738738

739-
return val >= 0 && val & RTL_SUPPORTS_2500FULL;
739+
return val >= 0 && val & MDIO_PMA_SPEED_2_5G;
740740
}
741741

742742
static int rtlgen_match_phy_device(struct phy_device *phydev)

include/uapi/linux/mdio.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,8 @@
138138
#define MDIO_PMA_SPEED_1000 0x0010 /* 1000M capable */
139139
#define MDIO_PMA_SPEED_100 0x0020 /* 100M capable */
140140
#define MDIO_PMA_SPEED_10 0x0040 /* 10M capable */
141+
#define MDIO_PMA_SPEED_2_5G 0x2000 /* 2.5G capable */
142+
#define MDIO_PMA_SPEED_5G 0x4000 /* 5G capable */
141143
#define MDIO_PCS_SPEED_10P2B 0x0002 /* 10PASS-TS/2BASE-TL capable */
142144
#define MDIO_PCS_SPEED_2_5G 0x0040 /* 2.5G capable */
143145
#define MDIO_PCS_SPEED_5G 0x0080 /* 5G capable */

0 commit comments

Comments
 (0)