[Feature]add MT2731_MP2_MR2_SVN388 baseline version
Change-Id: Ief04314834b31e27effab435d3ca8ba33b499059
diff --git a/src/bsp/scatter/scripts/dev-info-hdr-tool.py b/src/bsp/scatter/scripts/dev-info-hdr-tool.py
new file mode 100644
index 0000000..3084eef
--- /dev/null
+++ b/src/bsp/scatter/scripts/dev-info-hdr-tool.py
@@ -0,0 +1,93 @@
+#!/usr/bin/env python3
+
+import argparse
+import os
+import struct
+import sys
+
+def read(path):
+ with open(path, "rb") as f:
+ return f.read()
+
+def write(path, data):
+ with open(path, "wb") as f:
+ f.write(data)
+
+def padding(data, size, pattern = b'\0'):
+ return data + pattern * (size - len(data))
+
+def align(data, size, pattern = b'\0'):
+ return padding(data, (len(data) + (size - 1)) & ~(size - 1), pattern)
+
+def gen_nor_bl_img(data):
+ data = align(data, 512, '\xff')
+ header = (padding(struct.pack("<12sII", "SF_BOOT", 1, 512), 512, '\xff') +
+ padding(struct.pack("<8sIIIIIIII", "BRLYT", 1, 2048, 2048 + len(data),
+ 0x42424242, 0x00010007, 2048, 2048 + len(data), 1) + '\0' * 140, 512, '\xff') +
+ '\0' * 1024)
+ return header + data
+
+def gen_emmc_bl_img(data):
+ data = align(data, 512, b'\xff')
+ header = (padding(struct.pack("<12sII", b"EMMC_BOOT", 1, 512), 512, b'\xff') +
+ padding(struct.pack("<8sIIIIIIII", b"BRLYT", 1, 2048, 2048 + len(data),
+ 0x42424242, 0x00010005, 2048, 2048 + len(data), 1) + b'\0' * 140, 512, b'\xff') +
+ b'\0' * 1024)
+ return header + data
+
+def gen_sdcard_bl_img(data):
+ data = align(data, 512, '\xff')
+ header = (padding(struct.pack("<12sII", "SDMMC_BOOT", 1, 512), 512, '\xff') +
+ padding(struct.pack("<8sIIIIIIII", "BRLYT", 1, 2048, 2048 + len(data),
+ 0x42424242, 0x00010008, 2048, 2048 + len(data), 1) + '\0' * 140, 512, '\xff') +
+ '\0' * 1024)
+ return header + data
+
+def get_page_size(nand_name):
+ with open("scripts/nand-setting.txt", "r") as f:
+ for l in f:
+ s = l.split("\t")
+ if s[0] == nand_name:
+ return int(s[1])
+ raise KeyError("not support " + nand_name)
+
+def gen_nand_bl_img(data, nand_name, page_number_bl1, page_number_bl2):
+ hdr1 = "temp1.hdr"
+ hdr2 = "temp2.hdr"
+ page_size = get_page_size(nand_name)
+ data = align(data, 128*page_size, '\xff')
+ os.system("./tools/bch h {0} null {1} 1 {2} 0 0".format(nand_name, hdr1, page_number_bl1))
+ os.system("./tools/bch h {0} null {1} 1 {2} 0 0".format(nand_name, hdr2, page_number_bl2))
+ header1 = padding(read(hdr1), 256*page_size, '\xff')
+ header2 = padding(read(hdr2), 256*page_size, '\xff')
+ os.remove(hdr1)
+ os.remove(hdr2)
+ return header1 + header2 + data + data
+
+def main(argv):
+ parser = argparse.ArgumentParser()
+ parser.add_argument('type', default='emmc', help='emmc | nand | nor | sdcard')
+ parser.add_argument('in_image', help='input file path')
+ parser.add_argument('out_image', help='output image path')
+ parser.add_argument('nand_name', nargs='?', help='nand chip name')
+ parser.add_argument('bl1', type=int, nargs='?', default=0, help='page number of bl1. default=0')
+ parser.add_argument('bl2', type=int, nargs='?', default=0, help='page number of bl2. default=0')
+ args = parser.parse_args()
+
+ if args.type == 'emmc':
+ r = gen_emmc_bl_img(read(args.in_image))
+ elif args.type == 'nor':
+ r = gen_nor_bl_img(read(args.in_image))
+ elif args.type == 'sdcard':
+ r = gen_sdcard_bl_img(read(args.in_image))
+ elif args.type == 'nand':
+ r = gen_nand_bl_img(read(args.in_image), args.nand_name, args.bl1, args.bl2)
+ else:
+ print("unknown type: " + args.type)
+ return 1
+
+ write(args.out_image, r)
+ return 0
+
+if __name__ == "__main__":
+ sys.exit(main(sys.argv))