ramips: fix subtarget kernel version assignment (only mt7621 is ready for now)
[openwrt.git] / target / linux / ramips / patches-4.3 / 0511-net-mediatek-add-support-for-the-multiphy-carrier-pa.patch
1 From 6543b4cef96c12903f5ec5c015cd223a6b3c9a33 Mon Sep 17 00:00:00 2001
2 From: John Crispin <blogic@openwrt.org>
3 Date: Mon, 14 Dec 2015 21:16:59 +0100
4 Subject: [PATCH 511/513] net: mediatek: add support for the multiphy carrier
5  patch
6
7 Signed-off-by: John Crispin <blogic@openwrt.org>
8 ---
9  drivers/net/ethernet/mediatek/gsw_mt7620.c  |    1 +
10  drivers/net/ethernet/mediatek/gsw_mt7620.h  |    1 +
11  drivers/net/ethernet/mediatek/gsw_mt7621.c  |    1 +
12  drivers/net/ethernet/mediatek/mdio.c        |    1 +
13  drivers/net/ethernet/mediatek/mdio_mt7620.c |   12 ++++++++++++
14  5 files changed, 16 insertions(+)
15
16 --- a/drivers/net/ethernet/mediatek/gsw_mt7620.c
17 +++ b/drivers/net/ethernet/mediatek/gsw_mt7620.c
18 @@ -54,6 +54,7 @@ static irqreturn_t gsw_interrupt_mt7620(
19  
20                         priv->link[i] = link;
21                 }
22 +       mt7620_handle_carrier(priv);
23         mtk_switch_w32(gsw, status, GSW_REG_ISR);
24  
25         return IRQ_HANDLED;
26 --- a/drivers/net/ethernet/mediatek/gsw_mt7620.h
27 +++ b/drivers/net/ethernet/mediatek/gsw_mt7620.h
28 @@ -113,5 +113,6 @@ u32 mt7530_mdio_r32(struct mt7620_gsw *g
29  u32 _mt7620_mii_write(struct mt7620_gsw *gsw, u32 phy_addr,
30                              u32 phy_register, u32 write_data);
31  u32 _mt7620_mii_read(struct mt7620_gsw *gsw, int phy_addr, int phy_reg);
32 +void mt7620_handle_carrier(struct fe_priv *priv);
33  
34  #endif
35 --- a/drivers/net/ethernet/mediatek/gsw_mt7621.c
36 +++ b/drivers/net/ethernet/mediatek/gsw_mt7621.c
37 @@ -60,6 +60,7 @@ static irqreturn_t gsw_interrupt_mt7621(
38                         }
39                 }
40  
41 +       mt7620_handle_carrier(priv);
42         mt7530_mdio_w32(gsw, 0x700c, 0x1f);
43  
44         return IRQ_HANDLED;
45 --- a/drivers/net/ethernet/mediatek/mdio.c
46 +++ b/drivers/net/ethernet/mediatek/mdio.c
47 @@ -89,6 +89,7 @@ int fe_connect_phy_node(struct fe_priv *
48  
49         phydev->supported &= PHY_GBIT_FEATURES;
50         phydev->advertising = phydev->supported;
51 +       phydev->no_auto_carrier_off = 1;
52  
53         dev_info(priv->device,
54                  "connected port %d to PHY at %s [uid=%08x, driver=%s]\n",
55 --- a/drivers/net/ethernet/mediatek/mdio_mt7620.c
56 +++ b/drivers/net/ethernet/mediatek/mdio_mt7620.c
57 @@ -137,6 +137,17 @@ int mt7620_has_carrier(struct fe_priv *p
58  }
59  
60  
61 +void mt7620_handle_carrier(struct fe_priv *priv)
62 +{
63 +       if (!priv->phy)
64 +               return;
65 +
66 +       if (mt7620_has_carrier(priv))
67 +               netif_carrier_on(priv->netdev);
68 +       else
69 +               netif_carrier_off(priv->netdev);
70 +}
71 +
72  void mt7620_print_link_state(struct fe_priv *priv, int port, int link,
73                              int speed, int duplex)
74  {
75 @@ -153,4 +164,5 @@ void mt7620_mdio_link_adjust(struct fe_p
76         mt7620_print_link_state(priv, port, priv->link[port],
77                                 priv->phy->speed[port],
78                                 (priv->phy->duplex[port] == DUPLEX_FULL));
79 +       mt7620_handle_carrier(priv);
80  }