diff mbox series

tools: pblimage: fix image header verification function

Message ID 20220217035136.398564-1-Zhiqiang.Hou@nxp.com
State Accepted
Commit 2058967d2fe8f93142d774bc47241d80894027d5
Delegated to: Priyanka Jain
Headers show
Series tools: pblimage: fix image header verification function | expand

Commit Message

Z.Q. Hou Feb. 17, 2022, 3:51 a.m. UTC
From: Hou Zhiqiang <Zhiqiang.Hou@nxp.com>

The Layerscape platforms have different RCW header value from FSL
PowerPC platforms, the current image header verification callback
is only working on PowerPC, it will fail on Layerscape, this patch
is to fix this issue.

This is a historical problem and exposed by the following patch:
http://patchwork.ozlabs.org/project/uboot/patch/20220114173443.9877-1-pali@kernel.org

Signed-off-by: Hou Zhiqiang <Zhiqiang.Hou@nxp.com>
---
 Makefile         |  2 +-
 tools/pblimage.c | 10 ++++++++--
 tools/pblimage.h |  3 ++-
 3 files changed, 11 insertions(+), 4 deletions(-)

Comments

Pali Rohár Feb. 25, 2022, 8:36 p.m. UTC | #1
On Thursday 17 February 2022 11:51:36 Zhiqiang Hou wrote:
> From: Hou Zhiqiang <Zhiqiang.Hou@nxp.com>
> 
> The Layerscape platforms have different RCW header value from FSL
> PowerPC platforms, the current image header verification callback
> is only working on PowerPC, it will fail on Layerscape, this patch
> is to fix this issue.
> 
> This is a historical problem and exposed by the following patch:
> http://patchwork.ozlabs.org/project/uboot/patch/20220114173443.9877-1-pali@kernel.org
> 
> Signed-off-by: Hou Zhiqiang <Zhiqiang.Hou@nxp.com>

Hello Tom! Could you look at this change? It should unblock applying my above patch.

> ---
>  Makefile         |  2 +-
>  tools/pblimage.c | 10 ++++++++--
>  tools/pblimage.h |  3 ++-
>  3 files changed, 11 insertions(+), 4 deletions(-)
> 
> diff --git a/Makefile b/Makefile
> index 4b152249ca..3c2bc9741c 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -1410,7 +1410,7 @@ MKIMAGEFLAGS_u-boot-spl.kwb = -n $(KWD_CONFIG_FILE) \
>  	$(if $(KEYDIR),-k $(KEYDIR))
>  
>  MKIMAGEFLAGS_u-boot.pbl = -n $(srctree)/$(CONFIG_SYS_FSL_PBL_RCW:"%"=%) \
> -		-R $(srctree)/$(CONFIG_SYS_FSL_PBL_PBI:"%"=%) -T pblimage
> +		-R $(srctree)/$(CONFIG_SYS_FSL_PBL_PBI:"%"=%) -A $(ARCH) -T pblimage
>  
>  ifeq ($(CONFIG_MPC85xx)$(CONFIG_OF_SEPARATE),yy)
>  UBOOT_BIN := u-boot-with-dtb.bin
> diff --git a/tools/pblimage.c b/tools/pblimage.c
> index 3c823e96cf..bd639c276f 100644
> --- a/tools/pblimage.c
> +++ b/tools/pblimage.c
> @@ -230,19 +230,25 @@ static int pblimage_verify_header(unsigned char *ptr, int image_size,
>  			struct image_tool_params *params)
>  {
>  	struct pbl_header *pbl_hdr = (struct pbl_header *) ptr;
> +	uint32_t rcwheader;
> +
> +	if (params->arch == IH_ARCH_ARM)
> +		rcwheader = RCW_ARM_HEADER;
> +	else
> +		rcwheader = RCW_PPC_HEADER;
>  
>  	/* Only a few checks can be done: search for magic numbers */
>  	if (ENDIANNESS == 'l') {
>  		if (pbl_hdr->preamble != reverse_byte(RCW_PREAMBLE))
>  			return -FDT_ERR_BADSTRUCTURE;
>  
> -		if (pbl_hdr->rcwheader != reverse_byte(RCW_HEADER))
> +		if (pbl_hdr->rcwheader != reverse_byte(rcwheader))
>  			return -FDT_ERR_BADSTRUCTURE;
>  	} else {
>  		if (pbl_hdr->preamble != RCW_PREAMBLE)
>  			return -FDT_ERR_BADSTRUCTURE;
>  
> -		if (pbl_hdr->rcwheader != RCW_HEADER)
> +		if (pbl_hdr->rcwheader != rcwheader)
>  			return -FDT_ERR_BADSTRUCTURE;
>  	}
>  	return 0;
> diff --git a/tools/pblimage.h b/tools/pblimage.h
> index 81c5492926..0222e8067b 100644
> --- a/tools/pblimage.h
> +++ b/tools/pblimage.h
> @@ -8,7 +8,8 @@
>  
>  #define RCW_BYTES	64
>  #define RCW_PREAMBLE	0xaa55aa55
> -#define RCW_HEADER	0x010e0100
> +#define RCW_ARM_HEADER	0x01ee0100
> +#define RCW_PPC_HEADER	0x010e0100
>  
>  struct pbl_header {
>  	uint32_t preamble;
> -- 
> 2.25.1
>
Tom Rini Feb. 25, 2022, 10:07 p.m. UTC | #2
On Fri, Feb 25, 2022 at 09:36:03PM +0100, Pali Rohár wrote:
> On Thursday 17 February 2022 11:51:36 Zhiqiang Hou wrote:
> > From: Hou Zhiqiang <Zhiqiang.Hou@nxp.com>
> > 
> > The Layerscape platforms have different RCW header value from FSL
> > PowerPC platforms, the current image header verification callback
> > is only working on PowerPC, it will fail on Layerscape, this patch
> > is to fix this issue.
> > 
> > This is a historical problem and exposed by the following patch:
> > http://patchwork.ozlabs.org/project/uboot/patch/20220114173443.9877-1-pali@kernel.org
> > 
> > Signed-off-by: Hou Zhiqiang <Zhiqiang.Hou@nxp.com>
> 
> Hello Tom! Could you look at this change? It should unblock applying my above patch.

Yes, I expect this to get picked up in the layerscape tree for the next
PR there.  Thanks.
diff mbox series

Patch

diff --git a/Makefile b/Makefile
index 4b152249ca..3c2bc9741c 100644
--- a/Makefile
+++ b/Makefile
@@ -1410,7 +1410,7 @@  MKIMAGEFLAGS_u-boot-spl.kwb = -n $(KWD_CONFIG_FILE) \
 	$(if $(KEYDIR),-k $(KEYDIR))
 
 MKIMAGEFLAGS_u-boot.pbl = -n $(srctree)/$(CONFIG_SYS_FSL_PBL_RCW:"%"=%) \
-		-R $(srctree)/$(CONFIG_SYS_FSL_PBL_PBI:"%"=%) -T pblimage
+		-R $(srctree)/$(CONFIG_SYS_FSL_PBL_PBI:"%"=%) -A $(ARCH) -T pblimage
 
 ifeq ($(CONFIG_MPC85xx)$(CONFIG_OF_SEPARATE),yy)
 UBOOT_BIN := u-boot-with-dtb.bin
diff --git a/tools/pblimage.c b/tools/pblimage.c
index 3c823e96cf..bd639c276f 100644
--- a/tools/pblimage.c
+++ b/tools/pblimage.c
@@ -230,19 +230,25 @@  static int pblimage_verify_header(unsigned char *ptr, int image_size,
 			struct image_tool_params *params)
 {
 	struct pbl_header *pbl_hdr = (struct pbl_header *) ptr;
+	uint32_t rcwheader;
+
+	if (params->arch == IH_ARCH_ARM)
+		rcwheader = RCW_ARM_HEADER;
+	else
+		rcwheader = RCW_PPC_HEADER;
 
 	/* Only a few checks can be done: search for magic numbers */
 	if (ENDIANNESS == 'l') {
 		if (pbl_hdr->preamble != reverse_byte(RCW_PREAMBLE))
 			return -FDT_ERR_BADSTRUCTURE;
 
-		if (pbl_hdr->rcwheader != reverse_byte(RCW_HEADER))
+		if (pbl_hdr->rcwheader != reverse_byte(rcwheader))
 			return -FDT_ERR_BADSTRUCTURE;
 	} else {
 		if (pbl_hdr->preamble != RCW_PREAMBLE)
 			return -FDT_ERR_BADSTRUCTURE;
 
-		if (pbl_hdr->rcwheader != RCW_HEADER)
+		if (pbl_hdr->rcwheader != rcwheader)
 			return -FDT_ERR_BADSTRUCTURE;
 	}
 	return 0;
diff --git a/tools/pblimage.h b/tools/pblimage.h
index 81c5492926..0222e8067b 100644
--- a/tools/pblimage.h
+++ b/tools/pblimage.h
@@ -8,7 +8,8 @@ 
 
 #define RCW_BYTES	64
 #define RCW_PREAMBLE	0xaa55aa55
-#define RCW_HEADER	0x010e0100
+#define RCW_ARM_HEADER	0x01ee0100
+#define RCW_PPC_HEADER	0x010e0100
 
 struct pbl_header {
 	uint32_t preamble;