sfc: Fix post-reset MAC selection
Modify falcon_switch_mac() to always set NIC_STAT_REG, even if the the MAC is the same as it was before. This ensures that the value is correct after an online reset. Signed-off-by: Ben Hutchings <bhutchings@solarflare.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
2f08575389
commit
0cc1283879
@ -2283,16 +2283,12 @@ int falcon_switch_mac(struct efx_nic *efx)
|
||||
efx->link_fd = true;
|
||||
}
|
||||
|
||||
WARN_ON(!mutex_is_locked(&efx->mac_lock));
|
||||
efx->mac_op = (EFX_IS10G(efx) ?
|
||||
&falcon_xmac_operations : &falcon_gmac_operations);
|
||||
if (old_mac_op == efx->mac_op)
|
||||
return 0;
|
||||
|
||||
WARN_ON(!mutex_is_locked(&efx->mac_lock));
|
||||
|
||||
/* Not all macs support a mac-level link state */
|
||||
efx->mac_up = true;
|
||||
|
||||
/* Always push the NIC_STAT_REG setting even if the mac hasn't
|
||||
* changed, because this function is run post online reset */
|
||||
falcon_read(efx, &nic_stat, NIC_STAT_REG);
|
||||
strap_val = EFX_IS10G(efx) ? 5 : 3;
|
||||
if (falcon_rev(efx) >= FALCON_REV_B0) {
|
||||
@ -2305,8 +2301,13 @@ int falcon_switch_mac(struct efx_nic *efx)
|
||||
BUG_ON(EFX_OWORD_FIELD(nic_stat, STRAP_PINS) != strap_val);
|
||||
}
|
||||
|
||||
if (old_mac_op == efx->mac_op)
|
||||
return 0;
|
||||
|
||||
EFX_LOG(efx, "selected %cMAC\n", EFX_IS10G(efx) ? 'X' : 'G');
|
||||
/* Not all macs support a mac-level link state */
|
||||
efx->mac_up = true;
|
||||
|
||||
return falcon_reset_macs(efx);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user