kernel: bump 5.10 to 5.10.27
[openwrt/staging/jow.git] / target / linux / bmips / patches-5.10 / 510-net-dsa-b53-add-support-for-BCM63xx-RGMIIs.patch
1 From 32cf73d8c6485b7b97aca7e377a68436d09b7022 Mon Sep 17 00:00:00 2001
2 From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Rojas?= <noltari@gmail.com>
3 Date: Sun, 14 Mar 2021 20:03:44 +0100
4 Subject: [PATCH] net: dsa: b53: add support for BCM63xx RGMIIs
5 MIME-Version: 1.0
6 Content-Type: text/plain; charset=UTF-8
7 Content-Transfer-Encoding: 8bit
8
9 Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
10 ---
11 drivers/net/dsa/b53/b53_common.c | 37 ++++++++++++++++++++++++++++++++
12 1 file changed, 37 insertions(+)
13
14 --- a/drivers/net/dsa/b53/b53_common.c
15 +++ b/drivers/net/dsa/b53/b53_common.c
16 @@ -1148,6 +1148,36 @@ static void b53_force_port_config(struct
17 b53_write8(dev, B53_CTRL_PAGE, off, reg);
18 }
19
20 +static void b53_adjust_63xx_rgmii(struct dsa_switch *ds, int port,
21 + phy_interface_t interface)
22 +{
23 + struct b53_device *dev = ds->priv;
24 + u8 rgmii_ctrl = 0, off;
25 +
26 + if (port == 8)
27 + off = B53_RGMII_CTRL_IMP;
28 + else
29 + off = B53_RGMII_CTRL_P(port);
30 +
31 + b53_read8(dev, B53_CTRL_PAGE, off, &rgmii_ctrl);
32 +
33 + rgmii_ctrl &= ~(RGMII_CTRL_DLL_RXC | RGMII_CTRL_DLL_TXC);
34 + if (interface == PHY_INTERFACE_MODE_RGMII_ID)
35 + rgmii_ctrl |= (RGMII_CTRL_DLL_RXC | RGMII_CTRL_DLL_TXC);
36 + else if (interface == PHY_INTERFACE_MODE_RGMII_RXID)
37 + rgmii_ctrl |= RGMII_CTRL_DLL_RXC;
38 + else if (interface == PHY_INTERFACE_MODE_RGMII_TXID)
39 + rgmii_ctrl |= RGMII_CTRL_DLL_TXC;
40 +
41 + if (port != B53_CPU_PORT)
42 + rgmii_ctrl |= RGMII_CTRL_ENABLE_GMII;
43 +
44 + b53_write8(dev, B53_CTRL_PAGE, off, rgmii_ctrl);
45 +
46 + dev_info(ds->dev, "Configured port %d for %s\n", port,
47 + phy_modes(interface));
48 +}
49 +
50 static void b53_adjust_link(struct dsa_switch *ds, int port,
51 struct phy_device *phydev)
52 {
53 @@ -1174,6 +1204,9 @@ static void b53_adjust_link(struct dsa_s
54 tx_pause, rx_pause);
55 b53_force_link(dev, port, phydev->link);
56
57 + if (is63xx(dev))
58 + b53_adjust_63xx_rgmii(ds, port, phydev->interface);
59 +
60 if (is531x5(dev) && phy_interface_is_rgmii(phydev)) {
61 if (port == 8)
62 off = B53_RGMII_CTRL_IMP;
63 @@ -1366,6 +1399,9 @@ void b53_phylink_mac_link_up(struct dsa_
64 {
65 struct b53_device *dev = ds->priv;
66
67 + if (is63xx(dev) && port >= 4)
68 + b53_adjust_63xx_rgmii(ds, port, interface);
69 +
70 if (mode == MLO_AN_PHY)
71 return;
72