aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/net/ethernet/sfc/mcdi.c18
-rw-r--r--drivers/net/ethernet/sfc/mcdi.h2
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 */
98struct efx_mcdi_data { 99struct 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