[PATCH i-g-t 2/2] intel-gfx-fw-info: Allow to print checksum

Gustavo Sousa gustavo.sousa at intel.com
Wed Aug 14 12:03:11 UTC 2024


Quoting Lucas De Marchi (2024-08-13 12:21:41-03:00)
>Choose a checksum algo and use it to print when parsing a firmware.
>This may be useful in CI to dump what is the exact firmware used
>and may also be useful when inspecting the firmware repo and making
>sure mistakes are not introduced. Configuring intel-gfx-fw-info a diff
>driver:
>
>        firmware $ echo "*.bin   diff=intelfw" >> .git/info/attributes
>        firmware $ git config --local \
>                diff.intelfw.textconv \
>                "<path-to-igt>/tools/intel-gfx-fw-info -c"
>
>Example for the LNL update that happened recently:
>
>        firmware $ git diff --text bc42cdc34bd8 b5bef5bdbab1 --  xe/lnl_guc_70.bin
>        diff --git a/xe/lnl_guc_70.bin b/xe/lnl_guc_70.bin
>        index 785763163..75a1958f7 100644
>        --- a/xe/lnl_guc_70.bin
>        +++ b/xe/lnl_guc_70.bin
>        @@ -1,3 +1,3 @@
>        -version: 70.20.0
>        -date: 2024-02-09
>        -checksum: 0809f459048a23716fd3019074f36812163e027835cbb43acfcfe72cd83fb0cc
>        +version: 70.29.2
>        +date: 2024-07-26
>        +checksum: e7ceae28b06bd71c53fe177f4f6787aac88956d8944fa02b1ab2ec53b1e961e4
>
>If for some reason there's only a checksum change, something went wrong,
>and without it we wouldn't notice when using this tool as a diff driver.
>
>Signed-off-by: Lucas De Marchi <lucas.demarchi at intel.com>

Reviewed-by: Gustavo Sousa <gustavo.sousa at intel.com>

>---
> tools/intel-gfx-fw-info | 17 +++++++++++++++++
> 1 file changed, 17 insertions(+)
>
>diff --git a/tools/intel-gfx-fw-info b/tools/intel-gfx-fw-info
>index c0d9b00ac..31dc78776 100755
>--- a/tools/intel-gfx-fw-info
>+++ b/tools/intel-gfx-fw-info
>@@ -6,6 +6,7 @@
> 
> import argparse
> import logging
>+import hashlib
> import sys
> import typing
> 
>@@ -151,18 +152,26 @@ def parse_args(argv: typing.List[str]) -> argparse.Namespace:
> 
>     parser.add_argument("-x", "--raw", action="store_true",
>                         help="Also print raw header content")
>+    parser.add_argument("-c", "--checksum", action="store_true",
>+                        help="Also print checksum")
> 
>     parser.add_argument("filename", help="GuC/HuC firmware file")
> 
>     return parser.parse_args(argv)
> 
> 
>+def calculate_checksum(f: typing.BinaryIO) -> str:
>+    return hashlib.sha256(f.read()).hexdigest()
>+
>+
> def main(argv: typing.List[str]) -> int:
>     args = parse_args(argv)
> 
>     cparser = cstruct.cstruct()
>     cparser.load(CDEF)
> 
>+    checksum = None
>+
>     try:
>         with open(args.filename, mode="rb") as f:
>             magic = cparser.magic(f)
>@@ -171,6 +180,11 @@ def main(argv: typing.List[str]) -> int:
>                 fw = FwGsc(cparser.uc_huc_gsc_header(f))
>             else:
>                 fw = FwCss(cparser.uc_css_header(f))
>+
>+            if args.checksum:
>+                f.seek(0, 0)
>+                checksum = calculate_checksum(f)
>+
>     except FileNotFoundError as e:
>         logging.fatal(e)
>         return 1
>@@ -181,6 +195,9 @@ def main(argv: typing.List[str]) -> int:
>         print("raw dump:", end="")
>         cstruct.dumpstruct(fw.fw, color=sys.stdout.isatty())
> 
>+    if checksum:
>+        print(f"checksum: {checksum}")
>+
>     return 0
> 
> 
>-- 
>2.43.0
>


More information about the igt-dev mailing list