aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net
diff options
context:
space:
mode:
authorMichael Chan <michael.chan@broadcom.com>2016-04-11 04:11:11 -0400
committerDavid S. Miller <davem@davemloft.net>2016-04-11 14:58:44 -0400
commit03efbec03198a0f505c2a6c93268c3c5df321c90 (patch)
tree69c49ff2bce5cf155fc7e3f4c737a87fa01a3ecc /drivers/net
parentbddf59046d804638d998f9015246d4990f1cab09 (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.c1
-rw-r--r--drivers/net/ethernet/broadcom/bnxt/bnxt.h1
-rw-r--r--drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c8
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
761struct bnxt_link_info { 761struct 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");