summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--drivers/net/dsa/mt7530.c12
-rw-r--r--drivers/net/dsa/mt7530.h1
2 files changed, 9 insertions, 4 deletions
diff --git a/drivers/net/dsa/mt7530.c b/drivers/net/dsa/mt7530.c
index 749166c93aec..61962fb6dd32 100644
--- a/drivers/net/dsa/mt7530.c
+++ b/drivers/net/dsa/mt7530.c
@@ -2523,12 +2523,13 @@ static int mt7531_rgmii_setup(struct mt7530_priv *priv, u32 port,
}
static void mt7531_sgmii_validate(struct mt7530_priv *priv, int port,
+ phy_interface_t interface,
unsigned long *supported)
{
/* Port5 supports ethier RGMII or SGMII.
* Port6 supports SGMII only.
*/
- if (port == 6) {
+ if (port == 6 && interface == PHY_INTERFACE_MODE_2500BASEX) {
phylink_set(supported, 2500baseX_Full);
phylink_set(supported, 2500baseT_Full);
}
@@ -2903,16 +2904,18 @@ static void mt753x_phylink_get_caps(struct dsa_switch *ds, int port,
static void
mt7530_mac_port_validate(struct dsa_switch *ds, int port,
+ phy_interface_t interface,
unsigned long *supported)
{
}
static void mt7531_mac_port_validate(struct dsa_switch *ds, int port,
+ phy_interface_t interface,
unsigned long *supported)
{
struct mt7530_priv *priv = ds->priv;
- mt7531_sgmii_validate(priv, port, supported);
+ mt7531_sgmii_validate(priv, port, interface, supported);
}
static void
@@ -2935,12 +2938,13 @@ mt753x_phylink_validate(struct dsa_switch *ds, int port,
}
/* This switch only supports 1G full-duplex. */
- if (state->interface != PHY_INTERFACE_MODE_MII) {
+ if (state->interface != PHY_INTERFACE_MODE_MII &&
+ state->interface != PHY_INTERFACE_MODE_2500BASEX) {
phylink_set(mask, 1000baseT_Full);
phylink_set(mask, 1000baseX_Full);
}
- priv->info->mac_port_validate(ds, port, mask);
+ priv->info->mac_port_validate(ds, port, state->interface, mask);
phylink_set(mask, Pause);
phylink_set(mask, Asym_Pause);
diff --git a/drivers/net/dsa/mt7530.h b/drivers/net/dsa/mt7530.h
index cbebbcc76509..73cfd29fbb17 100644
--- a/drivers/net/dsa/mt7530.h
+++ b/drivers/net/dsa/mt7530.h
@@ -772,6 +772,7 @@ struct mt753x_info {
void (*mac_port_get_caps)(struct dsa_switch *ds, int port,
struct phylink_config *config);
void (*mac_port_validate)(struct dsa_switch *ds, int port,
+ phy_interface_t interface,
unsigned long *supported);
int (*mac_port_get_state)(struct dsa_switch *ds, int port,
struct phylink_link_state *state);