[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