[PATCH i-g-t 2/2] intel-gfx-fw-info: Allow to print checksum
Lucas De Marchi
lucas.demarchi at intel.com
Wed Aug 14 13:19:40 UTC 2024
On Wed, Aug 14, 2024 at 09:25:24AM GMT, Gustavo Sousa wrote:
>Quoting Gustavo Sousa (2024-08-14 09:03:11-03:00)
>>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>
>
>By the way, "Dump GuC/HuC firmware header" is not a very accurate
>description for this command anymore, since we skip doing that after
>this. Maybe extend this patch to replace it with "Dump GuC/HuC firmware
>information"?
yep... I squashed this I'm going to push. Thanks.
Lucas De Marchi
>
>--
>Gustavo Sousa
>
>>
>>>---
>>> 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