kernel: backport fixes for realtek r8152
[openwrt/openwrt.git] / target / linux / generic / backport-5.15 / 704-13-v5.19-net-mtk_eth_soc-provide-mtk_sgmii_config.patch
1 From 1ec619ee4a052fb9ac48b57554ac2722a0bfe73c Mon Sep 17 00:00:00 2001
2 From: "Russell King (Oracle)" <rmk+kernel@armlinux.org.uk>
3 Date: Wed, 18 May 2022 15:55:02 +0100
4 Subject: [PATCH 07/12] net: mtk_eth_soc: provide mtk_sgmii_config()
5
6 Provide mtk_sgmii_config() to wrap up the decisions about which SGMII
7 configuration will be called.
8
9 Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
10 Signed-off-by: Jakub Kicinski <kuba@kernel.org>
11 ---
12 drivers/net/ethernet/mediatek/mtk_eth_soc.c | 7 +------
13 drivers/net/ethernet/mediatek/mtk_eth_soc.h | 5 ++---
14 drivers/net/ethernet/mediatek/mtk_sgmii.c | 20 +++++++++++++++++---
15 3 files changed, 20 insertions(+), 12 deletions(-)
16
17 --- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
18 +++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
19 @@ -435,12 +435,7 @@ static void mtk_mac_config(struct phylin
20 0 : mac->id;
21
22 /* Setup SGMIISYS with the determined property */
23 - if (state->interface != PHY_INTERFACE_MODE_SGMII)
24 - err = mtk_sgmii_setup_mode_force(eth->sgmii, sid,
25 - state->interface);
26 - else if (phylink_autoneg_inband(mode))
27 - err = mtk_sgmii_setup_mode_an(eth->sgmii, sid);
28 -
29 + err = mtk_sgmii_config(eth->sgmii, sid, mode, state->interface);
30 if (err)
31 goto init_err;
32
33 --- a/drivers/net/ethernet/mediatek/mtk_eth_soc.h
34 +++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.h
35 @@ -1101,9 +1101,8 @@ u32 mtk_r32(struct mtk_eth *eth, unsigne
36
37 int mtk_sgmii_init(struct mtk_sgmii *ss, struct device_node *np,
38 u32 ana_rgc3);
39 -int mtk_sgmii_setup_mode_an(struct mtk_sgmii *ss, int id);
40 -int mtk_sgmii_setup_mode_force(struct mtk_sgmii *ss, int id,
41 - phy_interface_t interface);
42 +int mtk_sgmii_config(struct mtk_sgmii *ss, int id, unsigned int mode,
43 + phy_interface_t interface);
44 void mtk_sgmii_link_up(struct mtk_sgmii *ss, int id, int speed, int duplex);
45 void mtk_sgmii_restart_an(struct mtk_eth *eth, int mac_id);
46
47 --- a/drivers/net/ethernet/mediatek/mtk_sgmii.c
48 +++ b/drivers/net/ethernet/mediatek/mtk_sgmii.c
49 @@ -35,7 +35,7 @@ int mtk_sgmii_init(struct mtk_sgmii *ss,
50 }
51
52 /* For SGMII interface mode */
53 -int mtk_sgmii_setup_mode_an(struct mtk_sgmii *ss, int id)
54 +static int mtk_sgmii_setup_mode_an(struct mtk_sgmii *ss, int id)
55 {
56 unsigned int val;
57
58 @@ -64,8 +64,8 @@ int mtk_sgmii_setup_mode_an(struct mtk_s
59 /* For 1000BASE-X and 2500BASE-X interface modes, which operate at a
60 * fixed speed.
61 */
62 -int mtk_sgmii_setup_mode_force(struct mtk_sgmii *ss, int id,
63 - phy_interface_t interface)
64 +static int mtk_sgmii_setup_mode_force(struct mtk_sgmii *ss, int id,
65 + phy_interface_t interface)
66 {
67 unsigned int val;
68
69 @@ -97,6 +97,20 @@ int mtk_sgmii_setup_mode_force(struct mt
70 return 0;
71 }
72
73 +int mtk_sgmii_config(struct mtk_sgmii *ss, int id, unsigned int mode,
74 + phy_interface_t interface)
75 +{
76 + int err = 0;
77 +
78 + /* Setup SGMIISYS with the determined property */
79 + if (interface != PHY_INTERFACE_MODE_SGMII)
80 + err = mtk_sgmii_setup_mode_force(ss, id, interface);
81 + else if (phylink_autoneg_inband(mode))
82 + err = mtk_sgmii_setup_mode_an(ss, id);
83 +
84 + return err;
85 +}
86 +
87 /* For 1000BASE-X and 2500BASE-X interface modes */
88 void mtk_sgmii_link_up(struct mtk_sgmii *ss, int id, int speed, int duplex)
89 {