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 |
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 >
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 --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;