diff options
Diffstat (limited to 'meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-m/files/corstone1000/0009-Platform-corstone1000-BL2-uses-GPT-layout.patch')
-rw-r--r-- | meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-m/files/corstone1000/0009-Platform-corstone1000-BL2-uses-GPT-layout.patch | 411 |
1 files changed, 0 insertions, 411 deletions
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-m/files/corstone1000/0009-Platform-corstone1000-BL2-uses-GPT-layout.patch b/meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-m/files/corstone1000/0009-Platform-corstone1000-BL2-uses-GPT-layout.patch deleted file mode 100644 index 9df98cdaaf..0000000000 --- a/meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-m/files/corstone1000/0009-Platform-corstone1000-BL2-uses-GPT-layout.patch +++ /dev/null @@ -1,411 +0,0 @@ -From 6f95d99329e178b7dea5cf7affac2c55135bbb85 Mon Sep 17 00:00:00 2001 -From: Mohamed Omar Asaker <mohamed.omarasaker@arm.com> -Date: Wed, 11 Jan 2023 10:27:04 +0000 -Subject: [PATCH 9/10] Platform:corstone1000: BL2 uses GPT layout - -Adabt BL2 to use GPT parser find tfm and fip partitions, and then -extract info to populate MCUBOOT flashmap. - -Side changes required: -Borrow 2k of BL2 code memory to Data memory (during linking) -i.e. Increase BL2_DATA_GAP_SIZE and decrease SE_BL2_PARTITION_SIZE - -Signed-off-by: Mohamed Omar Asaker <mohamed.omarasaker@arm.com> -Upstream-Status: Pending [Not submitted to upstream yet] ---- - .../target/arm/corstone1000/CMakeLists.txt | 5 +- - .../target/arm/corstone1000/bl2_flash_map.c | 7 -- - .../target/arm/corstone1000/boot_hal_bl2.c | 86 +++++++++++++----- - .../corstone1000/fw_update_agent/fwu_agent.c | 24 ++--- - .../corstone1000/fw_update_agent/fwu_agent.h | 2 +- - .../arm/corstone1000/partition/flash_layout.h | 2 +- - .../ext/target/arm/corstone1000/platform.c | 87 ++++++++++++++++++- - .../ext/target/arm/corstone1000/platform.h | 10 +++ - 8 files changed, 168 insertions(+), 55 deletions(-) - -diff --git a/platform/ext/target/arm/corstone1000/CMakeLists.txt b/platform/ext/target/arm/corstone1000/CMakeLists.txt -index a120f39ea4..f16c1c40b0 100644 ---- a/platform/ext/target/arm/corstone1000/CMakeLists.txt -+++ b/platform/ext/target/arm/corstone1000/CMakeLists.txt -@@ -130,6 +130,10 @@ target_sources(platform_bl2 - io/io_block.c - io/io_flash.c - io/io_storage.c -+ soft_crc/soft_crc.c -+ partition/partition.c -+ partition/gpt.c -+ platform.c - ) - - if (PLATFORM_IS_FVP) -@@ -174,7 +178,6 @@ target_compile_definitions(bl2 - $<$<BOOL:${CRYPTO_HW_ACCELERATOR}>:CRYPTO_HW_ACCELERATOR> - $<$<BOOL:${CRYPTO_HW_ACCELERATOR_OTP_PROVISIONING}>:CRYPTO_HW_ACCELERATOR_OTP_PROVISIONING> - $<$<BOOL:${PLATFORM_PSA_ADAC_SECURE_DEBUG}>:PLATFORM_PSA_ADAC_SECURE_DEBUG> -- - ) - target_compile_definitions(bootutil - PRIVATE -diff --git a/platform/ext/target/arm/corstone1000/bl2_flash_map.c b/platform/ext/target/arm/corstone1000/bl2_flash_map.c -index f512045a44..599f80b411 100644 ---- a/platform/ext/target/arm/corstone1000/bl2_flash_map.c -+++ b/platform/ext/target/arm/corstone1000/bl2_flash_map.c -@@ -58,13 +58,6 @@ struct flash_area flash_map[] = { - - const int flash_map_entry_num = ARRAY_SIZE(flash_map); - --void add_bank_offset_to_image_offset(uint32_t bank_offset) --{ -- for (int i = 0; i < flash_map_entry_num; i++) { -- flash_map[i].fa_off += bank_offset; -- } --} -- - int boot_get_image_exec_ram_info(uint32_t image_id, - uint32_t *exec_ram_start, - uint32_t *exec_ram_size) -diff --git a/platform/ext/target/arm/corstone1000/boot_hal_bl2.c b/platform/ext/target/arm/corstone1000/boot_hal_bl2.c -index 323d9707fe..52db26beea 100644 ---- a/platform/ext/target/arm/corstone1000/boot_hal_bl2.c -+++ b/platform/ext/target/arm/corstone1000/boot_hal_bl2.c -@@ -1,5 +1,5 @@ - /* -- * Copyright (c) 2019-2022, Arm Limited. All rights reserved. -+ * Copyright (c) 2019-2023, Arm Limited. All rights reserved. - * - * SPDX-License-Identifier: BSD-3-Clause - * -@@ -30,6 +30,14 @@ - #include "crypto_hw.h" - #endif - -+#include "efi.h" -+#include "partition.h" -+#include "platform.h" -+ -+static const uint8_t * const tfm_part_names[] = {"tfm_primary", "tfm_secondary"}; -+static const uint8_t * const fip_part_names[] = {"FIP_A", "FIP_B"}; -+ -+ - /* Flash device name must be specified by target */ - extern ARM_DRIVER_FLASH FLASH_DEV_NAME; - -@@ -39,28 +47,62 @@ REGION_DECLARE(Image$$, ARM_LIB_HEAP, $$ZI$$Limit)[]; - #define ARRAY_SIZE(arr) (sizeof(arr)/sizeof((arr)[0])) - extern struct flash_area flash_map[]; - --int32_t fill_bl2_flash_map_by_parsing_fips(uint32_t bank_offset) --{ -- int result; -+static bool fill_flash_map_with_tfm_data(uint8_t boot_index) { -+ -+ if (boot_index >= ARRAY_SIZE(tfm_part_names)) { -+ BOOT_LOG_ERR("%d is an invalid boot_index, 0 <= boot_index < %d", -+ boot_index, ARRAY_SIZE(tfm_part_names)); -+ return false; -+ } -+ partition_entry_t *tfm_entry = -+ get_partition_entry(tfm_part_names[boot_index]); -+ if (tfm_entry == NULL) { -+ BOOT_LOG_ERR("Could not find partition %s", tfm_part_names[boot_index]); -+ return false; -+ } -+ flash_map[0].fa_off = tfm_entry->start; -+ flash_map[0].fa_size = tfm_entry->length; -+ return true; -+} -+ -+static bool fill_flash_map_with_fip_data(uint8_t boot_index) { - uint32_t tfa_offset = 0; -- uint32_t tfa_size = 0; -+ size_t tfa_size = 0; -+ uint32_t fip_offset = 0; -+ size_t fip_size = 0; -+ int result; -+ -+ if (boot_index >= ARRAY_SIZE(fip_part_names)) { -+ BOOT_LOG_ERR("%d is an invalid boot_index, 0 <= boot_index < %d", -+ boot_index, ARRAY_SIZE(fip_part_names)); -+ return false; -+ } -+ partition_entry_t *fip_entry = -+ get_partition_entry(fip_part_names[boot_index]); -+ if (fip_entry == NULL) { -+ BOOT_LOG_ERR("Could not find partition %s", fip_part_names[boot_index]); -+ return false; -+ } -+ -+ fip_offset = fip_entry->start; -+ fip_size = fip_entry->length; - - /* parse directly from flash using XIP mode */ - /* FIP is large so its not a good idea to load it in memory */ -- result = parse_fip_and_extract_tfa_info(bank_offset + FLASH_FIP_ADDRESS, -- FLASH_FIP_SIZE, -- &tfa_offset, &tfa_size); -+ result = parse_fip_and_extract_tfa_info( -+ FLASH_BASE_ADDRESS + fip_offset + FIP_SIGNATURE_AREA_SIZE, fip_size, -+ &tfa_offset, &tfa_size); - if (result != FIP_PARSER_SUCCESS) { - BOOT_LOG_ERR("parse_fip_and_extract_tfa_info failed"); -- return 1; -+ return false; - } - -- flash_map[2].fa_off = FLASH_FIP_OFFSET + tfa_offset; -+ flash_map[2].fa_off = fip_offset + FIP_SIGNATURE_AREA_SIZE + tfa_offset; - flash_map[2].fa_size = tfa_size; - flash_map[3].fa_off = flash_map[2].fa_off + flash_map[2].fa_size; - flash_map[3].fa_size = tfa_size; - -- return 0; -+ return true; - } - - #ifdef PLATFORM_PSA_ADAC_SECURE_DEBUG -@@ -89,26 +131,29 @@ uint8_t secure_debug_rotpk[32]; - - #endif - --extern void add_bank_offset_to_image_offset(uint32_t bank_offset); -- - int32_t boot_platform_init(void) - { - int32_t result; -+ uint8_t boot_index; - - result = corstone1000_watchdog_init(); - if (result != ARM_DRIVER_OK) { - return 1; - } - --#ifndef TFM_S_REG_TEST -- result = fill_bl2_flash_map_by_parsing_fips(BANK_0_PARTITION_OFFSET); -- if (result) { -+ result = FLASH_DEV_NAME.Initialize(NULL); -+ if (result != ARM_DRIVER_OK) { - return 1; - } --#endif - -- result = FLASH_DEV_NAME.Initialize(NULL); -- if (result != ARM_DRIVER_OK) { -+ plat_io_storage_init(); -+ partition_init(PLATFORM_GPT_IMAGE); -+ -+ boot_index = bl2_get_boot_bank(); -+ -+ if (!fill_flash_map_with_tfm_data(boot_index) -+ || !fill_flash_map_with_fip_data(boot_index)) { -+ BOOT_LOG_ERR("Filling flash map has failed!"); - return 1; - } - -@@ -149,9 +194,6 @@ int32_t boot_platform_post_init(void) - } - #endif - -- bl2_get_boot_bank(&bank_offset); -- add_bank_offset_to_image_offset(bank_offset); -- - return 0; - } - -diff --git a/platform/ext/target/arm/corstone1000/fw_update_agent/fwu_agent.c b/platform/ext/target/arm/corstone1000/fw_update_agent/fwu_agent.c -index e4f9da1ec3..1052bf9f00 100644 ---- a/platform/ext/target/arm/corstone1000/fw_update_agent/fwu_agent.c -+++ b/platform/ext/target/arm/corstone1000/fw_update_agent/fwu_agent.c -@@ -836,34 +836,20 @@ void bl1_get_active_bl2_image(uint32_t *offset) - return; - } - --void bl2_get_boot_bank(uint32_t *bank_offset) -+uint8_t bl2_get_boot_bank(void) - { -- uint32_t boot_index; -+ uint8_t boot_index; - struct fwu_private_metadata priv_metadata; -- FWU_LOG_MSG("%s: enter\n\r", __func__); -- -+ FWU_LOG_MSG("%s: enter", __func__); - if (fwu_metadata_init()) { - FWU_ASSERT(0); - } -- - if (private_metadata_read(&priv_metadata)) { - FWU_ASSERT(0); - } -- - boot_index = priv_metadata.boot_index; -- -- if (boot_index == BANK_0) { -- *bank_offset = BANK_0_PARTITION_OFFSET; -- } else if (boot_index == BANK_1) { -- *bank_offset = BANK_1_PARTITION_OFFSET; -- } else { -- FWU_ASSERT(0); -- } -- -- FWU_LOG_MSG("%s: exit: booting from bank = %u, offset = %x\n\r", __func__, -- boot_index, *bank_offset); -- -- return; -+ FWU_LOG_MSG("%s: exit: booting from bank = %u", __func__, boot_index); -+ return boot_index; - } - - static void disable_host_ack_timer(void) -diff --git a/platform/ext/target/arm/corstone1000/fw_update_agent/fwu_agent.h b/platform/ext/target/arm/corstone1000/fw_update_agent/fwu_agent.h -index eb8320ed8a..701f205583 100644 ---- a/platform/ext/target/arm/corstone1000/fw_update_agent/fwu_agent.h -+++ b/platform/ext/target/arm/corstone1000/fw_update_agent/fwu_agent.h -@@ -45,7 +45,7 @@ enum fwu_agent_error_t corstone1000_fwu_flash_image(void); - enum fwu_agent_error_t corstone1000_fwu_host_ack(void); - - void bl1_get_active_bl2_image(uint32_t *bank_offset); --void bl2_get_boot_bank(uint32_t *bank_offset); -+uint8_t bl2_get_boot_bank(void); - - /* When in trial state, start the timer for host to respond. - * Diable timer when host responds back either by calling -diff --git a/platform/ext/target/arm/corstone1000/partition/flash_layout.h b/platform/ext/target/arm/corstone1000/partition/flash_layout.h -index 347c91acbb..c5cf94a52c 100644 ---- a/platform/ext/target/arm/corstone1000/partition/flash_layout.h -+++ b/platform/ext/target/arm/corstone1000/partition/flash_layout.h -@@ -32,7 +32,7 @@ - #define SRAM_BASE (0x30000000) - #define SRAM_SIZE (0x80000) /* 512 KB */ - --#define BL2_DATA_GAP_SIZE (0x09000) /* 36 KB */ -+#define BL2_DATA_GAP_SIZE (0x09800) /* 38 KB */ - - #define BL1_DATA_START (SRAM_BASE) - #define BL1_DATA_SIZE (0x10000) /* 64 KiB*/ -diff --git a/platform/ext/target/arm/corstone1000/platform.c b/platform/ext/target/arm/corstone1000/platform.c -index 908b66b7ac..6add0d7e1b 100644 ---- a/platform/ext/target/arm/corstone1000/platform.c -+++ b/platform/ext/target/arm/corstone1000/platform.c -@@ -5,16 +5,95 @@ - * - */ - -+#include "stdint.h" -+ -+#include "Driver_Flash.h" -+#include "flash_layout.h" -+ -+#include "io_driver.h" -+#include "io_flash.h" -+#include "io_storage.h" -+ - #include "platform.h" - --#include <stdint.h> -+#define PLAT_LOG_MODULE_NAME "platform" -+#include "platform_log.h" -+ -+typedef struct { -+ uintptr_t dev_handle; -+ uintptr_t image_spec; -+} platform_image_source_t; -+ -+extern ARM_DRIVER_FLASH FLASH_DEV_NAME; -+ -+static io_dev_connector_t *flash_dev_con; -+static uint8_t local_block_flash[FLASH_SECTOR_SIZE]; -+static io_flash_dev_spec_t flash_dev_spec = { -+ .buffer = local_block_flash, -+ .bufferlen = FLASH_SECTOR_SIZE, -+ .base_addr = FLASH_BASE_ADDRESS, -+ .flash_driver = &FLASH_DEV_NAME, -+}; -+static io_block_spec_t flash_spec = { -+ .offset = FLASH_BASE_ADDRESS, -+ .length = FLASH_TOTAL_SIZE -+}; -+ -+static platform_image_source_t platform_image_source[] = { -+ [PLATFORM_GPT_IMAGE] = { -+ .dev_handle = NULL, -+ .image_spec = &flash_spec, -+ } -+}; -+ -+/* Initialize io storage of the platform */ -+int32_t plat_io_storage_init(void) -+{ -+ int rc = -1; -+ uintptr_t flash_dev_handle = NULL; -+ uintptr_t flash_handle = NULL; -+ -+ rc = register_io_dev_flash((const io_dev_connector_t **) &flash_dev_con); -+ if (rc != 0) { -+ ERROR("Failed to register io flash rc: %d", rc); -+ return rc; -+ } -+ -+ rc = io_dev_open(flash_dev_con, (const uintptr_t)&flash_dev_spec, &flash_dev_handle); -+ if (rc != 0) { -+ ERROR("Failed to open io flash dev rc: %d", rc); -+ return rc; -+ } -+ -+ VERBOSE("Flash_dev_handle = %p",flash_dev_handle); -+ -+ rc = io_open(flash_dev_handle, (const uintptr_t)&flash_spec, &flash_handle); -+ if (rc != 0) { -+ ERROR("Failed to open io flash rc: %d", rc); -+ return rc; -+ } -+ -+ VERBOSE("Flash_handle = %p",flash_handle); -+ -+ rc = io_close(flash_handle); -+ if (rc != 0) { -+ ERROR("Failed to close io flash rc: %d", rc); -+ return rc; -+ } -+ /* Update the platform image source that uses the flash with dev handles */ -+ platform_image_source[PLATFORM_GPT_IMAGE].dev_handle = flash_dev_handle; -+ -+ return rc; -+} - - /* Return an IO device handle and specification which can be used to access - * an image. This has to be implemented for the GPT parser. */ - int32_t plat_get_image_source(unsigned int image_id, uintptr_t *dev_handle, - uintptr_t *image_spec) { -- (void)image_id; -- *dev_handle = NULL; -- *image_spec = NULL; -+ if (image_id >= PLATFORM_IMAGE_COUNT) { -+ return -1; -+ } -+ *dev_handle = platform_image_source[image_id].dev_handle; -+ *image_spec = platform_image_source[image_id].image_spec; - return 0; - } -diff --git a/platform/ext/target/arm/corstone1000/platform.h b/platform/ext/target/arm/corstone1000/platform.h -index 250f9cd9f5..894f5e3090 100644 ---- a/platform/ext/target/arm/corstone1000/platform.h -+++ b/platform/ext/target/arm/corstone1000/platform.h -@@ -8,6 +8,16 @@ - #ifndef __PLATFORM_H__ - #define __PLATFORM_H__ - -+typedef enum { -+ PLATFORM_GPT_IMAGE = 0, -+ PLATFORM_IMAGE_COUNT, -+}platform_image_id_t; -+ -+/* Initialize io storage of the platform */ -+int32_t plat_io_storage_init(void); -+ -+/* Return an IO device handle and specification which can be used to access -+ * an image. This has to be implemented for the GPT parser. */ - int32_t plat_get_image_source(unsigned int image_id, uintptr_t *dev_handle, - uintptr_t *image_spec); - --- -2.25.1 - |