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)