123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- From 038ba1dc4e54d51d953f5618d8eb5dd39bd9de25 Mon Sep 17 00:00:00 2001
- From: Christian Marangi <[email protected]>
- Date: Tue, 13 Feb 2024 14:35:51 +0100
- Subject: [PATCH] net: phy: aquantia: add AQR111 and AQR111B0 PHY ID
- Add Aquantia AQR111 and AQR111B0 PHY ID. These PHY advertise 10G speed
- but actually supports up to 5G speed, hence some manual fixup is needed.
- The Aquantia AQR111B0 PHY is just a variant of the AQR111 with smaller
- chip size.
- Signed-off-by: Christian Marangi <[email protected]>
- Reviewed-by: Andrew Lunn <[email protected]>
- Reviewed-by: Andrew Lunn <[email protected]>
- Link: https://lore.kernel.org/r/[email protected]
- Signed-off-by: Paolo Abeni <[email protected]>
- ---
- drivers/net/phy/aquantia/aquantia_main.c | 52 ++++++++++++++++++++++++
- 1 file changed, 52 insertions(+)
- --- a/drivers/net/phy/aquantia/aquantia_main.c
- +++ b/drivers/net/phy/aquantia/aquantia_main.c
- @@ -22,6 +22,8 @@
- #define PHY_ID_AQR107 0x03a1b4e0
- #define PHY_ID_AQCS109 0x03a1b5c2
- #define PHY_ID_AQR405 0x03a1b4b0
- +#define PHY_ID_AQR111 0x03a1b610
- +#define PHY_ID_AQR111B0 0x03a1b612
- #define PHY_ID_AQR112 0x03a1b662
- #define PHY_ID_AQR412 0x03a1b712
- #define PHY_ID_AQR113C 0x31c31c12
- @@ -672,6 +674,16 @@ static int aqr107_probe(struct phy_devic
- return aqr_hwmon_probe(phydev);
- }
-
- +static int aqr111_config_init(struct phy_device *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_config_init(phydev);
- +}
- +
- static struct phy_driver aqr_driver[] = {
- {
- PHY_ID_MATCH_MODEL(PHY_ID_AQ1202),
- @@ -746,6 +758,44 @@ 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,
- + .get_rate_matching = aqr107_get_rate_matching,
- + .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,
- + .get_rate_matching = aqr107_get_rate_matching,
- + .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_AQR405),
- .name = "Aquantia AQR405",
- .config_aneg = aqr_config_aneg,
- @@ -820,6 +870,8 @@ static struct mdio_device_id __maybe_unu
- { PHY_ID_MATCH_MODEL(PHY_ID_AQR107) },
- { PHY_ID_MATCH_MODEL(PHY_ID_AQCS109) },
- { PHY_ID_MATCH_MODEL(PHY_ID_AQR405) },
- + { 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_AQR113C) },
|