blob: d9143a0eb6db1a56d2a5c01c511bbb1564f8724c [file] [log] [blame]
From f70bbd0d8efefcc69916fc0393bc413fb39924af Mon Sep 17 00:00:00 2001
From: Mohamed Omar Asaker <mohamed.omarasaker@arm.com>
Date: Tue, 10 Jan 2023 22:33:26 +0000
Subject: [PATCH 8/10] Platform: corstone1000: BL1 changes to adapt to new flash
layout
The commit prepares BL1 to adapt to new GPT-based flash layout.
BL1 does not incorporate a GPT parser and still uses a static
configuration to understand the flash.
The flash_layout.h is also modified/marked in a way to start
the process of its simplification.
Signed-off-by: Satish Kumar <satish.kumar01@arm.com>
Upstream-Status: Pending [Not submitted to upstream yet]
Signed-off-by: Mohamed Omar Asaker <mohamed.omarasaker@arm.com>
Upstream-Status: Pending [Not submitted to upstream yet]
---
.../arm/corstone1000/bl1/bl1_boot_hal.c | 10 +--
.../arm/corstone1000/bl1/bl1_flash_map.c | 17 ++--
.../target/arm/corstone1000/bl2_flash_map.c | 8 +-
.../corstone1000/fw_update_agent/fwu_agent.c | 16 ++--
.../corstone1000/fw_update_agent/fwu_agent.h | 4 +-
.../arm/corstone1000/partition/flash_layout.h | 84 +++++++++----------
6 files changed, 66 insertions(+), 73 deletions(-)
diff --git a/platform/ext/target/arm/corstone1000/bl1/bl1_boot_hal.c b/platform/ext/target/arm/corstone1000/bl1/bl1_boot_hal.c
index 9caa26b26c..a5fe0f7da1 100644
--- a/platform/ext/target/arm/corstone1000/bl1/bl1_boot_hal.c
+++ b/platform/ext/target/arm/corstone1000/bl1/bl1_boot_hal.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
*
@@ -601,12 +601,12 @@ __attribute__((naked)) void boot_clear_bl2_ram_area(void)
);
}
-extern void add_bank_offset_to_image_offset(uint32_t bank_offset);
+extern void set_flash_area_image_offset(uint32_t offset);
int32_t boot_platform_init(void)
{
int32_t result;
- uint32_t bank_offset;
+ uint32_t image_offset;
result = corstone1000_watchdog_init();
if (result != ARM_DRIVER_OK) {
@@ -653,8 +653,8 @@ int32_t boot_platform_init(void)
}
}
- bl1_get_boot_bank(&bank_offset);
- add_bank_offset_to_image_offset(bank_offset);
+ bl1_get_active_bl2_image(&image_offset);
+ set_flash_area_image_offset(image_offset);
return 0;
}
diff --git a/platform/ext/target/arm/corstone1000/bl1/bl1_flash_map.c b/platform/ext/target/arm/corstone1000/bl1/bl1_flash_map.c
index c8a1f13319..0e615da254 100644
--- a/platform/ext/target/arm/corstone1000/bl1/bl1_flash_map.c
+++ b/platform/ext/target/arm/corstone1000/bl1/bl1_flash_map.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019-2021, Arm Limited. All rights reserved.
+ * Copyright (c) 2019-2021, 2023 Arm Limited. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*
@@ -22,23 +22,22 @@ struct flash_area flash_map[] = {
.fa_id = FLASH_AREA_8_ID,
.fa_device_id = FLASH_DEVICE_ID,
.fa_driver = &FLASH_DEV_NAME,
- .fa_off = FLASH_AREA_8_OFFSET,
+ .fa_off = FLASH_INVALID_OFFSET,
.fa_size = FLASH_AREA_8_SIZE,
},
+ /* Secondary slot is not supported */
{
- .fa_id = FLASH_AREA_9_ID,
+ .fa_id = FLASH_INVALID_ID,
.fa_device_id = FLASH_DEVICE_ID,
.fa_driver = &FLASH_DEV_NAME,
- .fa_off = FLASH_AREA_9_OFFSET,
- .fa_size = FLASH_AREA_9_SIZE,
+ .fa_off = FLASH_INVALID_OFFSET,
+ .fa_size = FLASH_INVALID_SIZE,
},
};
const int flash_map_entry_num = ARRAY_SIZE(flash_map);
-void add_bank_offset_to_image_offset(uint32_t bank_offset)
+void set_flash_area_image_offset(uint32_t offset)
{
- for (int i = 0; i < flash_map_entry_num; i++) {
- flash_map[i].fa_off += bank_offset;
- }
+ flash_map[0].fa_off = offset;
}
diff --git a/platform/ext/target/arm/corstone1000/bl2_flash_map.c b/platform/ext/target/arm/corstone1000/bl2_flash_map.c
index 0a6a592d94..f512045a44 100644
--- a/platform/ext/target/arm/corstone1000/bl2_flash_map.c
+++ b/platform/ext/target/arm/corstone1000/bl2_flash_map.c
@@ -28,15 +28,15 @@ struct flash_area flash_map[] = {
.fa_id = FLASH_AREA_0_ID,
.fa_device_id = FLASH_DEVICE_ID,
.fa_driver = &FLASH_DEV_NAME,
- .fa_off = FLASH_AREA_0_OFFSET,
- .fa_size = FLASH_AREA_0_SIZE,
+ .fa_off = FLASH_INVALID_OFFSET,
+ .fa_size = FLASH_INVALID_SIZE,
},
{
.fa_id = FLASH_AREA_1_ID,
.fa_device_id = FLASH_DEVICE_ID,
.fa_driver = &FLASH_DEV_NAME,
- .fa_off = FLASH_AREA_1_OFFSET,
- .fa_size = FLASH_AREA_1_SIZE,
+ .fa_off = FLASH_INVALID_OFFSET,
+ .fa_size = FLASH_INVALID_SIZE,
},
#ifndef TFM_S_REG_TEST
{
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 eb17c3a377..e4f9da1ec3 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
@@ -154,7 +154,7 @@ static enum fwu_agent_error_t private_metadata_read(
return FWU_AGENT_ERROR;
}
- ret = FWU_METADATA_FLASH_DEV.ReadData(FWU_PRIVATE_AREA_OFFSET, p_metadata,
+ ret = FWU_METADATA_FLASH_DEV.ReadData(FWU_PRIVATE_METADATA_REPLICA_1_OFFSET, p_metadata,
sizeof(struct fwu_private_metadata));
if (ret < 0 || ret != sizeof(struct fwu_private_metadata)) {
return FWU_AGENT_ERROR;
@@ -178,12 +178,12 @@ static enum fwu_agent_error_t private_metadata_write(
return FWU_AGENT_ERROR;
}
- ret = FWU_METADATA_FLASH_DEV.EraseSector(FWU_PRIVATE_AREA_OFFSET);
+ ret = FWU_METADATA_FLASH_DEV.EraseSector(FWU_PRIVATE_METADATA_REPLICA_1_OFFSET);
if (ret != ARM_DRIVER_OK) {
return FWU_AGENT_ERROR;
}
- ret = FWU_METADATA_FLASH_DEV.ProgramData(FWU_PRIVATE_AREA_OFFSET,
+ ret = FWU_METADATA_FLASH_DEV.ProgramData(FWU_PRIVATE_METADATA_REPLICA_1_OFFSET,
p_metadata, sizeof(struct fwu_private_metadata));
if (ret < 0 || ret != sizeof(struct fwu_private_metadata)) {
return FWU_AGENT_ERROR;
@@ -769,7 +769,7 @@ static enum fwu_agent_error_t fwu_select_previous(
}
-void bl1_get_boot_bank(uint32_t *bank_offset)
+void bl1_get_active_bl2_image(uint32_t *offset)
{
struct fwu_private_metadata priv_metadata;
enum fwu_agent_state_t current_state;
@@ -823,15 +823,15 @@ void bl1_get_boot_bank(uint32_t *bank_offset)
}
if (boot_index == BANK_0) {
- *bank_offset = BANK_0_PARTITION_OFFSET;
+ *offset = SE_BL2_BANK_0_OFFSET;
} else if (boot_index == BANK_1) {
- *bank_offset = BANK_1_PARTITION_OFFSET;
+ *offset = SE_BL2_BANK_1_OFFSET;
} else {
FWU_ASSERT(0);
}
- FWU_LOG_MSG("%s: exit: booting from bank = %u, offset = %x\n\r", __func__,
- boot_index, *bank_offset);
+ FWU_LOG_MSG("%s: exit: booting from bank = %u, offset = 0x%x\n\r", __func__,
+ boot_index, *offset);
return;
}
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 00a08354be..eb8320ed8a 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
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2021, Arm Limited. All rights reserved.
+ * Copyright (c) 2021-2023, Arm Limited. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*
@@ -44,7 +44,7 @@ enum fwu_agent_error_t corstone1000_fwu_flash_image(void);
*/
enum fwu_agent_error_t corstone1000_fwu_host_ack(void);
-void bl1_get_boot_bank(uint32_t *bank_offset);
+void bl1_get_active_bl2_image(uint32_t *bank_offset);
void bl2_get_boot_bank(uint32_t *bank_offset);
/* When in trial state, start the timer for host to respond.
diff --git a/platform/ext/target/arm/corstone1000/partition/flash_layout.h b/platform/ext/target/arm/corstone1000/partition/flash_layout.h
index 5970a13c12..347c91acbb 100644
--- a/platform/ext/target/arm/corstone1000/partition/flash_layout.h
+++ b/platform/ext/target/arm/corstone1000/partition/flash_layout.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2017-2022 Arm Limited. All rights reserved.
+ * Copyright (c) 2017-2023 Arm Limited. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -98,56 +98,56 @@
#endif
-/* Flash layout (32MB) :-
- *
- * 1 MB : FWU_METADATA_PARTITION_SIZE
- * 15.5 MB : BANK 1 PARTITION SIZE
- * 15.5 MB : BANK 2 PARTITION SIZE
- *
- */
-#define FWU_METADATA_PARTITION_SIZE (0x100000) /* 1MB */
-#define BANK_PARTITION_SIZE (0xF80000) /* 15.5 MB */
+/* Static Configurations of the Flash */
+#define SE_BL2_PARTITION_SIZE (0x18800) /* 98 KB */
+#define SE_BL2_BANK_0_OFFSET (0x9000) /* 72nd LBA */
+#define SE_BL2_BANK_1_OFFSET (0x1002000) /* 32784th LBA */
-#define FLASH_BASE_OFFSET (0x0)
+/* Space in flash to store metadata and uefi variables */
+#define FWU_METADATA_FLASH_DEV (FLASH_DEV_NAME)
+#define FWU_METADATA_FLASH_SECTOR_SIZE (FLASH_SECTOR_SIZE)
-/* BANK layout (15MB: BANK_PARTITION_SIZE) :-
- *
- * 200 KB : SE_BL2_PARTITION_SIZE + SE_BL2_PARTITION_SIZE
- * 752 KB : TFM_PARTITION_SIZE + TFM_PARTITION_SIZE
- * 2 MB : FIP_PARTITION_SIZE
- * 12+ MB : KERNEL_PARTITION_SIZE
- *
- */
-#define SE_BL2_PARTITION_SIZE (0x19000) /* 100 KB */
-#define TFM_PARTITION_SIZE (0x5E000) /* 376 KB */
-#define FIP_PARTITION_SIZE (0x200000) /* 2 MB */
-#define KERNEL_PARTITION_SIZE (0xC00000) /* 12 MB */
+#define FWU_METADATA_REPLICA_1_OFFSET (0x5000) /* 40th LBA */
+#define FWU_METADATA_REPLICA_2_OFFSET (FWU_METADATA_REPLICA_1_OFFSET + \
+ FWU_METADATA_FLASH_SECTOR_SIZE)
+#define FWU_PRIVATE_METADATA_REPLICA_1_OFFSET (FWU_METADATA_REPLICA_2_OFFSET + \
+ FWU_METADATA_FLASH_SECTOR_SIZE)
+#define FWU_PRIVATE_METADATA_REPLICA_2_OFFSET (FWU_PRIVATE_METADATA_REPLICA_1_OFFSET + \
+ FWU_METADATA_FLASH_SECTOR_SIZE)
+#define BANK_0_PARTITION_OFFSET (SE_BL2_BANK_0_OFFSET + \
+ SE_BL2_PARTITION_SIZE)
+#define BANK_1_PARTITION_OFFSET (SE_BL2_BANK_1_OFFSET + \
+ SE_BL2_PARTITION_SIZE)
+/* BL1: mcuboot flashmap configurations */
+#define FLASH_AREA_8_ID (1)
+#define FLASH_AREA_8_SIZE (SE_BL2_PARTITION_SIZE)
-/* 1MB: space in flash to store metadata and uefi variables */
-#define FWU_METADATA_FLASH_DEV (FLASH_DEV_NAME)
-#define FWU_METADATA_FLASH_SECTOR_SIZE (FLASH_SECTOR_SIZE)
+#define FLASH_INVALID_ID (0xFF)
+#define FLASH_INVALID_OFFSET (0xFFFFFFFF)
+#define FLASH_INVALID_SIZE (0xFFFFFFFF)
-#define FWU_METADATA_PARTITION_OFFSET (FLASH_BASE_OFFSET)
-#define FWU_METADATA_AREA_SIZE (FWU_METADATA_FLASH_SECTOR_SIZE)
-#define FWU_METADATA_REPLICA_1_OFFSET (FLASH_BASE_OFFSET)
-#define FWU_METADATA_REPLICA_2_OFFSET (FWU_METADATA_REPLICA_1_OFFSET + \
- FWU_METADATA_AREA_SIZE)
-#define FWU_PRIVATE_AREA_SIZE (FLASH_SECTOR_SIZE)
-#define FWU_PRIVATE_AREA_OFFSET (FWU_METADATA_REPLICA_2_OFFSET + \
- FWU_METADATA_AREA_SIZE)
+#define BL1_FLASH_AREA_IMAGE_PRIMARY(x) (((x) == 0) ? FLASH_AREA_8_ID : \
+ 255 )
+#define BL1_FLASH_AREA_IMAGE_SECONDARY(x) (((x) == 0) ? FLASH_INVALID_ID : \
+ 255 )
+
+#define BL1_FLASH_AREA_IMAGE_SCRATCH 255
+/* FWU Configurations */
#define NR_OF_FW_BANKS (2)
#define NR_OF_IMAGES_IN_FW_BANK (4) /* Secure Enclave: BL2 and TF-M \
* Host: FIP and Kernel image
*/
-#define BANK_0_PARTITION_OFFSET (FWU_METADATA_PARTITION_OFFSET + \
- FWU_METADATA_PARTITION_SIZE)
-#define BANK_1_PARTITION_OFFSET (BANK_0_PARTITION_OFFSET + \
- BANK_PARTITION_SIZE)
+/****** TODO: START : NEED SIMPLIFICATION BASED ON GPT *******************/
+/* Bank configurations */
+#define BANK_PARTITION_SIZE (0xFE0000) /* 15.875 MB */
+#define TFM_PARTITION_SIZE (0x5E000) /* 376 KB */
+#define FIP_PARTITION_SIZE (0x200000) /* 2 MB */
+#define KERNEL_PARTITION_SIZE (0xC00000) /* 12 MB */
/************************************************************/
/* Bank : Images flash offsets are with respect to the bank */
@@ -170,13 +170,6 @@
#define BL2_IMAGE_OFFSET (0x0)
#define BL2_IMAGE_MAX_SIZE (SE_BL2_PARTITION_SIZE)
-#define BL1_FLASH_AREA_IMAGE_PRIMARY(x) (((x) == 0) ? FLASH_AREA_8_ID : \
- 255 )
-#define BL1_FLASH_AREA_IMAGE_SECONDARY(x) (((x) == 0) ? FLASH_AREA_9_ID : \
- 255 )
-
-#define BL1_FLASH_AREA_IMAGE_SCRATCH 255
-
/* Image 1: TF-M primary and secondary images */
#define FLASH_AREA_0_ID (1)
#define FLASH_AREA_0_OFFSET (FLASH_AREA_9_OFFSET + \
@@ -229,6 +222,7 @@
#define FWU_METADATA_IMAGE_3_OFFSET (KERNEL_PARTITION_OFFSET)
#define FWU_METADATA_IMAGE_3_SIZE_LIMIT (KERNEL_PARTITION_SIZE)
+/****** TODO: END : NEED SIMPLIFICATION BASED ON GPT *******************/
/*******************************/
/*** ITS, PS and NV Counters ***/
--
2.25.1