|
@@ -1,110 +0,0 @@
|
|
-Author: Thomas Kupper <[email protected]>
|
|
|
|
-Date: Wed May 24 21:14:17 2023 +0200
|
|
|
|
-
|
|
|
|
-kernel: phy: add Aquantia PHY AQR111 & AQR111B0
|
|
|
|
-
|
|
|
|
-Add the IDs for Aquantia PHY AQR111 and AQR111B0 as found in the GPL sources
|
|
|
|
-of the Netgear RAX120v2 firmware v1.2.8.40.
|
|
|
|
-
|
|
|
|
-This is a 5GbE chip but it reports support for 10G. Implement config_init()
|
|
|
|
-to set max speed to 5G.
|
|
|
|
-
|
|
|
|
-Signed-off-by: Thomas Kupper <[email protected]>
|
|
|
|
---- a/drivers/net/phy/aquantia/aquantia_main.c
|
|
|
|
-+++ b/drivers/net/phy/aquantia/aquantia_main.c
|
|
|
|
-@@ -24,6 +24,8 @@
|
|
|
|
- #define PHY_ID_AQR405 0x03a1b4b0
|
|
|
|
- #define PHY_ID_AQR113C 0x31c31c12
|
|
|
|
- #define PHY_ID_AQR813 0x31c31cb2
|
|
|
|
-+#define PHY_ID_AQR111 0x03a1b610
|
|
|
|
-+#define PHY_ID_AQR111B0 0x03a1b612
|
|
|
|
- #define PHY_ID_AQR112 0x03a1b662
|
|
|
|
- #define PHY_ID_AQR412 0x03a1b712
|
|
|
|
- #define PHY_ID_AQR113 0x31c31c40
|
|
|
|
-@@ -674,6 +676,34 @@ static int aqcs109_config_init(struct ph
|
|
|
|
- return aqr107_set_downshift(phydev, MDIO_AN_VEND_PROV_DOWNSHIFT_DFLT);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
-+static int aqr111_config_init(struct phy_device *phydev)
|
|
|
|
-+{
|
|
|
|
-+ int ret;
|
|
|
|
-+
|
|
|
|
-+ /* Check that the PHY interface type is compatible */
|
|
|
|
-+ if (phydev->interface != PHY_INTERFACE_MODE_SGMII &&
|
|
|
|
-+ phydev->interface != PHY_INTERFACE_MODE_1000BASEKX &&
|
|
|
|
-+ phydev->interface != PHY_INTERFACE_MODE_2500BASEX &&
|
|
|
|
-+ phydev->interface != PHY_INTERFACE_MODE_XGMII &&
|
|
|
|
-+ phydev->interface != PHY_INTERFACE_MODE_USXGMII &&
|
|
|
|
-+ phydev->interface != PHY_INTERFACE_MODE_10GKR &&
|
|
|
|
-+ phydev->interface != PHY_INTERFACE_MODE_10GBASER &&
|
|
|
|
-+ phydev->interface != PHY_INTERFACE_MODE_XAUI &&
|
|
|
|
-+ phydev->interface != PHY_INTERFACE_MODE_RXAUI)
|
|
|
|
-+ return -ENODEV;
|
|
|
|
-+
|
|
|
|
-+ WARN(phydev->interface == PHY_INTERFACE_MODE_XGMII,
|
|
|
|
-+ "Your devicetree is out of date, please update it. The AQR107 family doesn't support XGMII, maybe you mean USXGMII.\n");
|
|
|
|
-+
|
|
|
|
-+ ret = aqr107_wait_reset_complete(phydev);
|
|
|
|
-+ if (!ret)
|
|
|
|
-+ aqr107_chip_info(phydev);
|
|
|
|
-+
|
|
|
|
-+ /* AQR111 reports supporting speed up to 10G, however only speeds up to 5G are supported. */
|
|
|
|
-+ phy_set_max_speed(phydev, SPEED_5000);
|
|
|
|
-+
|
|
|
|
-+ return aqr107_set_downshift(phydev, MDIO_AN_VEND_PROV_DOWNSHIFT_DFLT);
|
|
|
|
-+}
|
|
|
|
- static void aqr107_link_change_notify(struct phy_device *phydev)
|
|
|
|
- {
|
|
|
|
- u8 fw_major, fw_minor;
|
|
|
|
-@@ -912,6 +942,42 @@ static struct phy_driver aqr_driver[] =
|
|
|
|
- .link_change_notify = aqr107_link_change_notify,
|
|
|
|
- },
|
|
|
|
- {
|
|
|
|
-+ PHY_ID_MATCH_MODEL(PHY_ID_AQR111),
|
|
|
|
-+ .name = "Aquantia AQR111",
|
|
|
|
-+ .probe = aqr107_probe,
|
|
|
|
-+ .config_init = aqr111_config_init,
|
|
|
|
-+ .config_aneg = aqr_config_aneg,
|
|
|
|
-+ .config_intr = aqr_config_intr,
|
|
|
|
-+ .handle_interrupt = aqr_handle_interrupt,
|
|
|
|
-+ .read_status = aqr107_read_status,
|
|
|
|
-+ .get_tunable = aqr107_get_tunable,
|
|
|
|
-+ .set_tunable = aqr107_set_tunable,
|
|
|
|
-+ .suspend = aqr107_suspend,
|
|
|
|
-+ .resume = aqr107_resume,
|
|
|
|
-+ .get_sset_count = aqr107_get_sset_count,
|
|
|
|
-+ .get_strings = aqr107_get_strings,
|
|
|
|
-+ .get_stats = aqr107_get_stats,
|
|
|
|
-+ .link_change_notify = aqr107_link_change_notify,
|
|
|
|
-+},
|
|
|
|
-+{
|
|
|
|
-+ PHY_ID_MATCH_MODEL(PHY_ID_AQR111B0),
|
|
|
|
-+ .name = "Aquantia AQR111B0",
|
|
|
|
-+ .probe = aqr107_probe,
|
|
|
|
-+ .config_init = aqr111_config_init,
|
|
|
|
-+ .config_aneg = aqr_config_aneg,
|
|
|
|
-+ .config_intr = aqr_config_intr,
|
|
|
|
-+ .handle_interrupt = aqr_handle_interrupt,
|
|
|
|
-+ .read_status = aqr107_read_status,
|
|
|
|
-+ .get_tunable = aqr107_get_tunable,
|
|
|
|
-+ .set_tunable = aqr107_set_tunable,
|
|
|
|
-+ .suspend = aqr107_suspend,
|
|
|
|
-+ .resume = aqr107_resume,
|
|
|
|
-+ .get_sset_count = aqr107_get_sset_count,
|
|
|
|
-+ .get_strings = aqr107_get_strings,
|
|
|
|
-+ .get_stats = aqr107_get_stats,
|
|
|
|
-+ .link_change_notify = aqr107_link_change_notify,
|
|
|
|
-+},
|
|
|
|
-+{
|
|
|
|
- PHY_ID_MATCH_MODEL(PHY_ID_AQR112),
|
|
|
|
- .name = "Aquantia AQR112",
|
|
|
|
- .probe = aqr107_probe,
|
|
|
|
-@@ -981,6 +1047,8 @@ static struct mdio_device_id __maybe_unu
|
|
|
|
- { PHY_ID_MATCH_MODEL(PHY_ID_AQR405) },
|
|
|
|
- { PHY_ID_MATCH_MODEL(PHY_ID_AQR113C) },
|
|
|
|
- { PHY_ID_MATCH_MODEL(PHY_ID_AQR813) },
|
|
|
|
-+ { PHY_ID_MATCH_MODEL(PHY_ID_AQR111) },
|
|
|
|
-+ { PHY_ID_MATCH_MODEL(PHY_ID_AQR111B0) },
|
|
|
|
- { PHY_ID_MATCH_MODEL(PHY_ID_AQR112) },
|
|
|
|
- { PHY_ID_MATCH_MODEL(PHY_ID_AQR412) },
|
|
|
|
- { PHY_ID_MATCH_MODEL(PHY_ID_AQR113) },
|
|
|