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 X-Spam-Level: X-Spam-Status: No, score=-15.8 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 5F1BDC07E9B for ; Wed, 21 Jul 2021 09:33:09 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id BAED36120A for ; Wed, 21 Jul 2021 09:33:08 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org BAED36120A Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=denx.de Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id BB9FF82991; Wed, 21 Jul 2021 11:33:06 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=none (p=none dis=none) header.from=denx.de Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=denx.de; s=phobos-20191101; t=1626859987; bh=k6M8qupAATlwrLio9VW55eIImTNzrKjHlXNOQnwXka8=; h=Subject:To:Cc:References:From:Date:In-Reply-To:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe: From; b=EBVrUJo40n3bbd7WVXerhn+XPMvunjM6Bb5UCsfeJ6aW38IwaBiK656bcfinTmh42 dIDFRn6INFCIMiuB1Zx9L0g/Roznes1AdNJ+5VB4v7n8TAjE81tr2OV57GqKWWT8gO cV2oebvuhOKifORJuIHgiXJfdNJ+zfcbaLASIKBZyF7w7EVj7R7qkQ6WNV4t9eprk6 S6vsXs1ZUCMyKl48CZEuT2ozUQtK1A4cDe7Pdep83stQzgC75ErWQoiLIiTwySBc9f YnR9rxk7eW+CB+UN5aKPFWrJtGQ0iQHOjdTtsiZx6Rc9HqZ2yQbhKfP5Fsmm/89d4M EQKnH5a3/SZcQ== Received: by phobos.denx.de (Postfix, from userid 109) id D269A829B9; Wed, 21 Jul 2021 11:33:04 +0200 (CEST) Received: from mout-u-205.mailbox.org (mout-u-205.mailbox.org [91.198.250.254]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id 6F22A82977 for ; Wed, 21 Jul 2021 11:33:01 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=none (p=none dis=none) header.from=denx.de Authentication-Results: phobos.denx.de; spf=fail smtp.mailfrom=sr@denx.de Received: from smtp1.mailbox.org (smtp1.mailbox.org [IPv6:2001:67c:2050:105:465:1:1:0]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (P-384) server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by mout-u-205.mailbox.org (Postfix) with ESMTPS id 4GV9Ns2CBTzQkG0; Wed, 21 Jul 2021 11:33:01 +0200 (CEST) Received: from smtp1.mailbox.org ([80.241.60.240]) by spamfilter01.heinlein-hosting.de (spamfilter01.heinlein-hosting.de [80.241.56.115]) (amavisd-new, port 10030) with ESMTP id B-bRVUGeHY5N; Wed, 21 Jul 2021 11:32:57 +0200 (CEST) Subject: Re: [PATCH u-boot-mvebu v2 15/41] tools: kwbimage: Add support for more BINARY headers To: =?UTF-8?Q?Marek_Beh=c3=ban?= , u-boot@lists.denx.de, Chris Packham , Baruch Siach , Dirk Eibach , Chris Packham Cc: Dennis Gilmore , Mario Six , Jon Nettleton , =?UTF-8?Q?Pali_Roh=c3=a1r?= References: <20210719122104.29698-1-marek.behun@nic.cz> <20210719122104.29698-16-marek.behun@nic.cz> From: Stefan Roese Message-ID: <6a08a97f-c9f9-945e-1715-e0a54e4f6cff@denx.de> Date: Wed, 21 Jul 2021 11:32:55 +0200 MIME-Version: 1.0 In-Reply-To: <20210719122104.29698-16-marek.behun@nic.cz> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: de-DE Content-Transfer-Encoding: 8bit X-Rspamd-Queue-Id: 4EE9B1899 X-Rspamd-UID: 26a35d X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.34 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.2 at phobos.denx.de X-Virus-Status: Clean On 19.07.21 14:20, Marek Behún wrote: > From: Pali Rohár > > The kwbimage v1 format supports multiple BINARY executable headers. > Add support for it into mkimage/kwbimage tool. > > Signed-off-by: Pali Rohár > Reviewed-by: Marek Behún > Reviewed-by: Chris Packham > Tested-by: Chris Packham Reviewed-by: Stefan Roese Thanks, Stefan > --- > tools/kwbimage.c | 59 +++++++++++++++++++++++------------------------- > 1 file changed, 28 insertions(+), 31 deletions(-) > > diff --git a/tools/kwbimage.c b/tools/kwbimage.c > index 6c9f93ae8b..1bfc524424 100644 > --- a/tools/kwbimage.c > +++ b/tools/kwbimage.c > @@ -942,6 +942,7 @@ static size_t image_headersz_v1(int *hasext) > { > struct image_cfg_element *binarye; > size_t headersz; > + int cfgi; > > /* > * Calculate the size of the header and the size of the > @@ -949,21 +950,19 @@ static size_t image_headersz_v1(int *hasext) > */ > headersz = sizeof(struct main_hdr_v1); > > - if (image_count_options(IMAGE_CFG_BINARY) > 1) { > - fprintf(stderr, "More than one binary blob, not supported\n"); > - return 0; > - } > - > if (image_count_options(IMAGE_CFG_PAYLOAD) > 1) { > fprintf(stderr, "More than one payload, not possible\n"); > return 0; > } > > - binarye = image_find_option(IMAGE_CFG_BINARY); > - if (binarye) { > + for (cfgi = 0; cfgi < cfgn; cfgi++) { > int ret; > struct stat s; > > + binarye = &image_cfg[cfgi]; > + if (binarye->type != IMAGE_CFG_BINARY) > + continue; > + > ret = stat(binarye->binary.file, &s); > if (ret < 0) { > char cwd[PATH_MAX]; > @@ -1018,10 +1017,10 @@ static size_t image_headersz_v1(int *hasext) > return ALIGN(headersz, 4096); > } > > -int add_binary_header_v1(uint8_t *cur) > +int add_binary_header_v1(uint8_t **cur, uint8_t **next_ext, > + struct image_cfg_element *binarye) > { > - struct image_cfg_element *binarye; > - struct opt_hdr_v1 *hdr = (struct opt_hdr_v1 *)cur; > + struct opt_hdr_v1 *hdr = (struct opt_hdr_v1 *)*cur; > uint32_t *args; > size_t binhdrsz; > struct stat s; > @@ -1029,11 +1028,6 @@ int add_binary_header_v1(uint8_t *cur) > FILE *bin; > int ret; > > - binarye = image_find_option(IMAGE_CFG_BINARY); > - > - if (!binarye) > - return 0; > - > hdr->headertype = OPT_HDR_V1_BINARY_TYPE; > > bin = fopen(binarye->binary.file, "r"); > @@ -1055,17 +1049,17 @@ int add_binary_header_v1(uint8_t *cur) > hdr->headersz_lsb = cpu_to_le16(binhdrsz & 0xFFFF); > hdr->headersz_msb = (binhdrsz & 0xFFFF0000) >> 16; > > - cur += sizeof(struct opt_hdr_v1); > + *cur += sizeof(struct opt_hdr_v1); > > - args = (uint32_t *)cur; > + args = (uint32_t *)*cur; > *args = cpu_to_le32(binarye->binary.nargs); > args++; > for (argi = 0; argi < binarye->binary.nargs; argi++) > args[argi] = cpu_to_le32(binarye->binary.args[argi]); > > - cur += (binarye->binary.nargs + 1) * sizeof(uint32_t); > + *cur += (binarye->binary.nargs + 1) * sizeof(uint32_t); > > - ret = fread(cur, s.st_size, 1, bin); > + ret = fread(*cur, s.st_size, 1, bin); > if (ret != 1) { > fprintf(stderr, > "Could not read binary image %s\n", > @@ -1075,17 +1069,13 @@ int add_binary_header_v1(uint8_t *cur) > > fclose(bin); > > - cur += ALIGN(s.st_size, 4); > + *cur += ALIGN(s.st_size, 4); > > - /* > - * For now, we don't support more than one binary > - * header, and no other header types are > - * supported. So, the binary header is necessarily the > - * last one > - */ > - *((uint32_t *)cur) = 0x00000000; > + *((uint32_t *)*cur) = 0x00000000; > + **next_ext = 1; > + *next_ext = *cur; > > - cur += sizeof(uint32_t); > + *cur += sizeof(uint32_t); > > return 0; > > @@ -1218,6 +1208,7 @@ static void *image_create_v1(size_t *imagesz, struct image_tool_params *params, > uint8_t *image, *cur; > int hasext = 0; > uint8_t *next_ext = NULL; > + int cfgi; > > /* > * Calculate the size of the header and the size of the > @@ -1296,13 +1287,19 @@ static void *image_create_v1(size_t *imagesz, struct image_tool_params *params, > */ > secure_hdr = (struct secure_hdr_v1 *)cur; > cur += sizeof(struct secure_hdr_v1); > + *next_ext = 1; > next_ext = &secure_hdr->next; > } > #endif > - *next_ext = 1; > > - if (add_binary_header_v1(cur)) > - return NULL; > + for (cfgi = 0; cfgi < cfgn; cfgi++) { > + e = &image_cfg[cfgi]; > + if (e->type != IMAGE_CFG_BINARY) > + continue; > + > + if (add_binary_header_v1(&cur, &next_ext, e)) > + return NULL; > + } > > #if defined(CONFIG_KWB_SECURE) > if (secure_hdr && add_secure_header_v1(params, ptr, payloadsz, > Viele Grüße, Stefan -- DENX Software Engineering GmbH, Managing Director: Wolfgang Denk HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-51 Fax: (+49)-8142-66989-80 Email: sr@denx.de