sfc: Store flags from MC_CMD_DRV_ATTACH for later use
[profile/ivi/kernel-x86-ivi.git] / drivers / net / ethernet / sfc / mcdi.c
index d317dfd..d608838 100644 (file)
@@ -1132,13 +1132,27 @@ static int efx_mcdi_drv_attach(struct efx_nic *efx, bool driver_operating,
                goto fail;
        }
 
+       if (driver_operating) {
+               if (outlen >= MC_CMD_DRV_ATTACH_EXT_OUT_LEN) {
+                       efx->mcdi->fn_flags =
+                               MCDI_DWORD(outbuf,
+                                          DRV_ATTACH_EXT_OUT_FUNC_FLAGS);
+               } else {
+                       /* Synthesise flags for Siena */
+                       efx->mcdi->fn_flags =
+                               1 << MC_CMD_DRV_ATTACH_EXT_OUT_FLAG_LINKCTRL |
+                               1 << MC_CMD_DRV_ATTACH_EXT_OUT_FLAG_TRUSTED |
+                               (efx_port_num(efx) == 0) <<
+                               MC_CMD_DRV_ATTACH_EXT_OUT_FLAG_PRIMARY;
+               }
+       }
+
        /* 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) &
+           (efx->mcdi->fn_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 |