Hi Christoph,
On 05/07/2019 05:11 PM, Christoph Muellner wrote: > This patch cleans up make_fit_atf.py in the following way: > > * Fix all issues reported by pylint > * Move copyright notice from file-to-generate to script > * Fix of-by-one bugs in loadables property > * Remove commented-out (dead) code. > > Besides the bugfix no intended changes. > > Tested on RK3399-Q7 with TF-A v2.1 as BL31. > > Signed-off-by: Christoph Muellner <christoph.muell...@theobroma-systems.com> Reviewed-by: Kever Yang <kever.y...@rock-chips.com> Thanks, - Kever > --- > > arch/arm/mach-rockchip/make_fit_atf.py | 153 > ++++++++++++++------------------- > 1 file changed, 64 insertions(+), 89 deletions(-) > > diff --git a/arch/arm/mach-rockchip/make_fit_atf.py > b/arch/arm/mach-rockchip/make_fit_atf.py > index d1faff1957..212bd0a854 100755 > --- a/arch/arm/mach-rockchip/make_fit_atf.py > +++ b/arch/arm/mach-rockchip/make_fit_atf.py > @@ -1,10 +1,12 @@ > #!/usr/bin/env python > """ > -A script to generate FIT image source for rockchip boards > -with ARM Trusted Firmware > -and multiple device trees (given on the command line) > - > -usage: $0 <dt_name> [<dt_name> [<dt_name] ...] > +# SPDX-License-Identifier: GPL-2.0+ > +# > +# A script to generate FIT image source for rockchip boards > +# with ARM Trusted Firmware > +# and multiple device trees (given on the command line) > +# > +# usage: $0 <dt_name> [<dt_name> [<dt_name] ...] > """ > > import os > @@ -14,26 +16,27 @@ import getopt > # pip install pyelftools > from elftools.elf.elffile import ELFFile > > -ELF_SEG_P_TYPE='p_type' > -ELF_SEG_P_PADDR='p_paddr' > -ELF_SEG_P_VADDR='p_vaddr' > -ELF_SEG_P_OFFSET='p_offset' > -ELF_SEG_P_FILESZ='p_filesz' > -ELF_SEG_P_MEMSZ='p_memsz' > +ELF_SEG_P_TYPE = 'p_type' > +ELF_SEG_P_PADDR = 'p_paddr' > +ELF_SEG_P_VADDR = 'p_vaddr' > +ELF_SEG_P_OFFSET = 'p_offset' > +ELF_SEG_P_FILESZ = 'p_filesz' > +ELF_SEG_P_MEMSZ = 'p_memsz' > > -DT_HEADER="""// SPDX-License-Identifier: GPL-2.0+ OR X11 > +DT_HEADER = """ > /* > - * Copyright (C) 2017 Fuzhou Rockchip Electronics Co., Ltd > - * > - * Minimal dts for a SPL FIT image payload. > + * This is a generated file. > */ > /dts-v1/; > > / { > - description = "Configuration to load ATF before U-Boot"; > + description = "FIT image for U-Boot with bl31 (TF-A)"; > #address-cells = <1>; > > images { > +""" > + > +DT_UBOOT = """ > uboot { > description = "U-Boot (64-bit)"; > data = /incbin/("u-boot-nodtb.bin"); > @@ -46,18 +49,14 @@ DT_HEADER="""// SPDX-License-Identifier: GPL-2.0+ OR X11 > > """ > > -DT_IMAGES_NODE_END=""" > - }; > -""" > +DT_IMAGES_NODE_END = """ }; > > -DT_END=""" > -}; > """ > > -def append_atf_node(file, atf_index, phy_addr, elf_entry): > - """ > - Append ATF DT node to input FIT dts file. > - """ > +DT_END = "};" > + > +def append_bl31_node(file, atf_index, phy_addr, elf_entry): > + # Append BL31 DT node to input FIT dts file. > data = 'bl31_0x%08x.bin' % phy_addr > file.write('\t\tatf_%d {\n' % atf_index) > file.write('\t\t\tdescription = \"ARM Trusted Firmware\";\n') > @@ -73,9 +72,7 @@ def append_atf_node(file, atf_index, phy_addr, elf_entry): > file.write('\n') > > def append_fdt_node(file, dtbs): > - """ > - Append FDT nodes. > - """ > + # Append FDT nodes. > cnt = 1 > for dtb in dtbs: > dtname = os.path.basename(dtb) > @@ -88,14 +85,14 @@ def append_fdt_node(file, dtbs): > file.write('\n') > cnt = cnt + 1 > > -def append_conf_section(file, cnt, dtname, atf_cnt): > +def append_conf_section(file, cnt, dtname, segments): > file.write('\t\tconfig_%d {\n' % cnt) > file.write('\t\t\tdescription = "%s";\n' % dtname) > file.write('\t\t\tfirmware = "atf_1";\n') > file.write('\t\t\tloadables = "uboot",') > - for i in range(1, atf_cnt): > - file.write('"atf_%d"' % (i+1)) > - if i != (atf_cnt - 1): > + for i in range(1, segments): > + file.write('"atf_%d"' % (i)) > + if i != (segments - 1): > file.write(',') > else: > file.write(';\n') > @@ -103,57 +100,58 @@ def append_conf_section(file, cnt, dtname, atf_cnt): > file.write('\t\t};\n') > file.write('\n') > > -def append_conf_node(file, dtbs, atf_cnt): > - """ > - Append configeration nodes. > - """ > +def append_conf_node(file, dtbs, segments): > + # Append configeration nodes. > cnt = 1 > file.write('\tconfigurations {\n') > file.write('\t\tdefault = "config_1";\n') > for dtb in dtbs: > dtname = os.path.basename(dtb) > - append_conf_section(file, cnt, dtname, atf_cnt) > + append_conf_section(file, cnt, dtname, segments) > cnt = cnt + 1 > file.write('\t};\n') > file.write('\n') > > -def generate_atf_fit_dts(fit_file_name, bl31_file_name, uboot_file_name, > dtbs_file_name): > - """ > - Generate FIT script for ATF image. > - """ > - if fit_file_name != sys.stdout: > - fit_file = open(fit_file_name, "wb") > - else: > - fit_file = sys.stdout > - > +def generate_atf_fit_dts_uboot(fit_file, uboot_file_name): > num_load_seg = 0 > p_paddr = 0xFFFFFFFF > with open(uboot_file_name, 'rb') as uboot_file: > uboot = ELFFile(uboot_file) > for i in range(uboot.num_segments()): > seg = uboot.get_segment(i) > - if ('PT_LOAD' == seg.__getitem__(ELF_SEG_P_TYPE)): > + if seg.__getitem__(ELF_SEG_P_TYPE) == 'PT_LOAD': > p_paddr = seg.__getitem__(ELF_SEG_P_PADDR) > num_load_seg = num_load_seg + 1 > > assert (p_paddr != 0xFFFFFFFF and num_load_seg == 1) > > - fit_file.write(DT_HEADER % p_paddr) > + fit_file.write(DT_UBOOT % p_paddr) > > +def generate_atf_fit_dts_bl31(fit_file, bl31_file_name, dtbs_file_name): > with open(bl31_file_name, 'rb') as bl31_file: > bl31 = ELFFile(bl31_file) > elf_entry = bl31.header['e_entry'] > - for i in range(bl31.num_segments()): > + segments = bl31.num_segments() > + for i in range(segments): > seg = bl31.get_segment(i) > - if ('PT_LOAD' == seg.__getitem__(ELF_SEG_P_TYPE)): > + if seg.__getitem__(ELF_SEG_P_TYPE) == 'PT_LOAD': > paddr = seg.__getitem__(ELF_SEG_P_PADDR) > - p= seg.__getitem__(ELF_SEG_P_PADDR) > - append_atf_node(fit_file, i+1, paddr, elf_entry) > - atf_cnt = i+1 > + append_bl31_node(fit_file, i + 1, paddr, elf_entry) > append_fdt_node(fit_file, dtbs_file_name) > - fit_file.write('%s\n' % DT_IMAGES_NODE_END) > - append_conf_node(fit_file, dtbs_file_name, atf_cnt) > - fit_file.write('%s\n' % DT_END) > + fit_file.write(DT_IMAGES_NODE_END) > + append_conf_node(fit_file, dtbs_file_name, segments) > + > +def generate_atf_fit_dts(fit_file_name, bl31_file_name, uboot_file_name, > dtbs_file_name): > + # Generate FIT script for ATF image. > + if fit_file_name != sys.stdout: > + fit_file = open(fit_file_name, "wb") > + else: > + fit_file = sys.stdout > + > + fit_file.write(DT_HEADER) > + generate_atf_fit_dts_uboot(fit_file, uboot_file_name) > + generate_atf_fit_dts_bl31(fit_file, bl31_file_name, dtbs_file_name) > + fit_file.write(DT_END) > > if fit_file_name != sys.stdout: > fit_file.close() > @@ -165,56 +163,33 @@ def generate_atf_binary(bl31_file_name): > num = bl31.num_segments() > for i in range(num): > seg = bl31.get_segment(i) > - if ('PT_LOAD' == seg.__getitem__(ELF_SEG_P_TYPE)): > + if seg.__getitem__(ELF_SEG_P_TYPE) == 'PT_LOAD': > paddr = seg.__getitem__(ELF_SEG_P_PADDR) > file_name = 'bl31_0x%08x.bin' % paddr > with open(file_name, "wb") as atf: > - atf.write(seg.data()); > - > -def get_bl31_segments_info(bl31_file_name): > - """ > - Get load offset, physical offset, file size > - from bl31 elf file program headers. > - """ > - with open(bl31_file_name) as bl31_file: > - bl31 = ELFFile(bl31_file) > - > - num = bl31.num_segments() > - print('Number of Segments : %d' % bl31.num_segments()) > - for i in range(num): > - print('Segment %d' % i) > - seg = bl31.get_segment(i) > - ptype = seg[ELF_SEG_P_TYPE] > - poffset = seg[ELF_SEG_P_OFFSET] > - pmemsz = seg[ELF_SEG_P_MEMSZ] > - pfilesz = seg[ELF_SEG_P_FILESZ] > - print('type: %s\nfilesz: %08x\nmemsz: %08x\noffset: %08x' % > (ptype, pfilesz, pmemsz, poffset)) > - paddr = seg[ELF_SEG_P_PADDR] > - print('paddr: %08x' % paddr) > + atf.write(seg.data()) > > def main(): > - uboot_elf="./u-boot" > - bl31_elf="./bl31.elf" > - FIT_ITS=sys.stdout > + uboot_elf = "./u-boot" > + bl31_elf = "./bl31.elf" > + fit_its = sys.stdout > > opts, args = getopt.getopt(sys.argv[1:], "o:u:b:h") > for opt, val in opts: > if opt == "-o": > - FIT_ITS=val > + fit_its = val > elif opt == "-u": > - uboot_elf=val > + uboot_elf = val > elif opt == "-b": > - bl31_elf=val > + bl31_elf = val > elif opt == "-h": > print(__doc__) > sys.exit(2) > > dtbs = args > - #get_bl31_segments_info("u-boot") > - #get_bl31_segments_info("bl31.elf") > > - generate_atf_fit_dts(FIT_ITS, bl31_elf, uboot_elf, dtbs) > - generate_atf_binary(bl31_elf); > + generate_atf_fit_dts(fit_its, bl31_elf, uboot_elf, dtbs) > + generate_atf_binary(bl31_elf) > > if __name__ == "__main__": > main() _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot