Copied latest chip data from PRD project
Change-Id: I7fcaff1fd30b725abe8905df76d91a73e4572c08
Signed-off-by: Zane Shelley <zshelle@us.ibm.com>
diff --git a/chip_data/parse_chip_data.py b/chip_data/parse_chip_data.py
new file mode 100755
index 0000000..e000d5d
--- /dev/null
+++ b/chip_data/parse_chip_data.py
@@ -0,0 +1,92 @@
+#!/usr/bin/env python3
+
+import argparse
+import glob
+import os
+
+from pyprd.chip_data.binary import binary_encode
+from pyprd.chip_data.json import json_decode
+from pyprd.chip_data.peltool import peltool_encode
+
+
+def _import_chip_data(indir: str) -> dict:
+ """
+ Iterates each JSON file in the given directory (all of which should be
+ properly formated Chip Data JSON). Then, combines the data into a singular
+ chip_data.Base object for each model/EC.
+ """
+
+ bases = dict()
+
+ for file in glob.glob(os.path.join(indir, "*.json")):
+ with open(file, "r") as fp:
+ for base in json_decode(fp).split():
+ # Should be only one model/EC
+ assert 1 == len(base.model_ec)
+ model_ec = base.model_ec[0]
+
+ if model_ec not in bases:
+ bases[model_ec] = base
+ else:
+ bases[model_ec].merge(base)
+
+ return bases
+
+
+def gen_chip_data_binary(indir: str, outdir: str) -> None:
+ for model_ec, base in _import_chip_data(indir).items():
+ file = f"chip_data_{model_ec.lower()}.cdb"
+ with open(os.path.join(outdir, file), "wb") as fp:
+ binary_encode(model_ec, base, fp)
+
+
+def gen_peltool_json(indir: str, outdir: str) -> None:
+ for model_ec, base in _import_chip_data(indir).items():
+ file = f"pel_parser_data_{model_ec.lower()}.json"
+ with open(os.path.join(outdir, file), "w") as fp:
+ peltool_encode(model_ec, base, fp)
+
+
+if __name__ == "__main__":
+ parser = argparse.ArgumentParser(
+ description="""
+ Parses the target Chip Data files and generates specified data files.
+ """
+ )
+
+ parser.add_argument(
+ "format",
+ type=str,
+ metavar="<format>",
+ choices=["bin", "pel"],
+ help="""
+ Output data type: 'bin' => Chip Data binary, 'pel' => BMC peltool JSON.
+ """,
+ )
+
+ parser.add_argument(
+ "indir",
+ type=str,
+ metavar="<input_path>",
+ help="""
+ Input directory containing the Chip Data files.
+ """,
+ )
+
+ parser.add_argument(
+ "outdir",
+ type=str,
+ metavar="<output_path>",
+ help="""
+ Output directory for the generated data.
+ """,
+ )
+
+ args = parser.parse_args()
+
+ funcs = {
+ "bin": "gen_chip_data_binary",
+ "pel": "gen_peltool_json",
+ }
+
+ globals()[funcs[args.format]](args.indir, args.outdir)