There are few minor changes in the CSS header related to the version
numbering in new GuC firmwares. Update our definition and start using
common tools for extracting bitfields.

Signed-off-by: Michal Wajdeczko <michal.wajdec...@intel.com>
Cc: Daniele Ceraolo Spurio <daniele.ceraolospu...@intel.com>
Cc: Joonas Lahtinen <joonas.lahti...@linux.intel.com>
Cc: John Spotswood <john.a.spotsw...@intel.com>
Cc: Jeff Mcgee <jeff.mc...@intel.com>
---
 drivers/gpu/drm/i915/intel_guc_fwif.h | 23 ++++++++---------------
 drivers/gpu/drm/i915/intel_uc_fw.c    | 20 ++++++++++----------
 2 files changed, 18 insertions(+), 25 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_guc_fwif.h 
b/drivers/gpu/drm/i915/intel_guc_fwif.h
index b2f5148f4f17..1cb4fad2d539 100644
--- a/drivers/gpu/drm/i915/intel_guc_fwif.h
+++ b/drivers/gpu/drm/i915/intel_guc_fwif.h
@@ -168,11 +168,7 @@
  *    in fw. So driver will load a truncated firmware in this case.
  *
  * HuC firmware layout is same as GuC firmware.
- *
- * HuC firmware css header is different. However, the only difference is where
- * the version information is saved. The uc_css_header is unified to support
- * both. Driver should get HuC version from uc_css_header.huc_sw_version, while
- * uc_css_header.guc_sw_version for GuC.
+ * Only HuC version information is saved in a different way.
  */
 
 struct uc_css_header {
@@ -206,16 +202,13 @@ struct uc_css_header {
 
        char username[8];
        char buildnumber[12];
-       union {
-               struct {
-                       u32 branch_client_version;
-                       u32 sw_version;
-       } guc;
-               struct {
-                       u32 sw_version;
-                       u32 reserved;
-       } huc;
-       };
+       u32 sw_version;
+#define CSS_SW_VERSION_GUC_MAJOR       (0xFF << 16)
+#define CSS_SW_VERSION_GUC_MINOR       (0xFF << 8)
+#define CSS_SW_VERSION_GUC_PATCH       (0xFF << 0)
+#define CSS_SW_VERSION_HUC_MAJOR       (0xFFFF << 16)
+#define CSS_SW_VERSION_HUC_MINOR       (0xFFFF << 0)
+       u32 sw_reserved;
        u32 prod_preprod_fw;
        u32 reserved[12];
        u32 header_info;
diff --git a/drivers/gpu/drm/i915/intel_uc_fw.c 
b/drivers/gpu/drm/i915/intel_uc_fw.c
index becf05ebae4d..957c1feb30d3 100644
--- a/drivers/gpu/drm/i915/intel_uc_fw.c
+++ b/drivers/gpu/drm/i915/intel_uc_fw.c
@@ -22,6 +22,7 @@
  *
  */
 
+#include <linux/bitfield.h>
 #include <linux/firmware.h>
 #include <drm/drm_print.h>
 
@@ -119,21 +120,20 @@ void intel_uc_fw_fetch(struct drm_i915_private *dev_priv,
                goto fail;
        }
 
-       /*
-        * The GuC firmware image has the version number embedded at a
-        * well-known offset within the firmware blob; note that major / minor
-        * version are TWO bytes each (i.e. u16), although all pointers and
-        * offsets are defined in terms of bytes (u8).
-        */
+       /* Get version numbers from the CSS header */
        switch (uc_fw->type) {
        case INTEL_UC_FW_TYPE_GUC:
-               uc_fw->major_ver_found = css->guc.sw_version >> 16;
-               uc_fw->minor_ver_found = css->guc.sw_version & 0xFFFF;
+               uc_fw->major_ver_found = FIELD_GET(CSS_SW_VERSION_GUC_MAJOR,
+                                                  css->sw_version);
+               uc_fw->minor_ver_found = FIELD_GET(CSS_SW_VERSION_GUC_MINOR,
+                                                  css->sw_version);
                break;
 
        case INTEL_UC_FW_TYPE_HUC:
-               uc_fw->major_ver_found = css->huc.sw_version >> 16;
-               uc_fw->minor_ver_found = css->huc.sw_version & 0xFFFF;
+               uc_fw->major_ver_found = FIELD_GET(CSS_SW_VERSION_HUC_MAJOR,
+                                                  css->sw_version);
+               uc_fw->minor_ver_found = FIELD_GET(CSS_SW_VERSION_HUC_MINOR,
+                                                  css->sw_version);
                break;
 
        default:
-- 
2.19.2

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to