Igt-dev Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [igt-dev] [PATCH i-g-t] intel-gfx-fw-info: Make it compatible with HuC via GSC
@ 2023-04-14 17:34 Lucas De Marchi
  2023-04-14 18:11 ` [igt-dev] ✓ Fi.CI.BAT: success for " Patchwork
                   ` (3 more replies)
  0 siblings, 4 replies; 8+ messages in thread
From: Lucas De Marchi @ 2023-04-14 17:34 UTC (permalink / raw)
  To: igt-dev; +Cc: Lucas De Marchi

When HuC is loaded via GSC, the firmware format is different and there
is no information for kernel to parse except the version, that is in
a different location.  Check for the magic field as the first dword and
parse the blob differently based on that.

Tesetd with
https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/tree/i915/dg2_huc_gsc.bin?id=8f86b5ab3e051170ea240fc409d457e16e24bc21,
with output "version: 7.10.3" as expected. Also checked with a couple
of GuC firmware blobs and CSS-based HuC firmware blobs to guarantee
this doesn't regress.

Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
---
 tools/intel-gfx-fw-info | 85 +++++++++++++++++++++++++++++++----------
 1 file changed, 65 insertions(+), 20 deletions(-)

diff --git a/tools/intel-gfx-fw-info b/tools/intel-gfx-fw-info
index 77903bbb7..fef310a41 100755
--- a/tools/intel-gfx-fw-info
+++ b/tools/intel-gfx-fw-info
@@ -59,6 +59,23 @@ struct uc_css_header {
 	} rsvd;
 	u32 header_info;
 };
+
+#define HUC_GSC_VERSION_HI_DW		44
+#define   HUC_GSC_MAJOR_VER_HI_MASK	(0xFF << 0)
+#define   HUC_GSC_MINOR_VER_HI_MASK	(0xFF << 16)
+#define HUC_GSC_VERSION_LO_DW		45
+#define   HUC_GSC_PATCH_VER_LO_MASK	(0xFF << 0)
+
+// Add a fake definition for the GSC's header so this script can still
+// check the version
+
+struct uc_huc_gsc_header {
+	u32 raw[HUC_GSC_VERSION_LO_DW + 1];
+};
+
+struct magic {
+	char data[4];
+};
 """
 
 logging.basicConfig(format="%(levelname)s: %(message)s")
@@ -83,26 +100,49 @@ def FIELD_GET(mask: int, value: int) -> int:
     return (value & mask) >> ffs(mask)
 
 
-def decode(fw) -> str:
-    data = []
+class Fw:
+    def __init__(self, fw):
+        self.fw = fw
+
+
+class FwCss(Fw):
+    def decode(self):
+        data = []
+
+        CSS_SW_VERSION_UC_MAJOR = 0xFF << 16
+        CSS_SW_VERSION_UC_MINOR = 0xFF << 8
+        CSS_SW_VERSION_UC_PATCH = 0xFF
+        major = FIELD_GET(CSS_SW_VERSION_UC_MAJOR, self.fw.sw_version)
+        minor = FIELD_GET(CSS_SW_VERSION_UC_MINOR, self.fw.sw_version)
+        patch = FIELD_GET(CSS_SW_VERSION_UC_PATCH, self.fw.sw_version)
+        data += [f"version: {major}.{minor}.{patch}"]
+
+        CSS_DATE_DAY = 0xFF
+        CSS_DATE_MONTH = 0xFF << 8
+        CSS_DATE_YEAR = 0xFFFF << 16
+        day = FIELD_GET(CSS_DATE_DAY, self.fw.date)
+        month = FIELD_GET(CSS_DATE_MONTH, self.fw.date)
+        year = FIELD_GET(CSS_DATE_YEAR, self.fw.date)
+        data += [f"date: {year:02x}-{month:02x}-{day:02x}"]
+
+        return data
+
 
-    CSS_SW_VERSION_UC_MAJOR = 0xFF << 16
-    CSS_SW_VERSION_UC_MINOR = 0xFF << 8
-    CSS_SW_VERSION_UC_PATCH = 0xFF
-    major = FIELD_GET(CSS_SW_VERSION_UC_MAJOR, fw.sw_version)
-    minor = FIELD_GET(CSS_SW_VERSION_UC_MINOR, fw.sw_version)
-    patch = FIELD_GET(CSS_SW_VERSION_UC_PATCH, fw.sw_version)
-    data += [f"version: {major}.{minor}.{patch}"]
+class FwGsc(Fw):
+    def decode(self):
+        data = []
 
-    CSS_DATE_DAY = 0xFF
-    CSS_DATE_MONTH = 0xFF << 8
-    CSS_DATE_YEAR = 0xFFFF << 16
-    day = FIELD_GET(CSS_DATE_DAY, fw.date)
-    month = FIELD_GET(CSS_DATE_MONTH, fw.date)
-    year = FIELD_GET(CSS_DATE_YEAR, fw.date)
-    data += [f"date: {year:02x}-{month:02x}-{day:02x}"]
+        HUC_GSC_VERSION_HI_DW = 44
+        HUC_GSC_MINOR_VER_HI_MASK = 0xFF << 16
+        HUC_GSC_MAJOR_VER_HI_MASK = 0xFF
+        HUC_GSC_VERSION_LO_DW = 45
+        HUC_GSC_PATCH_VER_LO_MASK = 0xFF
+        major = FIELD_GET(HUC_GSC_MAJOR_VER_HI_MASK, self.fw.raw[HUC_GSC_VERSION_HI_DW])
+        minor = FIELD_GET(HUC_GSC_MINOR_VER_HI_MASK, self.fw.raw[HUC_GSC_VERSION_HI_DW])
+        patch = FIELD_GET(HUC_GSC_PATCH_VER_LO_MASK, self.fw.raw[HUC_GSC_VERSION_LO_DW])
+        data += [f"version: {major}.{minor}.{patch}"]
 
-    return data
+        return data
 
 
 def parse_args(argv: typing.List[str]) -> argparse.Namespace:
@@ -122,14 +162,19 @@ def main(argv: typing.List[str]) -> int:
 
     try:
         with open(args.filename, mode="rb") as f:
-            fw = cparser.uc_css_header(f)
+            magic = cparser.magic(f)
+            f.seek(0, 0)
+            if magic.data == b"$CPD":
+                fw = FwGsc(cparser.uc_huc_gsc_header(f))
+            else:
+                fw = FwCss(cparser.uc_css_header(f))
     except FileNotFoundError as e:
         logging.fatal(e)
         return 1
 
-    print(*decode(fw), sep="\n")
+    print(*fw.decode(), sep="\n")
     print("raw dump:", end="")
-    cstruct.dumpstruct(fw, color=sys.stdout.isatty())
+    cstruct.dumpstruct(fw.fw, color=sys.stdout.isatty())
 
     return 0
 
-- 
2.39.0

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [igt-dev] ✓ Fi.CI.BAT: success for intel-gfx-fw-info: Make it compatible with HuC via GSC
  2023-04-14 17:34 [igt-dev] [PATCH i-g-t] intel-gfx-fw-info: Make it compatible with HuC via GSC Lucas De Marchi
@ 2023-04-14 18:11 ` Patchwork
  2023-04-15  1:22 ` [igt-dev] ✗ Fi.CI.IGT: failure " Patchwork
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 8+ messages in thread
From: Patchwork @ 2023-04-14 18:11 UTC (permalink / raw)
  To: Lucas De Marchi; +Cc: igt-dev

[-- Attachment #1: Type: text/plain, Size: 2920 bytes --]

== Series Details ==

Series: intel-gfx-fw-info: Make it compatible with HuC via GSC
URL   : https://patchwork.freedesktop.org/series/116500/
State : success

== Summary ==

CI Bug Log - changes from CI_DRM_13008 -> IGTPW_8806
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

  External URL: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8806/index.html

Participating hosts (37 -> 36)
------------------------------

  Missing    (1): fi-snb-2520m 

Known issues
------------

  Here are the changes found in IGTPW_8806 that come from known issues:

### IGT changes ###

#### Issues hit ####

  * igt@i915_selftest@live@mman:
    - bat-rpls-2:         [PASS][1] -> [TIMEOUT][2] ([i915#6794])
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13008/bat-rpls-2/igt@i915_selftest@live@mman.html
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8806/bat-rpls-2/igt@i915_selftest@live@mman.html

  * igt@i915_selftest@live@slpc:
    - bat-rpls-1:         [PASS][3] -> [DMESG-FAIL][4] ([i915#6367] / [i915#7996])
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13008/bat-rpls-1/igt@i915_selftest@live@slpc.html
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8806/bat-rpls-1/igt@i915_selftest@live@slpc.html

  * igt@i915_selftest@live@workarounds:
    - bat-rplp-1:         [PASS][5] -> [INCOMPLETE][6] ([i915#7913])
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13008/bat-rplp-1/igt@i915_selftest@live@workarounds.html
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8806/bat-rplp-1/igt@i915_selftest@live@workarounds.html

  
#### Possible fixes ####

  * igt@kms_pipe_crc_basic@nonblocking-crc-frame-sequence@pipe-c-dp-1:
    - bat-dg2-8:          [FAIL][7] ([i915#7932]) -> [PASS][8]
   [7]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13008/bat-dg2-8/igt@kms_pipe_crc_basic@nonblocking-crc-frame-sequence@pipe-c-dp-1.html
   [8]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8806/bat-dg2-8/igt@kms_pipe_crc_basic@nonblocking-crc-frame-sequence@pipe-c-dp-1.html

  
  [i915#6367]: https://gitlab.freedesktop.org/drm/intel/issues/6367
  [i915#6794]: https://gitlab.freedesktop.org/drm/intel/issues/6794
  [i915#7913]: https://gitlab.freedesktop.org/drm/intel/issues/7913
  [i915#7932]: https://gitlab.freedesktop.org/drm/intel/issues/7932
  [i915#7996]: https://gitlab.freedesktop.org/drm/intel/issues/7996


Build changes
-------------

  * CI: CI-20190529 -> None
  * IGT: IGT_7256 -> IGTPW_8806

  CI-20190529: 20190529
  CI_DRM_13008: 7862c60adcb74785d0063f6d978adf8c38cda97c @ git://anongit.freedesktop.org/gfx-ci/linux
  IGTPW_8806: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8806/index.html
  IGT_7256: 066fa5410180730b85f61e4f3073da9a2055dc49 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8806/index.html

[-- Attachment #2: Type: text/html, Size: 3596 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [igt-dev] ✗ Fi.CI.IGT: failure for intel-gfx-fw-info: Make it compatible with HuC via GSC
  2023-04-14 17:34 [igt-dev] [PATCH i-g-t] intel-gfx-fw-info: Make it compatible with HuC via GSC Lucas De Marchi
  2023-04-14 18:11 ` [igt-dev] ✓ Fi.CI.BAT: success for " Patchwork
@ 2023-04-15  1:22 ` Patchwork
  2023-04-25 13:14 ` [igt-dev] [i-g-t] " Balasubramani Vivekanandan
  2023-04-25 16:12 ` [igt-dev] [PATCH i-g-t] " Kamil Konieczny
  3 siblings, 0 replies; 8+ messages in thread
From: Patchwork @ 2023-04-15  1:22 UTC (permalink / raw)
  To: Lucas De Marchi; +Cc: igt-dev

[-- Attachment #1: Type: text/plain, Size: 19416 bytes --]

== Series Details ==

Series: intel-gfx-fw-info: Make it compatible with HuC via GSC
URL   : https://patchwork.freedesktop.org/series/116500/
State : failure

== Summary ==

CI Bug Log - changes from CI_DRM_13008_full -> IGTPW_8806_full
====================================================

Summary
-------

  **FAILURE**

  Serious unknown changes coming with IGTPW_8806_full absolutely need to be
  verified manually.
  
  If you think the reported changes have nothing to do with the changes
  introduced in IGTPW_8806_full, please notify your bug team to allow them
  to document this new failure mode, which will reduce false positives in CI.

  External URL: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8806/index.html

Participating hosts (7 -> 8)
------------------------------

  Additional (1): shard-tglu0 

Possible new issues
-------------------

  Here are the unknown changes that may have been introduced in IGTPW_8806_full:

### IGT changes ###

#### Possible regressions ####

  * igt@gem_exec_reloc@basic-cpu-noreloc:
    - shard-snb:          [PASS][1] -> [ABORT][2]
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13008/shard-snb5/igt@gem_exec_reloc@basic-cpu-noreloc.html
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8806/shard-snb7/igt@gem_exec_reloc@basic-cpu-noreloc.html

  
Known issues
------------

  Here are the changes found in IGTPW_8806_full that come from known issues:

### IGT changes ###

#### Issues hit ####

  * igt@gem_exec_fair@basic-deadline:
    - shard-glk:          [PASS][3] -> [FAIL][4] ([i915#2846])
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13008/shard-glk2/igt@gem_exec_fair@basic-deadline.html
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8806/shard-glk3/igt@gem_exec_fair@basic-deadline.html

  * igt@gem_exec_fair@basic-none-solo@rcs0:
    - shard-apl:          [PASS][5] -> [FAIL][6] ([i915#2842])
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13008/shard-apl4/igt@gem_exec_fair@basic-none-solo@rcs0.html
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8806/shard-apl4/igt@gem_exec_fair@basic-none-solo@rcs0.html

  * igt@gem_exec_fair@basic-pace@vcs0:
    - shard-glk:          [PASS][7] -> [FAIL][8] ([i915#2842]) +2 similar issues
   [7]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13008/shard-glk3/igt@gem_exec_fair@basic-pace@vcs0.html
   [8]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8806/shard-glk7/igt@gem_exec_fair@basic-pace@vcs0.html

  * igt@gem_lmem_swapping@parallel-random-verify-ccs:
    - shard-apl:          NOTRUN -> [SKIP][9] ([fdo#109271] / [i915#4613]) +1 similar issue
   [9]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8806/shard-apl1/igt@gem_lmem_swapping@parallel-random-verify-ccs.html

  * igt@gen9_exec_parse@basic-rejected-ctx-param:
    - shard-snb:          NOTRUN -> [SKIP][10] ([fdo#109271]) +44 similar issues
   [10]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8806/shard-snb5/igt@gen9_exec_parse@basic-rejected-ctx-param.html

  * igt@kms_async_flips@alternate-sync-async-flip@pipe-b-dp-1:
    - shard-apl:          [PASS][11] -> [FAIL][12] ([i915#2521])
   [11]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13008/shard-apl4/igt@kms_async_flips@alternate-sync-async-flip@pipe-b-dp-1.html
   [12]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8806/shard-apl7/igt@kms_async_flips@alternate-sync-async-flip@pipe-b-dp-1.html

  * igt@kms_ccs@pipe-a-bad-pixel-format-4_tiled_dg2_rc_ccs_cc:
    - shard-apl:          NOTRUN -> [SKIP][13] ([fdo#109271]) +78 similar issues
   [13]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8806/shard-apl4/igt@kms_ccs@pipe-a-bad-pixel-format-4_tiled_dg2_rc_ccs_cc.html

  * igt@kms_ccs@pipe-a-missing-ccs-buffer-y_tiled_gen12_rc_ccs_cc:
    - shard-apl:          NOTRUN -> [SKIP][14] ([fdo#109271] / [i915#3886]) +3 similar issues
   [14]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8806/shard-apl4/igt@kms_ccs@pipe-a-missing-ccs-buffer-y_tiled_gen12_rc_ccs_cc.html

  * igt@kms_ccs@pipe-c-bad-aux-stride-y_tiled_gen12_rc_ccs_cc:
    - shard-glk:          NOTRUN -> [SKIP][15] ([fdo#109271] / [i915#3886])
   [15]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8806/shard-glk4/igt@kms_ccs@pipe-c-bad-aux-stride-y_tiled_gen12_rc_ccs_cc.html

  * igt@kms_content_protection@uevent@pipe-a-dp-1:
    - shard-apl:          NOTRUN -> [FAIL][16] ([i915#1339])
   [16]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8806/shard-apl7/igt@kms_content_protection@uevent@pipe-a-dp-1.html

  * igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions:
    - shard-glk:          [PASS][17] -> [FAIL][18] ([i915#2346]) +1 similar issue
   [17]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13008/shard-glk6/igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions.html
   [18]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8806/shard-glk8/igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions.html

  * igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions-varying-size:
    - shard-apl:          [PASS][19] -> [FAIL][20] ([i915#2346])
   [19]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13008/shard-apl7/igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions-varying-size.html
   [20]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8806/shard-apl7/igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions-varying-size.html

  * igt@kms_fbcon_fbt@fbc-suspend:
    - shard-snb:          [PASS][21] -> [SKIP][22] ([fdo#109271])
   [21]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13008/shard-snb7/igt@kms_fbcon_fbt@fbc-suspend.html
   [22]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8806/shard-snb4/igt@kms_fbcon_fbt@fbc-suspend.html

  * igt@kms_plane_alpha_blend@alpha-opaque-fb@pipe-a-hdmi-a-1:
    - shard-glk:          NOTRUN -> [FAIL][23] ([i915#4573]) +1 similar issue
   [23]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8806/shard-glk4/igt@kms_plane_alpha_blend@alpha-opaque-fb@pipe-a-hdmi-a-1.html

  * igt@kms_psr2_sf@overlay-plane-update-sf-dmg-area:
    - shard-apl:          NOTRUN -> [SKIP][24] ([fdo#109271] / [i915#658])
   [24]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8806/shard-apl1/igt@kms_psr2_sf@overlay-plane-update-sf-dmg-area.html

  * igt@v3d/v3d_perfmon@create-perfmon-exceed:
    - shard-glk:          NOTRUN -> [SKIP][25] ([fdo#109271]) +41 similar issues
   [25]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8806/shard-glk3/igt@v3d/v3d_perfmon@create-perfmon-exceed.html

  
#### Possible fixes ####

  * igt@drm_fdinfo@most-busy-check-all@rcs0:
    - {shard-rkl}:        [FAIL][26] ([i915#7742]) -> [PASS][27]
   [26]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13008/shard-rkl-6/igt@drm_fdinfo@most-busy-check-all@rcs0.html
   [27]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8806/shard-rkl-2/igt@drm_fdinfo@most-busy-check-all@rcs0.html

  * igt@gem_barrier_race@remote-request@rcs0:
    - shard-apl:          [ABORT][28] ([i915#8211] / [i915#8234]) -> [PASS][29]
   [28]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13008/shard-apl2/igt@gem_barrier_race@remote-request@rcs0.html
   [29]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8806/shard-apl7/igt@gem_barrier_race@remote-request@rcs0.html

  * igt@gem_exec_fair@basic-flow@rcs0:
    - {shard-tglu}:       [FAIL][30] ([i915#2842]) -> [PASS][31]
   [30]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13008/shard-tglu-10/igt@gem_exec_fair@basic-flow@rcs0.html
   [31]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8806/shard-tglu-2/igt@gem_exec_fair@basic-flow@rcs0.html

  * igt@gem_lmem_swapping@smem-oom@lmem0:
    - {shard-dg1}:        [TIMEOUT][32] ([i915#5493]) -> [PASS][33]
   [32]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13008/shard-dg1-18/igt@gem_lmem_swapping@smem-oom@lmem0.html
   [33]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8806/shard-dg1-14/igt@gem_lmem_swapping@smem-oom@lmem0.html

  * igt@gen9_exec_parse@allowed-single:
    - shard-glk:          [ABORT][34] ([i915#5566]) -> [PASS][35]
   [34]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13008/shard-glk4/igt@gen9_exec_parse@allowed-single.html
   [35]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8806/shard-glk1/igt@gen9_exec_parse@allowed-single.html

  * igt@i915_pm_dc@dc9-dpms:
    - {shard-tglu}:       [SKIP][36] ([i915#4281]) -> [PASS][37]
   [36]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13008/shard-tglu-5/igt@i915_pm_dc@dc9-dpms.html
   [37]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8806/shard-tglu-9/igt@i915_pm_dc@dc9-dpms.html

  * igt@i915_pm_rpm@dpms-non-lpsp:
    - {shard-rkl}:        [SKIP][38] ([i915#1397]) -> [PASS][39] +1 similar issue
   [38]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13008/shard-rkl-7/igt@i915_pm_rpm@dpms-non-lpsp.html
   [39]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8806/shard-rkl-1/igt@i915_pm_rpm@dpms-non-lpsp.html

  * igt@i915_selftest@live@gt_pm:
    - {shard-rkl}:        [DMESG-FAIL][40] ([i915#4258]) -> [PASS][41]
   [40]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13008/shard-rkl-4/igt@i915_selftest@live@gt_pm.html
   [41]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8806/shard-rkl-2/igt@i915_selftest@live@gt_pm.html

  * igt@i915_selftest@mock@sanitycheck:
    - shard-snb:          [ABORT][42] ([i915#4528]) -> [PASS][43]
   [42]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13008/shard-snb5/igt@i915_selftest@mock@sanitycheck.html
   [43]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8806/shard-snb5/igt@i915_selftest@mock@sanitycheck.html

  * igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions:
    - shard-apl:          [FAIL][44] ([i915#2346]) -> [PASS][45]
   [44]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13008/shard-apl6/igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions.html
   [45]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8806/shard-apl4/igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions.html

  * igt@kms_flip@flip-vs-suspend-interruptible@b-dp1:
    - shard-apl:          [ABORT][46] ([i915#180]) -> [PASS][47]
   [46]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13008/shard-apl7/igt@kms_flip@flip-vs-suspend-interruptible@b-dp1.html
   [47]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8806/shard-apl7/igt@kms_flip@flip-vs-suspend-interruptible@b-dp1.html

  * igt@perf_pmu@idle@rcs0:
    - {shard-rkl}:        [FAIL][48] ([i915#4349]) -> [PASS][49]
   [48]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13008/shard-rkl-1/igt@perf_pmu@idle@rcs0.html
   [49]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8806/shard-rkl-3/igt@perf_pmu@idle@rcs0.html

  
  {name}: This element is suppressed. This means it is ignored when computing
          the status of the difference (SUCCESS, WARNING, or FAILURE).

  [fdo#109271]: https://bugs.freedesktop.org/show_bug.cgi?id=109271
  [fdo#109274]: https://bugs.freedesktop.org/show_bug.cgi?id=109274
  [fdo#109280]: https://bugs.freedesktop.org/show_bug.cgi?id=109280
  [fdo#109289]: https://bugs.freedesktop.org/show_bug.cgi?id=109289
  [fdo#109295]: https://bugs.freedesktop.org/show_bug.cgi?id=109295
  [fdo#109302]: https://bugs.freedesktop.org/show_bug.cgi?id=109302
  [fdo#109312]: https://bugs.freedesktop.org/show_bug.cgi?id=109312
  [fdo#109315]: https://bugs.freedesktop.org/show_bug.cgi?id=109315
  [fdo#109506]: https://bugs.freedesktop.org/show_bug.cgi?id=109506
  [fdo#109642]: https://bugs.freedesktop.org/show_bug.cgi?id=109642
  [fdo#110189]: https://bugs.freedesktop.org/show_bug.cgi?id=110189
  [fdo#110723]: https://bugs.freedesktop.org/show_bug.cgi?id=110723
  [fdo#111068]: https://bugs.freedesktop.org/show_bug.cgi?id=111068
  [fdo#111614]: https://bugs.freedesktop.org/show_bug.cgi?id=111614
  [fdo#111615]: https://bugs.freedesktop.org/show_bug.cgi?id=111615
  [fdo#111656]: https://bugs.freedesktop.org/show_bug.cgi?id=111656
  [fdo#111825]: https://bugs.freedesktop.org/show_bug.cgi?id=111825
  [fdo#111827]: https://bugs.freedesktop.org/show_bug.cgi?id=111827
  [i915#1072]: https://gitlab.freedesktop.org/drm/intel/issues/1072
  [i915#1339]: https://gitlab.freedesktop.org/drm/intel/issues/1339
  [i915#1397]: https://gitlab.freedesktop.org/drm/intel/issues/1397
  [i915#180]: https://gitlab.freedesktop.org/drm/intel/issues/180
  [i915#1825]: https://gitlab.freedesktop.org/drm/intel/issues/1825
  [i915#1839]: https://gitlab.freedesktop.org/drm/intel/issues/1839
  [i915#2346]: https://gitlab.freedesktop.org/drm/intel/issues/2346
  [i915#2433]: https://gitlab.freedesktop.org/drm/intel/issues/2433
  [i915#2437]: https://gitlab.freedesktop.org/drm/intel/issues/2437
  [i915#2521]: https://gitlab.freedesktop.org/drm/intel/issues/2521
  [i915#2527]: https://gitlab.freedesktop.org/drm/intel/issues/2527
  [i915#2575]: https://gitlab.freedesktop.org/drm/intel/issues/2575
  [i915#2587]: https://gitlab.freedesktop.org/drm/intel/issues/2587
  [i915#2672]: https://gitlab.freedesktop.org/drm/intel/issues/2672
  [i915#2681]: https://gitlab.freedesktop.org/drm/intel/issues/2681
  [i915#2842]: https://gitlab.freedesktop.org/drm/intel/issues/2842
  [i915#2846]: https://gitlab.freedesktop.org/drm/intel/issues/2846
  [i915#3023]: https://gitlab.freedesktop.org/drm/intel/issues/3023
  [i915#315]: https://gitlab.freedesktop.org/drm/intel/issues/315
  [i915#3281]: https://gitlab.freedesktop.org/drm/intel/issues/3281
  [i915#3282]: https://gitlab.freedesktop.org/drm/intel/issues/3282
  [i915#3297]: https://gitlab.freedesktop.org/drm/intel/issues/3297
  [i915#3299]: https://gitlab.freedesktop.org/drm/intel/issues/3299
  [i915#3359]: https://gitlab.freedesktop.org/drm/intel/issues/3359
  [i915#3458]: https://gitlab.freedesktop.org/drm/intel/issues/3458
  [i915#3539]: https://gitlab.freedesktop.org/drm/intel/issues/3539
  [i915#3555]: https://gitlab.freedesktop.org/drm/intel/issues/3555
  [i915#3591]: https://gitlab.freedesktop.org/drm/intel/issues/3591
  [i915#3637]: https://gitlab.freedesktop.org/drm/intel/issues/3637
  [i915#3638]: https://gitlab.freedesktop.org/drm/intel/issues/3638
  [i915#3689]: https://gitlab.freedesktop.org/drm/intel/issues/3689
  [i915#3708]: https://gitlab.freedesktop.org/drm/intel/issues/3708
  [i915#3734]: https://gitlab.freedesktop.org/drm/intel/issues/3734
  [i915#3742]: https://gitlab.freedesktop.org/drm/intel/issues/3742
  [i915#3804]: https://gitlab.freedesktop.org/drm/intel/issues/3804
  [i915#3840]: https://gitlab.freedesktop.org/drm/intel/issues/3840
  [i915#3886]: https://gitlab.freedesktop.org/drm/intel/issues/3886
  [i915#3952]: https://gitlab.freedesktop.org/drm/intel/issues/3952
  [i915#3989]: https://gitlab.freedesktop.org/drm/intel/issues/3989
  [i915#404]: https://gitlab.freedesktop.org/drm/intel/issues/404
  [i915#4070]: https://gitlab.freedesktop.org/drm/intel/issues/4070
  [i915#4077]: https://gitlab.freedesktop.org/drm/intel/issues/4077
  [i915#4078]: https://gitlab.freedesktop.org/drm/intel/issues/4078
  [i915#4079]: https://gitlab.freedesktop.org/drm/intel/issues/4079
  [i915#4083]: https://gitlab.freedesktop.org/drm/intel/issues/4083
  [i915#4103]: https://gitlab.freedesktop.org/drm/intel/issues/4103
  [i915#4213]: https://gitlab.freedesktop.org/drm/intel/issues/4213
  [i915#4258]: https://gitlab.freedesktop.org/drm/intel/issues/4258
  [i915#4270]: https://gitlab.freedesktop.org/drm/intel/issues/4270
  [i915#4281]: https://gitlab.freedesktop.org/drm/intel/issues/4281
  [i915#4349]: https://gitlab.freedesktop.org/drm/intel/issues/4349
  [i915#4391]: https://gitlab.freedesktop.org/drm/intel/issues/4391
  [i915#4525]: https://gitlab.freedesktop.org/drm/intel/issues/4525
  [i915#4528]: https://gitlab.freedesktop.org/drm/intel/issues/4528
  [i915#4538]: https://gitlab.freedesktop.org/drm/intel/issues/4538
  [i915#454]: https://gitlab.freedesktop.org/drm/intel/issues/454
  [i915#4565]: https://gitlab.freedesktop.org/drm/intel/issues/4565
  [i915#4573]: https://gitlab.freedesktop.org/drm/intel/issues/4573
  [i915#4579]: https://gitlab.freedesktop.org/drm/intel/issues/4579
  [i915#4613]: https://gitlab.freedesktop.org/drm/intel/issues/4613
  [i915#4812]: https://gitlab.freedesktop.org/drm/intel/issues/4812
  [i915#4833]: https://gitlab.freedesktop.org/drm/intel/issues/4833
  [i915#4852]: https://gitlab.freedesktop.org/drm/intel/issues/4852
  [i915#4859]: https://gitlab.freedesktop.org/drm/intel/issues/4859
  [i915#4860]: https://gitlab.freedesktop.org/drm/intel/issues/4860
  [i915#4880]: https://gitlab.freedesktop.org/drm/intel/issues/4880
  [i915#4881]: https://gitlab.freedesktop.org/drm/intel/issues/4881
  [i915#4885]: https://gitlab.freedesktop.org/drm/intel/issues/4885
  [i915#5176]: https://gitlab.freedesktop.org/drm/intel/issues/5176
  [i915#5235]: https://gitlab.freedesktop.org/drm/intel/issues/5235
  [i915#5286]: https://gitlab.freedesktop.org/drm/intel/issues/5286
  [i915#5289]: https://gitlab.freedesktop.org/drm/intel/issues/5289
  [i915#5325]: https://gitlab.freedesktop.org/drm/intel/issues/5325
  [i915#533]: https://gitlab.freedesktop.org/drm/intel/issues/533
  [i915#5354]: https://gitlab.freedesktop.org/drm/intel/issues/5354
  [i915#5439]: https://gitlab.freedesktop.org/drm/intel/issues/5439
  [i915#5493]: https://gitlab.freedesktop.org/drm/intel/issues/5493
  [i915#5563]: https://gitlab.freedesktop.org/drm/intel/issues/5563
  [i915#5566]: https://gitlab.freedesktop.org/drm/intel/issues/5566
  [i915#5723]: https://gitlab.freedesktop.org/drm/intel/issues/5723
  [i915#6095]: https://gitlab.freedesktop.org/drm/intel/issues/6095
  [i915#6230]: https://gitlab.freedesktop.org/drm/intel/issues/6230
  [i915#6334]: https://gitlab.freedesktop.org/drm/intel/issues/6334
  [i915#6335]: https://gitlab.freedesktop.org/drm/intel/issues/6335
  [i915#6433]: https://gitlab.freedesktop.org/drm/intel/issues/6433
  [i915#6524]: https://gitlab.freedesktop.org/drm/intel/issues/6524
  [i915#658]: https://gitlab.freedesktop.org/drm/intel/issues/658
  [i915#6755]: https://gitlab.freedesktop.org/drm/intel/issues/6755
  [i915#6768]: https://gitlab.freedesktop.org/drm/intel/issues/6768
  [i915#6944]: https://gitlab.freedesktop.org/drm/intel/issues/6944
  [i915#6946]: https://gitlab.freedesktop.org/drm/intel/issues/6946
  [i915#7116]: https://gitlab.freedesktop.org/drm/intel/issues/7116
  [i915#7118]: https://gitlab.freedesktop.org/drm/intel/issues/7118
  [i915#7697]: https://gitlab.freedesktop.org/drm/intel/issues/7697
  [i915#7711]: https://gitlab.freedesktop.org/drm/intel/issues/7711
  [i915#7742]: https://gitlab.freedesktop.org/drm/intel/issues/7742
  [i915#7828]: https://gitlab.freedesktop.org/drm/intel/issues/7828
  [i915#8211]: https://gitlab.freedesktop.org/drm/intel/issues/8211
  [i915#8228]: https://gitlab.freedesktop.org/drm/intel/issues/8228
  [i915#8234]: https://gitlab.freedesktop.org/drm/intel/issues/8234
  [i915#8292]: https://gitlab.freedesktop.org/drm/intel/issues/8292


Build changes
-------------

  * CI: CI-20190529 -> None
  * IGT: IGT_7256 -> IGTPW_8806
  * Piglit: piglit_4509 -> None

  CI-20190529: 20190529
  CI_DRM_13008: 7862c60adcb74785d0063f6d978adf8c38cda97c @ git://anongit.freedesktop.org/gfx-ci/linux
  IGTPW_8806: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8806/index.html
  IGT_7256: 066fa5410180730b85f61e4f3073da9a2055dc49 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
  piglit_4509: fdc5a4ca11124ab8413c7988896eec4c97336694 @ git://anongit.freedesktop.org/piglit

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8806/index.html

[-- Attachment #2: Type: text/html, Size: 14915 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [igt-dev] [i-g-t] intel-gfx-fw-info: Make it compatible with HuC via GSC
  2023-04-14 17:34 [igt-dev] [PATCH i-g-t] intel-gfx-fw-info: Make it compatible with HuC via GSC Lucas De Marchi
  2023-04-14 18:11 ` [igt-dev] ✓ Fi.CI.BAT: success for " Patchwork
  2023-04-15  1:22 ` [igt-dev] ✗ Fi.CI.IGT: failure " Patchwork
@ 2023-04-25 13:14 ` Balasubramani Vivekanandan
  2023-04-25 13:24   ` Lucas De Marchi
  2023-04-25 16:12 ` [igt-dev] [PATCH i-g-t] " Kamil Konieczny
  3 siblings, 1 reply; 8+ messages in thread
From: Balasubramani Vivekanandan @ 2023-04-25 13:14 UTC (permalink / raw)
  To: Lucas De Marchi, igt-dev

On 14.04.2023 10:34, Lucas De Marchi wrote:
> When HuC is loaded via GSC, the firmware format is different and there
> is no information for kernel to parse except the version, that is in
> a different location.  Check for the magic field as the first dword and
> parse the blob differently based on that.
> 
> Tesetd with
> https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/tree/i915/dg2_huc_gsc.bin?id=8f86b5ab3e051170ea240fc409d457e16e24bc21,
> with output "version: 7.10.3" as expected. Also checked with a couple
> of GuC firmware blobs and CSS-based HuC firmware blobs to guarantee
> this doesn't regress.
> 
> Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
> ---
>  tools/intel-gfx-fw-info | 85 +++++++++++++++++++++++++++++++----------
>  1 file changed, 65 insertions(+), 20 deletions(-)
> 
> diff --git a/tools/intel-gfx-fw-info b/tools/intel-gfx-fw-info
> index 77903bbb7..fef310a41 100755
> --- a/tools/intel-gfx-fw-info
> +++ b/tools/intel-gfx-fw-info
> @@ -59,6 +59,23 @@ struct uc_css_header {
>  	} rsvd;
>  	u32 header_info;
>  };
> +
> +#define HUC_GSC_VERSION_HI_DW		44
> +#define   HUC_GSC_MAJOR_VER_HI_MASK	(0xFF << 0)
> +#define   HUC_GSC_MINOR_VER_HI_MASK	(0xFF << 16)
> +#define HUC_GSC_VERSION_LO_DW		45
> +#define   HUC_GSC_PATCH_VER_LO_MASK	(0xFF << 0)
> +
> +// Add a fake definition for the GSC's header so this script can still
> +// check the version
> +
> +struct uc_huc_gsc_header {
> +	u32 raw[HUC_GSC_VERSION_LO_DW + 1];

I haven't tested how the raw dump looks like, but just want to check if
changing the struct as following would do any help in improving the raw dump
output?

struct uc_huc_gsc_header {
	u32 reserved[HUC_GSC_VERSION_HI_DW];
	u32 huc_ver_hi;
	u32 huc_ver_low;
};

Other than that, patch looks good.

Reviewed-by: Balasubramani Vivekanandan <balasubramani.vivekanandan@intel.com>

Regards,
Bala

> +};
> +
> +struct magic {
> +	char data[4];
> +};
>  """
>  
>  logging.basicConfig(format="%(levelname)s: %(message)s")
> @@ -83,26 +100,49 @@ def FIELD_GET(mask: int, value: int) -> int:
>      return (value & mask) >> ffs(mask)
>  
>  
> -def decode(fw) -> str:
> -    data = []
> +class Fw:
> +    def __init__(self, fw):
> +        self.fw = fw
> +
> +
> +class FwCss(Fw):
> +    def decode(self):
> +        data = []
> +
> +        CSS_SW_VERSION_UC_MAJOR = 0xFF << 16
> +        CSS_SW_VERSION_UC_MINOR = 0xFF << 8
> +        CSS_SW_VERSION_UC_PATCH = 0xFF
> +        major = FIELD_GET(CSS_SW_VERSION_UC_MAJOR, self.fw.sw_version)
> +        minor = FIELD_GET(CSS_SW_VERSION_UC_MINOR, self.fw.sw_version)
> +        patch = FIELD_GET(CSS_SW_VERSION_UC_PATCH, self.fw.sw_version)
> +        data += [f"version: {major}.{minor}.{patch}"]
> +
> +        CSS_DATE_DAY = 0xFF
> +        CSS_DATE_MONTH = 0xFF << 8
> +        CSS_DATE_YEAR = 0xFFFF << 16
> +        day = FIELD_GET(CSS_DATE_DAY, self.fw.date)
> +        month = FIELD_GET(CSS_DATE_MONTH, self.fw.date)
> +        year = FIELD_GET(CSS_DATE_YEAR, self.fw.date)
> +        data += [f"date: {year:02x}-{month:02x}-{day:02x}"]
> +
> +        return data
> +
>  
> -    CSS_SW_VERSION_UC_MAJOR = 0xFF << 16
> -    CSS_SW_VERSION_UC_MINOR = 0xFF << 8
> -    CSS_SW_VERSION_UC_PATCH = 0xFF
> -    major = FIELD_GET(CSS_SW_VERSION_UC_MAJOR, fw.sw_version)
> -    minor = FIELD_GET(CSS_SW_VERSION_UC_MINOR, fw.sw_version)
> -    patch = FIELD_GET(CSS_SW_VERSION_UC_PATCH, fw.sw_version)
> -    data += [f"version: {major}.{minor}.{patch}"]
> +class FwGsc(Fw):
> +    def decode(self):
> +        data = []
>  
> -    CSS_DATE_DAY = 0xFF
> -    CSS_DATE_MONTH = 0xFF << 8
> -    CSS_DATE_YEAR = 0xFFFF << 16
> -    day = FIELD_GET(CSS_DATE_DAY, fw.date)
> -    month = FIELD_GET(CSS_DATE_MONTH, fw.date)
> -    year = FIELD_GET(CSS_DATE_YEAR, fw.date)
> -    data += [f"date: {year:02x}-{month:02x}-{day:02x}"]
> +        HUC_GSC_VERSION_HI_DW = 44
> +        HUC_GSC_MINOR_VER_HI_MASK = 0xFF << 16
> +        HUC_GSC_MAJOR_VER_HI_MASK = 0xFF
> +        HUC_GSC_VERSION_LO_DW = 45
> +        HUC_GSC_PATCH_VER_LO_MASK = 0xFF
> +        major = FIELD_GET(HUC_GSC_MAJOR_VER_HI_MASK, self.fw.raw[HUC_GSC_VERSION_HI_DW])
> +        minor = FIELD_GET(HUC_GSC_MINOR_VER_HI_MASK, self.fw.raw[HUC_GSC_VERSION_HI_DW])
> +        patch = FIELD_GET(HUC_GSC_PATCH_VER_LO_MASK, self.fw.raw[HUC_GSC_VERSION_LO_DW])
> +        data += [f"version: {major}.{minor}.{patch}"]
>  
> -    return data
> +        return data
>  
>  
>  def parse_args(argv: typing.List[str]) -> argparse.Namespace:
> @@ -122,14 +162,19 @@ def main(argv: typing.List[str]) -> int:
>  
>      try:
>          with open(args.filename, mode="rb") as f:
> -            fw = cparser.uc_css_header(f)
> +            magic = cparser.magic(f)
> +            f.seek(0, 0)
> +            if magic.data == b"$CPD":
> +                fw = FwGsc(cparser.uc_huc_gsc_header(f))
> +            else:
> +                fw = FwCss(cparser.uc_css_header(f))
>      except FileNotFoundError as e:
>          logging.fatal(e)
>          return 1
>  
> -    print(*decode(fw), sep="\n")
> +    print(*fw.decode(), sep="\n")
>      print("raw dump:", end="")
> -    cstruct.dumpstruct(fw, color=sys.stdout.isatty())
> +    cstruct.dumpstruct(fw.fw, color=sys.stdout.isatty())
>  
>      return 0
>  

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [igt-dev] [i-g-t] intel-gfx-fw-info: Make it compatible with HuC via GSC
  2023-04-25 13:14 ` [igt-dev] [i-g-t] " Balasubramani Vivekanandan
@ 2023-04-25 13:24   ` Lucas De Marchi
  2023-04-28  2:38     ` Ceraolo Spurio, Daniele
  0 siblings, 1 reply; 8+ messages in thread
From: Lucas De Marchi @ 2023-04-25 13:24 UTC (permalink / raw)
  To: Balasubramani Vivekanandan; +Cc: igt-dev

On Tue, Apr 25, 2023 at 06:44:05PM +0530, Balasubramani Vivekanandan wrote:
>On 14.04.2023 10:34, Lucas De Marchi wrote:
>> When HuC is loaded via GSC, the firmware format is different and there
>> is no information for kernel to parse except the version, that is in
>> a different location.  Check for the magic field as the first dword and
>> parse the blob differently based on that.
>>
>> Tesetd with
>> https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/tree/i915/dg2_huc_gsc.bin?id=8f86b5ab3e051170ea240fc409d457e16e24bc21,
>> with output "version: 7.10.3" as expected. Also checked with a couple
>> of GuC firmware blobs and CSS-based HuC firmware blobs to guarantee
>> this doesn't regress.
>>
>> Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
>> ---
>>  tools/intel-gfx-fw-info | 85 +++++++++++++++++++++++++++++++----------
>>  1 file changed, 65 insertions(+), 20 deletions(-)
>>
>> diff --git a/tools/intel-gfx-fw-info b/tools/intel-gfx-fw-info
>> index 77903bbb7..fef310a41 100755
>> --- a/tools/intel-gfx-fw-info
>> +++ b/tools/intel-gfx-fw-info
>> @@ -59,6 +59,23 @@ struct uc_css_header {
>>  	} rsvd;
>>  	u32 header_info;
>>  };
>> +
>> +#define HUC_GSC_VERSION_HI_DW		44
>> +#define   HUC_GSC_MAJOR_VER_HI_MASK	(0xFF << 0)
>> +#define   HUC_GSC_MINOR_VER_HI_MASK	(0xFF << 16)
>> +#define HUC_GSC_VERSION_LO_DW		45
>> +#define   HUC_GSC_PATCH_VER_LO_MASK	(0xFF << 0)
>> +
>> +// Add a fake definition for the GSC's header so this script can still
>> +// check the version
>> +
>> +struct uc_huc_gsc_header {
>> +	u32 raw[HUC_GSC_VERSION_LO_DW + 1];
>
>I haven't tested how the raw dump looks like, but just want to check if
>changing the struct as following would do any help in improving the raw dump
>output?
>
>struct uc_huc_gsc_header {
>	u32 reserved[HUC_GSC_VERSION_HI_DW];
>	u32 huc_ver_hi;
>	u32 huc_ver_low;
>};

good idea. I will take a look.

Daniele has a parser to the real header that will eventually be included
in the kernel. So we will need to move to the struct defined
in the kernel itself. I only saw that last week...  Daniele, any ETA?

>
>Other than that, patch looks good.
>
>Reviewed-by: Balasubramani Vivekanandan <balasubramani.vivekanandan@intel.com>

thanks
Lucas De Marchi

>
>Regards,
>Bala
>
>> +};
>> +
>> +struct magic {
>> +	char data[4];
>> +};
>>  """
>>
>>  logging.basicConfig(format="%(levelname)s: %(message)s")
>> @@ -83,26 +100,49 @@ def FIELD_GET(mask: int, value: int) -> int:
>>      return (value & mask) >> ffs(mask)
>>
>>
>> -def decode(fw) -> str:
>> -    data = []
>> +class Fw:
>> +    def __init__(self, fw):
>> +        self.fw = fw
>> +
>> +
>> +class FwCss(Fw):
>> +    def decode(self):
>> +        data = []
>> +
>> +        CSS_SW_VERSION_UC_MAJOR = 0xFF << 16
>> +        CSS_SW_VERSION_UC_MINOR = 0xFF << 8
>> +        CSS_SW_VERSION_UC_PATCH = 0xFF
>> +        major = FIELD_GET(CSS_SW_VERSION_UC_MAJOR, self.fw.sw_version)
>> +        minor = FIELD_GET(CSS_SW_VERSION_UC_MINOR, self.fw.sw_version)
>> +        patch = FIELD_GET(CSS_SW_VERSION_UC_PATCH, self.fw.sw_version)
>> +        data += [f"version: {major}.{minor}.{patch}"]
>> +
>> +        CSS_DATE_DAY = 0xFF
>> +        CSS_DATE_MONTH = 0xFF << 8
>> +        CSS_DATE_YEAR = 0xFFFF << 16
>> +        day = FIELD_GET(CSS_DATE_DAY, self.fw.date)
>> +        month = FIELD_GET(CSS_DATE_MONTH, self.fw.date)
>> +        year = FIELD_GET(CSS_DATE_YEAR, self.fw.date)
>> +        data += [f"date: {year:02x}-{month:02x}-{day:02x}"]
>> +
>> +        return data
>> +
>>
>> -    CSS_SW_VERSION_UC_MAJOR = 0xFF << 16
>> -    CSS_SW_VERSION_UC_MINOR = 0xFF << 8
>> -    CSS_SW_VERSION_UC_PATCH = 0xFF
>> -    major = FIELD_GET(CSS_SW_VERSION_UC_MAJOR, fw.sw_version)
>> -    minor = FIELD_GET(CSS_SW_VERSION_UC_MINOR, fw.sw_version)
>> -    patch = FIELD_GET(CSS_SW_VERSION_UC_PATCH, fw.sw_version)
>> -    data += [f"version: {major}.{minor}.{patch}"]
>> +class FwGsc(Fw):
>> +    def decode(self):
>> +        data = []
>>
>> -    CSS_DATE_DAY = 0xFF
>> -    CSS_DATE_MONTH = 0xFF << 8
>> -    CSS_DATE_YEAR = 0xFFFF << 16
>> -    day = FIELD_GET(CSS_DATE_DAY, fw.date)
>> -    month = FIELD_GET(CSS_DATE_MONTH, fw.date)
>> -    year = FIELD_GET(CSS_DATE_YEAR, fw.date)
>> -    data += [f"date: {year:02x}-{month:02x}-{day:02x}"]
>> +        HUC_GSC_VERSION_HI_DW = 44
>> +        HUC_GSC_MINOR_VER_HI_MASK = 0xFF << 16
>> +        HUC_GSC_MAJOR_VER_HI_MASK = 0xFF
>> +        HUC_GSC_VERSION_LO_DW = 45
>> +        HUC_GSC_PATCH_VER_LO_MASK = 0xFF
>> +        major = FIELD_GET(HUC_GSC_MAJOR_VER_HI_MASK, self.fw.raw[HUC_GSC_VERSION_HI_DW])
>> +        minor = FIELD_GET(HUC_GSC_MINOR_VER_HI_MASK, self.fw.raw[HUC_GSC_VERSION_HI_DW])
>> +        patch = FIELD_GET(HUC_GSC_PATCH_VER_LO_MASK, self.fw.raw[HUC_GSC_VERSION_LO_DW])
>> +        data += [f"version: {major}.{minor}.{patch}"]
>>
>> -    return data
>> +        return data
>>
>>
>>  def parse_args(argv: typing.List[str]) -> argparse.Namespace:
>> @@ -122,14 +162,19 @@ def main(argv: typing.List[str]) -> int:
>>
>>      try:
>>          with open(args.filename, mode="rb") as f:
>> -            fw = cparser.uc_css_header(f)
>> +            magic = cparser.magic(f)
>> +            f.seek(0, 0)
>> +            if magic.data == b"$CPD":
>> +                fw = FwGsc(cparser.uc_huc_gsc_header(f))
>> +            else:
>> +                fw = FwCss(cparser.uc_css_header(f))
>>      except FileNotFoundError as e:
>>          logging.fatal(e)
>>          return 1
>>
>> -    print(*decode(fw), sep="\n")
>> +    print(*fw.decode(), sep="\n")
>>      print("raw dump:", end="")
>> -    cstruct.dumpstruct(fw, color=sys.stdout.isatty())
>> +    cstruct.dumpstruct(fw.fw, color=sys.stdout.isatty())
>>
>>      return 0
>>

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [igt-dev] [PATCH i-g-t] intel-gfx-fw-info: Make it compatible with HuC via GSC
  2023-04-14 17:34 [igt-dev] [PATCH i-g-t] intel-gfx-fw-info: Make it compatible with HuC via GSC Lucas De Marchi
                   ` (2 preceding siblings ...)
  2023-04-25 13:14 ` [igt-dev] [i-g-t] " Balasubramani Vivekanandan
@ 2023-04-25 16:12 ` Kamil Konieczny
  2023-04-25 19:26   ` Lucas De Marchi
  3 siblings, 1 reply; 8+ messages in thread
From: Kamil Konieczny @ 2023-04-25 16:12 UTC (permalink / raw)
  To: igt-dev; +Cc: Lucas De Marchi

Hi,

On 2023-04-14 at 10:34:08 -0700, Lucas De Marchi wrote:
> When HuC is loaded via GSC, the firmware format is different and there
> is no information for kernel to parse except the version, that is in
> a different location.  Check for the magic field as the first dword and
> parse the blob differently based on that.
> 
> Tesetd with
---- ^^
Tested

Could you add "tools/" in subject ? so it will look like:

[PATCH i-g-t] tools/intel-gfx-fw-info: Make it compatible with HuC via GSC

Acked-by: Kamil Konieczny <kamil.konieczny@linux.intel.com>

Regards,
Kamil

> https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/tree/i915/dg2_huc_gsc.bin?id=8f86b5ab3e051170ea240fc409d457e16e24bc21,
> with output "version: 7.10.3" as expected. Also checked with a couple
> of GuC firmware blobs and CSS-based HuC firmware blobs to guarantee
> this doesn't regress.
> 
> Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
> ---
>  tools/intel-gfx-fw-info | 85 +++++++++++++++++++++++++++++++----------
>  1 file changed, 65 insertions(+), 20 deletions(-)
> 
> diff --git a/tools/intel-gfx-fw-info b/tools/intel-gfx-fw-info
> index 77903bbb7..fef310a41 100755
> --- a/tools/intel-gfx-fw-info
> +++ b/tools/intel-gfx-fw-info
> @@ -59,6 +59,23 @@ struct uc_css_header {
>  	} rsvd;
>  	u32 header_info;
>  };
> +
> +#define HUC_GSC_VERSION_HI_DW		44
> +#define   HUC_GSC_MAJOR_VER_HI_MASK	(0xFF << 0)
> +#define   HUC_GSC_MINOR_VER_HI_MASK	(0xFF << 16)
> +#define HUC_GSC_VERSION_LO_DW		45
> +#define   HUC_GSC_PATCH_VER_LO_MASK	(0xFF << 0)
> +
> +// Add a fake definition for the GSC's header so this script can still
> +// check the version
> +
> +struct uc_huc_gsc_header {
> +	u32 raw[HUC_GSC_VERSION_LO_DW + 1];
> +};
> +
> +struct magic {
> +	char data[4];
> +};
>  """
>  
>  logging.basicConfig(format="%(levelname)s: %(message)s")
> @@ -83,26 +100,49 @@ def FIELD_GET(mask: int, value: int) -> int:
>      return (value & mask) >> ffs(mask)
>  
>  
> -def decode(fw) -> str:
> -    data = []
> +class Fw:
> +    def __init__(self, fw):
> +        self.fw = fw
> +
> +
> +class FwCss(Fw):
> +    def decode(self):
> +        data = []
> +
> +        CSS_SW_VERSION_UC_MAJOR = 0xFF << 16
> +        CSS_SW_VERSION_UC_MINOR = 0xFF << 8
> +        CSS_SW_VERSION_UC_PATCH = 0xFF
> +        major = FIELD_GET(CSS_SW_VERSION_UC_MAJOR, self.fw.sw_version)
> +        minor = FIELD_GET(CSS_SW_VERSION_UC_MINOR, self.fw.sw_version)
> +        patch = FIELD_GET(CSS_SW_VERSION_UC_PATCH, self.fw.sw_version)
> +        data += [f"version: {major}.{minor}.{patch}"]
> +
> +        CSS_DATE_DAY = 0xFF
> +        CSS_DATE_MONTH = 0xFF << 8
> +        CSS_DATE_YEAR = 0xFFFF << 16
> +        day = FIELD_GET(CSS_DATE_DAY, self.fw.date)
> +        month = FIELD_GET(CSS_DATE_MONTH, self.fw.date)
> +        year = FIELD_GET(CSS_DATE_YEAR, self.fw.date)
> +        data += [f"date: {year:02x}-{month:02x}-{day:02x}"]
> +
> +        return data
> +
>  
> -    CSS_SW_VERSION_UC_MAJOR = 0xFF << 16
> -    CSS_SW_VERSION_UC_MINOR = 0xFF << 8
> -    CSS_SW_VERSION_UC_PATCH = 0xFF
> -    major = FIELD_GET(CSS_SW_VERSION_UC_MAJOR, fw.sw_version)
> -    minor = FIELD_GET(CSS_SW_VERSION_UC_MINOR, fw.sw_version)
> -    patch = FIELD_GET(CSS_SW_VERSION_UC_PATCH, fw.sw_version)
> -    data += [f"version: {major}.{minor}.{patch}"]
> +class FwGsc(Fw):
> +    def decode(self):
> +        data = []
>  
> -    CSS_DATE_DAY = 0xFF
> -    CSS_DATE_MONTH = 0xFF << 8
> -    CSS_DATE_YEAR = 0xFFFF << 16
> -    day = FIELD_GET(CSS_DATE_DAY, fw.date)
> -    month = FIELD_GET(CSS_DATE_MONTH, fw.date)
> -    year = FIELD_GET(CSS_DATE_YEAR, fw.date)
> -    data += [f"date: {year:02x}-{month:02x}-{day:02x}"]
> +        HUC_GSC_VERSION_HI_DW = 44
> +        HUC_GSC_MINOR_VER_HI_MASK = 0xFF << 16
> +        HUC_GSC_MAJOR_VER_HI_MASK = 0xFF
> +        HUC_GSC_VERSION_LO_DW = 45
> +        HUC_GSC_PATCH_VER_LO_MASK = 0xFF
> +        major = FIELD_GET(HUC_GSC_MAJOR_VER_HI_MASK, self.fw.raw[HUC_GSC_VERSION_HI_DW])
> +        minor = FIELD_GET(HUC_GSC_MINOR_VER_HI_MASK, self.fw.raw[HUC_GSC_VERSION_HI_DW])
> +        patch = FIELD_GET(HUC_GSC_PATCH_VER_LO_MASK, self.fw.raw[HUC_GSC_VERSION_LO_DW])
> +        data += [f"version: {major}.{minor}.{patch}"]
>  
> -    return data
> +        return data
>  
>  
>  def parse_args(argv: typing.List[str]) -> argparse.Namespace:
> @@ -122,14 +162,19 @@ def main(argv: typing.List[str]) -> int:
>  
>      try:
>          with open(args.filename, mode="rb") as f:
> -            fw = cparser.uc_css_header(f)
> +            magic = cparser.magic(f)
> +            f.seek(0, 0)
> +            if magic.data == b"$CPD":
> +                fw = FwGsc(cparser.uc_huc_gsc_header(f))
> +            else:
> +                fw = FwCss(cparser.uc_css_header(f))
>      except FileNotFoundError as e:
>          logging.fatal(e)
>          return 1
>  
> -    print(*decode(fw), sep="\n")
> +    print(*fw.decode(), sep="\n")
>      print("raw dump:", end="")
> -    cstruct.dumpstruct(fw, color=sys.stdout.isatty())
> +    cstruct.dumpstruct(fw.fw, color=sys.stdout.isatty())
>  
>      return 0
>  
> -- 
> 2.39.0
> 

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [igt-dev] [PATCH i-g-t] intel-gfx-fw-info: Make it compatible with HuC via GSC
  2023-04-25 16:12 ` [igt-dev] [PATCH i-g-t] " Kamil Konieczny
@ 2023-04-25 19:26   ` Lucas De Marchi
  0 siblings, 0 replies; 8+ messages in thread
From: Lucas De Marchi @ 2023-04-25 19:26 UTC (permalink / raw)
  To: Kamil Konieczny, igt-dev, Lucas De Marchi; +Cc: Balasubramani Vivekanandan

On Tue, Apr 25, 2023 at 06:12:26PM +0200, Kamil Konieczny wrote:
>Hi,
>
>On 2023-04-14 at 10:34:08 -0700, Lucas De Marchi wrote:
>> When HuC is loaded via GSC, the firmware format is different and there
>> is no information for kernel to parse except the version, that is in
>> a different location.  Check for the magic field as the first dword and
>> parse the blob differently based on that.
>>
>> Tesetd with
>---- ^^
>Tested
>
>Could you add "tools/" in subject ? so it will look like:
>
>[PATCH i-g-t] tools/intel-gfx-fw-info: Make it compatible with HuC via GSC
>
>Acked-by: Kamil Konieczny <kamil.konieczny@linux.intel.com>

done and pushed. Thanks

Lucas De Marchi

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [igt-dev] [i-g-t] intel-gfx-fw-info: Make it compatible with HuC via GSC
  2023-04-25 13:24   ` Lucas De Marchi
@ 2023-04-28  2:38     ` Ceraolo Spurio, Daniele
  0 siblings, 0 replies; 8+ messages in thread
From: Ceraolo Spurio, Daniele @ 2023-04-28  2:38 UTC (permalink / raw)
  To: Lucas De Marchi, Balasubramani Vivekanandan; +Cc: igt-dev



On 4/25/2023 6:24 AM, Lucas De Marchi wrote:
> On Tue, Apr 25, 2023 at 06:44:05PM +0530, Balasubramani Vivekanandan 
> wrote:
>> On 14.04.2023 10:34, Lucas De Marchi wrote:
>>> When HuC is loaded via GSC, the firmware format is different and there
>>> is no information for kernel to parse except the version, that is in
>>> a different location.  Check for the magic field as the first dword and
>>> parse the blob differently based on that.
>>>
>>> Tesetd with
>>> https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/tree/i915/dg2_huc_gsc.bin?id=8f86b5ab3e051170ea240fc409d457e16e24bc21, 
>>>
>>> with output "version: 7.10.3" as expected. Also checked with a couple
>>> of GuC firmware blobs and CSS-based HuC firmware blobs to guarantee
>>> this doesn't regress.
>>>
>>> Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
>>> ---
>>>  tools/intel-gfx-fw-info | 85 +++++++++++++++++++++++++++++++----------
>>>  1 file changed, 65 insertions(+), 20 deletions(-)
>>>
>>> diff --git a/tools/intel-gfx-fw-info b/tools/intel-gfx-fw-info
>>> index 77903bbb7..fef310a41 100755
>>> --- a/tools/intel-gfx-fw-info
>>> +++ b/tools/intel-gfx-fw-info
>>> @@ -59,6 +59,23 @@ struct uc_css_header {
>>>      } rsvd;
>>>      u32 header_info;
>>>  };
>>> +
>>> +#define HUC_GSC_VERSION_HI_DW        44
>>> +#define   HUC_GSC_MAJOR_VER_HI_MASK    (0xFF << 0)
>>> +#define   HUC_GSC_MINOR_VER_HI_MASK    (0xFF << 16)
>>> +#define HUC_GSC_VERSION_LO_DW        45
>>> +#define   HUC_GSC_PATCH_VER_LO_MASK    (0xFF << 0)
>>> +
>>> +// Add a fake definition for the GSC's header so this script can still
>>> +// check the version
>>> +
>>> +struct uc_huc_gsc_header {
>>> +    u32 raw[HUC_GSC_VERSION_LO_DW + 1];
>>
>> I haven't tested how the raw dump looks like, but just want to check if
>> changing the struct as following would do any help in improving the 
>> raw dump
>> output?
>>
>> struct uc_huc_gsc_header {
>>     u32 reserved[HUC_GSC_VERSION_HI_DW];
>>     u32 huc_ver_hi;
>>     u32 huc_ver_low;
>> };
>
> good idea. I will take a look.
>
> Daniele has a parser to the real header that will eventually be included
> in the kernel. So we will need to move to the struct defined
> in the kernel itself. I only saw that last week...  Daniele, any ETA?

I've just sent it out:

https://patchwork.freedesktop.org/series/117080/

Daniele

>
>>
>> Other than that, patch looks good.
>>
>> Reviewed-by: Balasubramani Vivekanandan 
>> <balasubramani.vivekanandan@intel.com>
>
> thanks
> Lucas De Marchi
>
>>
>> Regards,
>> Bala
>>
>>> +};
>>> +
>>> +struct magic {
>>> +    char data[4];
>>> +};
>>>  """
>>>
>>>  logging.basicConfig(format="%(levelname)s: %(message)s")
>>> @@ -83,26 +100,49 @@ def FIELD_GET(mask: int, value: int) -> int:
>>>      return (value & mask) >> ffs(mask)
>>>
>>>
>>> -def decode(fw) -> str:
>>> -    data = []
>>> +class Fw:
>>> +    def __init__(self, fw):
>>> +        self.fw = fw
>>> +
>>> +
>>> +class FwCss(Fw):
>>> +    def decode(self):
>>> +        data = []
>>> +
>>> +        CSS_SW_VERSION_UC_MAJOR = 0xFF << 16
>>> +        CSS_SW_VERSION_UC_MINOR = 0xFF << 8
>>> +        CSS_SW_VERSION_UC_PATCH = 0xFF
>>> +        major = FIELD_GET(CSS_SW_VERSION_UC_MAJOR, self.fw.sw_version)
>>> +        minor = FIELD_GET(CSS_SW_VERSION_UC_MINOR, self.fw.sw_version)
>>> +        patch = FIELD_GET(CSS_SW_VERSION_UC_PATCH, self.fw.sw_version)
>>> +        data += [f"version: {major}.{minor}.{patch}"]
>>> +
>>> +        CSS_DATE_DAY = 0xFF
>>> +        CSS_DATE_MONTH = 0xFF << 8
>>> +        CSS_DATE_YEAR = 0xFFFF << 16
>>> +        day = FIELD_GET(CSS_DATE_DAY, self.fw.date)
>>> +        month = FIELD_GET(CSS_DATE_MONTH, self.fw.date)
>>> +        year = FIELD_GET(CSS_DATE_YEAR, self.fw.date)
>>> +        data += [f"date: {year:02x}-{month:02x}-{day:02x}"]
>>> +
>>> +        return data
>>> +
>>>
>>> -    CSS_SW_VERSION_UC_MAJOR = 0xFF << 16
>>> -    CSS_SW_VERSION_UC_MINOR = 0xFF << 8
>>> -    CSS_SW_VERSION_UC_PATCH = 0xFF
>>> -    major = FIELD_GET(CSS_SW_VERSION_UC_MAJOR, fw.sw_version)
>>> -    minor = FIELD_GET(CSS_SW_VERSION_UC_MINOR, fw.sw_version)
>>> -    patch = FIELD_GET(CSS_SW_VERSION_UC_PATCH, fw.sw_version)
>>> -    data += [f"version: {major}.{minor}.{patch}"]
>>> +class FwGsc(Fw):
>>> +    def decode(self):
>>> +        data = []
>>>
>>> -    CSS_DATE_DAY = 0xFF
>>> -    CSS_DATE_MONTH = 0xFF << 8
>>> -    CSS_DATE_YEAR = 0xFFFF << 16
>>> -    day = FIELD_GET(CSS_DATE_DAY, fw.date)
>>> -    month = FIELD_GET(CSS_DATE_MONTH, fw.date)
>>> -    year = FIELD_GET(CSS_DATE_YEAR, fw.date)
>>> -    data += [f"date: {year:02x}-{month:02x}-{day:02x}"]
>>> +        HUC_GSC_VERSION_HI_DW = 44
>>> +        HUC_GSC_MINOR_VER_HI_MASK = 0xFF << 16
>>> +        HUC_GSC_MAJOR_VER_HI_MASK = 0xFF
>>> +        HUC_GSC_VERSION_LO_DW = 45
>>> +        HUC_GSC_PATCH_VER_LO_MASK = 0xFF
>>> +        major = FIELD_GET(HUC_GSC_MAJOR_VER_HI_MASK, 
>>> self.fw.raw[HUC_GSC_VERSION_HI_DW])
>>> +        minor = FIELD_GET(HUC_GSC_MINOR_VER_HI_MASK, 
>>> self.fw.raw[HUC_GSC_VERSION_HI_DW])
>>> +        patch = FIELD_GET(HUC_GSC_PATCH_VER_LO_MASK, 
>>> self.fw.raw[HUC_GSC_VERSION_LO_DW])
>>> +        data += [f"version: {major}.{minor}.{patch}"]
>>>
>>> -    return data
>>> +        return data
>>>
>>>
>>>  def parse_args(argv: typing.List[str]) -> argparse.Namespace:
>>> @@ -122,14 +162,19 @@ def main(argv: typing.List[str]) -> int:
>>>
>>>      try:
>>>          with open(args.filename, mode="rb") as f:
>>> -            fw = cparser.uc_css_header(f)
>>> +            magic = cparser.magic(f)
>>> +            f.seek(0, 0)
>>> +            if magic.data == b"$CPD":
>>> +                fw = FwGsc(cparser.uc_huc_gsc_header(f))
>>> +            else:
>>> +                fw = FwCss(cparser.uc_css_header(f))
>>>      except FileNotFoundError as e:
>>>          logging.fatal(e)
>>>          return 1
>>>
>>> -    print(*decode(fw), sep="\n")
>>> +    print(*fw.decode(), sep="\n")
>>>      print("raw dump:", end="")
>>> -    cstruct.dumpstruct(fw, color=sys.stdout.isatty())
>>> +    cstruct.dumpstruct(fw.fw, color=sys.stdout.isatty())
>>>
>>>      return 0
>>>

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2023-04-28  3:38 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-04-14 17:34 [igt-dev] [PATCH i-g-t] intel-gfx-fw-info: Make it compatible with HuC via GSC Lucas De Marchi
2023-04-14 18:11 ` [igt-dev] ✓ Fi.CI.BAT: success for " Patchwork
2023-04-15  1:22 ` [igt-dev] ✗ Fi.CI.IGT: failure " Patchwork
2023-04-25 13:14 ` [igt-dev] [i-g-t] " Balasubramani Vivekanandan
2023-04-25 13:24   ` Lucas De Marchi
2023-04-28  2:38     ` Ceraolo Spurio, Daniele
2023-04-25 16:12 ` [igt-dev] [PATCH i-g-t] " Kamil Konieczny
2023-04-25 19:26   ` Lucas De Marchi

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox