Commit 03efbec0 authored by Michael Chan's avatar Michael Chan Committed by David S. Miller

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: default avatarMichael Chan <michael.chan@broadcom.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent bddf5904
...@@ -4611,6 +4611,7 @@ static int bnxt_update_link(struct bnxt *bp, bool chng_link_state) ...@@ -4611,6 +4611,7 @@ static int bnxt_update_link(struct bnxt *bp, bool chng_link_state)
link_info->phy_ver[1] = resp->phy_min; link_info->phy_ver[1] = resp->phy_min;
link_info->phy_ver[2] = resp->phy_bld; link_info->phy_ver[2] = resp->phy_bld;
link_info->media_type = resp->media_type; link_info->media_type = resp->media_type;
link_info->phy_type = resp->phy_type;
link_info->transceiver = resp->xcvr_pkg_type; link_info->transceiver = resp->xcvr_pkg_type;
link_info->phy_addr = resp->eee_config_phy_addr & link_info->phy_addr = resp->eee_config_phy_addr &
PORT_PHY_QCFG_RESP_PHY_ADDR_MASK; PORT_PHY_QCFG_RESP_PHY_ADDR_MASK;
......
...@@ -759,6 +759,7 @@ struct bnxt_ntuple_filter { ...@@ -759,6 +759,7 @@ struct bnxt_ntuple_filter {
}; };
struct bnxt_link_info { struct bnxt_link_info {
u8 phy_type;
u8 media_type; u8 media_type;
u8 transceiver; u8 transceiver;
u8 phy_addr; u8 phy_addr;
......
...@@ -850,7 +850,15 @@ static int bnxt_set_settings(struct net_device *dev, struct ethtool_cmd *cmd) ...@@ -850,7 +850,15 @@ static int bnxt_set_settings(struct net_device *dev, struct ethtool_cmd *cmd)
set_pause = true; set_pause = true;
} else { } else {
u16 fw_speed; u16 fw_speed;
u8 phy_type = link_info->phy_type;
if (phy_type == PORT_PHY_QCFG_RESP_PHY_TYPE_BASET ||
phy_type == PORT_PHY_QCFG_RESP_PHY_TYPE_BASETE ||
link_info->media_type == PORT_PHY_QCFG_RESP_MEDIA_TYPE_TP) {
netdev_err(dev, "10GBase-T devices must autoneg\n");
rc = -EINVAL;
goto set_setting_exit;
}
/* TODO: currently don't support half duplex */ /* TODO: currently don't support half duplex */
if (cmd->duplex == DUPLEX_HALF) { if (cmd->duplex == DUPLEX_HALF) {
netdev_err(dev, "HALF DUPLEX is not supported!\n"); netdev_err(dev, "HALF DUPLEX is not supported!\n");
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment