[PATCH] drm/xe/vf: Mark supported firmwares as preloaded
Piotr Piórkowski
piotr.piorkowski at intel.com
Mon Apr 8 12:38:23 UTC 2024
Michal Wajdeczko <michal.wajdeczko at intel.com> wrote on czw [2024-kwi-04 19:38:14 +0200]:
> On current platforms supported firmwares, like GuC and HuC, must
> be loaded by the PF driver. Mark those firmwares as 'preloaded'
> so we will skip fetching and loading them on the VF drivers but
> still correctly report them as 'running'.
>
> Signed-off-by: Michal Wajdeczko <michal.wajdeczko at intel.com>
> ---
> drivers/gpu/drm/xe/xe_uc_fw.c | 11 +++++++++++
> drivers/gpu/drm/xe/xe_uc_fw.h | 8 ++++++--
> drivers/gpu/drm/xe/xe_uc_fw_types.h | 3 ++-
> 3 files changed, 19 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/gpu/drm/xe/xe_uc_fw.c b/drivers/gpu/drm/xe/xe_uc_fw.c
> index 6adca3a0427c..f27e96c47baa 100644
> --- a/drivers/gpu/drm/xe/xe_uc_fw.c
> +++ b/drivers/gpu/drm/xe/xe_uc_fw.c
> @@ -17,6 +17,7 @@
> #include "xe_map.h"
> #include "xe_mmio.h"
> #include "xe_module.h"
> +#include "xe_sriov.h"
> #include "xe_uc_fw.h"
>
> /*
> @@ -652,7 +653,17 @@ static int uc_fw_request(struct xe_uc_fw *uc_fw, const struct firmware **firmwar
> 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);
> diff --git a/drivers/gpu/drm/xe/xe_uc_fw.h b/drivers/gpu/drm/xe/xe_uc_fw.h
> index 85c20795d1f8..35078038797e 100644
> --- a/drivers/gpu/drm/xe/xe_uc_fw.h
> +++ b/drivers/gpu/drm/xe/xe_uc_fw.h
> @@ -59,6 +59,8 @@ const char *xe_uc_fw_status_repr(enum xe_uc_fw_status status)
> return "TRANSFERRED";
> case XE_UC_FIRMWARE_RUNNING:
> return "RUNNING";
> + case XE_UC_FIRMWARE_PRELOADED:
> + return "PRELOADED";
> }
> return "<invalid>";
> }
> @@ -85,6 +87,7 @@ static inline int xe_uc_fw_status_to_error(enum xe_uc_fw_status status)
> case XE_UC_FIRMWARE_LOADABLE:
> case XE_UC_FIRMWARE_TRANSFERRED:
> case XE_UC_FIRMWARE_RUNNING:
> + case XE_UC_FIRMWARE_PRELOADED:
> return 0;
> }
> return -EINVAL;
> @@ -134,7 +137,8 @@ static inline bool xe_uc_fw_is_available(struct xe_uc_fw *uc_fw)
>
> 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)
> @@ -144,7 +148,7 @@ 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)
> diff --git a/drivers/gpu/drm/xe/xe_uc_fw_types.h b/drivers/gpu/drm/xe/xe_uc_fw_types.h
> index bc800b696866..0d8caa0e7354 100644
> --- a/drivers/gpu/drm/xe/xe_uc_fw_types.h
> +++ b/drivers/gpu/drm/xe/xe_uc_fw_types.h
> @@ -50,7 +50,8 @@ enum xe_uc_fw_status {
> 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 */
LGTM:
Reviewed-by: Piotr Piórkowski <piotr.piorkowski at intel.com>
> };
>
> enum xe_uc_fw_type {
> --
> 2.43.0
>
--
More information about the Intel-xe
mailing list