zephyr: arm: Update reading the flash image reset vector
This change uses the flash functions to read the applications
reset vector. This allow flexibility on which flash device the
application is programmed.
For e.g: MCUBoot can be programmed and running from Internal
Flash while Zephyr can be loaded from a different Flash device.
This change is made for ARM platform, it can be extended to
non-ARM platforms as well.
Signed-off-by: Mahesh Mahadevan <mahesh.mahadevan@nxp.com>
diff --git a/boot/zephyr/main.c b/boot/zephyr/main.c
index 686e02e..95da276 100644
--- a/boot/zephyr/main.c
+++ b/boot/zephyr/main.c
@@ -157,16 +157,26 @@
/* Get ram address for image */
vt = (struct arm_vector_table *)(rsp->br_hdr->ih_load_addr + rsp->br_hdr->ih_hdr_size);
#else
- uintptr_t flash_base;
int rc;
+ const struct flash_area *fap;
+ static uint32_t dst[2];
/* Jump to flash image */
- rc = flash_device_base(rsp->br_flash_dev_id, &flash_base);
+ rc = flash_area_open(rsp->br_flash_dev_id, &fap);
assert(rc == 0);
- vt = (struct arm_vector_table *)(flash_base +
- rsp->br_image_off +
- rsp->br_hdr->ih_hdr_size);
+ rc = flash_area_read(fap, rsp->br_hdr->ih_hdr_size, dst, sizeof(dst));
+ assert(rc == 0);
+#ifndef CONFIG_ASSERT
+ /* Enter a lock up as asserts are disabled */
+ if (rc != 0) {
+ while (1);
+ }
+#endif
+
+ flash_area_close(fap);
+
+ vt = (struct arm_vector_table *)dst;
#endif
if (IS_ENABLED(CONFIG_SYSTEM_TIMER_HAS_DISABLE_SUPPORT)) {