diff options
| author | Michael Chan <michael.chan@broadcom.com> | 2016-04-11 04:11:11 -0400 |
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2016-04-11 14:58:44 -0400 |
| commit | 03efbec03198a0f505c2a6c93268c3c5df321c90 (patch) | |
| tree | 69c49ff2bce5cf155fc7e3f4c737a87fa01a3ecc /drivers/net | |
| parent | bddf59046d804638d998f9015246d4990f1cab09 (diff) | |
bnxt_en: Disallow forced speed for 10GBaseT devices.
10GBaseT devices must autonegotiate to determine master/slave clocking.
Disallow forced speed in ethtool .set_settings() for these devices.
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net')
| -rw-r--r-- | drivers/net/ethernet/broadcom/bnxt/bnxt.c | 1 | ||||
| -rw-r--r-- | drivers/net/ethernet/broadcom/bnxt/bnxt.h | 1 | ||||
| -rw-r--r-- | drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c | 8 |
3 files changed, 10 insertions, 0 deletions
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c index 597e4724a474..a06dcaa75f6e 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c | |||
| @@ -4611,6 +4611,7 @@ static int bnxt_update_link(struct bnxt *bp, bool chng_link_state) | |||
| 4611 | link_info->phy_ver[1] = resp->phy_min; | 4611 | link_info->phy_ver[1] = resp->phy_min; |
| 4612 | link_info->phy_ver[2] = resp->phy_bld; | 4612 | link_info->phy_ver[2] = resp->phy_bld; |
| 4613 | link_info->media_type = resp->media_type; | 4613 | link_info->media_type = resp->media_type; |
| 4614 | link_info->phy_type = resp->phy_type; | ||
| 4614 | link_info->transceiver = resp->xcvr_pkg_type; | 4615 | link_info->transceiver = resp->xcvr_pkg_type; |
| 4615 | link_info->phy_addr = resp->eee_config_phy_addr & | 4616 | link_info->phy_addr = resp->eee_config_phy_addr & |
| 4616 | PORT_PHY_QCFG_RESP_PHY_ADDR_MASK; | 4617 | PORT_PHY_QCFG_RESP_PHY_ADDR_MASK; |
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.h b/drivers/net/ethernet/broadcom/bnxt/bnxt.h index cc8e38a9f684..26dac2f3c63c 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.h +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.h | |||
| @@ -759,6 +759,7 @@ struct bnxt_ntuple_filter { | |||
| 759 | }; | 759 | }; |
| 760 | 760 | ||
| 761 | struct bnxt_link_info { | 761 | struct bnxt_link_info { |
| 762 | u8 phy_type; | ||
| 762 | u8 media_type; | 763 | u8 media_type; |
| 763 | u8 transceiver; | 764 | u8 transceiver; |
| 764 | u8 phy_addr; | 765 | u8 phy_addr; |
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c b/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c index a2e93241b06b..d6e41f237f2c 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c | |||
| @@ -850,7 +850,15 @@ static int bnxt_set_settings(struct net_device *dev, struct ethtool_cmd *cmd) | |||
| 850 | set_pause = true; | 850 | set_pause = true; |
| 851 | } else { | 851 | } else { |
| 852 | u16 fw_speed; | 852 | u16 fw_speed; |
| 853 | u8 phy_type = link_info->phy_type; | ||
| 853 | 854 | ||
| 855 | if (phy_type == PORT_PHY_QCFG_RESP_PHY_TYPE_BASET || | ||
| 856 | phy_type == PORT_PHY_QCFG_RESP_PHY_TYPE_BASETE || | ||
| 857 | link_info->media_type == PORT_PHY_QCFG_RESP_MEDIA_TYPE_TP) { | ||
| 858 | netdev_err(dev, "10GBase-T devices must autoneg\n"); | ||
| 859 | rc = -EINVAL; | ||
| 860 | goto set_setting_exit; | ||
| 861 | } | ||
| 854 | /* TODO: currently don't support half duplex */ | 862 | /* TODO: currently don't support half duplex */ |
| 855 | if (cmd->duplex == DUPLEX_HALF) { | 863 | if (cmd->duplex == DUPLEX_HALF) { |
| 856 | netdev_err(dev, "HALF DUPLEX is not supported!\n"); | 864 | netdev_err(dev, "HALF DUPLEX is not supported!\n"); |
