From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from phobos.denx.de (phobos.denx.de [85.214.62.61]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id DF70AC38142 for ; Mon, 23 Jan 2023 17:29:44 +0000 (UTC) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 25F4B8573F; Mon, 23 Jan 2023 18:29:43 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=pass (p=quarantine dis=none) header.from=ti.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (1024-bit key; unprotected) header.d=ti.com header.i=@ti.com header.b="R+9uatbm"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 92E3C85751; Mon, 23 Jan 2023 18:29:41 +0100 (CET) Received: from lelv0143.ext.ti.com (lelv0143.ext.ti.com [198.47.23.248]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id A25198573E for ; Mon, 23 Jan 2023 18:29:37 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=pass (p=quarantine dis=none) header.from=ti.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=n-francis@ti.com Received: from lelv0266.itg.ti.com ([10.180.67.225]) by lelv0143.ext.ti.com (8.15.2/8.15.2) with ESMTP id 30NEJ9n0048346; Mon, 23 Jan 2023 08:19:09 -0600 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1674483549; bh=Wn9N69jpsnsByu72F9rjHV4lD0+S8q0VYxBH2RzeSeY=; h=Date:Subject:To:CC:References:From:In-Reply-To; b=R+9uatbmhO2fJY7/YKDdhEDdqmREcY/eSMJjGp+LrRKCa8upNNc+gHQiSKIZFphsD VzXfm54WDuYdIYtDi5eI2J64cYBqme2Id+Ti/nEUtHtIHrJpJRJB5lNWlH8mReIP29 msEVUgM+4TurrCTRqOlIZ6mu1maehcOEL32ku10w= Received: from DLEE112.ent.ti.com (dlee112.ent.ti.com [157.170.170.23]) by lelv0266.itg.ti.com (8.15.2/8.15.2) with ESMTPS id 30NEJ9uH016704 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=FAIL); Mon, 23 Jan 2023 08:19:09 -0600 Received: from DLEE107.ent.ti.com (157.170.170.37) by DLEE112.ent.ti.com (157.170.170.23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2507.16; Mon, 23 Jan 2023 08:19:08 -0600 Received: from lelv0326.itg.ti.com (10.180.67.84) by DLEE107.ent.ti.com (157.170.170.37) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2507.16 via Frontend Transport; Mon, 23 Jan 2023 08:19:08 -0600 Received: from [172.24.145.248] (ileaxei01-snat2.itg.ti.com [10.180.69.6]) by lelv0326.itg.ti.com (8.15.2/8.15.2) with ESMTP id 30NEJ5St016410; Mon, 23 Jan 2023 08:19:06 -0600 Message-ID: <0d8bfd55-f0aa-4ead-820f-c7ea6f46225e@ti.com> Date: Mon, 23 Jan 2023 19:49:05 +0530 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.4.2 Subject: Re: [PATCH 02/21] tools: sysfw: Add script for generating configuration blobs Content-Language: en-US To: Simon Glass CC: , , , , , , , References: <20230120101903.179959-1-n-francis@ti.com> <20230120101903.179959-3-n-francis@ti.com> From: Neha Malcom Francis In-Reply-To: <20230120101903.179959-3-n-francis@ti.com> Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: 7bit X-EXCLAIMER-MD-CONFIG: e1e8a2fd-e40a-4ac6-ac9b-f7e9cc9ee180 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.103.6 at phobos.denx.de X-Virus-Status: Clean Hi Simon, On 20/01/23 15:48, Neha Malcom Francis wrote: > Certain devices in the K3 architecture such as AM64x require board > configuration binaries packed along with their descriptions into a > sysfw_data binary. The final binary is required to be packed into the > final system firmware images. > > Signed-off-by: Neha Malcom Francis > --- > tools/k3_sysfw_boardcfg_blob_creator.py | 116 ++++++++++++++++++++++++ > 1 file changed, 116 insertions(+) > create mode 100755 tools/k3_sysfw_boardcfg_blob_creator.py > > diff --git a/tools/k3_sysfw_boardcfg_blob_creator.py b/tools/k3_sysfw_boardcfg_blob_creator.py > new file mode 100755 > index 0000000000..da99808521 > --- /dev/null > +++ b/tools/k3_sysfw_boardcfg_blob_creator.py > @@ -0,0 +1,116 @@ > +# SPDX-License-Identifier: GPL-2.0+ > +# Copyright (C) 2022 Texas Instruments Incorporated - https://www.ti.com/ > +# > +# TI Script for Board Configuration Packaging > +# > + > +import argparse > +import logging > +import os > +import struct > +import tempfile > +from shutil import copyfileobj > +from shutil import rmtree > + > +BOARDCFG = 0xB > +BOARDCFG_SEC = 0xD > +BOARDCFG_PM = 0xE > +BOARDCFG_RM = 0xC > +BOARDCFG_NUM_ELEMS = 4 > + > +class BoardCfgDesc(): > + """Get board config descriptor for a given file """ > + > + fmt = ' + index = 0 > + offset = 0 > + > + def __init__(self, outfile, devgrp, > + sw_rev = 0, > + num_elems = BOARDCFG_NUM_ELEMS): > + self.devgrp = devgrp > + try: > + self.fh = open(outfile, 'wb') > + bytes = self.fh.write(struct.pack(' + self.offset += bytes > + self.offset += num_elems * struct.calcsize(self.fmt) > + self.tmpdir = tempfile.mkdtemp() > + descfile = os.path.join(self.tmpdir, "desc") > + bcfgfile = os.path.join(self.tmpdir, "bcfg") > + self.desc_fh = open(descfile, "wb+") > + self.bcfg_fh = open(bcfgfile, "wb+") > + except: > + raise Exception("File Error") > + > + def add_boardcfg(self, bcfgtype, bcfgfile): > + with open(bcfgfile, 'rb') as bfh: > + bcfg = bfh.read() > + size = len(bcfg) > + desc = struct.pack(self.fmt, bcfgtype, self.offset, size, self.devgrp, 0) > + self.desc_fh.write(desc) > + self.bcfg_fh.write(bcfg) > + logging.debug("Packing boardcfg data of size [%d bytes] from file %s", size, bcfgfile) > + self.offset += size > + self.index += 1 > + > + def finalize(self): > + try: > + self.desc_fh.seek(0) > + self.bcfg_fh.seek(0) > + copyfileobj(self.desc_fh, self.fh) > + copyfileobj(self.bcfg_fh, self.fh) > + except: > + logging.error("**** Error in finalizing boardcfg file ****") > + raise Exception("File Error") > + finally: > + self.fh.close() > + self.desc_fh.close() > + self.bcfg_fh.close() > + rmtree(self.tmpdir) > + > +def create_sysfw_blob(args): > + """Create a SYSFW data blob to be used as a component in combined image """ > + > + logging.info("#### Creating SYSFW data blob - %s ####", args.output_file.name) > + logging.info("#### SW Rev = %d", args.sw_rev) > + logging.info("#### Device Group = %d", args.devgrp) > + > + cnt = 0 > + if args.boardcfg is not None: cnt = cnt + 1 > + if args.boardcfg_sec is not None: cnt = cnt + 1 > + if args.boardcfg_pm is not None: cnt = cnt + 1 > + if args.boardcfg_rm is not None: cnt = cnt + 1 > + > + blob = BoardCfgDesc(args.output_file.name, args.devgrp, args.sw_rev, cnt) > + if args.boardcfg is not None: > + logging.info("#### Board config binary - %s", args.boardcfg.name) > + blob.add_boardcfg(BOARDCFG, args.boardcfg.name) > + if args.boardcfg_sec is not None: > + logging.info("#### Board config security binary - %s", args.boardcfg_sec.name) > + blob.add_boardcfg(BOARDCFG_SEC, args.boardcfg_sec.name) > + if args.boardcfg_pm is not None: > + logging.info("#### Board config PM binary - %s", args.boardcfg_pm.name) > + blob.add_boardcfg(BOARDCFG_PM, args.boardcfg_pm.name) > + if args.boardcfg_rm is not None: > + logging.info("#### Board config RM binary - %s", args.boardcfg_rm.name) > + blob.add_boardcfg(BOARDCFG_RM, args.boardcfg_rm.name) > + > + blob.finalize() > + > +# options -> device, sw_rev, boardcfg, security boardcfg, pm boardcfg, rm boardcfg, output file > + > +# parser for mandatory arguments > +pp = argparse.ArgumentParser(add_help=False) > +pp.add_argument('-l', '--log-level', type=str, default="INFO", choices=["INFO", "DEBUG"]) > +pp.add_argument('--sw-rev', type=int, default=1) > +pp.add_argument('-o', '--output-file', type=argparse.FileType('wb'), default="./sysfw-data.bin") > +pp.add_argument('-d', '--devgrp', type=int, default=0) > +pp.add_argument('-b', '--boardcfg', type=argparse.FileType('rb')) > +pp.add_argument('-s', '--boardcfg-sec', type=argparse.FileType('rb')) > +pp.add_argument('-p', '--boardcfg-pm', type=argparse.FileType('rb')) > +pp.add_argument('-r', '--boardcfg-rm', type=argparse.FileType('rb')) > + > +args = pp.parse_args() > +logging.getLogger().setLevel(args.log_level) > +logging.debug(args) > +create_sysfw_blob(args) Working on your reviews, I'm trying to get rid of all external scripts and putting them into btools/etypes which seems fit. * ti_secure_path can be nicely put into a btool * ti_boardcfg can also be an etype that outputs -cfg.bins But... I am not sure about this script above k3_sysfw_boardcfg_blob_creator.py. This script essentially does a more detailed packing of the -cfg.bins that have been generated by binman. Since binman doesn't account for dependencies as of now; I am not sure how to go about it. Any pointers? I could have something like combined-sysfw-cfg.bin { sysfw-boardcfg { ti-boardcfg { config = "board-cfg.yaml"; schema = "schema.yaml"; } ti-boardcfg { config = "sec-cfg.yaml"; ... But is there any way to not have to implement this entry within entry coupled with packaging, which I think might get a little messy? -- Thanking You Neha Malcom Francis