summaryrefslogtreecommitdiff
path: root/meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-m/files/corstone1000/0009-Platform-corstone1000-BL2-uses-GPT-layout.patch
diff options
context:
space:
mode:
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.patch411
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
-