All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Marek Behún" <marek.behun@nic.cz>
To: u-boot@lists.denx.de, Chris Packham <judge.packham@gmail.com>,
	Stefan Roese <sr@denx.de>, Baruch Siach <baruch@tkos.co.il>,
	Dirk Eibach <dirk.eibach@gdsys.cc>,
	Chris Packham <chris.packham@alliedtelesis.co.nz>
Cc: "Dennis Gilmore" <dgilmore@redhat.com>,
	"Mario Six" <mario.six@gdsys.cc>,
	"Jon Nettleton" <jon@solid-run.com>,
	"Pali Rohár" <pali@kernel.org>,
	"Marek Behún" <marek.behun@nic.cz>
Subject: [PATCH u-boot-mvebu v2 17/41] tools: kwbimage: Add support for DATA command also for v1 images
Date: Mon, 19 Jul 2021 14:20:40 +0200	[thread overview]
Message-ID: <20210719122104.29698-18-marek.behun@nic.cz> (raw)
In-Reply-To: <20210719122104.29698-1-marek.behun@nic.cz>

From: Pali Rohár <pali@kernel.org>

The DATA command is already supported by mkimage for v0 images, but not
for v1 images.

BootROM code which executes v1 images also supports DATA command via an
optional extended v1 header OPT_HDR_V1_REGISTER_TYPE.

Implement support for DATA command for v1 images.

Signed-off-by: Pali Rohár <pali@kernel.org>
Reviewed-by: Marek Behún <marek.behun@nic.cz>
Reviewed-by: Chris Packham <judge.packham@gmail.com>
Tested-by: Chris Packham <judge.packham@gmail.com>
---
 tools/kwbimage.c | 32 +++++++++++++++++++++++++++++++-
 tools/kwbimage.h | 27 +++++++++++++++++++++++++++
 2 files changed, 58 insertions(+), 1 deletion(-)

diff --git a/tools/kwbimage.c b/tools/kwbimage.c
index 74a77412d7..b585f49180 100644
--- a/tools/kwbimage.c
+++ b/tools/kwbimage.c
@@ -933,6 +933,7 @@ static void *image_create_v0(size_t *imagesz, struct image_tool_params *params,
 static size_t image_headersz_v1(int *hasext)
 {
 	struct image_cfg_element *binarye;
+	unsigned int count;
 	size_t headersz;
 	int cfgi;
 
@@ -942,6 +943,10 @@ static size_t image_headersz_v1(int *hasext)
 	 */
 	headersz = sizeof(struct main_hdr_v1);
 
+	count = image_count_options(IMAGE_CFG_DATA);
+	if (count > 0)
+		headersz += sizeof(struct register_set_hdr_v1) + 8 * count + 4;
+
 	for (cfgi = 0; cfgi < cfgn; cfgi++) {
 		int ret;
 		struct stat s;
@@ -1188,6 +1193,7 @@ static void *image_create_v1(size_t *imagesz, struct image_tool_params *params,
 {
 	struct image_cfg_element *e;
 	struct main_hdr_v1 *main_hdr;
+	struct register_set_hdr_v1 *register_set_hdr;
 #if defined(CONFIG_KWB_SECURE)
 	struct secure_hdr_v1 *secure_hdr = NULL;
 #endif
@@ -1195,7 +1201,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;
+	int cfgi, datai, size;
 
 	/*
 	 * Calculate the size of the header and the size of the
@@ -1279,6 +1285,30 @@ static void *image_create_v1(size_t *imagesz, struct image_tool_params *params,
 	}
 #endif
 
+	datai = 0;
+	register_set_hdr = (struct register_set_hdr_v1 *)cur;
+	for (cfgi = 0; cfgi < cfgn; cfgi++) {
+		e = &image_cfg[cfgi];
+		if (e->type != IMAGE_CFG_DATA)
+			continue;
+		register_set_hdr->data[datai].entry.address =
+			cpu_to_le32(e->regdata.raddr);
+		register_set_hdr->data[datai].entry.value =
+			cpu_to_le32(e->regdata.rdata);
+		datai++;
+	}
+	if (datai != 0) {
+		size = sizeof(struct register_set_hdr_v1) + 8 * datai + 4;
+		register_set_hdr->headertype = OPT_HDR_V1_REGISTER_TYPE;
+		register_set_hdr->headersz_lsb = cpu_to_le16(size & 0xFFFF);
+		register_set_hdr->headersz_msb = size >> 16;
+		/* Set delay to the smallest possible value 1ms. */
+		register_set_hdr->data[datai].last_entry.delay = 1;
+		cur += size;
+		*next_ext = 1;
+		next_ext = &register_set_hdr->data[datai].last_entry.next;
+	}
+
 	for (cfgi = 0; cfgi < cfgn; cfgi++) {
 		e = &image_cfg[cfgi];
 		if (e->type != IMAGE_CFG_BINARY)
diff --git a/tools/kwbimage.h b/tools/kwbimage.h
index cab3d95d13..9f86da46e8 100644
--- a/tools/kwbimage.h
+++ b/tools/kwbimage.h
@@ -148,6 +148,33 @@ struct secure_hdr_v1 {
 	uint16_t reserved5;		/* 0x25E2 - 0x25E3 */
 };
 
+/*
+ * Structure of register set
+ */
+struct register_set_hdr_v1 {
+	uint8_t  headertype;		/* 0x0 */
+	uint8_t  headersz_msb;		/* 0x1 */
+	uint16_t headersz_lsb;		/* 0x2 - 0x3 */
+	union {
+		struct {
+			uint32_t address;	/* 0x4+8*N - 0x7+8*N */
+			uint32_t value;		/* 0x8+8*N - 0xB+8*N */
+		} entry;
+		struct {
+			uint8_t  next;		/* 0xC+8*N */
+			uint8_t  delay;		/* 0xD+8*N */
+			uint16_t reserved;	/* 0xE+8*N - 0xF+8*N */
+		} last_entry;
+	} data[];
+};
+
+/*
+ * Value 0 in register_set_hdr_v1 delay field is special.
+ * Instead of delay it setup SDRAM Controller.
+ */
+#define REGISTER_SET_HDR_OPT_DELAY_SDRAM_SETUP 0
+#define REGISTER_SET_HDR_OPT_DELAY_MS(val) ((val) ?: 1)
+
 /*
  * Various values for the opt_hdr_v1->headertype field, describing the
  * different types of optional headers. The "secure" header contains
-- 
2.31.1


  parent reply	other threads:[~2021-07-19 12:24 UTC|newest]

Thread overview: 65+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-07-19 12:20 [PATCH u-boot-mvebu v2 00/41] kwboot / kwbimage improvements reducing image size Marek Behún
2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 01/41] tools: kwbimage: Fix compilation without CONFIG_SYS_U_BOOT_OFFS Marek Behún
2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 02/41] tools: kwbimage: Simplify aligning and calculating checksum Marek Behún
2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 03/41] tools: kwbimage: Align SPI and NAND images to 256 bytes Marek Behún
2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 04/41] tools: kwbimage: Add constant for SDIO bootfrom Marek Behún
2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 05/41] tools: kwbimage: Fix generation of SATA, SDIO and PCIe images Marek Behún
2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 06/41] tools: kwbimage: Don't crash when binary file name does not contain '/' Marek Behún
2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 07/41] tools: kwbimage: Fix check for v0 extended header checksum Marek Behún
2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 08/41] tools: kwbimage: Validate extended headers of v1 images Marek Behún
2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 09/41] tools: kwbimage: Validate data checksum " Marek Behún
2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 10/41] tools: kwbimage: Print size of binary header in kwbimage_print_header() Marek Behún
2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 11/41] tools: kwbimage: Cosmetic fix - remove redundant space character Marek Behún
2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 12/41] tools: kwbimage: Use -a parameter (load address) for v1 images Marek Behún
2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 13/41] tools: kwbimage: Change maximum number of arguments in binary header to 256 Marek Behún
2021-07-21  9:31   ` Stefan Roese
2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 14/41] tools: kwbimage: Fix calculating size of binary header Marek Behún
2021-07-21  9:32   ` Stefan Roese
2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 15/41] tools: kwbimage: Add support for more BINARY headers Marek Behún
2021-07-21  9:32   ` Stefan Roese
2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 16/41] tools: kwbimage: Don't parse PAYLOAD keyword Marek Behún
2021-07-21  9:33   ` Stefan Roese
2021-07-19 12:20 ` Marek Behún [this message]
2021-07-21  9:35   ` [PATCH u-boot-mvebu v2 17/41] tools: kwbimage: Add support for DATA command also for v1 images Stefan Roese
2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 18/41] tools: kwbimage: Add support for a new DATA_DELAY command Marek Behún
2021-07-21  9:35   ` Stefan Roese
2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 19/41] tools: kwbimage: Do not hide usage of secure header under CONFIG_ARMADA_38X Marek Behún
2021-07-19 12:50   ` Marek Behún
2021-07-19 12:52     ` Stefan Roese
2021-07-21  9:36   ` Stefan Roese
2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 20/41] tools: kwbimage: Mark all BootROM structures __packed Marek Behún
2021-07-21  9:38   ` Stefan Roese
2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 21/41] tools: dumpimage: Fix crashing when trying to extract data from kwbimage Marek Behún
2021-07-21  9:38   ` Stefan Roese
2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 22/41] tools: dumpimage: Show error message " Marek Behún
2021-07-21  9:39   ` Stefan Roese
2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 23/41] tools: kwboot: Fix wrong parameter passed to read() Marek Behún
2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 24/41] tools: kwboot: Fix restoring terminal Marek Behún
2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 25/41] tools: kwboot: Print trailing newline after terminal is terminated Marek Behún
2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 26/41] tools: kwboot: Cosmetic fix - add missing curly brackets Marek Behún
2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 27/41] tools: kwboot: Check for v1 header size Marek Behún
2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 28/41] tools: kwboot: Fix checking image header version Marek Behún
2021-07-21  9:40   ` Stefan Roese
2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 29/41] arm: mvebu: Fix return_to_bootrom() Marek Behún
2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 30/41] arm: mvebu: Mark return_to_bootrom() as a noreturn function Marek Behún
2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 31/41] arm: mvebu: Implement return_to_bootrom() via U-Boot's SPL framework Marek Behún
2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 32/41] arm: mvebu: Use U-Boot's SPL BootROM framework for booting from NAND/UART Marek Behún
2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 33/41] SPL: Add support for specifying offset between header and image Marek Behún
2021-07-21 10:29   ` Stefan Roese
2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 34/41] SPL: Add support for parsing board / BootROM specific image types Marek Behún
2021-07-22  8:50   ` Stefan Roese
2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 35/41] arm: mvebu: Load main U-Boot binary in SPL code based on kwbimage header Marek Behún
2021-07-22  8:51   ` Stefan Roese
2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 36/41] arm: mvebu: Remove legacy U-Boot header from kwbimage v1 files Marek Behún
2021-07-22  8:52   ` Stefan Roese
2021-07-19 12:21 ` [PATCH u-boot-mvebu v2 37/41] tools: kwbimage: Remove v1 kwbimage SPL padding to CONFIG_SYS_U_BOOT_OFFS bytes Marek Behún
2021-07-22  8:52   ` Stefan Roese
2021-07-19 12:21 ` [PATCH u-boot-mvebu v2 38/41] arm: mvebu: Remove unused macro CONFIG_SYS_U_BOOT_OFFS Marek Behún
2021-07-22  8:53   ` Stefan Roese
2021-07-19 12:21 ` [PATCH u-boot-mvebu v2 39/41] arm: mvebu: gdsys: Remove custom spl_board_init() Marek Behún
2021-07-22  8:55   ` Stefan Roese
2021-07-19 12:21 ` [PATCH u-boot-mvebu v2 40/41] kwbimage: Add support for extracting images via dumpimage tool Marek Behún
2021-07-22  8:55   ` Stefan Roese
2021-07-19 12:21 ` [PATCH u-boot-mvebu v2 41/41] kwbimage: Update help message about how to extract from an existing image Marek Behún
2021-07-22  8:56   ` Stefan Roese
2021-07-22  7:35 ` [PATCH u-boot-mvebu v2 00/41] kwboot / kwbimage improvements reducing image size Stefan Roese

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20210719122104.29698-18-marek.behun@nic.cz \
    --to=marek.behun@nic.cz \
    --cc=baruch@tkos.co.il \
    --cc=chris.packham@alliedtelesis.co.nz \
    --cc=dgilmore@redhat.com \
    --cc=dirk.eibach@gdsys.cc \
    --cc=jon@solid-run.com \
    --cc=judge.packham@gmail.com \
    --cc=mario.six@gdsys.cc \
    --cc=pali@kernel.org \
    --cc=sr@denx.de \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.