[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))