tools: pblimage: fix image header verification function

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>
This commit is contained in:
Hou Zhiqiang 2022-02-17 11:51:36 +08:00 committed by Priyanka Jain
parent 453db60568
commit 2058967d2f
3 changed files with 11 additions and 4 deletions

View File

@ -1411,7 +1411,7 @@ MKIMAGEFLAGS_u-boot-spl.kwb = -n $(KWD_CONFIG_FILE) \
$(if $(KEYDIR),-k $(KEYDIR)) $(if $(KEYDIR),-k $(KEYDIR))
MKIMAGEFLAGS_u-boot.pbl = -n $(srctree)/$(CONFIG_SYS_FSL_PBL_RCW:"%"=%) \ 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) ifeq ($(CONFIG_MPC85xx)$(CONFIG_OF_SEPARATE),yy)
UBOOT_BIN := u-boot-with-dtb.bin UBOOT_BIN := u-boot-with-dtb.bin

View File

@ -230,19 +230,25 @@ static int pblimage_verify_header(unsigned char *ptr, int image_size,
struct image_tool_params *params) struct image_tool_params *params)
{ {
struct pbl_header *pbl_hdr = (struct pbl_header *) ptr; 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 */ /* Only a few checks can be done: search for magic numbers */
if (ENDIANNESS == 'l') { if (ENDIANNESS == 'l') {
if (pbl_hdr->preamble != reverse_byte(RCW_PREAMBLE)) if (pbl_hdr->preamble != reverse_byte(RCW_PREAMBLE))
return -FDT_ERR_BADSTRUCTURE; return -FDT_ERR_BADSTRUCTURE;
if (pbl_hdr->rcwheader != reverse_byte(RCW_HEADER)) if (pbl_hdr->rcwheader != reverse_byte(rcwheader))
return -FDT_ERR_BADSTRUCTURE; return -FDT_ERR_BADSTRUCTURE;
} else { } else {
if (pbl_hdr->preamble != RCW_PREAMBLE) if (pbl_hdr->preamble != RCW_PREAMBLE)
return -FDT_ERR_BADSTRUCTURE; return -FDT_ERR_BADSTRUCTURE;
if (pbl_hdr->rcwheader != RCW_HEADER) if (pbl_hdr->rcwheader != rcwheader)
return -FDT_ERR_BADSTRUCTURE; return -FDT_ERR_BADSTRUCTURE;
} }
return 0; return 0;

View File

@ -8,7 +8,8 @@
#define RCW_BYTES 64 #define RCW_BYTES 64
#define RCW_PREAMBLE 0xaa55aa55 #define RCW_PREAMBLE 0xaa55aa55
#define RCW_HEADER 0x010e0100 #define RCW_ARM_HEADER 0x01ee0100
#define RCW_PPC_HEADER 0x010e0100
struct pbl_header { struct pbl_header {
uint32_t preamble; uint32_t preamble;