1ce2b1ec6SManish Pandey#!/usr/bin/python3 2ce2b1ec6SManish Pandey# Copyright (c) 2020, Arm Limited. All rights reserved. 3ce2b1ec6SManish Pandey# 4ce2b1ec6SManish Pandey# SPDX-License-Identifier: BSD-3-Clause 5ce2b1ec6SManish Pandey 6ce2b1ec6SManish Pandey""" 7ce2b1ec6SManish PandeyThis script is invoked by Make system and generates secure partition makefile. 8ce2b1ec6SManish PandeyIt expects platform provided secure partition layout file which contains list 9ce2b1ec6SManish Pandeyof Secure Partition Images and Partition manifests(PM). 10ce2b1ec6SManish PandeyLayout file can exist outside of TF-A tree and the paths of Image and PM files 11ce2b1ec6SManish Pandeymust be relative to it. 12ce2b1ec6SManish Pandey 13ce2b1ec6SManish PandeyThis script parses the layout file and generates a make file which updates 14*07c44475SManish PandeyFDT_SOURCES, FIP_ARGS, CRT_ARGS and SPTOOL_ARGS which are used in later build 15*07c44475SManish Pandeysteps. 16ce2b1ec6SManish PandeyThis script also gets SP "uuid" from parsing its PM and converting it to a 17ce2b1ec6SManish Pandeystandard format. 18ce2b1ec6SManish Pandey 19ce2b1ec6SManish Pandeyparam1: Generated mk file "sp_gen.mk" 20ce2b1ec6SManish Pandeyparam2: "SP_LAYOUT_FILE", json file containing platform provided information 21ce2b1ec6SManish Pandeyparam3: plat out directory 22ce2b1ec6SManish Pandey 23ce2b1ec6SManish PandeyGenerated "sp_gen.mk" file contains triplet of following information for each 24ce2b1ec6SManish PandeySecure Partition entry 25ce2b1ec6SManish Pandey FDT_SOURCES += sp1.dts 26ce2b1ec6SManish Pandey SPTOOL_ARGS += -i sp1.bin:sp1.dtb -o sp1.pkg 27ce2b1ec6SManish Pandey FIP_ARGS += --blob uuid=XXXXX-XXX...,file=sp1.pkg 28*07c44475SManish Pandey CRT_ARGS += --sp-pkg1 sp1.pkg 29ce2b1ec6SManish Pandey 30ce2b1ec6SManish PandeyA typical SP_LAYOUT_FILE file will look like 31ce2b1ec6SManish Pandey{ 32ce2b1ec6SManish Pandey "SP1" : { 33ce2b1ec6SManish Pandey "image": "sp1.bin", 34ce2b1ec6SManish Pandey "pm": "test/sp1.dts" 35ce2b1ec6SManish Pandey }, 36ce2b1ec6SManish Pandey 37ce2b1ec6SManish Pandey "SP2" : { 38ce2b1ec6SManish Pandey "image": "sp2.bin", 39ce2b1ec6SManish Pandey "pm": "test/sp2.dts" 40ce2b1ec6SManish Pandey } 41ce2b1ec6SManish Pandey 42ce2b1ec6SManish Pandey ... 43ce2b1ec6SManish Pandey} 44ce2b1ec6SManish Pandey 45ce2b1ec6SManish Pandey""" 46ce2b1ec6SManish Pandey 47ce2b1ec6SManish Pandeyimport getopt 48ce2b1ec6SManish Pandeyimport json 49ce2b1ec6SManish Pandeyimport os 50ce2b1ec6SManish Pandeyimport re 51ce2b1ec6SManish Pandeyimport sys 52ce2b1ec6SManish Pandeyimport uuid 53ce2b1ec6SManish Pandey 54ce2b1ec6SManish Pandeywith open(sys.argv[2],'r') as in_file: 55ce2b1ec6SManish Pandey data = json.load(in_file) 56ce2b1ec6SManish Pandeyjson_file = os.path.abspath(sys.argv[2]) 57ce2b1ec6SManish Pandeyjson_dir = os.path.dirname(json_file) 58ce2b1ec6SManish Pandeygen_file = sys.argv[1] 59ce2b1ec6SManish Pandeyout_dir = sys.argv[3][2:] 60ce2b1ec6SManish Pandeydtb_dir = out_dir + "/fdts/" 61ce2b1ec6SManish Pandeyprint(dtb_dir) 62ce2b1ec6SManish Pandey 63ce2b1ec6SManish Pandeywith open(gen_file, 'w') as out_file: 64*07c44475SManish Pandey for idx, key in enumerate(data.keys()): 65ce2b1ec6SManish Pandey 66ce2b1ec6SManish Pandey """ 67ce2b1ec6SManish Pandey Append FDT_SOURCES 68ce2b1ec6SManish Pandey """ 69ce2b1ec6SManish Pandey dts = os.path.join(json_dir, data[key]['pm']) 70ce2b1ec6SManish Pandey dtb = dtb_dir + os.path.basename(data[key]['pm'][:-1] + "b") 71ce2b1ec6SManish Pandey out_file.write("FDT_SOURCES += " + dts + "\n") 72ce2b1ec6SManish Pandey 73ce2b1ec6SManish Pandey """ 74ce2b1ec6SManish Pandey Update SPTOOL_ARGS 75ce2b1ec6SManish Pandey """ 76ce2b1ec6SManish Pandey dst = out_dir + "/" + key + ".pkg" 77ce2b1ec6SManish Pandey src = [ json_dir + "/" + data[key]['image'] , dtb ] 78ce2b1ec6SManish Pandey out_file.write("SPTOOL_ARGS += -i " + ":".join(src) + " -o " + dst + "\n") 79ce2b1ec6SManish Pandey 80ce2b1ec6SManish Pandey """ 81ce2b1ec6SManish Pandey Extract uuid from partition manifest 82ce2b1ec6SManish Pandey """ 83ce2b1ec6SManish Pandey pm_file = open(dts) 84ce2b1ec6SManish Pandey key = "uuid" 85ce2b1ec6SManish Pandey 86ce2b1ec6SManish Pandey for line in pm_file: 87ce2b1ec6SManish Pandey if key in line: 88ce2b1ec6SManish Pandey uuid_hex = re.findall(r'\<(.+?)\>', line)[0]; 89ce2b1ec6SManish Pandey 90ce2b1ec6SManish Pandey # PM has uuid in format 0xABC... 0x... 0x... 0x... 91ce2b1ec6SManish Pandey # Get rid of '0x' and spaces and convert to string of hex digits 92ce2b1ec6SManish Pandey uuid_hex = uuid_hex.replace('0x','').replace(' ','') 93ce2b1ec6SManish Pandey # make UUID from a string of hex digits 94ce2b1ec6SManish Pandey uuid_std = uuid.UUID(uuid_hex) 95ce2b1ec6SManish Pandey # convert UUID to a string of hex digits in standard form 96ce2b1ec6SManish Pandey uuid_std = str(uuid_std) 97ce2b1ec6SManish Pandey 98ce2b1ec6SManish Pandey """ 99ce2b1ec6SManish Pandey Append FIP_ARGS 100ce2b1ec6SManish Pandey """ 101ce2b1ec6SManish Pandey out_file.write("FIP_ARGS += --blob uuid=" + uuid_std + ",file=" + dst + "\n") 102*07c44475SManish Pandey 103*07c44475SManish Pandey """ 104*07c44475SManish Pandey Append CRT_ARGS 105*07c44475SManish Pandey """ 106*07c44475SManish Pandey out_file.write("CRT_ARGS += --sp-pkg" + str(idx + 1) + " " + dst + "\n") 107ce2b1ec6SManish Pandey out_file.write("\n") 108