net: dsa: Pass pcs_poll flag from driver to PHYLINK
The DSA drivers that implement .phylink_mac_link_state should normally
register an interrupt for the PCS, from which they should call
phylink_mac_change(). However not all switches implement this, and those
who don't should set this flag in dsa_switch in the .setup callback, so
that PHYLINK will poll for a few ms until the in-band AN link timer
expires and the PCS state settles.
Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Conflicts:
include/net/dsa.h
trivially with upstream commit 05f294a85235 ("net: dsa: allocate ports
on touch") which was merged in v5.4-rc3.
(cherry picked from commit 222d888331
)
This commit is contained in:
parent
6a808586a2
commit
f19562d3ae
|
@ -277,6 +277,11 @@ struct dsa_switch {
|
|||
*/
|
||||
bool vlan_filtering;
|
||||
|
||||
/* MAC PCS does not provide link state change interrupt, and requires
|
||||
* polling. Flag passed on to PHYLINK.
|
||||
*/
|
||||
bool pcs_poll;
|
||||
|
||||
/* Dynamically allocated ports, keep last */
|
||||
size_t num_ports;
|
||||
struct dsa_port ports[];
|
||||
|
|
|
@ -601,6 +601,7 @@ static int dsa_port_phylink_register(struct dsa_port *dp)
|
|||
|
||||
dp->pl_config.dev = ds->dev;
|
||||
dp->pl_config.type = PHYLINK_DEV;
|
||||
dp->pl_config.pcs_poll = ds->pcs_poll;
|
||||
|
||||
dp->pl = phylink_create(&dp->pl_config, of_fwnode_handle(port_dn),
|
||||
mode, &dsa_port_phylink_mac_ops);
|
||||
|
|
Loading…
Reference in New Issue