diff --git a/target/linux/ramips/files-4.14/drivers/net/ethernet/mediatek/soc_mt7620.c b/target/linux/ramips/files-4.14/drivers/net/ethernet/mediatek/soc_mt7620.c index da8e71c21e..fb2d45a56e 100644 --- a/target/linux/ramips/files-4.14/drivers/net/ethernet/mediatek/soc_mt7620.c +++ b/target/linux/ramips/files-4.14/drivers/net/ethernet/mediatek/soc_mt7620.c @@ -118,7 +118,7 @@ static void mt7620_set_mac(struct fe_priv *priv, unsigned char *mac) spin_unlock_irqrestore(&priv->page_lock, flags); } -static void mt7620_auto_poll(struct mt7620_gsw *gsw) +static void mt7620_auto_poll(struct mt7620_gsw *gsw, int port) { int phy; int lsb = -1, msb = 0; @@ -129,7 +129,9 @@ static void mt7620_auto_poll(struct mt7620_gsw *gsw) msb = phy; } - if (lsb == msb) + if (lsb == msb && port == 4) + msb++; + else if (lsb == msb && port == 5) lsb--; mtk_switch_w32(gsw, PHY_AN_EN | PHY_PRE_EN | PMY_MDC_CONF(5) | @@ -242,8 +244,8 @@ static void mt7620_port_init(struct fe_priv *priv, struct device_node *np) mtk_switch_w32(gsw, val, GSW_REG_PORT_PMCR(id)); fe_connect_phy_node(priv, priv->phy->phy_node[id], id); - gsw->autopoll |= BIT(id); - mt7620_auto_poll(gsw); + gsw->autopoll |= BIT(be32_to_cpup(phy_addr)); + mt7620_auto_poll(gsw,id); return; } }