Commit 5b502a7b authored by Russell King's avatar Russell King Committed by David S. Miller

net: dsa: propagate resolved link config via mac_link_up()

Propagate the resolved link configuration down via DSA's
phylink_mac_link_up() operation to allow split PCS/MAC to work.
Tested-by: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
Signed-off-by: default avatarRussell King <rmk+kernel@armlinux.org.uk>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 91a208f2
...@@ -1289,7 +1289,9 @@ EXPORT_SYMBOL(b53_phylink_mac_link_down); ...@@ -1289,7 +1289,9 @@ EXPORT_SYMBOL(b53_phylink_mac_link_down);
void b53_phylink_mac_link_up(struct dsa_switch *ds, int port, void b53_phylink_mac_link_up(struct dsa_switch *ds, int port,
unsigned int mode, unsigned int mode,
phy_interface_t interface, phy_interface_t interface,
struct phy_device *phydev) struct phy_device *phydev,
int speed, int duplex,
bool tx_pause, bool rx_pause)
{ {
struct b53_device *dev = ds->priv; struct b53_device *dev = ds->priv;
......
...@@ -338,7 +338,9 @@ void b53_phylink_mac_link_down(struct dsa_switch *ds, int port, ...@@ -338,7 +338,9 @@ void b53_phylink_mac_link_down(struct dsa_switch *ds, int port,
void b53_phylink_mac_link_up(struct dsa_switch *ds, int port, void b53_phylink_mac_link_up(struct dsa_switch *ds, int port,
unsigned int mode, unsigned int mode,
phy_interface_t interface, phy_interface_t interface,
struct phy_device *phydev); struct phy_device *phydev,
int speed, int duplex,
bool tx_pause, bool rx_pause);
int b53_vlan_filtering(struct dsa_switch *ds, int port, bool vlan_filtering); int b53_vlan_filtering(struct dsa_switch *ds, int port, bool vlan_filtering);
int b53_vlan_prepare(struct dsa_switch *ds, int port, int b53_vlan_prepare(struct dsa_switch *ds, int port,
const struct switchdev_obj_port_vlan *vlan); const struct switchdev_obj_port_vlan *vlan);
......
...@@ -649,7 +649,9 @@ static void bcm_sf2_sw_mac_link_down(struct dsa_switch *ds, int port, ...@@ -649,7 +649,9 @@ static void bcm_sf2_sw_mac_link_down(struct dsa_switch *ds, int port,
static void bcm_sf2_sw_mac_link_up(struct dsa_switch *ds, int port, static void bcm_sf2_sw_mac_link_up(struct dsa_switch *ds, int port,
unsigned int mode, unsigned int mode,
phy_interface_t interface, phy_interface_t interface,
struct phy_device *phydev) struct phy_device *phydev,
int speed, int duplex,
bool tx_pause, bool rx_pause)
{ {
struct bcm_sf2_priv *priv = bcm_sf2_to_priv(ds); struct bcm_sf2_priv *priv = bcm_sf2_to_priv(ds);
struct ethtool_eee *p = &priv->dev->ports[port].eee; struct ethtool_eee *p = &priv->dev->ports[port].eee;
......
...@@ -1517,7 +1517,9 @@ static void gswip_phylink_mac_link_down(struct dsa_switch *ds, int port, ...@@ -1517,7 +1517,9 @@ static void gswip_phylink_mac_link_down(struct dsa_switch *ds, int port,
static void gswip_phylink_mac_link_up(struct dsa_switch *ds, int port, static void gswip_phylink_mac_link_up(struct dsa_switch *ds, int port,
unsigned int mode, unsigned int mode,
phy_interface_t interface, phy_interface_t interface,
struct phy_device *phydev) struct phy_device *phydev,
int speed, int duplex,
bool tx_pause, bool rx_pause)
{ {
struct gswip_priv *priv = ds->priv; struct gswip_priv *priv = ds->priv;
......
...@@ -1482,7 +1482,9 @@ static void mt7530_phylink_mac_link_down(struct dsa_switch *ds, int port, ...@@ -1482,7 +1482,9 @@ static void mt7530_phylink_mac_link_down(struct dsa_switch *ds, int port,
static void mt7530_phylink_mac_link_up(struct dsa_switch *ds, int port, static void mt7530_phylink_mac_link_up(struct dsa_switch *ds, int port,
unsigned int mode, unsigned int mode,
phy_interface_t interface, phy_interface_t interface,
struct phy_device *phydev) struct phy_device *phydev,
int speed, int duplex,
bool tx_pause, bool rx_pause)
{ {
struct mt7530_priv *priv = ds->priv; struct mt7530_priv *priv = ds->priv;
......
...@@ -655,7 +655,9 @@ static void mv88e6xxx_mac_link_down(struct dsa_switch *ds, int port, ...@@ -655,7 +655,9 @@ static void mv88e6xxx_mac_link_down(struct dsa_switch *ds, int port,
static void mv88e6xxx_mac_link_up(struct dsa_switch *ds, int port, static void mv88e6xxx_mac_link_up(struct dsa_switch *ds, int port,
unsigned int mode, phy_interface_t interface, unsigned int mode, phy_interface_t interface,
struct phy_device *phydev) struct phy_device *phydev,
int speed, int duplex,
bool tx_pause, bool rx_pause)
{ {
if (mode == MLO_AN_FIXED) if (mode == MLO_AN_FIXED)
mv88e6xxx_mac_link_force(ds, port, LINK_FORCED_UP); mv88e6xxx_mac_link_force(ds, port, LINK_FORCED_UP);
......
...@@ -263,7 +263,9 @@ static void felix_phylink_mac_link_down(struct dsa_switch *ds, int port, ...@@ -263,7 +263,9 @@ static void felix_phylink_mac_link_down(struct dsa_switch *ds, int port,
static void felix_phylink_mac_link_up(struct dsa_switch *ds, int port, static void felix_phylink_mac_link_up(struct dsa_switch *ds, int port,
unsigned int link_an_mode, unsigned int link_an_mode,
phy_interface_t interface, phy_interface_t interface,
struct phy_device *phydev) struct phy_device *phydev,
int speed, int duplex,
bool tx_pause, bool rx_pause)
{ {
struct ocelot *ocelot = ds->priv; struct ocelot *ocelot = ds->priv;
struct ocelot_port *ocelot_port = ocelot->ports[port]; struct ocelot_port *ocelot_port = ocelot->ports[port];
......
...@@ -458,7 +458,9 @@ static void ar9331_sw_phylink_mac_link_down(struct dsa_switch *ds, int port, ...@@ -458,7 +458,9 @@ static void ar9331_sw_phylink_mac_link_down(struct dsa_switch *ds, int port,
static void ar9331_sw_phylink_mac_link_up(struct dsa_switch *ds, int port, static void ar9331_sw_phylink_mac_link_up(struct dsa_switch *ds, int port,
unsigned int mode, unsigned int mode,
phy_interface_t interface, phy_interface_t interface,
struct phy_device *phydev) struct phy_device *phydev,
int speed, int duplex,
bool tx_pause, bool rx_pause)
{ {
struct ar9331_sw_priv *priv = (struct ar9331_sw_priv *)ds->priv; struct ar9331_sw_priv *priv = (struct ar9331_sw_priv *)ds->priv;
struct regmap *regmap = priv->regmap; struct regmap *regmap = priv->regmap;
......
...@@ -786,7 +786,9 @@ static void sja1105_mac_link_down(struct dsa_switch *ds, int port, ...@@ -786,7 +786,9 @@ static void sja1105_mac_link_down(struct dsa_switch *ds, int port,
static void sja1105_mac_link_up(struct dsa_switch *ds, int port, static void sja1105_mac_link_up(struct dsa_switch *ds, int port,
unsigned int mode, unsigned int mode,
phy_interface_t interface, phy_interface_t interface,
struct phy_device *phydev) struct phy_device *phydev,
int speed, int duplex,
bool tx_pause, bool rx_pause)
{ {
sja1105_inhibit_tx(ds->priv, BIT(port), false); sja1105_inhibit_tx(ds->priv, BIT(port), false);
} }
......
...@@ -420,7 +420,9 @@ struct dsa_switch_ops { ...@@ -420,7 +420,9 @@ struct dsa_switch_ops {
void (*phylink_mac_link_up)(struct dsa_switch *ds, int port, void (*phylink_mac_link_up)(struct dsa_switch *ds, int port,
unsigned int mode, unsigned int mode,
phy_interface_t interface, phy_interface_t interface,
struct phy_device *phydev); struct phy_device *phydev,
int speed, int duplex,
bool tx_pause, bool rx_pause);
void (*phylink_fixed_state)(struct dsa_switch *ds, int port, void (*phylink_fixed_state)(struct dsa_switch *ds, int port,
struct phylink_link_state *state); struct phylink_link_state *state);
/* /*
......
...@@ -504,7 +504,8 @@ static void dsa_port_phylink_mac_link_up(struct phylink_config *config, ...@@ -504,7 +504,8 @@ static void dsa_port_phylink_mac_link_up(struct phylink_config *config,
return; return;
} }
ds->ops->phylink_mac_link_up(ds, dp->index, mode, interface, phydev); ds->ops->phylink_mac_link_up(ds, dp->index, mode, interface, phydev,
speed, duplex, tx_pause, rx_pause);
} }
const struct phylink_mac_ops dsa_port_phylink_mac_ops = { const struct phylink_mac_ops dsa_port_phylink_mac_ops = {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment