Commit 7a6b8f6f authored by Steve Hodgson's avatar Steve Hodgson Committed by David S. Miller

sfc: Enable autonegotiated flow-control by default if supported

Signed-off-by: default avatarBen Hutchings <bhutchings@solarflare.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 8b2103ad
...@@ -909,6 +909,8 @@ static int falcon_probe_port(struct efx_nic *efx) ...@@ -909,6 +909,8 @@ static int falcon_probe_port(struct efx_nic *efx)
efx->wanted_fc = EFX_FC_RX | EFX_FC_TX; efx->wanted_fc = EFX_FC_RX | EFX_FC_TX;
else else
efx->wanted_fc = EFX_FC_RX; efx->wanted_fc = EFX_FC_RX;
if (efx->mdio.mmds & MDIO_DEVS_AN)
efx->wanted_fc |= EFX_FC_AUTO;
/* Allocate buffer for stats */ /* Allocate buffer for stats */
rc = efx_nic_alloc_buffer(efx, &efx->stats_buffer, rc = efx_nic_alloc_buffer(efx, &efx->stats_buffer,
......
...@@ -381,6 +381,18 @@ static int efx_mcdi_phy_probe(struct efx_nic *efx) ...@@ -381,6 +381,18 @@ static int efx_mcdi_phy_probe(struct efx_nic *efx)
* but by convention we don't */ * but by convention we don't */
efx->loopback_modes &= ~(1 << LOOPBACK_NONE); efx->loopback_modes &= ~(1 << LOOPBACK_NONE);
/* Set the initial link mode */
efx_mcdi_phy_decode_link(
efx, &efx->link_state,
MCDI_DWORD(outbuf, GET_LINK_OUT_LINK_SPEED),
MCDI_DWORD(outbuf, GET_LINK_OUT_FLAGS),
MCDI_DWORD(outbuf, GET_LINK_OUT_FCNTL));
/* Default to Autonegotiated flow control if the PHY supports it */
efx->wanted_fc = EFX_FC_RX | EFX_FC_TX;
if (phy_data->supported_cap & (1 << MC_CMD_PHY_CAP_AN_LBN))
efx->wanted_fc |= EFX_FC_AUTO;
return 0; return 0;
fail: fail:
...@@ -436,7 +448,7 @@ void efx_mcdi_phy_check_fcntl(struct efx_nic *efx, u32 lpa) ...@@ -436,7 +448,7 @@ void efx_mcdi_phy_check_fcntl(struct efx_nic *efx, u32 lpa)
/* The link partner capabilities are only relevent if the /* The link partner capabilities are only relevent if the
* link supports flow control autonegotiation */ * link supports flow control autonegotiation */
if (~phy_cfg->supported_cap & (1 << MC_CMD_PHY_CAP_ASYM_LBN)) if (~phy_cfg->supported_cap & (1 << MC_CMD_PHY_CAP_AN_LBN))
return; return;
/* If flow control autoneg is supported and enabled, then fine */ /* If flow control autoneg is supported and enabled, then fine */
......
...@@ -106,16 +106,11 @@ static int siena_probe_port(struct efx_nic *efx) ...@@ -106,16 +106,11 @@ static int siena_probe_port(struct efx_nic *efx)
efx->mdio.mdio_read = siena_mdio_read; efx->mdio.mdio_read = siena_mdio_read;
efx->mdio.mdio_write = siena_mdio_write; efx->mdio.mdio_write = siena_mdio_write;
/* Fill out MDIO structure and loopback modes */ /* Fill out MDIO structure, loopback modes, and initial link state */
rc = efx->phy_op->probe(efx); rc = efx->phy_op->probe(efx);
if (rc != 0) if (rc != 0)
return rc; return rc;
/* Initial assumption */
efx->link_state.speed = 10000;
efx->link_state.fd = true;
efx->wanted_fc = EFX_FC_RX | EFX_FC_TX;
/* Allocate buffer for stats */ /* Allocate buffer for stats */
rc = efx_nic_alloc_buffer(efx, &efx->stats_buffer, rc = efx_nic_alloc_buffer(efx, &efx->stats_buffer,
MC_CMD_MAC_NSTATS * sizeof(u64)); MC_CMD_MAC_NSTATS * sizeof(u64));
......
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