Stefan Reinauer (stefan.reinauer@coreboot.org) just uploaded a new patch set to gerrit, which you can find at https://review.coreboot.org/14903 -gerrit commit 3197375e21ef9cc81ffee08c4012532d253981c0 Author: Akshay Saraswat <akshay.s@samsung.com> Date: Fri Sep 5 16:18:01 2014 +0530 Exynos7: Bootblock: Update header with size in blocks BL1 may not always ask for bootblock binary's size in number of bytes rather it may find reading size in number of blocks easier sometimes. Modify the header populating script to mention bootblock size in number of blocks instead of number of bytes whenever asked. BUG=None BRANCH=None TEST=Compiled and booted coreboot over Jazz mainboard with this series Change-Id: Ic8895d7142c70a92a658cba56367231d36908b61 Signed-off-by: Alim Akhtar <alim.akhtar@samsung.com> Signed-off-by: Akshay Saraswat <akshay.s@samsung.com> --- util/exynos/variable_cksum.py | 43 ++++++++++++++++++++++++++++++++++++------- 1 file changed, 36 insertions(+), 7 deletions(-) diff --git a/util/exynos/variable_cksum.py b/util/exynos/variable_cksum.py index 9725261..4db4f98 100755 --- a/util/exynos/variable_cksum.py +++ b/util/exynos/variable_cksum.py @@ -29,7 +29,7 @@ This utility computes and fills Exynos ROM checksum (for BL1 or BL2). (Algorithm from U-Boot: tools/mkexynosspl.c) -Input: IN OUT +Input: IN OUT <size_in_blocks> Output: @@ -39,21 +39,50 @@ Output: import struct import sys +import argparse -def main(argv): - if len(argv) != 3: - exit('usage: %s IN OUT' % argv[0]) +# Get the number of bytes needed to make _data_ 512 byte alinged +def alignpos(pos, alignbytes): + mask = alignbytes - 1 + return (pos + mask) & ~mask + +def parseargs(): + """Parses arguments and returns results""" + parser = argparse.ArgumentParser() + parser.add_argument("IN", type=str, help="Input file") + parser.add_argument("OUT", type=str, help="Output file") + + parser.add_argument("--blocks", action='store_true', help="Use block as size") + parser.add_argument("--bsize", type=int, help="Size of block to use, default=512", default=512) + + return parser.parse_args() + +def main(): + + args = parseargs() + + in_name = args.IN + out_name = args.OUT - in_name, out_name = argv[1:3] header_format = "<IIII" with open(in_name, "rb") as in_file, open(out_name, "wb") as out_file: data = in_file.read() + size = struct.calcsize(header_format) + len(data) + + if args.blocks: + block_size = args.bsize + if ((size % block_size) != 0): + data = data + (alignpos(size, block_size) - size) * '\0' + count = len(data) + else: + size = (size / block_size) + header = struct.pack(header_format, - struct.calcsize(header_format) + len(data), + size, sum(map(ord, data)), 0, 0) out_file.write(header + data) if __name__ == '__main__': - main(sys.argv) + main()