From 6543b4cef96c12903f5ec5c015cd223a6b3c9a33 Mon Sep 17 00:00:00 2001 From: John Crispin Date: Mon, 14 Dec 2015 21:16:59 +0100 Subject: [PATCH 511/513] net: mediatek: add support for the multiphy carrier patch Signed-off-by: John Crispin --- drivers/net/ethernet/mediatek/gsw_mt7620.c | 1 + drivers/net/ethernet/mediatek/gsw_mt7620.h | 1 + drivers/net/ethernet/mediatek/gsw_mt7621.c | 1 + drivers/net/ethernet/mediatek/mdio.c | 1 + drivers/net/ethernet/mediatek/mdio_mt7620.c | 12 ++++++++++++ 5 files changed, 16 insertions(+) diff --git a/drivers/net/ethernet/mediatek/gsw_mt7620.c b/drivers/net/ethernet/mediatek/gsw_mt7620.c index a37ed1b..28122ac 100644 --- a/drivers/net/ethernet/mediatek/gsw_mt7620.c +++ b/drivers/net/ethernet/mediatek/gsw_mt7620.c @@ -54,6 +54,7 @@ static irqreturn_t gsw_interrupt_mt7620(int irq, void *_priv) priv->link[i] = link; } + mt7620_handle_carrier(priv); mtk_switch_w32(gsw, status, GSW_REG_ISR); return IRQ_HANDLED; diff --git a/drivers/net/ethernet/mediatek/gsw_mt7620.h b/drivers/net/ethernet/mediatek/gsw_mt7620.h index 0d6ee84..dcef9a8 100644 --- a/drivers/net/ethernet/mediatek/gsw_mt7620.h +++ b/drivers/net/ethernet/mediatek/gsw_mt7620.h @@ -113,5 +113,6 @@ u32 mt7530_mdio_r32(struct mt7620_gsw *gsw, u32 reg); u32 _mt7620_mii_write(struct mt7620_gsw *gsw, u32 phy_addr, u32 phy_register, u32 write_data); u32 _mt7620_mii_read(struct mt7620_gsw *gsw, int phy_addr, int phy_reg); +void mt7620_handle_carrier(struct fe_priv *priv); #endif diff --git a/drivers/net/ethernet/mediatek/gsw_mt7621.c b/drivers/net/ethernet/mediatek/gsw_mt7621.c index 500841f..dc349ef 100644 --- a/drivers/net/ethernet/mediatek/gsw_mt7621.c +++ b/drivers/net/ethernet/mediatek/gsw_mt7621.c @@ -60,6 +60,7 @@ static irqreturn_t gsw_interrupt_mt7621(int irq, void *_priv) } } + mt7620_handle_carrier(priv); mt7530_mdio_w32(gsw, 0x700c, 0x1f); return IRQ_HANDLED; diff --git a/drivers/net/ethernet/mediatek/mdio.c b/drivers/net/ethernet/mediatek/mdio.c index 169c937..79a946e 100644 --- a/drivers/net/ethernet/mediatek/mdio.c +++ b/drivers/net/ethernet/mediatek/mdio.c @@ -89,6 +89,7 @@ int fe_connect_phy_node(struct fe_priv *priv, struct device_node *phy_node) phydev->supported &= PHY_GBIT_FEATURES; phydev->advertising = phydev->supported; + phydev->no_auto_carrier_off = 1; dev_info(priv->device, "connected port %d to PHY at %s [uid=%08x, driver=%s]\n", diff --git a/drivers/net/ethernet/mediatek/mdio_mt7620.c b/drivers/net/ethernet/mediatek/mdio_mt7620.c index 89c6c30..db6db52 100644 --- a/drivers/net/ethernet/mediatek/mdio_mt7620.c +++ b/drivers/net/ethernet/mediatek/mdio_mt7620.c @@ -137,6 +137,17 @@ int mt7620_has_carrier(struct fe_priv *priv) } +void mt7620_handle_carrier(struct fe_priv *priv) +{ + if (!priv->phy) + return; + + if (mt7620_has_carrier(priv)) + netif_carrier_on(priv->netdev); + else + netif_carrier_off(priv->netdev); +} + void mt7620_print_link_state(struct fe_priv *priv, int port, int link, int speed, int duplex) { @@ -153,4 +164,5 @@ void mt7620_mdio_link_adjust(struct fe_priv *priv, int port) mt7620_print_link_state(priv, port, priv->link[port], priv->phy->speed[port], (priv->phy->duplex[port] == DUPLEX_FULL)); + mt7620_handle_carrier(priv); } -- 1.7.10.4