All of lore.kernel.org
 help / color / mirror / Atom feed
* [U-Boot] [PATCH v3 0/3] rockchip: mkimage: refactor rksd/rkspi padding calculation and add dumpimage support
@ 2017-05-30 21:32 Philipp Tomsich
  2017-05-30 21:32 ` [U-Boot] [PATCH v3 1/3] rockchip: mkimage: add support for verify_header/print_header Philipp Tomsich
                   ` (3 more replies)
  0 siblings, 4 replies; 10+ messages in thread
From: Philipp Tomsich @ 2017-05-30 21:32 UTC (permalink / raw)
  To: u-boot


We support booting both from SD/MMC images and SPI images on the
RK3399-Q7 for different use-cases (e.g. external boot in development
from the SD card, internal boot from MMC or SPI depending on whether
the SPI flash is populated on any given configuration option).

In getting the SPI image support ready for production, we found a
few areas that warranted improvements:
- we had broken SPI bootstrap earlier in the changes introducting
  boot0-style images for the RK3399 (this needed fixing)
- in fixing the broken SPI padding calculation, it became apparent
  that it's best to refactor and document things before we make
  the same mistake again in the future
- with both SD/MMC and SPI images being used for various purposes
  by various people, the wrong image style was inadvertendly used
  in some tests... so we support for 'dumpimage' (i.e. verify_header
  and print_header) had to be added to quickly check the image
  type being handled

With v3, we pad the images to 2KB again, as this is required by the
BootROM (see https://lists.denx.de/pipermail/u-boot/2017-May/293268.html).

Changes in v3:
- (added patch) forces the alignment/padding to 2KB for SD images, as
  this would otherwise break the back-to-bootrom functionality
- added in v3

Changes in v2:
- (in rkcommon_verify_header): changed to use a standard error
  (i.e. from errno.h) to convey 'header0 signature does not match'
  [squash of: "rockchip: mkimage: don't mix standard errors and FDT"]

Philipp Tomsich (3):
  rockchip: mkimage: add support for verify_header/print_header
  rockchip: mkimage: force 2KB alignment for init_size
  rockchip: mkimage: set init_boot_size to avoid confusing the boot ROM

 tools/rkcommon.c | 130 ++++++++++++++++++++++++++++++++++++++++++++++++++++---
 tools/rkcommon.h |  20 +++++++++
 tools/rksd.c     |  35 ++++-----------
 tools/rkspi.c    |  23 ++--------
 4 files changed, 158 insertions(+), 50 deletions(-)

-- 
1.9.1

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [U-Boot] [PATCH v3 1/3] rockchip: mkimage: add support for verify_header/print_header
  2017-05-30 21:32 [U-Boot] [PATCH v3 0/3] rockchip: mkimage: refactor rksd/rkspi padding calculation and add dumpimage support Philipp Tomsich
@ 2017-05-30 21:32 ` Philipp Tomsich
  2017-06-05 21:31   ` sjg at google.com
  2017-05-30 21:32 ` [U-Boot] [PATCH v3 2/3] rockchip: mkimage: force 2KB alignment for init_size Philipp Tomsich
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 10+ messages in thread
From: Philipp Tomsich @ 2017-05-30 21:32 UTC (permalink / raw)
  To: u-boot

The rockchip image generation was previously missing the ability to
verify the generated header (and dump the image-type) without having
to resort to hexdump or od. Experience in our testing has showed it
to be very easy to get the rkspi and rksd images mixed up and the
lab... so we add the necessary support to have dumpimage tell us
what image type we're dealing with.

This change set adds the verify_header and print_header capability
to the rksd/rkspi image drivers (through shared code in rkcommon).

As of now, we only support images fully that are not RC4-encoded for
the SPL payload (i.e. header1 and payload). For RC4-encoded payloads,
the outer header (header0) is checked, but no detection of whether
this is a SD/MMC or SPI formatted payload takes place.

The output of dumpsys now prints the image type (spl_hdr), whether it
is a SD/MMC or SPI image, and the (padded) size of the image:
  $ ./tools/dumpimage -l ./spl.img
  Image Type:   Rockchip RK33 (SD/MMC) boot image
                               ^^^^^^ SD/MMC vs. SPI indication
                         ^^^^ spl_hdr indicated by the image
  Data Size:    79872 bytes

Signed-off-by: Philipp Tomsich <philipp.tomsich@theobroma-systems.com>
Acked-by: Simon Glass <sjg@chromium.org>

---

Changes in v3: None
Changes in v2:
- (in rkcommon_verify_header): changed to use a standard error
  (i.e. from errno.h) to convey 'header0 signature does not match'
  [squash of: "rockchip: mkimage: don't mix standard errors and FDT"]

 tools/rkcommon.c | 119 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 tools/rkcommon.h |  19 +++++++++
 tools/rksd.c     |  29 +++-----------
 tools/rkspi.c    |  21 ++--------
 4 files changed, 146 insertions(+), 42 deletions(-)

diff --git a/tools/rkcommon.c b/tools/rkcommon.c
index f0bf0d4..f9d9421 100644
--- a/tools/rkcommon.c
+++ b/tools/rkcommon.c
@@ -2,6 +2,8 @@
  * (C) Copyright 2015 Google,  Inc
  * Written by Simon Glass <sjg@chromium.org>
  *
+ * (C) 2017 Theobroma Systems Design und Consulting GmbH
+ *
  * SPDX-License-Identifier:	GPL-2.0+
  *
  * Helper functions for Rockchip images
@@ -201,7 +203,7 @@ int rkcommon_set_header(void *buf, uint file_size,
 
 	rkcommon_set_header0(buf, file_size, params);
 
-	/* Set up the SPL name */
+	/* Set up the SPL name (i.e. copy spl_hdr over) */
 	memcpy(&hdr->magic, rkcommon_get_spl_hdr(params), RK_SPL_HDR_SIZE);
 
 	if (rkcommon_need_rc4_spl(params))
@@ -211,6 +213,121 @@ int rkcommon_set_header(void *buf, uint file_size,
 	return 0;
 }
 
+static inline unsigned rkcommon_offset_to_spi(unsigned offset)
+{
+	/*
+	 * While SD/MMC images use a flat addressing, SPI images are padded
+	 * to use the first 2K of every 4K sector only.
+	 */
+	return ((offset & ~0x7ff) << 1) + (offset & 0x7ff);
+}
+
+static inline unsigned rkcommon_spi_to_offset(unsigned offset)
+{
+	return ((offset & ~0x7ff) >> 1) + (offset & 0x7ff);
+}
+
+static int rkcommon_parse_header(const void *buf, struct header0_info *header0,
+				 struct spl_info **spl_info)
+{
+	unsigned hdr1_offset;
+	struct header1_info *hdr1_sdmmc, *hdr1_spi;
+	int i;
+
+	if (spl_info)
+		*spl_info = NULL;
+
+	/*
+	 * The first header (hdr0) is always RC4 encoded, so try to decrypt
+	 * with the well-known key.
+	 */
+	memcpy((void *)header0, buf, sizeof(struct header0_info));
+	rc4_encode((void *)header0, sizeof(struct header0_info), rc4_key);
+
+	if (header0->signature != RK_SIGNATURE)
+		return -EPROTO;
+
+	/* We don't support RC4 encoded image payloads here, yet... */
+	if (header0->disable_rc4 == 0)
+		return -ENOSYS;
+
+	hdr1_offset = header0->init_offset * RK_BLK_SIZE;
+	hdr1_sdmmc = (struct header1_info *)(buf + hdr1_offset);
+	hdr1_spi = (struct header1_info *)(buf +
+					   rkcommon_offset_to_spi(hdr1_offset));
+
+	for (i = 0; i < ARRAY_SIZE(spl_infos); i++) {
+		if (!memcmp(&hdr1_sdmmc->magic, spl_infos[i].spl_hdr, 4)) {
+			if (spl_info)
+				*spl_info = &spl_infos[i];
+			return IH_TYPE_RKSD;
+		} else if (!memcmp(&hdr1_spi->magic, spl_infos[i].spl_hdr, 4)) {
+			if (spl_info)
+				*spl_info = &spl_infos[i];
+			return IH_TYPE_RKSPI;
+		}
+	}
+
+	return -1;
+}
+
+int rkcommon_verify_header(unsigned char *buf, int size,
+			   struct image_tool_params *params)
+{
+	struct header0_info header0;
+	struct spl_info *img_spl_info, *spl_info;
+	int ret;
+
+	ret = rkcommon_parse_header(buf, &header0, &img_spl_info);
+
+	/* If this is the (unimplemented) RC4 case, then rewrite the result */
+	if (ret == -ENOSYS)
+		return 0;
+
+	if (ret < 0)
+		return ret;
+
+	/*
+	 * If no 'imagename' is specified via the commandline (e.g. if this is
+	 * 'dumpimage -l' w/o any further constraints), we accept any spl_info.
+	 */
+	if (params->imagename == NULL)
+		return 0;
+
+	/* Match the 'imagename' against the 'spl_hdr' found */
+	spl_info = rkcommon_get_spl_info(params->imagename);
+	if (spl_info && img_spl_info)
+		return strcmp(spl_info->spl_hdr, img_spl_info->spl_hdr);
+
+	return -ENOENT;
+}
+
+void rkcommon_print_header(const void *buf)
+{
+	struct header0_info header0;
+	struct spl_info *spl_info;
+	uint8_t image_type;
+	int ret;
+
+	ret = rkcommon_parse_header(buf, &header0, &spl_info);
+
+	/* If this is the (unimplemented) RC4 case, then fail silently */
+	if (ret == -ENOSYS)
+		return;
+
+	if (ret < 0) {
+		fprintf(stderr, "Error: image verification failed\n");
+		return;
+	}
+
+	image_type = ret;
+
+	printf("Image Type:   Rockchip %s (%s) boot image\n",
+	       spl_info->spl_hdr,
+	       (image_type == IH_TYPE_RKSD) ? "SD/MMC" : "SPI");
+	printf("Data Size:    %d bytes\n", header0.init_size * RK_BLK_SIZE);
+}
+
 void rkcommon_rc4_encode_spl(void *buf, unsigned int offset, unsigned int size)
 {
 	unsigned int remaining = size;
diff --git a/tools/rkcommon.h b/tools/rkcommon.h
index a21321f..75a4ed6 100644
--- a/tools/rkcommon.h
+++ b/tools/rkcommon.h
@@ -56,6 +56,25 @@ int rkcommon_set_header(void *buf, uint file_size,
 			struct image_tool_params *params);
 
 /**
+ * rkcommon_verify_header() - verify the header for a Rockchip boot image
+ *
+ * @buf:	Pointer to the image file
+ * @file_size:	Size of entire bootable image file (incl. all padding)
+ * @return 0 if OK
+ */
+int rkcommon_verify_header(unsigned char *buf, int size,
+			   struct image_tool_params *params);
+
+/**
+ * rkcommon_print_header() - print the header for a Rockchip boot image
+ *
+ * This prints the header, spl_name and whether this is a SD/MMC or SPI image.
+ *
+ * @buf:	Pointer to the image (can be a read-only file-mapping)
+ */
+void rkcommon_print_header(const void *buf);
+
+/**
  * rkcommon_need_rc4_spl() - check if rc4 encoded spl is required
  *
  * Some socs cannot disable the rc4-encryption of the spl binary.
diff --git a/tools/rksd.c b/tools/rksd.c
index 8627b6d..a880a26 100644
--- a/tools/rksd.c
+++ b/tools/rksd.c
@@ -13,29 +13,17 @@
 #include "mkimage.h"
 #include "rkcommon.h"
 
-static int rksd_verify_header(unsigned char *buf,  int size,
-				 struct image_tool_params *params)
-{
-	return 0;
-}
-
-static void rksd_print_header(const void *buf)
-{
-}
-
 static void rksd_set_header(void *buf,  struct stat *sbuf,  int ifd,
-			       struct image_tool_params *params)
+			    struct image_tool_params *params)
 {
 	unsigned int size;
 	int ret;
 
-	printf("params->file_size %d\n", params->file_size);
-	printf("params->orig_file_size %d\n", params->orig_file_size);
-
 	/*
 	 * We need to calculate this using 'RK_SPL_HDR_START' and not using
 	 * 'tparams->header_size', as the additional byte inserted when
-	 * 'is_boot0' is true counts towards the payload.
+	 * 'is_boot0' is true counts towards the payload (and not towards the
+	 * header).
 	 */
 	size = params->file_size - RK_SPL_HDR_START;
 	ret = rkcommon_set_header(buf, size, params);
@@ -46,11 +34,6 @@ static void rksd_set_header(void *buf,  struct stat *sbuf,  int ifd,
 	}
 }
 
-static int rksd_extract_subimage(void *buf,  struct image_tool_params *params)
-{
-	return 0;
-}
-
 static int rksd_check_image_type(uint8_t type)
 {
 	if (type == IH_TYPE_RKSD)
@@ -78,10 +61,10 @@ U_BOOT_IMAGE_TYPE(
 	0,
 	NULL,
 	rkcommon_check_params,
-	rksd_verify_header,
-	rksd_print_header,
+	rkcommon_verify_header,
+	rkcommon_print_header,
 	rksd_set_header,
-	rksd_extract_subimage,
+	NULL,
 	rksd_check_image_type,
 	NULL,
 	rksd_vrec_header
diff --git a/tools/rkspi.c b/tools/rkspi.c
index 87bd1a9..f8a565d 100644
--- a/tools/rkspi.c
+++ b/tools/rkspi.c
@@ -17,16 +17,6 @@ enum {
 	RKSPI_SECT_LEN		= RK_BLK_SIZE * 4,
 };
 
-static int rkspi_verify_header(unsigned char *buf, int size,
-			       struct image_tool_params *params)
-{
-	return 0;
-}
-
-static void rkspi_print_header(const void *buf)
-{
-}
-
 static void rkspi_set_header(void *buf, struct stat *sbuf, int ifd,
 			     struct image_tool_params *params)
 {
@@ -58,11 +48,6 @@ static void rkspi_set_header(void *buf, struct stat *sbuf, int ifd,
 	}
 }
 
-static int rkspi_extract_subimage(void *buf, struct image_tool_params *params)
-{
-	return 0;
-}
-
 static int rkspi_check_image_type(uint8_t type)
 {
 	if (type == IH_TYPE_RKSPI)
@@ -112,10 +97,10 @@ U_BOOT_IMAGE_TYPE(
 	0,
 	NULL,
 	rkcommon_check_params,
-	rkspi_verify_header,
-	rkspi_print_header,
+	rkcommon_verify_header,
+	rkcommon_print_header,
 	rkspi_set_header,
-	rkspi_extract_subimage,
+	NULL,
 	rkspi_check_image_type,
 	NULL,
 	rkspi_vrec_header
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [U-Boot] [PATCH v3 2/3] rockchip: mkimage: force 2KB alignment for init_size
  2017-05-30 21:32 [U-Boot] [PATCH v3 0/3] rockchip: mkimage: refactor rksd/rkspi padding calculation and add dumpimage support Philipp Tomsich
  2017-05-30 21:32 ` [U-Boot] [PATCH v3 1/3] rockchip: mkimage: add support for verify_header/print_header Philipp Tomsich
@ 2017-05-30 21:32 ` Philipp Tomsich
  2017-06-01  3:11   ` Simon Glass
  2017-05-30 21:32 ` [U-Boot] [PATCH v3 3/3] rockchip: mkimage: set init_boot_size to avoid confusing the boot ROM Philipp Tomsich
  2017-05-31  9:44 ` [U-Boot] [PATCH v3 0/3] rockchip: mkimage: refactor rksd/rkspi padding calculation and add dumpimage support Andy Yan
  3 siblings, 1 reply; 10+ messages in thread
From: Philipp Tomsich @ 2017-05-30 21:32 UTC (permalink / raw)
  To: u-boot

The Rockchip BootROM relies on init_size being aligned to 2KB
(see https://lists.denx.de/pipermail/u-boot/2017-May/293268.html).

This pads the image to 2KB both for SD card images and SPI images
and uses a common symbolic constant for the alignment.

Signed-off-by: Philipp Tomsich <philipp.tomsich@theobroma-systems.com>

---

Changes in v3:
- (added patch) forces the alignment/padding to 2KB for SD images, as
  this would otherwise break the back-to-bootrom functionality

Changes in v2: None

 tools/rkcommon.h | 1 +
 tools/rksd.c     | 6 +++---
 tools/rkspi.c    | 2 +-
 3 files changed, 5 insertions(+), 4 deletions(-)

diff --git a/tools/rkcommon.h b/tools/rkcommon.h
index 75a4ed6..8790f1c 100644
--- a/tools/rkcommon.h
+++ b/tools/rkcommon.h
@@ -10,6 +10,7 @@
 
 enum {
 	RK_BLK_SIZE		= 512,
+	RK_INIT_SIZE_ALIGN      = 2048,
 	RK_INIT_OFFSET		= 4,
 	RK_MAX_BOOT_SIZE	= 512 << 10,
 	RK_SPL_HDR_START	= RK_INIT_OFFSET * RK_BLK_SIZE,
diff --git a/tools/rksd.c b/tools/rksd.c
index a880a26..c56153d 100644
--- a/tools/rksd.c
+++ b/tools/rksd.c
@@ -46,10 +46,10 @@ static int rksd_vrec_header(struct image_tool_params *params,
 			    struct image_type_params *tparams)
 {
 	/*
-	 * Pad to the RK_BLK_SIZE (512 bytes) to be consistent with init_size
-	 * being encoded in RK_BLK_SIZE units in header0 (see rkcommon.c).
+	 * Pad to a 2KB alignment, as required for init_size by the ROM
+	 * (see https://lists.denx.de/pipermail/u-boot/2017-May/293268.html)
 	 */
-	return rkcommon_vrec_header(params, tparams, RK_BLK_SIZE);
+	return rkcommon_vrec_header(params, tparams, RK_INIT_SIZE_ALIGN);
 }
 
 /*
diff --git a/tools/rkspi.c b/tools/rkspi.c
index f8a565d..4332ce1 100644
--- a/tools/rkspi.c
+++ b/tools/rkspi.c
@@ -63,7 +63,7 @@ static int rkspi_check_image_type(uint8_t type)
 static int rkspi_vrec_header(struct image_tool_params *params,
 			     struct image_type_params *tparams)
 {
-	int padding = rkcommon_vrec_header(params, tparams, 2048);
+	int padding = rkcommon_vrec_header(params, tparams, RK_INIT_SIZE_ALIGN);
 	/*
 	 * The file size has not been adjusted@this point (our caller will
 	 * eventually add the header/padding to the file_size), so we need to
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [U-Boot] [PATCH v3 3/3] rockchip: mkimage: set init_boot_size to avoid confusing the boot ROM
  2017-05-30 21:32 [U-Boot] [PATCH v3 0/3] rockchip: mkimage: refactor rksd/rkspi padding calculation and add dumpimage support Philipp Tomsich
  2017-05-30 21:32 ` [U-Boot] [PATCH v3 1/3] rockchip: mkimage: add support for verify_header/print_header Philipp Tomsich
  2017-05-30 21:32 ` [U-Boot] [PATCH v3 2/3] rockchip: mkimage: force 2KB alignment for init_size Philipp Tomsich
@ 2017-05-30 21:32 ` Philipp Tomsich
  2017-06-01  3:12   ` Simon Glass
  2017-05-31  9:44 ` [U-Boot] [PATCH v3 0/3] rockchip: mkimage: refactor rksd/rkspi padding calculation and add dumpimage support Andy Yan
  3 siblings, 1 reply; 10+ messages in thread
From: Philipp Tomsich @ 2017-05-30 21:32 UTC (permalink / raw)
  To: u-boot

This change restores the earlier setting of init_boot_size to include
the maximum area covered by the the boot ROM of each chip for resolve
issues with back-to-bootrom functionality reported by Kever and Heiko.

To ensure that we don't run into the same issue again in the future,
I have updated the comments accordingly and added a reference to the
mailing list archive (there's some very helpful info from Andy Yan
that provides background on the BootROM requirements regarding these
fields).

See https://lists.denx.de/pipermail/u-boot/2017-May/293267.html for
some background (by Andy Yan) of how the BootROM processes this field.

Signed-off-by: Philipp Tomsich <philipp.tomsich@theobroma-systems.com>

---

Changes in v3:
- added in v3

Changes in v2: None

 tools/rkcommon.c | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/tools/rkcommon.c b/tools/rkcommon.c
index f9d9421..014cceb 100644
--- a/tools/rkcommon.c
+++ b/tools/rkcommon.c
@@ -184,11 +184,14 @@ static void rkcommon_set_header0(void *buf, uint file_size,
 	 */
 	hdr->init_size = ROUND(hdr->init_size, 4);
 	/*
-	 * The images we create do not contain the stage following the SPL as
-	 * part of the SPL image, so the init_boot_size (which might have been
-	 * read by Rockchip's miniloder) should be the same as the init_size.
+	 * init_boot_size needs to be set, as it is read by the BootROM
+	 * to determine the size of the next-stage bootloader (e.g. U-Boot
+	 * proper), when used with the back-to-bootrom functionality.
+	 *
+	 * see https://lists.denx.de/pipermail/u-boot/2017-May/293267.html
+	 * for a more detailed explanation by Andy Yan
 	 */
-	hdr->init_boot_size = hdr->init_size;
+	hdr->init_boot_size = hdr->init_size + RK_MAX_BOOT_SIZE / RK_BLK_SIZE;
 
 	rc4_encode(buf, RK_BLK_SIZE, rc4_key);
 }
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [U-Boot] [PATCH v3 0/3] rockchip: mkimage: refactor rksd/rkspi padding calculation and add dumpimage support
  2017-05-30 21:32 [U-Boot] [PATCH v3 0/3] rockchip: mkimage: refactor rksd/rkspi padding calculation and add dumpimage support Philipp Tomsich
                   ` (2 preceding siblings ...)
  2017-05-30 21:32 ` [U-Boot] [PATCH v3 3/3] rockchip: mkimage: set init_boot_size to avoid confusing the boot ROM Philipp Tomsich
@ 2017-05-31  9:44 ` Andy Yan
  3 siblings, 0 replies; 10+ messages in thread
From: Andy Yan @ 2017-05-31  9:44 UTC (permalink / raw)
  To: u-boot

Hi Philipp:

2017-05-31 5:32 GMT+08:00 Philipp Tomsich <
philipp.tomsich@theobroma-systems.com>:

>
> We support booting both from SD/MMC images and SPI images on the
> RK3399-Q7 for different use-cases (e.g. external boot in development
> from the SD card, internal boot from MMC or SPI depending on whether
> the SPI flash is populated on any given configuration option).
>
> In getting the SPI image support ready for production, we found a
> few areas that warranted improvements:
> - we had broken SPI bootstrap earlier in the changes introducting
>   boot0-style images for the RK3399 (this needed fixing)
> - in fixing the broken SPI padding calculation, it became apparent
>   that it's best to refactor and document things before we make
>   the same mistake again in the future
> - with both SD/MMC and SPI images being used for various purposes
>   by various people, the wrong image style was inadvertendly used
>   in some tests... so we support for 'dumpimage' (i.e. verify_header
>   and print_header) had to be added to quickly check the image
>   type being handled
>
> With v3, we pad the images to 2KB again, as this is required by the
> BootROM (see https://lists.denx.de/pipermail/u-boot/2017-May/293268.html).
>
> Changes in v3:
> - (added patch) forces the alignment/padding to 2KB for SD images, as
>   this would otherwise break the back-to-bootrom functionality
> - added in v3
>
> Changes in v2:
> - (in rkcommon_verify_header): changed to use a standard error
>   (i.e. from errno.h) to convey 'header0 signature does not match'
>   [squash of: "rockchip: mkimage: don't mix standard errors and FDT"]
>
> Philipp Tomsich (3):
>   rockchip: mkimage: add support for verify_header/print_header
>   rockchip: mkimage: force 2KB alignment for init_size
>   rockchip: mkimage: set init_boot_size to avoid confusing the boot ROM
>
>  tools/rkcommon.c | 130 ++++++++++++++++++++++++++++++
> ++++++++++++++++++++++---
>  tools/rkcommon.h |  20 +++++++++
>  tools/rksd.c     |  35 ++++-----------
>  tools/rkspi.c    |  23 ++--------
>  4 files changed, 158 insertions(+), 50 deletions(-)
>
> --
> 1.9.1
>
>  For patch (2)(3): Tested-by: Andy Yan <andy.yan@rock-chips.com> on
RV1108 evb board.

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [U-Boot] [PATCH v3 2/3] rockchip: mkimage: force 2KB alignment for init_size
  2017-05-30 21:32 ` [U-Boot] [PATCH v3 2/3] rockchip: mkimage: force 2KB alignment for init_size Philipp Tomsich
@ 2017-06-01  3:11   ` Simon Glass
  2017-06-05 21:31     ` sjg at google.com
  0 siblings, 1 reply; 10+ messages in thread
From: Simon Glass @ 2017-06-01  3:11 UTC (permalink / raw)
  To: u-boot

On 30 May 2017 at 15:32, Philipp Tomsich
<philipp.tomsich@theobroma-systems.com> wrote:
> The Rockchip BootROM relies on init_size being aligned to 2KB
> (see https://lists.denx.de/pipermail/u-boot/2017-May/293268.html).
>
> This pads the image to 2KB both for SD card images and SPI images
> and uses a common symbolic constant for the alignment.
>
> Signed-off-by: Philipp Tomsich <philipp.tomsich@theobroma-systems.com>
>
> ---
>
> Changes in v3:
> - (added patch) forces the alignment/padding to 2KB for SD images, as
>   this would otherwise break the back-to-bootrom functionality
>
> Changes in v2: None
>
>  tools/rkcommon.h | 1 +
>  tools/rksd.c     | 6 +++---
>  tools/rkspi.c    | 2 +-
>  3 files changed, 5 insertions(+), 4 deletions(-)

Reviewed-by: Simon Glass <sjg@chromium.org>

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [U-Boot] [PATCH v3 3/3] rockchip: mkimage: set init_boot_size to avoid confusing the boot ROM
  2017-05-30 21:32 ` [U-Boot] [PATCH v3 3/3] rockchip: mkimage: set init_boot_size to avoid confusing the boot ROM Philipp Tomsich
@ 2017-06-01  3:12   ` Simon Glass
  2017-06-05 21:31     ` sjg at google.com
  0 siblings, 1 reply; 10+ messages in thread
From: Simon Glass @ 2017-06-01  3:12 UTC (permalink / raw)
  To: u-boot

On 30 May 2017 at 15:32, Philipp Tomsich
<philipp.tomsich@theobroma-systems.com> wrote:
> This change restores the earlier setting of init_boot_size to include
> the maximum area covered by the the boot ROM of each chip for resolve
> issues with back-to-bootrom functionality reported by Kever and Heiko.
>
> To ensure that we don't run into the same issue again in the future,
> I have updated the comments accordingly and added a reference to the
> mailing list archive (there's some very helpful info from Andy Yan
> that provides background on the BootROM requirements regarding these
> fields).
>
> See https://lists.denx.de/pipermail/u-boot/2017-May/293267.html for
> some background (by Andy Yan) of how the BootROM processes this field.
>
> Signed-off-by: Philipp Tomsich <philipp.tomsich@theobroma-systems.com>
>
> ---
>
> Changes in v3:
> - added in v3
>
> Changes in v2: None
>
>  tools/rkcommon.c | 11 +++++++----
>  1 file changed, 7 insertions(+), 4 deletions(-)

Reviewed-by: Simon Glass <sjg@chromium.org>

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [U-Boot] [PATCH v3 3/3] rockchip: mkimage: set init_boot_size to avoid confusing the boot ROM
  2017-06-01  3:12   ` Simon Glass
@ 2017-06-05 21:31     ` sjg at google.com
  0 siblings, 0 replies; 10+ messages in thread
From: sjg at google.com @ 2017-06-05 21:31 UTC (permalink / raw)
  To: u-boot

On 30 May 2017 at 15:32, Philipp Tomsich
<philipp.tomsich@theobroma-systems.com> wrote:
> This change restores the earlier setting of init_boot_size to include
> the maximum area covered by the the boot ROM of each chip for resolve
> issues with back-to-bootrom functionality reported by Kever and Heiko.
>
> To ensure that we don't run into the same issue again in the future,
> I have updated the comments accordingly and added a reference to the
> mailing list archive (there's some very helpful info from Andy Yan
> that provides background on the BootROM requirements regarding these
> fields).
>
> See https://lists.denx.de/pipermail/u-boot/2017-May/293267.html for
> some background (by Andy Yan) of how the BootROM processes this field.
>
> Signed-off-by: Philipp Tomsich <philipp.tomsich@theobroma-systems.com>
>
> ---
>
> Changes in v3:
> - added in v3
>
> Changes in v2: None
>
>  tools/rkcommon.c | 11 +++++++----
>  1 file changed, 7 insertions(+), 4 deletions(-)

Reviewed-by: Simon Glass <sjg@chromium.org>

Applied to u-boot-rockchip, thanks!

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [U-Boot] [PATCH v3 2/3] rockchip: mkimage: force 2KB alignment for init_size
  2017-06-01  3:11   ` Simon Glass
@ 2017-06-05 21:31     ` sjg at google.com
  0 siblings, 0 replies; 10+ messages in thread
From: sjg at google.com @ 2017-06-05 21:31 UTC (permalink / raw)
  To: u-boot

On 30 May 2017 at 15:32, Philipp Tomsich
<philipp.tomsich@theobroma-systems.com> wrote:
> The Rockchip BootROM relies on init_size being aligned to 2KB
> (see https://lists.denx.de/pipermail/u-boot/2017-May/293268.html).
>
> This pads the image to 2KB both for SD card images and SPI images
> and uses a common symbolic constant for the alignment.
>
> Signed-off-by: Philipp Tomsich <philipp.tomsich@theobroma-systems.com>
>
> ---
>
> Changes in v3:
> - (added patch) forces the alignment/padding to 2KB for SD images, as
>   this would otherwise break the back-to-bootrom functionality
>
> Changes in v2: None
>
>  tools/rkcommon.h | 1 +
>  tools/rksd.c     | 6 +++---
>  tools/rkspi.c    | 2 +-
>  3 files changed, 5 insertions(+), 4 deletions(-)

Reviewed-by: Simon Glass <sjg@chromium.org>

Applied to u-boot-rockchip, thanks!

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [U-Boot] [PATCH v3 1/3] rockchip: mkimage: add support for verify_header/print_header
  2017-05-30 21:32 ` [U-Boot] [PATCH v3 1/3] rockchip: mkimage: add support for verify_header/print_header Philipp Tomsich
@ 2017-06-05 21:31   ` sjg at google.com
  0 siblings, 0 replies; 10+ messages in thread
From: sjg at google.com @ 2017-06-05 21:31 UTC (permalink / raw)
  To: u-boot

The rockchip image generation was previously missing the ability to
verify the generated header (and dump the image-type) without having
to resort to hexdump or od. Experience in our testing has showed it
to be very easy to get the rkspi and rksd images mixed up and the
lab... so we add the necessary support to have dumpimage tell us
what image type we're dealing with.

This change set adds the verify_header and print_header capability
to the rksd/rkspi image drivers (through shared code in rkcommon).

As of now, we only support images fully that are not RC4-encoded for
the SPL payload (i.e. header1 and payload). For RC4-encoded payloads,
the outer header (header0) is checked, but no detection of whether
this is a SD/MMC or SPI formatted payload takes place.

The output of dumpsys now prints the image type (spl_hdr), whether it
is a SD/MMC or SPI image, and the (padded) size of the image:
  $ ./tools/dumpimage -l ./spl.img
  Image Type:   Rockchip RK33 (SD/MMC) boot image
                               ^^^^^^ SD/MMC vs. SPI indication
                         ^^^^ spl_hdr indicated by the image
  Data Size:    79872 bytes

Signed-off-by: Philipp Tomsich <philipp.tomsich@theobroma-systems.com>
Acked-by: Simon Glass <sjg@chromium.org>

---

Changes in v3: None
Changes in v2:
- (in rkcommon_verify_header): changed to use a standard error
  (i.e. from errno.h) to convey 'header0 signature does not match'
  [squash of: "rockchip: mkimage: don't mix standard errors and FDT"]

 tools/rkcommon.c | 119 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 tools/rkcommon.h |  19 +++++++++
 tools/rksd.c     |  29 +++-----------
 tools/rkspi.c    |  21 ++--------
 4 files changed, 146 insertions(+), 42 deletions(-)

Applied to u-boot-rockchip, thanks!

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2017-06-05 21:31 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-05-30 21:32 [U-Boot] [PATCH v3 0/3] rockchip: mkimage: refactor rksd/rkspi padding calculation and add dumpimage support Philipp Tomsich
2017-05-30 21:32 ` [U-Boot] [PATCH v3 1/3] rockchip: mkimage: add support for verify_header/print_header Philipp Tomsich
2017-06-05 21:31   ` sjg at google.com
2017-05-30 21:32 ` [U-Boot] [PATCH v3 2/3] rockchip: mkimage: force 2KB alignment for init_size Philipp Tomsich
2017-06-01  3:11   ` Simon Glass
2017-06-05 21:31     ` sjg at google.com
2017-05-30 21:32 ` [U-Boot] [PATCH v3 3/3] rockchip: mkimage: set init_boot_size to avoid confusing the boot ROM Philipp Tomsich
2017-06-01  3:12   ` Simon Glass
2017-06-05 21:31     ` sjg at google.com
2017-05-31  9:44 ` [U-Boot] [PATCH v3 0/3] rockchip: mkimage: refactor rksd/rkspi padding calculation and add dumpimage support Andy Yan

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.