summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--board/freescale/mx6q_arm2/u-boot.lds4
-rw-r--r--board/freescale/mx6sl_arm2/u-boot.lds4
-rw-r--r--common/cmd_bootm.c6
-rw-r--r--cpu/arm_cortexa8/mx6/generic.c36
4 files changed, 26 insertions, 24 deletions
diff --git a/board/freescale/mx6q_arm2/u-boot.lds b/board/freescale/mx6q_arm2/u-boot.lds
index a6bcebb..8f16b26 100644
--- a/board/freescale/mx6q_arm2/u-boot.lds
+++ b/board/freescale/mx6q_arm2/u-boot.lds
@@ -69,8 +69,8 @@ SECTIONS
. = ALIGN(4);
_end_of_copy = .; /* end_of ROM copy code when HAB is not enabled */
- /* Original Size is 0x27..., enlarge to 0x3F000 */
- . = TEXT_BASE + 0x3F000;
+ /* Extend to align to 0x1000, then put the Hab Data */
+ . = ALIGN(0x1000);
__hab_data = .;
. = . + 0x2000;
__hab_data_end = .;
diff --git a/board/freescale/mx6sl_arm2/u-boot.lds b/board/freescale/mx6sl_arm2/u-boot.lds
index e60df09..d17b862 100644
--- a/board/freescale/mx6sl_arm2/u-boot.lds
+++ b/board/freescale/mx6sl_arm2/u-boot.lds
@@ -69,8 +69,8 @@ SECTIONS
. = ALIGN(4);
_end_of_copy = .; /* end_of ROM copy code when HAB is not enabled */
- /* Original Size is 0x27..., enlarge to 0x2F000 */
- . = TEXT_BASE + 0x2F000;
+ /* Extend to align to 0x1000, then put the Hab Data */
+ . = ALIGN(0x1000);
__hab_data = .;
. = . + 0x2000;
__hab_data_end = .;
diff --git a/common/cmd_bootm.c b/common/cmd_bootm.c
index 618579e..e3ef82d 100644
--- a/common/cmd_bootm.c
+++ b/common/cmd_bootm.c
@@ -596,8 +596,10 @@ int do_bootm (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
}
#ifdef CONFIG_SECURE_BOOT
- extern uint32_t authenticate_image(void);
- if (authenticate_image() == 0) {
+ extern uint32_t authenticate_image(
+ uint32_t ddr_start, uint32_t image_size);
+ if (authenticate_image(load_addr,
+ image_get_image_size((image_header_t *)load_addr)) == 0) {
printf("Authenticate UImage Fail, Please check\n");
return 1;
}
diff --git a/cpu/arm_cortexa8/mx6/generic.c b/cpu/arm_cortexa8/mx6/generic.c
index 55e6b78..f0a9ce2 100644
--- a/cpu/arm_cortexa8/mx6/generic.c
+++ b/cpu/arm_cortexa8/mx6/generic.c
@@ -1222,6 +1222,11 @@ U_BOOT_CMD(
#define hab_rvt_exit ((hab_rvt_exit_t *) HAB_RVT_EXIT)
#define hab_rvt_clock_init HAB_RVT_CLOCK_INIT
+#define OCOTP_CFG5_OFFSET 0x460
+#define IVT_SIZE 0x20
+#define ALIGN_SIZE 0x1000
+#define CSF_PAD_SIZE 0x2000
+
/*
* +------------+ 0x0 (DDR_UIMAGE_START) -
* | Header | |
@@ -1240,9 +1245,9 @@ U_BOOT_CMD(
* | | | |
* | Fill Data | | |
* | | | |
- * +------------+ 0x003F_DFE0 | |
+ * +------------+ Align to ALIGN_SIZE | |
* | IVT | | |
- * +------------+ 0x003F_E000 - |
+ * +------------+ + IVT_SIZE - |
* | | |
* | CSF DATA | <---------------------------------------------------------+
* | |
@@ -1250,19 +1255,9 @@ U_BOOT_CMD(
* | |
* | Fill Data |
* | |
- * +------------+ 0x0040_0000
+ * +------------+ + CSF_PAD_SIZE
*/
-#ifndef CONFIG_MX6SL
-#define DDR_UIMAGE_START 0x10800000
-#else
-#define DDR_UIMAGE_START 0x80800000
-#endif
-
-#define DDR_UIMAGE_LENGTH 0x400000
-#define DDR_IVT_OFFSET 0x3FDFE0
-#define OCOTP_CFG5_OFFSET 0x460
-
int check_hab_enable(void)
{
u32 reg = 0;
@@ -1344,23 +1339,28 @@ void hab_caam_clock_disable(void)
writel(reg, CCM_BASE_ADDR + CLKCTL_CCGR0);
}
-uint32_t authenticate_image(void)
+uint32_t authenticate_image(uint32_t ddr_start, uint32_t image_size)
{
uint32_t load_addr = 0;
size_t bytes;
- ptrdiff_t ivt_offset = DDR_IVT_OFFSET;
+ ptrdiff_t ivt_offset = 0;
int result = 0;
ulong start;
if (check_hab_enable() == 1) {
printf("\nAuthenticate uImage from DDR location 0x%lx...\n",
- DDR_UIMAGE_START);
+ ddr_start);
hab_caam_clock_enable();
if (hab_rvt_entry() == HAB_SUCCESS) {
- start = DDR_UIMAGE_START;
- bytes = DDR_UIMAGE_LENGTH;
+ /*Align to ALIGN_SIZE*/
+ ivt_offset = image_size - image_size % ALIGN_SIZE
+ + ALIGN_SIZE;
+
+ start = ddr_start;
+ bytes = ivt_offset + IVT_SIZE + CSF_PAD_SIZE;
+
load_addr = (uint32_t)hab_rvt_authenticate_image(
HAB_CID_UBOOT,
ivt_offset, (void **)&start,