]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
tools: pblimage: fix image header verification function
authorHou Zhiqiang <Zhiqiang.Hou@nxp.com>
Thu, 17 Feb 2022 03:51:36 +0000 (11:51 +0800)
committerPriyanka Jain <priyanka.jain@nxp.com>
Mon, 28 Feb 2022 06:31:02 +0000 (12:01 +0530)
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>
Reviewed-by: Priyanka Jain <priyanka.jain@nxp.com>
Makefile
tools/pblimage.c
tools/pblimage.h

index 66d9e78cc77690c0acb3422c94ec1ea910cafb86..4d9cda7f30522258e19fabb5de6f3c96fb950b86 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1411,7 +1411,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
index 3c823e96cf17d127de25a0c42f18fed5a712eadc..bd639c276f9c41d36daf769580d6c0f39d9d3865 100644 (file)
@@ -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;
index 81c5492926bde4b846392b7adc3a43257f07efe4..0222e8067b4deaff363d658a897c4d83708fee16 100644 (file)
@@ -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;