diff options
author | Andrew Lunn <andrew@lunn.ch> | 2018-09-11 19:53:15 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2018-09-12 23:24:21 -0400 |
commit | af8d9bb2f2f405ad541794b46f9d7bc70f13e5cb (patch) | |
tree | 1da441f208e3228e6888456e78a7b972889ccc6d | |
parent | 41124fa64d4b298b82266b7ddbefc43540b77b44 (diff) |
net: ethernet: Add helper for MACs which support asym pause
Rather than have the MAC drivers manipulate phydev members to indicate
they support Asym Pause, add a helper function.
Signed-off-by: Andrew Lunn <andrew@lunn.ch>
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c | 4 | ||||
-rw-r--r-- | drivers/net/ethernet/apm/xgene/xgene_enet_hw.c | 4 | ||||
-rw-r--r-- | drivers/net/ethernet/broadcom/sb1250-mac.c | 5 | ||||
-rw-r--r-- | drivers/net/ethernet/broadcom/tg3.c | 8 | ||||
-rw-r--r-- | drivers/net/ethernet/cortina/gemini.c | 3 | ||||
-rw-r--r-- | drivers/net/ethernet/dnet.c | 4 | ||||
-rw-r--r-- | drivers/net/ethernet/faraday/ftgmac100.c | 3 | ||||
-rw-r--r-- | drivers/net/ethernet/freescale/dpaa/dpaa_eth.c | 3 | ||||
-rw-r--r-- | drivers/net/ethernet/freescale/gianfar.c | 4 | ||||
-rw-r--r-- | drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_mdio.c | 4 | ||||
-rw-r--r-- | drivers/net/ethernet/mediatek/mtk_eth_soc.c | 6 | ||||
-rw-r--r-- | drivers/net/ethernet/microchip/lan743x_main.c | 5 | ||||
-rw-r--r-- | drivers/net/ethernet/smsc/smsc911x.c | 3 | ||||
-rw-r--r-- | drivers/net/ethernet/smsc/smsc9420.c | 3 | ||||
-rw-r--r-- | drivers/net/ethernet/socionext/sni_ave.c | 3 | ||||
-rw-r--r-- | drivers/net/phy/phy_device.c | 13 | ||||
-rw-r--r-- | include/linux/phy.h | 1 |
17 files changed, 33 insertions, 43 deletions
diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c b/drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c index 3ceb4f95ca7c..289129011b9f 100644 --- a/drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c +++ b/drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c | |||
@@ -879,8 +879,8 @@ static bool xgbe_phy_finisar_phy_quirks(struct xgbe_prv_data *pdata) | |||
879 | phy_write(phy_data->phydev, 0x00, 0x9140); | 879 | phy_write(phy_data->phydev, 0x00, 0x9140); |
880 | 880 | ||
881 | phy_data->phydev->supported = PHY_GBIT_FEATURES; | 881 | phy_data->phydev->supported = PHY_GBIT_FEATURES; |
882 | phy_data->phydev->supported |= SUPPORTED_Pause | SUPPORTED_Asym_Pause; | ||
883 | phy_data->phydev->advertising = phy_data->phydev->supported; | 882 | phy_data->phydev->advertising = phy_data->phydev->supported; |
883 | phy_support_asym_pause(phy_data->phydev); | ||
884 | 884 | ||
885 | netif_dbg(pdata, drv, pdata->netdev, | 885 | netif_dbg(pdata, drv, pdata->netdev, |
886 | "Finisar PHY quirk in place\n"); | 886 | "Finisar PHY quirk in place\n"); |
@@ -951,8 +951,8 @@ static bool xgbe_phy_belfuse_phy_quirks(struct xgbe_prv_data *pdata) | |||
951 | phy_write(phy_data->phydev, 0x00, reg & ~0x00800); | 951 | phy_write(phy_data->phydev, 0x00, reg & ~0x00800); |
952 | 952 | ||
953 | phy_data->phydev->supported = PHY_GBIT_FEATURES; | 953 | phy_data->phydev->supported = PHY_GBIT_FEATURES; |
954 | phy_data->phydev->supported |= SUPPORTED_Pause | SUPPORTED_Asym_Pause; | ||
955 | phy_data->phydev->advertising = phy_data->phydev->supported; | 954 | phy_data->phydev->advertising = phy_data->phydev->supported; |
955 | phy_support_asym_pause(phy_data->phydev); | ||
956 | 956 | ||
957 | netif_dbg(pdata, drv, pdata->netdev, | 957 | netif_dbg(pdata, drv, pdata->netdev, |
958 | "BelFuse PHY quirk in place\n"); | 958 | "BelFuse PHY quirk in place\n"); |
diff --git a/drivers/net/ethernet/apm/xgene/xgene_enet_hw.c b/drivers/net/ethernet/apm/xgene/xgene_enet_hw.c index 4831f9de5945..e3560311711a 100644 --- a/drivers/net/ethernet/apm/xgene/xgene_enet_hw.c +++ b/drivers/net/ethernet/apm/xgene/xgene_enet_hw.c | |||
@@ -898,9 +898,7 @@ int xgene_enet_phy_connect(struct net_device *ndev) | |||
898 | phy_remove_link_mode(phy_dev, ETHTOOL_LINK_MODE_10baseT_Half_BIT); | 898 | phy_remove_link_mode(phy_dev, ETHTOOL_LINK_MODE_10baseT_Half_BIT); |
899 | phy_remove_link_mode(phy_dev, ETHTOOL_LINK_MODE_100baseT_Half_BIT); | 899 | phy_remove_link_mode(phy_dev, ETHTOOL_LINK_MODE_100baseT_Half_BIT); |
900 | phy_remove_link_mode(phy_dev, ETHTOOL_LINK_MODE_1000baseT_Half_BIT); | 900 | phy_remove_link_mode(phy_dev, ETHTOOL_LINK_MODE_1000baseT_Half_BIT); |
901 | phy_dev->supported |= SUPPORTED_Pause | | 901 | phy_support_asym_pause(phy_dev); |
902 | SUPPORTED_Asym_Pause; | ||
903 | phy_dev->advertising = phy_dev->supported; | ||
904 | 902 | ||
905 | return 0; | 903 | return 0; |
906 | } | 904 | } |
diff --git a/drivers/net/ethernet/broadcom/sb1250-mac.c b/drivers/net/ethernet/broadcom/sb1250-mac.c index 4ce4b097ec05..53acbbb36637 100644 --- a/drivers/net/ethernet/broadcom/sb1250-mac.c +++ b/drivers/net/ethernet/broadcom/sb1250-mac.c | |||
@@ -2358,13 +2358,10 @@ static int sbmac_mii_probe(struct net_device *dev) | |||
2358 | 2358 | ||
2359 | /* Remove any features not supported by the controller */ | 2359 | /* Remove any features not supported by the controller */ |
2360 | phy_set_max_speed(phy_dev, SPEED_1000); | 2360 | phy_set_max_speed(phy_dev, SPEED_1000); |
2361 | phy_dev->supported |= SUPPORTED_Pause | | 2361 | phy_support_asym_pause(phy_dev); |
2362 | SUPPORTED_Asym_Pause; | ||
2363 | 2362 | ||
2364 | phy_attached_info(phy_dev); | 2363 | phy_attached_info(phy_dev); |
2365 | 2364 | ||
2366 | phy_dev->advertising = phy_dev->supported; | ||
2367 | |||
2368 | sc->phy_dev = phy_dev; | 2365 | sc->phy_dev = phy_dev; |
2369 | 2366 | ||
2370 | return 0; | 2367 | return 0; |
diff --git a/drivers/net/ethernet/broadcom/tg3.c b/drivers/net/ethernet/broadcom/tg3.c index eab00239a47a..193e990fac7a 100644 --- a/drivers/net/ethernet/broadcom/tg3.c +++ b/drivers/net/ethernet/broadcom/tg3.c | |||
@@ -2123,15 +2123,13 @@ static int tg3_phy_init(struct tg3 *tp) | |||
2123 | case PHY_INTERFACE_MODE_RGMII: | 2123 | case PHY_INTERFACE_MODE_RGMII: |
2124 | if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) { | 2124 | if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) { |
2125 | phy_set_max_speed(phydev, SPEED_1000); | 2125 | phy_set_max_speed(phydev, SPEED_1000); |
2126 | phydev->supported |= (SUPPORTED_Pause | | 2126 | phy_support_asym_pause(phydev); |
2127 | SUPPORTED_Asym_Pause); | ||
2128 | break; | 2127 | break; |
2129 | } | 2128 | } |
2130 | /* fallthru */ | 2129 | /* fallthru */ |
2131 | case PHY_INTERFACE_MODE_MII: | 2130 | case PHY_INTERFACE_MODE_MII: |
2132 | phy_set_max_speed(phydev, SPEED_100); | 2131 | phy_set_max_speed(phydev, SPEED_100); |
2133 | phydev->supported |= (SUPPORTED_Pause | | 2132 | phy_support_asym_pause(phydev); |
2134 | SUPPORTED_Asym_Pause); | ||
2135 | break; | 2133 | break; |
2136 | default: | 2134 | default: |
2137 | phy_disconnect(mdiobus_get_phy(tp->mdio_bus, tp->phy_addr)); | 2135 | phy_disconnect(mdiobus_get_phy(tp->mdio_bus, tp->phy_addr)); |
@@ -2140,8 +2138,6 @@ static int tg3_phy_init(struct tg3 *tp) | |||
2140 | 2138 | ||
2141 | tp->phy_flags |= TG3_PHYFLG_IS_CONNECTED; | 2139 | tp->phy_flags |= TG3_PHYFLG_IS_CONNECTED; |
2142 | 2140 | ||
2143 | phydev->advertising = phydev->supported; | ||
2144 | |||
2145 | phy_attached_info(phydev); | 2141 | phy_attached_info(phydev); |
2146 | 2142 | ||
2147 | return 0; | 2143 | return 0; |
diff --git a/drivers/net/ethernet/cortina/gemini.c b/drivers/net/ethernet/cortina/gemini.c index 2b46c0de90d0..ceec467f590d 100644 --- a/drivers/net/ethernet/cortina/gemini.c +++ b/drivers/net/ethernet/cortina/gemini.c | |||
@@ -373,8 +373,7 @@ static int gmac_setup_phy(struct net_device *netdev) | |||
373 | netdev->phydev = phy; | 373 | netdev->phydev = phy; |
374 | 374 | ||
375 | phy_set_max_speed(phy, SPEED_1000); | 375 | phy_set_max_speed(phy, SPEED_1000); |
376 | phy->supported |= SUPPORTED_Asym_Pause | SUPPORTED_Pause; | 376 | phy_support_asym_pause(phy); |
377 | phy->advertising = phy->supported; | ||
378 | 377 | ||
379 | /* set PHY interface type */ | 378 | /* set PHY interface type */ |
380 | switch (phy->interface) { | 379 | switch (phy->interface) { |
diff --git a/drivers/net/ethernet/dnet.c b/drivers/net/ethernet/dnet.c index 08b7ad1594ce..79521e27f0d1 100644 --- a/drivers/net/ethernet/dnet.c +++ b/drivers/net/ethernet/dnet.c | |||
@@ -288,9 +288,7 @@ static int dnet_mii_probe(struct net_device *dev) | |||
288 | else | 288 | else |
289 | phy_set_max_speed(phydev, SPEED_100); | 289 | phy_set_max_speed(phydev, SPEED_100); |
290 | 290 | ||
291 | phydev->supported |= SUPPORTED_Asym_Pause | SUPPORTED_Pause; | 291 | phy_support_asym_pause(phydev); |
292 | |||
293 | phydev->advertising = phydev->supported; | ||
294 | 292 | ||
295 | bp->link = 0; | 293 | bp->link = 0; |
296 | bp->speed = 0; | 294 | bp->speed = 0; |
diff --git a/drivers/net/ethernet/faraday/ftgmac100.c b/drivers/net/ethernet/faraday/ftgmac100.c index ed6c76d20b45..3f319ee66ab4 100644 --- a/drivers/net/ethernet/faraday/ftgmac100.c +++ b/drivers/net/ethernet/faraday/ftgmac100.c | |||
@@ -1079,8 +1079,7 @@ static int ftgmac100_mii_probe(struct ftgmac100 *priv, phy_interface_t intf) | |||
1079 | /* Indicate that we support PAUSE frames (see comment in | 1079 | /* Indicate that we support PAUSE frames (see comment in |
1080 | * Documentation/networking/phy.txt) | 1080 | * Documentation/networking/phy.txt) |
1081 | */ | 1081 | */ |
1082 | phydev->supported |= SUPPORTED_Pause | SUPPORTED_Asym_Pause; | 1082 | phy_support_asym_pause(phydev); |
1083 | phydev->advertising = phydev->supported; | ||
1084 | 1083 | ||
1085 | /* Display what we found */ | 1084 | /* Display what we found */ |
1086 | phy_attached_info(phydev); | 1085 | phy_attached_info(phydev); |
diff --git a/drivers/net/ethernet/freescale/dpaa/dpaa_eth.c b/drivers/net/ethernet/freescale/dpaa/dpaa_eth.c index 783134f1b779..a5131a510e8b 100644 --- a/drivers/net/ethernet/freescale/dpaa/dpaa_eth.c +++ b/drivers/net/ethernet/freescale/dpaa/dpaa_eth.c | |||
@@ -2491,8 +2491,7 @@ static int dpaa_phy_init(struct net_device *net_dev) | |||
2491 | 2491 | ||
2492 | /* Remove any features not supported by the controller */ | 2492 | /* Remove any features not supported by the controller */ |
2493 | phy_dev->supported &= mac_dev->if_support; | 2493 | phy_dev->supported &= mac_dev->if_support; |
2494 | phy_dev->supported |= (SUPPORTED_Pause | SUPPORTED_Asym_Pause); | 2494 | phy_support_asym_pause(phy_dev); |
2495 | phy_dev->advertising = phy_dev->supported; | ||
2496 | 2495 | ||
2497 | mac_dev->phy_dev = phy_dev; | 2496 | mac_dev->phy_dev = phy_dev; |
2498 | net_dev->phydev = phy_dev; | 2497 | net_dev->phydev = phy_dev; |
diff --git a/drivers/net/ethernet/freescale/gianfar.c b/drivers/net/ethernet/freescale/gianfar.c index f27f9bae1a4a..40a1a87cd338 100644 --- a/drivers/net/ethernet/freescale/gianfar.c +++ b/drivers/net/ethernet/freescale/gianfar.c | |||
@@ -1814,8 +1814,8 @@ static int init_phy(struct net_device *dev) | |||
1814 | phydev->supported &= (GFAR_SUPPORTED | gigabit_support); | 1814 | phydev->supported &= (GFAR_SUPPORTED | gigabit_support); |
1815 | phydev->advertising = phydev->supported; | 1815 | phydev->advertising = phydev->supported; |
1816 | 1816 | ||
1817 | /* Add support for flow control, but don't advertise it by default */ | 1817 | /* Add support for flow control */ |
1818 | phydev->supported |= (SUPPORTED_Pause | SUPPORTED_Asym_Pause); | 1818 | phy_support_asym_pause(phydev); |
1819 | 1819 | ||
1820 | /* disable EEE autoneg, EEE not supported by eTSEC */ | 1820 | /* disable EEE autoneg, EEE not supported by eTSEC */ |
1821 | memset(&edata, 0, sizeof(struct ethtool_eee)); | 1821 | memset(&edata, 0, sizeof(struct ethtool_eee)); |
diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_mdio.c b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_mdio.c index 05b15d254e32..24b1f2a0c32a 100644 --- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_mdio.c +++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_mdio.c | |||
@@ -211,9 +211,7 @@ int hclge_mac_connect_phy(struct hclge_dev *hdev) | |||
211 | } | 211 | } |
212 | 212 | ||
213 | phydev->supported &= HCLGE_PHY_SUPPORTED_FEATURES; | 213 | phydev->supported &= HCLGE_PHY_SUPPORTED_FEATURES; |
214 | phydev->supported |= SUPPORTED_Pause | SUPPORTED_Asym_Pause; | 214 | phy_support_asym_pause(phydev); |
215 | |||
216 | phydev->advertising = phydev->supported; | ||
217 | 215 | ||
218 | return 0; | 216 | return 0; |
219 | } | 217 | } |
diff --git a/drivers/net/ethernet/mediatek/mtk_eth_soc.c b/drivers/net/ethernet/mediatek/mtk_eth_soc.c index db231bda7c2a..cc1e9a96a43b 100644 --- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c +++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c | |||
@@ -355,12 +355,8 @@ static int mtk_phy_connect(struct net_device *dev) | |||
355 | dev->phydev->speed = 0; | 355 | dev->phydev->speed = 0; |
356 | dev->phydev->duplex = 0; | 356 | dev->phydev->duplex = 0; |
357 | 357 | ||
358 | if (of_phy_is_fixed_link(mac->of_node)) | ||
359 | dev->phydev->supported |= | ||
360 | SUPPORTED_Pause | SUPPORTED_Asym_Pause; | ||
361 | |||
362 | phy_set_max_speed(dev->phydev, SPEED_1000); | 358 | phy_set_max_speed(dev->phydev, SPEED_1000); |
363 | dev->phydev->supported |= SUPPORTED_Pause | SUPPORTED_Asym_Pause; | 359 | phy_support_asym_pause(dev->phydev); |
364 | dev->phydev->advertising = dev->phydev->supported | | 360 | dev->phydev->advertising = dev->phydev->supported | |
365 | ADVERTISED_Autoneg; | 361 | ADVERTISED_Autoneg; |
366 | phy_start_aneg(dev->phydev); | 362 | phy_start_aneg(dev->phydev); |
diff --git a/drivers/net/ethernet/microchip/lan743x_main.c b/drivers/net/ethernet/microchip/lan743x_main.c index 048307959c01..b1a0e657febf 100644 --- a/drivers/net/ethernet/microchip/lan743x_main.c +++ b/drivers/net/ethernet/microchip/lan743x_main.c | |||
@@ -999,7 +999,6 @@ static int lan743x_phy_open(struct lan743x_adapter *adapter) | |||
999 | struct phy_device *phydev; | 999 | struct phy_device *phydev; |
1000 | struct net_device *netdev; | 1000 | struct net_device *netdev; |
1001 | int ret = -EIO; | 1001 | int ret = -EIO; |
1002 | u32 mii_adv; | ||
1003 | 1002 | ||
1004 | netdev = adapter->netdev; | 1003 | netdev = adapter->netdev; |
1005 | phydev = phy_find_first(adapter->mdiobus); | 1004 | phydev = phy_find_first(adapter->mdiobus); |
@@ -1016,10 +1015,8 @@ static int lan743x_phy_open(struct lan743x_adapter *adapter) | |||
1016 | phy_remove_link_mode(phydev, ETHTOOL_LINK_MODE_1000baseT_Half_BIT); | 1015 | phy_remove_link_mode(phydev, ETHTOOL_LINK_MODE_1000baseT_Half_BIT); |
1017 | 1016 | ||
1018 | /* support both flow controls */ | 1017 | /* support both flow controls */ |
1018 | phy_support_asym_pause(phydev); | ||
1019 | phy->fc_request_control = (FLOW_CTRL_RX | FLOW_CTRL_TX); | 1019 | phy->fc_request_control = (FLOW_CTRL_RX | FLOW_CTRL_TX); |
1020 | phydev->advertising &= ~(ADVERTISED_Pause | ADVERTISED_Asym_Pause); | ||
1021 | mii_adv = (u32)mii_advertise_flowctrl(phy->fc_request_control); | ||
1022 | phydev->advertising |= mii_adv_to_ethtool_adv_t(mii_adv); | ||
1023 | phy->fc_autoneg = phydev->autoneg; | 1020 | phy->fc_autoneg = phydev->autoneg; |
1024 | 1021 | ||
1025 | phy_start(phydev); | 1022 | phy_start(phydev); |
diff --git a/drivers/net/ethernet/smsc/smsc911x.c b/drivers/net/ethernet/smsc/smsc911x.c index 3e34bf53f055..c009407618d9 100644 --- a/drivers/net/ethernet/smsc/smsc911x.c +++ b/drivers/net/ethernet/smsc/smsc911x.c | |||
@@ -1051,8 +1051,7 @@ static int smsc911x_mii_probe(struct net_device *dev) | |||
1051 | phy_set_max_speed(phydev, SPEED_100); | 1051 | phy_set_max_speed(phydev, SPEED_100); |
1052 | 1052 | ||
1053 | /* mask with MAC supported features */ | 1053 | /* mask with MAC supported features */ |
1054 | phydev->supported |= (SUPPORTED_Pause | SUPPORTED_Asym_Pause); | 1054 | phy_support_asym_pause(phydev); |
1055 | phydev->advertising = phydev->supported; | ||
1056 | 1055 | ||
1057 | pdata->last_duplex = -1; | 1056 | pdata->last_duplex = -1; |
1058 | pdata->last_carrier = -1; | 1057 | pdata->last_carrier = -1; |
diff --git a/drivers/net/ethernet/smsc/smsc9420.c b/drivers/net/ethernet/smsc/smsc9420.c index 326177384544..9b6366b20110 100644 --- a/drivers/net/ethernet/smsc/smsc9420.c +++ b/drivers/net/ethernet/smsc/smsc9420.c | |||
@@ -1138,8 +1138,7 @@ static int smsc9420_mii_probe(struct net_device *dev) | |||
1138 | phy_set_max_speed(phydev, SPEED_100); | 1138 | phy_set_max_speed(phydev, SPEED_100); |
1139 | 1139 | ||
1140 | /* mask with MAC supported features */ | 1140 | /* mask with MAC supported features */ |
1141 | phydev->supported |= (SUPPORTED_Pause | SUPPORTED_Asym_Pause); | 1141 | phy_support_asym_pause(phydev); |
1142 | phydev->advertising = phydev->supported; | ||
1143 | 1142 | ||
1144 | phy_attached_info(phydev); | 1143 | phy_attached_info(phydev); |
1145 | 1144 | ||
diff --git a/drivers/net/ethernet/socionext/sni_ave.c b/drivers/net/ethernet/socionext/sni_ave.c index 76ff364c40e9..a50720ec109c 100644 --- a/drivers/net/ethernet/socionext/sni_ave.c +++ b/drivers/net/ethernet/socionext/sni_ave.c | |||
@@ -1225,7 +1225,8 @@ static int ave_init(struct net_device *ndev) | |||
1225 | 1225 | ||
1226 | if (!phy_interface_is_rgmii(phydev)) | 1226 | if (!phy_interface_is_rgmii(phydev)) |
1227 | phy_set_max_speed(phydev, SPEED_100); | 1227 | phy_set_max_speed(phydev, SPEED_100); |
1228 | phydev->supported |= SUPPORTED_Pause | SUPPORTED_Asym_Pause; | 1228 | |
1229 | phy_support_asym_pause(phydev); | ||
1229 | 1230 | ||
1230 | phy_attached_info(phydev); | 1231 | phy_attached_info(phydev); |
1231 | 1232 | ||
diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c index e9ca83a438b0..a0646a66f005 100644 --- a/drivers/net/phy/phy_device.c +++ b/drivers/net/phy/phy_device.c | |||
@@ -1783,6 +1783,19 @@ void phy_remove_link_mode(struct phy_device *phydev, u32 link_mode) | |||
1783 | } | 1783 | } |
1784 | EXPORT_SYMBOL(phy_remove_link_mode); | 1784 | EXPORT_SYMBOL(phy_remove_link_mode); |
1785 | 1785 | ||
1786 | /** | ||
1787 | * phy_support_asym_pause - Enable support of asym pause | ||
1788 | * @phydev: target phy_device struct | ||
1789 | * | ||
1790 | * Description: Called by the MAC to indicate is supports Asym Pause. | ||
1791 | */ | ||
1792 | void phy_support_asym_pause(struct phy_device *phydev) | ||
1793 | { | ||
1794 | phydev->supported |= SUPPORTED_Pause | SUPPORTED_Asym_Pause; | ||
1795 | phydev->advertising = phydev->supported; | ||
1796 | } | ||
1797 | EXPORT_SYMBOL(phy_support_asym_pause); | ||
1798 | |||
1786 | static void of_set_phy_supported(struct phy_device *phydev) | 1799 | static void of_set_phy_supported(struct phy_device *phydev) |
1787 | { | 1800 | { |
1788 | struct device_node *node = phydev->mdio.dev.of_node; | 1801 | struct device_node *node = phydev->mdio.dev.of_node; |
diff --git a/include/linux/phy.h b/include/linux/phy.h index 9c4c3eca8cf2..e2db819807c1 100644 --- a/include/linux/phy.h +++ b/include/linux/phy.h | |||
@@ -1050,6 +1050,7 @@ int phy_start_interrupts(struct phy_device *phydev); | |||
1050 | void phy_print_status(struct phy_device *phydev); | 1050 | void phy_print_status(struct phy_device *phydev); |
1051 | int phy_set_max_speed(struct phy_device *phydev, u32 max_speed); | 1051 | int phy_set_max_speed(struct phy_device *phydev, u32 max_speed); |
1052 | void phy_remove_link_mode(struct phy_device *phydev, u32 link_mode); | 1052 | void phy_remove_link_mode(struct phy_device *phydev, u32 link_mode); |
1053 | void phy_support_asym_pause(struct phy_device *phydev); | ||
1053 | 1054 | ||
1054 | int phy_register_fixup(const char *bus_id, u32 phy_uid, u32 phy_uid_mask, | 1055 | int phy_register_fixup(const char *bus_id, u32 phy_uid, u32 phy_uid_mask, |
1055 | int (*run)(struct phy_device *)); | 1056 | int (*run)(struct phy_device *)); |