mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2025-01-18 09:07:04 +07:00
qlcnic: Fix link configuration with autoneg disabled
Currently driver returns error on speed configurations for 83xx adapter's non XGBE ports, due to this link doesn't come up on the ports using 1000Base-T as a connector with autoneg disabled. This patch fixes this with initializing appropriate port type based on queried module/connector types from hardware before any speed/autoneg configuration. Signed-off-by: Manish Chopra <manish.chopra@cavium.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
d86b5672b1
commit
f9c3fe2f43
@ -3168,6 +3168,40 @@ int qlcnic_83xx_flash_read32(struct qlcnic_adapter *adapter, u32 flash_addr,
|
||||
return 0;
|
||||
}
|
||||
|
||||
void qlcnic_83xx_get_port_type(struct qlcnic_adapter *adapter)
|
||||
{
|
||||
struct qlcnic_hardware_context *ahw = adapter->ahw;
|
||||
struct qlcnic_cmd_args cmd;
|
||||
u32 config;
|
||||
int err;
|
||||
|
||||
err = qlcnic_alloc_mbx_args(&cmd, adapter, QLCNIC_CMD_GET_LINK_STATUS);
|
||||
if (err)
|
||||
return;
|
||||
|
||||
err = qlcnic_issue_cmd(adapter, &cmd);
|
||||
if (err) {
|
||||
dev_info(&adapter->pdev->dev,
|
||||
"Get Link Status Command failed: 0x%x\n", err);
|
||||
goto out;
|
||||
} else {
|
||||
config = cmd.rsp.arg[3];
|
||||
|
||||
switch (QLC_83XX_SFP_MODULE_TYPE(config)) {
|
||||
case QLC_83XX_MODULE_FIBRE_1000BASE_SX:
|
||||
case QLC_83XX_MODULE_FIBRE_1000BASE_LX:
|
||||
case QLC_83XX_MODULE_FIBRE_1000BASE_CX:
|
||||
case QLC_83XX_MODULE_TP_1000BASE_T:
|
||||
ahw->port_type = QLCNIC_GBE;
|
||||
break;
|
||||
default:
|
||||
ahw->port_type = QLCNIC_XGBE;
|
||||
}
|
||||
}
|
||||
out:
|
||||
qlcnic_free_mbx_args(&cmd);
|
||||
}
|
||||
|
||||
int qlcnic_83xx_test_link(struct qlcnic_adapter *adapter)
|
||||
{
|
||||
u8 pci_func;
|
||||
|
@ -637,6 +637,7 @@ void qlcnic_83xx_get_pauseparam(struct qlcnic_adapter *,
|
||||
int qlcnic_83xx_set_pauseparam(struct qlcnic_adapter *,
|
||||
struct ethtool_pauseparam *);
|
||||
int qlcnic_83xx_test_link(struct qlcnic_adapter *);
|
||||
void qlcnic_83xx_get_port_type(struct qlcnic_adapter *adapter);
|
||||
int qlcnic_83xx_reg_test(struct qlcnic_adapter *);
|
||||
int qlcnic_83xx_get_regs_len(struct qlcnic_adapter *);
|
||||
int qlcnic_83xx_get_registers(struct qlcnic_adapter *, u32 *);
|
||||
|
@ -486,6 +486,9 @@ static int qlcnic_set_link_ksettings(struct net_device *dev,
|
||||
u32 ret = 0;
|
||||
struct qlcnic_adapter *adapter = netdev_priv(dev);
|
||||
|
||||
if (qlcnic_83xx_check(adapter))
|
||||
qlcnic_83xx_get_port_type(adapter);
|
||||
|
||||
if (adapter->ahw->port_type != QLCNIC_GBE)
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user