#include "xe_map.h"
 #include "xe_mmio.h"
 #include "xe_module.h"
+#include "xe_sriov.h"
 #include "xe_uc_fw.h"
 
 /*
        xe_assert(xe, !uc_fw->path);
 
        uc_fw_auto_select(xe, uc_fw);
+
+       if (IS_SRIOV_VF(xe)) {
+               /* VF will support only firmwares that driver can autoselect */
+               xe_uc_fw_change_status(uc_fw, uc_fw->path ?
+                                      XE_UC_FIRMWARE_PRELOADED :
+                                      XE_UC_FIRMWARE_NOT_SUPPORTED);
+               return 0;
+       }
+
        uc_fw_override(uc_fw);
+
        xe_uc_fw_change_status(uc_fw, uc_fw->path ?
                               XE_UC_FIRMWARE_SELECTED :
                               XE_UC_FIRMWARE_NOT_SUPPORTED);
 
                return "TRANSFERRED";
        case XE_UC_FIRMWARE_RUNNING:
                return "RUNNING";
+       case XE_UC_FIRMWARE_PRELOADED:
+               return "PRELOADED";
        }
        return "<invalid>";
 }
        case XE_UC_FIRMWARE_LOADABLE:
        case XE_UC_FIRMWARE_TRANSFERRED:
        case XE_UC_FIRMWARE_RUNNING:
+       case XE_UC_FIRMWARE_PRELOADED:
                return 0;
        }
        return -EINVAL;
 
 static inline bool xe_uc_fw_is_loadable(struct xe_uc_fw *uc_fw)
 {
-       return __xe_uc_fw_status(uc_fw) >= XE_UC_FIRMWARE_LOADABLE;
+       return __xe_uc_fw_status(uc_fw) >= XE_UC_FIRMWARE_LOADABLE &&
+               __xe_uc_fw_status(uc_fw) != XE_UC_FIRMWARE_PRELOADED;
 }
 
 static inline bool xe_uc_fw_is_loaded(struct xe_uc_fw *uc_fw)
 
 static inline bool xe_uc_fw_is_running(struct xe_uc_fw *uc_fw)
 {
-       return __xe_uc_fw_status(uc_fw) == XE_UC_FIRMWARE_RUNNING;
+       return __xe_uc_fw_status(uc_fw) >= XE_UC_FIRMWARE_RUNNING;
 }
 
 static inline bool xe_uc_fw_is_overridden(const struct xe_uc_fw *uc_fw)
 
        XE_UC_FIRMWARE_LOADABLE, /* all fw-required objects are ready */
        XE_UC_FIRMWARE_LOAD_FAIL, /* failed to xfer or init/auth the fw */
        XE_UC_FIRMWARE_TRANSFERRED, /* dma xfer done */
-       XE_UC_FIRMWARE_RUNNING /* init/auth done */
+       XE_UC_FIRMWARE_RUNNING, /* init/auth done */
+       XE_UC_FIRMWARE_PRELOADED, /* preloaded by the PF driver */
 };
 
 enum xe_uc_fw_type {