[PATCH i-g-t 2/2] intel-gfx-fw-info: Allow to print checksum
Lucas De Marchi
lucas.demarchi at intel.com
Tue Aug 13 15:21:41 UTC 2024
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>
---
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