mirror of https://gitee.com/openkylin/linux.git
sfc: Only bind to EF10 functions with the LinkCtrl and Trusted flags
Although we do not yet enable multiple PFs per port, it is possible that a board will be reconfigured to enable them while the driver has not yet been updated to fully support this. The most obvious problem is that multiple functions may try to set conflicting link settings. But we will also run into trouble if the firmware doesn't consider us fully trusted. So, abort probing unless both the LinkCtrl and Trusted flags are set for this function. Signed-off-by: Ben Hutchings <bhutchings@solarflare.com>
This commit is contained in:
parent
568d7a001b
commit
ecb1c9cc21
|
@ -963,7 +963,7 @@ static int efx_mcdi_drv_attach(struct efx_nic *efx, bool driver_operating,
|
|||
bool *was_attached)
|
||||
{
|
||||
MCDI_DECLARE_BUF(inbuf, MC_CMD_DRV_ATTACH_IN_LEN);
|
||||
MCDI_DECLARE_BUF(outbuf, MC_CMD_DRV_ATTACH_OUT_LEN);
|
||||
MCDI_DECLARE_BUF(outbuf, MC_CMD_DRV_ATTACH_EXT_OUT_LEN);
|
||||
size_t outlen;
|
||||
int rc;
|
||||
|
||||
|
@ -981,6 +981,22 @@ static int efx_mcdi_drv_attach(struct efx_nic *efx, bool driver_operating,
|
|||
goto fail;
|
||||
}
|
||||
|
||||
/* We currently assume we have control of the external link
|
||||
* and are completely trusted by firmware. Abort probing
|
||||
* if that's not true for this function.
|
||||
*/
|
||||
if (driver_operating &&
|
||||
outlen >= MC_CMD_DRV_ATTACH_EXT_OUT_LEN &&
|
||||
(MCDI_DWORD(outbuf, DRV_ATTACH_EXT_OUT_FUNC_FLAGS) &
|
||||
(1 << MC_CMD_DRV_ATTACH_EXT_OUT_FLAG_LINKCTRL |
|
||||
1 << MC_CMD_DRV_ATTACH_EXT_OUT_FLAG_TRUSTED)) !=
|
||||
(1 << MC_CMD_DRV_ATTACH_EXT_OUT_FLAG_LINKCTRL |
|
||||
1 << MC_CMD_DRV_ATTACH_EXT_OUT_FLAG_TRUSTED)) {
|
||||
netif_err(efx, probe, efx->net_dev,
|
||||
"This driver version only supports one function per port\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
if (was_attached != NULL)
|
||||
*was_attached = MCDI_DWORD(outbuf, DRV_ATTACH_OUT_OLD_STATE);
|
||||
return 0;
|
||||
|
|
Loading…
Reference in New Issue