Re: [Intel-gfx] [CI 1/2] drm/i915/uc: Support for version reduced and multiple firmware files

2022-11-22 Thread John Harrison

On 11/22/2022 06:12, Jani Nikula wrote:

On Tue, 06 Sep 2022, Daniele Ceraolo Spurio  
wrote:

From: John Harrison 

There was a misunderstanding in how firmware file compatibility should
be managed within i915. This has been clarified as:
   i915 must support all existing firmware releases forever
   new minor firmware releases should replace prior versions
   only backwards compatibility breaking releases should be a new file

This patch cleans up the single fallback file support that was added
as a quick fix emergency effort. That is now removed in preference to
supporting arbitrary numbers of firmware files per platform.

The patch also adds support for having GuC firmware files that are
named by major version only (because the major version indicates
backwards breaking changes that affect the KMD) and for having HuC
firmware files with no version number at all (because the KMD has no
interface requirements with the HuC).

For GuC, the driver will report via dmesg if the found file is older than
expected. For HuC, the KMD will no longer require updating for any new
HuC release so will not be able to report what the latest expected
version is.

Signed-off-by: John Harrison 
Reviewed-by: Daniele Ceraolo Spurio 

I have some wip tools that I occasionally run to spot issues in the
driver. One of the checks is for global data, i.e. data specific to
module, not the device [1].

It flags things like:


+   static bool verified;

added in this commit.

It's kind of benign, but also makes you wonder why the check is only
ever run on the first firmware (type?) of the first device probed. IIUC.
It is validating the firmware table in the driver. So it only needs to 
be done once per driver load, not per device. However, it should be done 
for each firmware type. Looks like that got missed.


The long term plan is to turn this into a sefltest (it is already only 
compiled in if self tests are enabled). I recall there was some issue 
why it didn't fit in the selftest framework before, although I don't 
recall the details.


Will take a look at fixing it...

Thanks,
John.





Usually I just fix the stuff, but I don't get this one.


BR,
Jani.


[1] 'make; i915-check data' https://gitlab.freedesktop.org/jani/i915-check


---
  .../gpu/drm/i915/gt/uc/intel_guc_submission.c |  10 +-
  drivers/gpu/drm/i915/gt/uc/intel_uc.c |   4 +-
  drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c  | 442 --
  drivers/gpu/drm/i915/gt/uc/intel_uc_fw.h  |  33 +-
  drivers/gpu/drm/i915/i915_gpu_error.c |  16 +-
  5 files changed, 319 insertions(+), 186 deletions(-)

diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c 
b/drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c
index 0d56b615bf78..04393932623c 100644
--- a/drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c
+++ b/drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c
@@ -1868,7 +1868,7 @@ int intel_guc_submission_init(struct intel_guc *guc)
if (guc->submission_initialized)
return 0;
  
-	if (guc->fw.major_ver_found < 70) {

+   if (guc->fw.file_selected.major_ver < 70) {
ret = guc_lrc_desc_pool_create_v69(guc);
if (ret)
return ret;
@@ -2303,7 +2303,7 @@ static int register_context(struct intel_context *ce, 
bool loop)
GEM_BUG_ON(intel_context_is_child(ce));
trace_intel_context_register(ce);
  
-	if (guc->fw.major_ver_found >= 70)

+   if (guc->fw.file_selected.major_ver >= 70)
ret = register_context_v70(guc, ce, loop);
else
ret = register_context_v69(guc, ce, loop);
@@ -2315,7 +2315,7 @@ static int register_context(struct intel_context *ce, 
bool loop)
set_context_registered(ce);
spin_unlock_irqrestore(>guc_state.lock, flags);
  
-		if (guc->fw.major_ver_found >= 70)

+   if (guc->fw.file_selected.major_ver >= 70)
guc_context_policy_init_v70(ce, loop);
}
  
@@ -2921,7 +2921,7 @@ static void __guc_context_set_preemption_timeout(struct intel_guc *guc,

 u16 guc_id,
 u32 preemption_timeout)
  {
-   if (guc->fw.major_ver_found >= 70) {
+   if (guc->fw.file_selected.major_ver >= 70) {
struct context_policy policy;
  
  		__guc_context_policy_start_klv(, guc_id);

@@ -3186,7 +3186,7 @@ static int guc_context_alloc(struct intel_context *ce)
  static void __guc_context_set_prio(struct intel_guc *guc,
   struct intel_context *ce)
  {
-   if (guc->fw.major_ver_found >= 70) {
+   if (guc->fw.file_selected.major_ver >= 70) {
struct context_policy policy;
  
  		__guc_context_policy_start_klv(, ce->guc_id.id);

diff --git a/drivers/gpu/drm/i915/gt/uc/intel_uc.c 
b/drivers/gpu/drm/i915/gt/uc/intel_uc.c
index f2e7c82985ef..d965ac4832d6 100644
--- 

Re: [Intel-gfx] [CI 1/2] drm/i915/uc: Support for version reduced and multiple firmware files

2022-11-22 Thread Jani Nikula
On Tue, 06 Sep 2022, Daniele Ceraolo Spurio  
wrote:
> From: John Harrison 
>
> There was a misunderstanding in how firmware file compatibility should
> be managed within i915. This has been clarified as:
>   i915 must support all existing firmware releases forever
>   new minor firmware releases should replace prior versions
>   only backwards compatibility breaking releases should be a new file
>
> This patch cleans up the single fallback file support that was added
> as a quick fix emergency effort. That is now removed in preference to
> supporting arbitrary numbers of firmware files per platform.
>
> The patch also adds support for having GuC firmware files that are
> named by major version only (because the major version indicates
> backwards breaking changes that affect the KMD) and for having HuC
> firmware files with no version number at all (because the KMD has no
> interface requirements with the HuC).
>
> For GuC, the driver will report via dmesg if the found file is older than
> expected. For HuC, the KMD will no longer require updating for any new
> HuC release so will not be able to report what the latest expected
> version is.
>
> Signed-off-by: John Harrison 
> Reviewed-by: Daniele Ceraolo Spurio 

I have some wip tools that I occasionally run to spot issues in the
driver. One of the checks is for global data, i.e. data specific to
module, not the device [1].

It flags things like:

> + static bool verified;

added in this commit.

It's kind of benign, but also makes you wonder why the check is only
ever run on the first firmware (type?) of the first device probed. IIUC.

Usually I just fix the stuff, but I don't get this one.


BR,
Jani.


[1] 'make; i915-check data' https://gitlab.freedesktop.org/jani/i915-check

> ---
>  .../gpu/drm/i915/gt/uc/intel_guc_submission.c |  10 +-
>  drivers/gpu/drm/i915/gt/uc/intel_uc.c |   4 +-
>  drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c  | 442 --
>  drivers/gpu/drm/i915/gt/uc/intel_uc_fw.h  |  33 +-
>  drivers/gpu/drm/i915/i915_gpu_error.c |  16 +-
>  5 files changed, 319 insertions(+), 186 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c 
> b/drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c
> index 0d56b615bf78..04393932623c 100644
> --- a/drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c
> +++ b/drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c
> @@ -1868,7 +1868,7 @@ int intel_guc_submission_init(struct intel_guc *guc)
>   if (guc->submission_initialized)
>   return 0;
>  
> - if (guc->fw.major_ver_found < 70) {
> + if (guc->fw.file_selected.major_ver < 70) {
>   ret = guc_lrc_desc_pool_create_v69(guc);
>   if (ret)
>   return ret;
> @@ -2303,7 +2303,7 @@ static int register_context(struct intel_context *ce, 
> bool loop)
>   GEM_BUG_ON(intel_context_is_child(ce));
>   trace_intel_context_register(ce);
>  
> - if (guc->fw.major_ver_found >= 70)
> + if (guc->fw.file_selected.major_ver >= 70)
>   ret = register_context_v70(guc, ce, loop);
>   else
>   ret = register_context_v69(guc, ce, loop);
> @@ -2315,7 +2315,7 @@ static int register_context(struct intel_context *ce, 
> bool loop)
>   set_context_registered(ce);
>   spin_unlock_irqrestore(>guc_state.lock, flags);
>  
> - if (guc->fw.major_ver_found >= 70)
> + if (guc->fw.file_selected.major_ver >= 70)
>   guc_context_policy_init_v70(ce, loop);
>   }
>  
> @@ -2921,7 +2921,7 @@ static void __guc_context_set_preemption_timeout(struct 
> intel_guc *guc,
>u16 guc_id,
>u32 preemption_timeout)
>  {
> - if (guc->fw.major_ver_found >= 70) {
> + if (guc->fw.file_selected.major_ver >= 70) {
>   struct context_policy policy;
>  
>   __guc_context_policy_start_klv(, guc_id);
> @@ -3186,7 +3186,7 @@ static int guc_context_alloc(struct intel_context *ce)
>  static void __guc_context_set_prio(struct intel_guc *guc,
>  struct intel_context *ce)
>  {
> - if (guc->fw.major_ver_found >= 70) {
> + if (guc->fw.file_selected.major_ver >= 70) {
>   struct context_policy policy;
>  
>   __guc_context_policy_start_klv(, ce->guc_id.id);
> diff --git a/drivers/gpu/drm/i915/gt/uc/intel_uc.c 
> b/drivers/gpu/drm/i915/gt/uc/intel_uc.c
> index f2e7c82985ef..d965ac4832d6 100644
> --- a/drivers/gpu/drm/i915/gt/uc/intel_uc.c
> +++ b/drivers/gpu/drm/i915/gt/uc/intel_uc.c
> @@ -436,8 +436,8 @@ static void print_fw_ver(struct intel_uc *uc, struct 
> intel_uc_fw *fw)
>   struct drm_i915_private *i915 = uc_to_gt(uc)->i915;
>  
>   drm_info(>drm, "%s firmware %s version %u.%u\n",
> -  intel_uc_fw_type_repr(fw->type), fw->path,
> -  fw->major_ver_found, 

Re: [Intel-gfx] [CI 1/2] drm/i915/uc: Support for version reduced and multiple firmware files

2022-09-12 Thread Ceraolo Spurio, Daniele




On 9/12/2022 5:23 PM, Lucas De Marchi wrote:

On Tue, Sep 06, 2022 at 04:01:46PM -0700, Daniele Ceraolo Spurio wrote:
@@ -184,49 +247,94 @@ __uc_fw_auto_select(struct drm_i915_private 
*i915, struct intel_uc_fw *uc_fw)

fw_count = blobs_all[uc_fw->type].count;

for (i = 0; i < fw_count && p <= fw_blobs[i].p; i++) {
-    if (p == fw_blobs[i].p && rev >= fw_blobs[i].rev) {
-    const struct uc_fw_blob *blob = _blobs[i].blob;
-    uc_fw->path = blob->path;
-    uc_fw->wanted_path = blob->path;
-    uc_fw->major_ver_wanted = blob->major;
-    uc_fw->minor_ver_wanted = blob->minor;
-    break;
-    }
-    }
+    const struct uc_fw_blob *blob = _blobs[i].blob;

-    if (uc_fw->type == INTEL_UC_FW_TYPE_GUC) {
-    const struct uc_fw_platform_requirement *blobs = 
blobs_guc_fallback;

-    u32 count = ARRAY_SIZE(blobs_guc_fallback);
+    if (p != fw_blobs[i].p)
+    continue;

-    for (i = 0; i < count && p <= blobs[i].p; i++) {
-    if (p == blobs[i].p && rev >= blobs[i].rev) {
-    const struct uc_fw_blob *blob = [i].blob;
+    if (rev < fw_blobs[i].rev)
+    continue;

-    uc_fw->fallback.path = blob->path;
-    uc_fw->fallback.major_ver = blob->major;
-    uc_fw->fallback.minor_ver = blob->minor;
-    break;
-    }
+    if (uc_fw->file_selected.path) {
+    if (uc_fw->file_selected.path == blob->path)
+    uc_fw->file_selected.path = NULL;
+
+    continue;
    }
+
+    uc_fw->file_selected.path = blob->path;
+    uc_fw->file_wanted.path = blob->path;
+    uc_fw->file_wanted.major_ver = blob->major;
+    uc_fw->file_wanted.minor_ver = blob->minor;
+    break;
}

/* make sure the list is ordered as expected */
-    if (IS_ENABLED(CONFIG_DRM_I915_SELFTEST)) {
+    if (IS_ENABLED(CONFIG_DRM_I915_SELFTEST) && !verified) {
+    verified = true;
+
    for (i = 1; i < fw_count; i++) {
+    /* Next platform is good: */
    if (fw_blobs[i].p < fw_blobs[i - 1].p)
    continue;

+    /* Next platform revision is good: */
    if (fw_blobs[i].p == fw_blobs[i - 1].p &&
    fw_blobs[i].rev < fw_blobs[i - 1].rev)
    continue;

-    drm_err(>drm, "Invalid FW blob order: %s r%u comes 
before %s r%u\n",

-    intel_platform_name(fw_blobs[i - 1].p),
-    fw_blobs[i - 1].rev,
-    intel_platform_name(fw_blobs[i].p),
-    fw_blobs[i].rev);
+    /* Platform/revision must be in order: */
+    if (fw_blobs[i].p != fw_blobs[i - 1].p ||
+    fw_blobs[i].rev != fw_blobs[i - 1].rev)
+    goto bad;
+
+    /* Next major version is good: */
+    if (fw_blobs[i].blob.major < fw_blobs[i - 1].blob.major)
+    continue;
+
+    /* New must be before legacy: */
+    if (!fw_blobs[i].blob.legacy && fw_blobs[i - 
1].blob.legacy)

+    goto bad;
+
+    /* New to legacy also means 0.0 to X.Y (HuC), or X.0 to 
X.Y (GuC) */
+    if (fw_blobs[i].blob.legacy && !fw_blobs[i - 
1].blob.legacy) {

+    if (!fw_blobs[i - 1].blob.major)
+    continue;
+
+    if (fw_blobs[i].blob.major == fw_blobs[i - 
1].blob.major)

+    continue;
+    }
+
+    /* Major versions must be in order: */
+    if (fw_blobs[i].blob.major != fw_blobs[i - 1].blob.major)
+    goto bad;
+
+    /* Next minor version is good: */
+    if (fw_blobs[i].blob.minor < fw_blobs[i - 1].blob.minor)
+    continue;

-    uc_fw->path = NULL;
+    /* Minor versions must be in order: */
+    if (fw_blobs[i].blob.minor != fw_blobs[i - 1].blob.minor)
+    goto bad;
+
+    /* Patch versions must be in order: */
+    if (fw_blobs[i].blob.patch <= fw_blobs[i - 1].blob.patch)
+    continue;
+
+bad:
+    drm_err(>drm, "\x1B[35;1mInvalid FW blob order: %s 
r%u %s%d.%d.%d comes before %s r%u %s%d.%d.%d\n",


what is this \x1B[35;1m? Probably something that went bad while
writing/pasting this?


Looks like it slipped in. Fix coming soon (John will send a v2 of " 
drm/i915/uc: Fix issues with overriding firmware files" and include it 
there).


Daniele



Lucas De Marchi


+ intel_platform_name(fw_blobs[i - 1].p), fw_blobs[i - 1].rev,
+    fw_blobs[i - 1].blob.legacy ? "L" : "v",
+    fw_blobs[i - 1].blob.major,
+    fw_blobs[i - 1].blob.minor,
+    fw_blobs[i - 1].blob.patch,
+    intel_platform_name(fw_blobs[i].p), fw_blobs[i].rev,
+    fw_blobs[i].blob.legacy ? "L" : "v",
+    fw_blobs[i].blob.major,
+    fw_blobs[i].blob.minor,
+ 

Re: [Intel-gfx] [CI 1/2] drm/i915/uc: Support for version reduced and multiple firmware files

2022-09-12 Thread Lucas De Marchi

On Tue, Sep 06, 2022 at 04:01:46PM -0700, Daniele Ceraolo Spurio wrote:

@@ -184,49 +247,94 @@ __uc_fw_auto_select(struct drm_i915_private *i915, struct 
intel_uc_fw *uc_fw)
fw_count = blobs_all[uc_fw->type].count;

for (i = 0; i < fw_count && p <= fw_blobs[i].p; i++) {
-   if (p == fw_blobs[i].p && rev >= fw_blobs[i].rev) {
-   const struct uc_fw_blob *blob = _blobs[i].blob;
-   uc_fw->path = blob->path;
-   uc_fw->wanted_path = blob->path;
-   uc_fw->major_ver_wanted = blob->major;
-   uc_fw->minor_ver_wanted = blob->minor;
-   break;
-   }
-   }
+   const struct uc_fw_blob *blob = _blobs[i].blob;

-   if (uc_fw->type == INTEL_UC_FW_TYPE_GUC) {
-   const struct uc_fw_platform_requirement *blobs = 
blobs_guc_fallback;
-   u32 count = ARRAY_SIZE(blobs_guc_fallback);
+   if (p != fw_blobs[i].p)
+   continue;

-   for (i = 0; i < count && p <= blobs[i].p; i++) {
-   if (p == blobs[i].p && rev >= blobs[i].rev) {
-   const struct uc_fw_blob *blob = [i].blob;
+   if (rev < fw_blobs[i].rev)
+   continue;

-   uc_fw->fallback.path = blob->path;
-   uc_fw->fallback.major_ver = blob->major;
-   uc_fw->fallback.minor_ver = blob->minor;
-   break;
-   }
+   if (uc_fw->file_selected.path) {
+   if (uc_fw->file_selected.path == blob->path)
+   uc_fw->file_selected.path = NULL;
+
+   continue;
}
+
+   uc_fw->file_selected.path = blob->path;
+   uc_fw->file_wanted.path = blob->path;
+   uc_fw->file_wanted.major_ver = blob->major;
+   uc_fw->file_wanted.minor_ver = blob->minor;
+   break;
}

/* make sure the list is ordered as expected */
-   if (IS_ENABLED(CONFIG_DRM_I915_SELFTEST)) {
+   if (IS_ENABLED(CONFIG_DRM_I915_SELFTEST) && !verified) {
+   verified = true;
+
for (i = 1; i < fw_count; i++) {
+   /* Next platform is good: */
if (fw_blobs[i].p < fw_blobs[i - 1].p)
continue;

+   /* Next platform revision is good: */
if (fw_blobs[i].p == fw_blobs[i - 1].p &&
fw_blobs[i].rev < fw_blobs[i - 1].rev)
continue;

-   drm_err(>drm, "Invalid FW blob order: %s r%u comes 
before %s r%u\n",
-   intel_platform_name(fw_blobs[i - 1].p),
-   fw_blobs[i - 1].rev,
-   intel_platform_name(fw_blobs[i].p),
-   fw_blobs[i].rev);
+   /* Platform/revision must be in order: */
+   if (fw_blobs[i].p != fw_blobs[i - 1].p ||
+   fw_blobs[i].rev != fw_blobs[i - 1].rev)
+   goto bad;
+
+   /* Next major version is good: */
+   if (fw_blobs[i].blob.major < fw_blobs[i - 1].blob.major)
+   continue;
+
+   /* New must be before legacy: */
+   if (!fw_blobs[i].blob.legacy && fw_blobs[i - 
1].blob.legacy)
+   goto bad;
+
+   /* New to legacy also means 0.0 to X.Y (HuC), or X.0 to 
X.Y (GuC) */
+   if (fw_blobs[i].blob.legacy && !fw_blobs[i - 
1].blob.legacy) {
+   if (!fw_blobs[i - 1].blob.major)
+   continue;
+
+   if (fw_blobs[i].blob.major == fw_blobs[i - 
1].blob.major)
+   continue;
+   }
+
+   /* Major versions must be in order: */
+   if (fw_blobs[i].blob.major != fw_blobs[i - 
1].blob.major)
+   goto bad;
+
+   /* Next minor version is good: */
+   if (fw_blobs[i].blob.minor < fw_blobs[i - 1].blob.minor)
+   continue;

-   uc_fw->path = NULL;
+   /* Minor versions must be in order: */
+   if (fw_blobs[i].blob.minor != fw_blobs[i - 
1].blob.minor)
+   goto bad;
+
+   /* Patch versions must be in order: */
+   if (fw_blobs[i].blob.patch <= fw_blobs[i - 
1].blob.patch)
+   continue;
+

[Intel-gfx] [CI 1/2] drm/i915/uc: Support for version reduced and multiple firmware files

2022-09-06 Thread Daniele Ceraolo Spurio
From: John Harrison 

There was a misunderstanding in how firmware file compatibility should
be managed within i915. This has been clarified as:
  i915 must support all existing firmware releases forever
  new minor firmware releases should replace prior versions
  only backwards compatibility breaking releases should be a new file

This patch cleans up the single fallback file support that was added
as a quick fix emergency effort. That is now removed in preference to
supporting arbitrary numbers of firmware files per platform.

The patch also adds support for having GuC firmware files that are
named by major version only (because the major version indicates
backwards breaking changes that affect the KMD) and for having HuC
firmware files with no version number at all (because the KMD has no
interface requirements with the HuC).

For GuC, the driver will report via dmesg if the found file is older than
expected. For HuC, the KMD will no longer require updating for any new
HuC release so will not be able to report what the latest expected
version is.

Signed-off-by: John Harrison 
Reviewed-by: Daniele Ceraolo Spurio 
---
 .../gpu/drm/i915/gt/uc/intel_guc_submission.c |  10 +-
 drivers/gpu/drm/i915/gt/uc/intel_uc.c |   4 +-
 drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c  | 442 --
 drivers/gpu/drm/i915/gt/uc/intel_uc_fw.h  |  33 +-
 drivers/gpu/drm/i915/i915_gpu_error.c |  16 +-
 5 files changed, 319 insertions(+), 186 deletions(-)

diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c 
b/drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c
index 0d56b615bf78..04393932623c 100644
--- a/drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c
+++ b/drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c
@@ -1868,7 +1868,7 @@ int intel_guc_submission_init(struct intel_guc *guc)
if (guc->submission_initialized)
return 0;
 
-   if (guc->fw.major_ver_found < 70) {
+   if (guc->fw.file_selected.major_ver < 70) {
ret = guc_lrc_desc_pool_create_v69(guc);
if (ret)
return ret;
@@ -2303,7 +2303,7 @@ static int register_context(struct intel_context *ce, 
bool loop)
GEM_BUG_ON(intel_context_is_child(ce));
trace_intel_context_register(ce);
 
-   if (guc->fw.major_ver_found >= 70)
+   if (guc->fw.file_selected.major_ver >= 70)
ret = register_context_v70(guc, ce, loop);
else
ret = register_context_v69(guc, ce, loop);
@@ -2315,7 +2315,7 @@ static int register_context(struct intel_context *ce, 
bool loop)
set_context_registered(ce);
spin_unlock_irqrestore(>guc_state.lock, flags);
 
-   if (guc->fw.major_ver_found >= 70)
+   if (guc->fw.file_selected.major_ver >= 70)
guc_context_policy_init_v70(ce, loop);
}
 
@@ -2921,7 +2921,7 @@ static void __guc_context_set_preemption_timeout(struct 
intel_guc *guc,
 u16 guc_id,
 u32 preemption_timeout)
 {
-   if (guc->fw.major_ver_found >= 70) {
+   if (guc->fw.file_selected.major_ver >= 70) {
struct context_policy policy;
 
__guc_context_policy_start_klv(, guc_id);
@@ -3186,7 +3186,7 @@ static int guc_context_alloc(struct intel_context *ce)
 static void __guc_context_set_prio(struct intel_guc *guc,
   struct intel_context *ce)
 {
-   if (guc->fw.major_ver_found >= 70) {
+   if (guc->fw.file_selected.major_ver >= 70) {
struct context_policy policy;
 
__guc_context_policy_start_klv(, ce->guc_id.id);
diff --git a/drivers/gpu/drm/i915/gt/uc/intel_uc.c 
b/drivers/gpu/drm/i915/gt/uc/intel_uc.c
index f2e7c82985ef..d965ac4832d6 100644
--- a/drivers/gpu/drm/i915/gt/uc/intel_uc.c
+++ b/drivers/gpu/drm/i915/gt/uc/intel_uc.c
@@ -436,8 +436,8 @@ static void print_fw_ver(struct intel_uc *uc, struct 
intel_uc_fw *fw)
struct drm_i915_private *i915 = uc_to_gt(uc)->i915;
 
drm_info(>drm, "%s firmware %s version %u.%u\n",
-intel_uc_fw_type_repr(fw->type), fw->path,
-fw->major_ver_found, fw->minor_ver_found);
+intel_uc_fw_type_repr(fw->type), fw->file_selected.path,
+fw->file_selected.major_ver, fw->file_selected.minor_ver);
 }
 
 static int __uc_init_hw(struct intel_uc *uc)
diff --git a/drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c 
b/drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c
index 58547292efa0..610f36f1b989 100644
--- a/drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c
+++ b/drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c
@@ -41,7 +41,7 @@ void intel_uc_fw_change_status(struct intel_uc_fw *uc_fw,
"%s firmware -> %s\n",
intel_uc_fw_type_repr(uc_fw->type),
status == INTEL_UC_FIRMWARE_SELECTED ?
-   uc_fw->path :