Pointers in ESBC header made 32 bit

For the Chain of Trust, the esbc_validate command supports
32 bit fields for location of the image. In the header structure
definition, these were declared as pointers which made them
64 bit on a 64 bit core.

Signed-off-by: Aneesh Bansal <aneesh.bansal@freescale.com>
Reviewed-by: York Sun <yorksun@freescale.com>
This commit is contained in:
Aneesh Bansal 2015-09-17 16:16:34 +05:30 committed by York Sun
parent 0cbba8e953
commit 7bcb0eb285
2 changed files with 17 additions and 17 deletions

View File

@ -63,12 +63,12 @@ static u32 check_ie(struct fsl_secboot_img_priv *img)
* address * address
*/ */
#if defined(CONFIG_MPC85xx) #if defined(CONFIG_MPC85xx)
int get_csf_base_addr(ulong *csf_addr, ulong *flash_base_addr) int get_csf_base_addr(u32 *csf_addr, u32 *flash_base_addr)
{ {
struct ccsr_gur __iomem *gur = (void *)(CONFIG_SYS_MPC85xx_GUTS_ADDR); struct ccsr_gur __iomem *gur = (void *)(CONFIG_SYS_MPC85xx_GUTS_ADDR);
u32 csf_hdr_addr = in_be32(&gur->scratchrw[0]); u32 csf_hdr_addr = in_be32(&gur->scratchrw[0]);
u32 csf_flash_offset = csf_hdr_addr & ~(CONFIG_SYS_PBI_FLASH_BASE); u32 csf_flash_offset = csf_hdr_addr & ~(CONFIG_SYS_PBI_FLASH_BASE);
ulong flash_addr, addr; u32 flash_addr, addr;
int found = 0; int found = 0;
int i = 0; int i = 0;
@ -76,7 +76,7 @@ int get_csf_base_addr(ulong *csf_addr, ulong *flash_base_addr)
flash_addr = flash_info[i].start[0]; flash_addr = flash_info[i].start[0];
addr = flash_info[i].start[0] + csf_flash_offset; addr = flash_info[i].start[0] + csf_flash_offset;
if (memcmp((u8 *)addr, barker_code, ESBC_BARKER_LEN) == 0) { if (memcmp((u8 *)addr, barker_code, ESBC_BARKER_LEN) == 0) {
debug("Barker found on addr %lx\n", addr); debug("Barker found on addr %x\n", addr);
found = 1; found = 1;
break; break;
} }
@ -94,7 +94,7 @@ int get_csf_base_addr(ulong *csf_addr, ulong *flash_base_addr)
/* For platforms like LS1020, correct flash address is present in /* For platforms like LS1020, correct flash address is present in
* the header. So the function reqturns flash base address as 0 * the header. So the function reqturns flash base address as 0
*/ */
int get_csf_base_addr(ulong *csf_addr, ulong *flash_base_addr) int get_csf_base_addr(u32 *csf_addr, u32 *flash_base_addr)
{ {
struct ccsr_gur __iomem *gur = (void *)(CONFIG_SYS_FSL_GUTS_ADDR); struct ccsr_gur __iomem *gur = (void *)(CONFIG_SYS_FSL_GUTS_ADDR);
u32 csf_hdr_addr = in_be32(&gur->scratchrw[0]); u32 csf_hdr_addr = in_be32(&gur->scratchrw[0]);
@ -108,11 +108,11 @@ int get_csf_base_addr(ulong *csf_addr, ulong *flash_base_addr)
} }
#endif #endif
static int get_ie_info_addr(ulong *ie_addr) static int get_ie_info_addr(u32 *ie_addr)
{ {
struct fsl_secboot_img_hdr *hdr; struct fsl_secboot_img_hdr *hdr;
struct fsl_secboot_sg_table *sg_tbl; struct fsl_secboot_sg_table *sg_tbl;
ulong flash_base_addr, csf_addr; u32 flash_base_addr, csf_addr;
if (get_csf_base_addr(&csf_addr, &flash_base_addr)) if (get_csf_base_addr(&csf_addr, &flash_base_addr))
return -1; return -1;
@ -127,11 +127,11 @@ static int get_ie_info_addr(ulong *ie_addr)
*/ */
#if defined(CONFIG_FSL_TRUST_ARCH_v1) && defined(CONFIG_FSL_CORENET) #if defined(CONFIG_FSL_TRUST_ARCH_v1) && defined(CONFIG_FSL_CORENET)
sg_tbl = (struct fsl_secboot_sg_table *) sg_tbl = (struct fsl_secboot_sg_table *)
(((ulong)hdr->psgtable & ~(CONFIG_SYS_PBI_FLASH_BASE)) + (((u32)hdr->psgtable & ~(CONFIG_SYS_PBI_FLASH_BASE)) +
flash_base_addr); flash_base_addr);
#else #else
sg_tbl = (struct fsl_secboot_sg_table *)(csf_addr + sg_tbl = (struct fsl_secboot_sg_table *)(csf_addr +
(ulong)hdr->psgtable); (u32)hdr->psgtable);
#endif #endif
/* IE Key Table is the first entry in the SG Table */ /* IE Key Table is the first entry in the SG Table */
@ -142,7 +142,7 @@ static int get_ie_info_addr(ulong *ie_addr)
*ie_addr = sg_tbl->src_addr; *ie_addr = sg_tbl->src_addr;
#endif #endif
debug("IE Table address is %lx\n", *ie_addr); debug("IE Table address is %x\n", *ie_addr);
return 0; return 0;
} }
@ -549,7 +549,7 @@ static int read_validate_esbc_client_header(struct fsl_secboot_img_priv *img)
if (memcmp(hdr->barker, barker_code, ESBC_BARKER_LEN)) if (memcmp(hdr->barker, barker_code, ESBC_BARKER_LEN))
return ERROR_ESBC_CLIENT_HEADER_BARKER; return ERROR_ESBC_CLIENT_HEADER_BARKER;
sprintf(buf, "%p", hdr->pimg); sprintf(buf, "%x", hdr->pimg);
setenv("img_addr", buf); setenv("img_addr", buf);
if (!hdr->img_size) if (!hdr->img_size)

View File

@ -82,14 +82,14 @@ struct fsl_secboot_img_hdr {
u32 psign; /* signature offset */ u32 psign; /* signature offset */
u32 sign_len; /* length of the signature in bytes */ u32 sign_len; /* length of the signature in bytes */
union { union {
struct fsl_secboot_sg_table *psgtable; /* ptr to SG table */ u32 psgtable; /* ptr to SG table */
u8 *pimg; /* ptr to ESBC client image */ u32 pimg; /* ptr to ESBC client image */
}; };
union { union {
u32 sg_entries; /* no of entries in SG table */ u32 sg_entries; /* no of entries in SG table */
u32 img_size; /* ESBC client image size in bytes */ u32 img_size; /* ESBC client image size in bytes */
}; };
ulong img_start; /* ESBC client entry point */ u32 img_start; /* ESBC client entry point */
u32 sg_flag; /* Scatter gather flag */ u32 sg_flag; /* Scatter gather flag */
u32 uid_flag; u32 uid_flag;
u32 fsl_uid_0; u32 fsl_uid_0;
@ -133,7 +133,7 @@ struct srk_table {
*/ */
struct fsl_secboot_sg_table { struct fsl_secboot_sg_table {
u32 len; /* length of the segment in bytes */ u32 len; /* length of the segment in bytes */
ulong src_addr; /* ptr to the data segment */ u32 src_addr; /* ptr to the data segment */
}; };
#else #else
/* /*
@ -146,8 +146,8 @@ struct fsl_secboot_sg_table {
struct fsl_secboot_sg_table { struct fsl_secboot_sg_table {
u32 len; u32 len;
u32 trgt_id; u32 trgt_id;
ulong src_addr; u32 src_addr;
ulong dst_addr; u32 dst_addr;
}; };
#endif #endif
@ -162,7 +162,7 @@ struct fsl_secboot_sg_table {
*/ */
struct fsl_secboot_img_priv { struct fsl_secboot_img_priv {
uint32_t hdr_location; uint32_t hdr_location;
ulong ie_addr; u32 ie_addr;
u32 key_len; u32 key_len;
struct fsl_secboot_img_hdr hdr; struct fsl_secboot_img_hdr hdr;