diff options
Diffstat (limited to 'drivers/net/phy/phy_device.c')
| -rw-r--r-- | drivers/net/phy/phy_device.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c index 51990002d495..46c86725a693 100644 --- a/drivers/net/phy/phy_device.c +++ b/drivers/net/phy/phy_device.c | |||
| @@ -61,6 +61,9 @@ EXPORT_SYMBOL_GPL(phy_gbit_all_ports_features); | |||
| 61 | __ETHTOOL_DECLARE_LINK_MODE_MASK(phy_10gbit_features) __ro_after_init; | 61 | __ETHTOOL_DECLARE_LINK_MODE_MASK(phy_10gbit_features) __ro_after_init; |
| 62 | EXPORT_SYMBOL_GPL(phy_10gbit_features); | 62 | EXPORT_SYMBOL_GPL(phy_10gbit_features); |
| 63 | 63 | ||
| 64 | __ETHTOOL_DECLARE_LINK_MODE_MASK(phy_10gbit_fec_features) __ro_after_init; | ||
| 65 | EXPORT_SYMBOL_GPL(phy_10gbit_fec_features); | ||
| 66 | |||
| 64 | static const int phy_basic_ports_array[] = { | 67 | static const int phy_basic_ports_array[] = { |
| 65 | ETHTOOL_LINK_MODE_Autoneg_BIT, | 68 | ETHTOOL_LINK_MODE_Autoneg_BIT, |
| 66 | ETHTOOL_LINK_MODE_TP_BIT, | 69 | ETHTOOL_LINK_MODE_TP_BIT, |
| @@ -109,6 +112,11 @@ const int phy_10gbit_features_array[1] = { | |||
| 109 | }; | 112 | }; |
| 110 | EXPORT_SYMBOL_GPL(phy_10gbit_features_array); | 113 | EXPORT_SYMBOL_GPL(phy_10gbit_features_array); |
| 111 | 114 | ||
| 115 | const int phy_10gbit_fec_features_array[1] = { | ||
| 116 | ETHTOOL_LINK_MODE_10000baseR_FEC_BIT, | ||
| 117 | }; | ||
| 118 | EXPORT_SYMBOL_GPL(phy_10gbit_fec_features_array); | ||
| 119 | |||
| 112 | __ETHTOOL_DECLARE_LINK_MODE_MASK(phy_10gbit_full_features) __ro_after_init; | 120 | __ETHTOOL_DECLARE_LINK_MODE_MASK(phy_10gbit_full_features) __ro_after_init; |
| 113 | EXPORT_SYMBOL_GPL(phy_10gbit_full_features); | 121 | EXPORT_SYMBOL_GPL(phy_10gbit_full_features); |
| 114 | 122 | ||
| @@ -191,6 +199,10 @@ static void features_init(void) | |||
| 191 | linkmode_set_bit_array(phy_10gbit_full_features_array, | 199 | linkmode_set_bit_array(phy_10gbit_full_features_array, |
| 192 | ARRAY_SIZE(phy_10gbit_full_features_array), | 200 | ARRAY_SIZE(phy_10gbit_full_features_array), |
| 193 | phy_10gbit_full_features); | 201 | phy_10gbit_full_features); |
| 202 | /* 10G FEC only */ | ||
| 203 | linkmode_set_bit_array(phy_10gbit_fec_features_array, | ||
| 204 | ARRAY_SIZE(phy_10gbit_fec_features_array), | ||
| 205 | phy_10gbit_fec_features); | ||
| 194 | } | 206 | } |
| 195 | 207 | ||
| 196 | void phy_device_free(struct phy_device *phydev) | 208 | void phy_device_free(struct phy_device *phydev) |
| @@ -2243,6 +2255,11 @@ int phy_driver_register(struct phy_driver *new_driver, struct module *owner) | |||
| 2243 | { | 2255 | { |
| 2244 | int retval; | 2256 | int retval; |
| 2245 | 2257 | ||
| 2258 | if (WARN_ON(!new_driver->features)) { | ||
| 2259 | pr_err("%s: Driver features are missing\n", new_driver->name); | ||
| 2260 | return -EINVAL; | ||
| 2261 | } | ||
| 2262 | |||
| 2246 | new_driver->mdiodrv.flags |= MDIO_DEVICE_IS_PHY; | 2263 | new_driver->mdiodrv.flags |= MDIO_DEVICE_IS_PHY; |
| 2247 | new_driver->mdiodrv.driver.name = new_driver->name; | 2264 | new_driver->mdiodrv.driver.name = new_driver->name; |
| 2248 | new_driver->mdiodrv.driver.bus = &mdio_bus_type; | 2265 | new_driver->mdiodrv.driver.bus = &mdio_bus_type; |
