00788d42fc5cdf6108c8f6314b3f5cd93c38fdc7
[openwrt/openwrt.git] /
1 From a219912e0fec73c346e64ef47013cb2e152f88fc Mon Sep 17 00:00:00 2001
2 From: "Russell King (Oracle)" <rmk+kernel@armlinux.org.uk>
3 Date: Tue, 3 Dec 2024 15:31:23 +0000
4 Subject: [PATCH 08/13] net: phy: marvell: implement config_inband() method
5
6 Implement the config_inband() method for Marvell 88E1112, 88E1111,
7 and Finisar's 88E1111 variant.
8
9 Reviewed-by: Andrew Lunn <andrew@lunn.ch>
10 Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
11 Link: https://patch.msgid.link/E1tIUrz-006IUO-3r@rmk-PC.armlinux.org.uk
12 Signed-off-by: Jakub Kicinski <kuba@kernel.org>
13 ---
14 drivers/net/phy/marvell.c | 31 +++++++++++++++++++++++++++++++
15 1 file changed, 31 insertions(+)
16
17 --- a/drivers/net/phy/marvell.c
18 +++ b/drivers/net/phy/marvell.c
19 @@ -730,6 +730,34 @@ static unsigned int m88e1111_inband_caps
20 return 0;
21 }
22
23 +static int m88e1111_config_inband(struct phy_device *phydev, unsigned int modes)
24 +{
25 + u16 extsr, bmcr;
26 + int err;
27 +
28 + if (phydev->interface != PHY_INTERFACE_MODE_1000BASEX &&
29 + phydev->interface != PHY_INTERFACE_MODE_SGMII)
30 + return -EINVAL;
31 +
32 + if (modes == LINK_INBAND_BYPASS)
33 + extsr = MII_M1111_HWCFG_SERIAL_AN_BYPASS;
34 + else
35 + extsr = 0;
36 +
37 + if (modes == LINK_INBAND_DISABLE)
38 + bmcr = 0;
39 + else
40 + bmcr = BMCR_ANENABLE;
41 +
42 + err = phy_modify(phydev, MII_M1111_PHY_EXT_SR,
43 + MII_M1111_HWCFG_SERIAL_AN_BYPASS, extsr);
44 + if (err < 0)
45 + return extsr;
46 +
47 + return phy_modify_paged(phydev, MII_MARVELL_FIBER_PAGE, MII_BMCR,
48 + BMCR_ANENABLE, bmcr);
49 +}
50 +
51 static int m88e1111_config_aneg(struct phy_device *phydev)
52 {
53 int extsr = phy_read(phydev, MII_M1111_PHY_EXT_SR);
54 @@ -3682,6 +3710,7 @@ static struct phy_driver marvell_drivers
55 /* PHY_GBIT_FEATURES */
56 .probe = marvell_probe,
57 .inband_caps = m88e1111_inband_caps,
58 + .config_inband = m88e1111_config_inband,
59 .config_init = m88e1112_config_init,
60 .config_aneg = marvell_config_aneg,
61 .config_intr = marvell_config_intr,
62 @@ -3704,6 +3733,7 @@ static struct phy_driver marvell_drivers
63 .flags = PHY_POLL_CABLE_TEST,
64 .probe = marvell_probe,
65 .inband_caps = m88e1111_inband_caps,
66 + .config_inband = m88e1111_config_inband,
67 .config_init = m88e1111gbe_config_init,
68 .config_aneg = m88e1111_config_aneg,
69 .read_status = marvell_read_status,
70 @@ -3728,6 +3758,7 @@ static struct phy_driver marvell_drivers
71 /* PHY_GBIT_FEATURES */
72 .probe = marvell_probe,
73 .inband_caps = m88e1111_inband_caps,
74 + .config_inband = m88e1111_config_inband,
75 .config_init = m88e1111gbe_config_init,
76 .config_aneg = m88e1111_config_aneg,
77 .read_status = marvell_read_status,