generic: fix Macronix SPI-NAND driver
[openwrt/openwrt.git] / target / linux / generic / backport-5.15 / 703-04-v5.17-net-dsa-consolidate-phylink-creation.patch
1 From 21bd64bd717dedac96f53b668144cbe37d3c12d4 Mon Sep 17 00:00:00 2001
2 From: "Russell King (Oracle)" <rmk+kernel@armlinux.org.uk>
3 Date: Tue, 30 Nov 2021 13:09:55 +0000
4 Subject: [PATCH] net: dsa: consolidate phylink creation
5 MIME-Version: 1.0
6 Content-Type: text/plain; charset=UTF-8
7 Content-Transfer-Encoding: 8bit
8
9 The code in port.c and slave.c creating the phylink instance is very
10 similar - let's consolidate this into a single function.
11
12 Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
13 Reviewed-by: Marek BehĂșn <kabel@kernel.org>
14 Reviewed-by: Andrew Lunn <andrew@lunn.ch>
15 Signed-off-by: Jakub Kicinski <kuba@kernel.org>
16 ---
17 net/dsa/dsa_priv.h | 2 +-
18 net/dsa/port.c | 44 ++++++++++++++++++++++++++++----------------
19 net/dsa/slave.c | 19 +++----------------
20 3 files changed, 32 insertions(+), 33 deletions(-)
21
22 --- a/net/dsa/dsa_priv.h
23 +++ b/net/dsa/dsa_priv.h
24 @@ -261,13 +261,13 @@ int dsa_port_mrp_add_ring_role(const str
25 const struct switchdev_obj_ring_role_mrp *mrp);
26 int dsa_port_mrp_del_ring_role(const struct dsa_port *dp,
27 const struct switchdev_obj_ring_role_mrp *mrp);
28 +int dsa_port_phylink_create(struct dsa_port *dp);
29 int dsa_port_link_register_of(struct dsa_port *dp);
30 void dsa_port_link_unregister_of(struct dsa_port *dp);
31 int dsa_port_hsr_join(struct dsa_port *dp, struct net_device *hsr);
32 void dsa_port_hsr_leave(struct dsa_port *dp, struct net_device *hsr);
33 int dsa_port_tag_8021q_vlan_add(struct dsa_port *dp, u16 vid, bool broadcast);
34 void dsa_port_tag_8021q_vlan_del(struct dsa_port *dp, u16 vid, bool broadcast);
35 -extern const struct phylink_mac_ops dsa_port_phylink_mac_ops;
36
37 static inline bool dsa_port_offloads_bridge_port(struct dsa_port *dp,
38 const struct net_device *dev)
39 --- a/net/dsa/port.c
40 +++ b/net/dsa/port.c
41 @@ -1092,7 +1092,7 @@ static void dsa_port_phylink_mac_link_up
42 speed, duplex, tx_pause, rx_pause);
43 }
44
45 -const struct phylink_mac_ops dsa_port_phylink_mac_ops = {
46 +static const struct phylink_mac_ops dsa_port_phylink_mac_ops = {
47 .validate = dsa_port_phylink_validate,
48 .mac_pcs_get_state = dsa_port_phylink_mac_pcs_get_state,
49 .mac_config = dsa_port_phylink_mac_config,
50 @@ -1101,6 +1101,30 @@ const struct phylink_mac_ops dsa_port_ph
51 .mac_link_up = dsa_port_phylink_mac_link_up,
52 };
53
54 +int dsa_port_phylink_create(struct dsa_port *dp)
55 +{
56 + struct dsa_switch *ds = dp->ds;
57 + phy_interface_t mode;
58 + int err;
59 +
60 + err = of_get_phy_mode(dp->dn, &mode);
61 + if (err)
62 + mode = PHY_INTERFACE_MODE_NA;
63 +
64 + if (ds->ops->phylink_get_interfaces)
65 + ds->ops->phylink_get_interfaces(ds, dp->index,
66 + dp->pl_config.supported_interfaces);
67 +
68 + dp->pl = phylink_create(&dp->pl_config, of_fwnode_handle(dp->dn),
69 + mode, &dsa_port_phylink_mac_ops);
70 + if (IS_ERR(dp->pl)) {
71 + pr_err("error creating PHYLINK: %ld\n", PTR_ERR(dp->pl));
72 + return PTR_ERR(dp->pl);
73 + }
74 +
75 + return 0;
76 +}
77 +
78 static int dsa_port_setup_phy_of(struct dsa_port *dp, bool enable)
79 {
80 struct dsa_switch *ds = dp->ds;
81 @@ -1177,27 +1201,15 @@ static int dsa_port_phylink_register(str
82 {
83 struct dsa_switch *ds = dp->ds;
84 struct device_node *port_dn = dp->dn;
85 - phy_interface_t mode;
86 int err;
87
88 - err = of_get_phy_mode(port_dn, &mode);
89 - if (err)
90 - mode = PHY_INTERFACE_MODE_NA;
91 -
92 dp->pl_config.dev = ds->dev;
93 dp->pl_config.type = PHYLINK_DEV;
94 dp->pl_config.pcs_poll = ds->pcs_poll;
95
96 - if (ds->ops->phylink_get_interfaces)
97 - ds->ops->phylink_get_interfaces(ds, dp->index,
98 - dp->pl_config.supported_interfaces);
99 -
100 - dp->pl = phylink_create(&dp->pl_config, of_fwnode_handle(port_dn),
101 - mode, &dsa_port_phylink_mac_ops);
102 - if (IS_ERR(dp->pl)) {
103 - pr_err("error creating PHYLINK: %ld\n", PTR_ERR(dp->pl));
104 - return PTR_ERR(dp->pl);
105 - }
106 + err = dsa_port_phylink_create(dp);
107 + if (err)
108 + return err;
109
110 err = phylink_of_phy_connect(dp->pl, port_dn, 0);
111 if (err && err != -ENODEV) {
112 --- a/net/dsa/slave.c
113 +++ b/net/dsa/slave.c
114 @@ -1817,14 +1817,9 @@ static int dsa_slave_phy_setup(struct ne
115 struct dsa_port *dp = dsa_slave_to_port(slave_dev);
116 struct device_node *port_dn = dp->dn;
117 struct dsa_switch *ds = dp->ds;
118 - phy_interface_t mode;
119 u32 phy_flags = 0;
120 int ret;
121
122 - ret = of_get_phy_mode(port_dn, &mode);
123 - if (ret)
124 - mode = PHY_INTERFACE_MODE_NA;
125 -
126 dp->pl_config.dev = &slave_dev->dev;
127 dp->pl_config.type = PHYLINK_NETDEV;
128
129 @@ -1837,17 +1832,9 @@ static int dsa_slave_phy_setup(struct ne
130 dp->pl_config.poll_fixed_state = true;
131 }
132
133 - if (ds->ops->phylink_get_interfaces)
134 - ds->ops->phylink_get_interfaces(ds, dp->index,
135 - dp->pl_config.supported_interfaces);
136 -
137 - dp->pl = phylink_create(&dp->pl_config, of_fwnode_handle(port_dn), mode,
138 - &dsa_port_phylink_mac_ops);
139 - if (IS_ERR(dp->pl)) {
140 - netdev_err(slave_dev,
141 - "error creating PHYLINK: %ld\n", PTR_ERR(dp->pl));
142 - return PTR_ERR(dp->pl);
143 - }
144 + ret = dsa_port_phylink_create(dp);
145 + if (ret)
146 + return ret;
147
148 if (ds->ops->get_phy_flags)
149 phy_flags = ds->ops->get_phy_flags(ds, dp->index);