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

