diff options
| -rw-r--r-- | drivers/net/ethernet/sfc/mcdi.c | 18 | ||||
| -rw-r--r-- | drivers/net/ethernet/sfc/mcdi.h | 2 |
2 files changed, 18 insertions, 2 deletions
diff --git a/drivers/net/ethernet/sfc/mcdi.c b/drivers/net/ethernet/sfc/mcdi.c index d317dfdee845..d608838f6729 100644 --- a/drivers/net/ethernet/sfc/mcdi.c +++ b/drivers/net/ethernet/sfc/mcdi.c | |||
| @@ -1132,13 +1132,27 @@ static int efx_mcdi_drv_attach(struct efx_nic *efx, bool driver_operating, | |||
| 1132 | goto fail; | 1132 | goto fail; |
| 1133 | } | 1133 | } |
| 1134 | 1134 | ||
| 1135 | if (driver_operating) { | ||
| 1136 | if (outlen >= MC_CMD_DRV_ATTACH_EXT_OUT_LEN) { | ||
| 1137 | efx->mcdi->fn_flags = | ||
| 1138 | MCDI_DWORD(outbuf, | ||
| 1139 | DRV_ATTACH_EXT_OUT_FUNC_FLAGS); | ||
| 1140 | } else { | ||
| 1141 | /* Synthesise flags for Siena */ | ||
| 1142 | efx->mcdi->fn_flags = | ||
| 1143 | 1 << MC_CMD_DRV_ATTACH_EXT_OUT_FLAG_LINKCTRL | | ||
| 1144 | 1 << MC_CMD_DRV_ATTACH_EXT_OUT_FLAG_TRUSTED | | ||
| 1145 | (efx_port_num(efx) == 0) << | ||
| 1146 | MC_CMD_DRV_ATTACH_EXT_OUT_FLAG_PRIMARY; | ||
| 1147 | } | ||
| 1148 | } | ||
| 1149 | |||
| 1135 | /* We currently assume we have control of the external link | 1150 | /* We currently assume we have control of the external link |
| 1136 | * and are completely trusted by firmware. Abort probing | 1151 | * and are completely trusted by firmware. Abort probing |
| 1137 | * if that's not true for this function. | 1152 | * if that's not true for this function. |
| 1138 | */ | 1153 | */ |
| 1139 | if (driver_operating && | 1154 | if (driver_operating && |
| 1140 | outlen >= MC_CMD_DRV_ATTACH_EXT_OUT_LEN && | 1155 | (efx->mcdi->fn_flags & |
| 1141 | (MCDI_DWORD(outbuf, DRV_ATTACH_EXT_OUT_FUNC_FLAGS) & | ||
| 1142 | (1 << MC_CMD_DRV_ATTACH_EXT_OUT_FLAG_LINKCTRL | | 1156 | (1 << MC_CMD_DRV_ATTACH_EXT_OUT_FLAG_LINKCTRL | |
| 1143 | 1 << MC_CMD_DRV_ATTACH_EXT_OUT_FLAG_TRUSTED)) != | 1157 | 1 << MC_CMD_DRV_ATTACH_EXT_OUT_FLAG_TRUSTED)) != |
| 1144 | (1 << MC_CMD_DRV_ATTACH_EXT_OUT_FLAG_LINKCTRL | | 1158 | (1 << MC_CMD_DRV_ATTACH_EXT_OUT_FLAG_LINKCTRL | |
diff --git a/drivers/net/ethernet/sfc/mcdi.h b/drivers/net/ethernet/sfc/mcdi.h index 171f5f58f84a..52931aebf3c3 100644 --- a/drivers/net/ethernet/sfc/mcdi.h +++ b/drivers/net/ethernet/sfc/mcdi.h | |||
| @@ -94,12 +94,14 @@ struct efx_mcdi_mtd_partition { | |||
| 94 | * struct efx_mcdi_data - extra state for NICs that implement MCDI | 94 | * struct efx_mcdi_data - extra state for NICs that implement MCDI |
| 95 | * @iface: Interface/protocol state | 95 | * @iface: Interface/protocol state |
| 96 | * @hwmon: Hardware monitor state | 96 | * @hwmon: Hardware monitor state |
| 97 | * @fn_flags: Flags for this function, as returned by %MC_CMD_DRV_ATTACH. | ||
| 97 | */ | 98 | */ |
| 98 | struct efx_mcdi_data { | 99 | struct efx_mcdi_data { |
| 99 | struct efx_mcdi_iface iface; | 100 | struct efx_mcdi_iface iface; |
| 100 | #ifdef CONFIG_SFC_MCDI_MON | 101 | #ifdef CONFIG_SFC_MCDI_MON |
| 101 | struct efx_mcdi_mon hwmon; | 102 | struct efx_mcdi_mon hwmon; |
| 102 | #endif | 103 | #endif |
| 104 | u32 fn_flags; | ||
| 103 | }; | 105 | }; |
| 104 | 106 | ||
| 105 | #ifdef CONFIG_SFC_MCDI_MON | 107 | #ifdef CONFIG_SFC_MCDI_MON |
