net: dsa: sja1105: provide own phylink MAC operations
Convert sja1105 to provide its own phylink MAC operations, thus avoiding the shim layer in DSA's port.c Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk> Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com> Link: https://lore.kernel.org/r/E1rvIcT-006bQW-S3@rmk-PC.armlinux.org.uk Signed-off-by: Paolo Abeni <pabeni@redhat.com>
This commit is contained in:
parent
bb72159c0a
commit
0be9a1e43a
@ -1358,10 +1358,11 @@ static int sja1105_adjust_port_config(struct sja1105_private *priv, int port,
|
||||
}
|
||||
|
||||
static struct phylink_pcs *
|
||||
sja1105_mac_select_pcs(struct dsa_switch *ds, int port, phy_interface_t iface)
|
||||
sja1105_mac_select_pcs(struct phylink_config *config, phy_interface_t iface)
|
||||
{
|
||||
struct sja1105_private *priv = ds->priv;
|
||||
struct dw_xpcs *xpcs = priv->xpcs[port];
|
||||
struct dsa_port *dp = dsa_phylink_to_port(config);
|
||||
struct sja1105_private *priv = dp->ds->priv;
|
||||
struct dw_xpcs *xpcs = priv->xpcs[dp->index];
|
||||
|
||||
if (xpcs)
|
||||
return &xpcs->pcs;
|
||||
@ -1369,21 +1370,31 @@ sja1105_mac_select_pcs(struct dsa_switch *ds, int port, phy_interface_t iface)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static void sja1105_mac_link_down(struct dsa_switch *ds, int port,
|
||||
static void sja1105_mac_config(struct phylink_config *config,
|
||||
unsigned int mode,
|
||||
const struct phylink_link_state *state)
|
||||
{
|
||||
}
|
||||
|
||||
static void sja1105_mac_link_down(struct phylink_config *config,
|
||||
unsigned int mode,
|
||||
phy_interface_t interface)
|
||||
{
|
||||
sja1105_inhibit_tx(ds->priv, BIT(port), true);
|
||||
struct dsa_port *dp = dsa_phylink_to_port(config);
|
||||
|
||||
sja1105_inhibit_tx(dp->ds->priv, BIT(dp->index), true);
|
||||
}
|
||||
|
||||
static void sja1105_mac_link_up(struct dsa_switch *ds, int port,
|
||||
static void sja1105_mac_link_up(struct phylink_config *config,
|
||||
struct phy_device *phydev,
|
||||
unsigned int mode,
|
||||
phy_interface_t interface,
|
||||
struct phy_device *phydev,
|
||||
int speed, int duplex,
|
||||
bool tx_pause, bool rx_pause)
|
||||
{
|
||||
struct sja1105_private *priv = ds->priv;
|
||||
struct dsa_port *dp = dsa_phylink_to_port(config);
|
||||
struct sja1105_private *priv = dp->ds->priv;
|
||||
int port = dp->index;
|
||||
|
||||
sja1105_adjust_port_config(priv, port, speed);
|
||||
|
||||
@ -3198,6 +3209,13 @@ static void sja1105_teardown(struct dsa_switch *ds)
|
||||
sja1105_static_config_free(&priv->static_config);
|
||||
}
|
||||
|
||||
static const struct phylink_mac_ops sja1105_phylink_mac_ops = {
|
||||
.mac_select_pcs = sja1105_mac_select_pcs,
|
||||
.mac_config = sja1105_mac_config,
|
||||
.mac_link_up = sja1105_mac_link_up,
|
||||
.mac_link_down = sja1105_mac_link_down,
|
||||
};
|
||||
|
||||
static const struct dsa_switch_ops sja1105_switch_ops = {
|
||||
.get_tag_protocol = sja1105_get_tag_protocol,
|
||||
.connect_tag_protocol = sja1105_connect_tag_protocol,
|
||||
@ -3207,9 +3225,6 @@ static const struct dsa_switch_ops sja1105_switch_ops = {
|
||||
.port_change_mtu = sja1105_change_mtu,
|
||||
.port_max_mtu = sja1105_get_max_mtu,
|
||||
.phylink_get_caps = sja1105_phylink_get_caps,
|
||||
.phylink_mac_select_pcs = sja1105_mac_select_pcs,
|
||||
.phylink_mac_link_up = sja1105_mac_link_up,
|
||||
.phylink_mac_link_down = sja1105_mac_link_down,
|
||||
.get_strings = sja1105_get_strings,
|
||||
.get_ethtool_stats = sja1105_get_ethtool_stats,
|
||||
.get_sset_count = sja1105_get_sset_count,
|
||||
@ -3375,6 +3390,7 @@ static int sja1105_probe(struct spi_device *spi)
|
||||
ds->dev = dev;
|
||||
ds->num_ports = priv->info->num_ports;
|
||||
ds->ops = &sja1105_switch_ops;
|
||||
ds->phylink_mac_ops = &sja1105_phylink_mac_ops;
|
||||
ds->priv = priv;
|
||||
priv->ds = ds;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user