Skip to content

Commit bd53893

Browse files
MarkusLassilatomi-font
authored andcommitted
platform: nordic_nrf: Rework PCD memory locking
PCD memory area used with nRF53 to be locked with TF-M, instead of bootloader. Change-Id: Ie9058cac2236ed1c4e179c740a4b903b5e676c23 Signed-off-by: Markus Lassila <[email protected]> (cherry picked from commit 5d2562c)
1 parent 35f70e3 commit bd53893

File tree

2 files changed

+22
-32
lines changed

2 files changed

+22
-32
lines changed

platform/ext/target/nordic_nrf/common/core/native_drivers/spu.c

Lines changed: 10 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -99,46 +99,26 @@ static bool spu_region_is_flash_region_in_address_range(uint8_t region_id, uint3
9999
}
100100
#endif
101101

102-
#if defined(REGION_PCD_SRAM_ADDRESS)
103-
static bool spu_region_is_sram_region_in_address_range(uint8_t region_id, uint32_t start_address, uint32_t end_address)
104-
{
105-
size_t start_id = (start_address - DEVICE_SRAM_BASE_ADDRESS) / SRAM_SECURE_ATTRIBUTION_REGION_SIZE;
106-
size_t end_id = (end_address - DEVICE_SRAM_BASE_ADDRESS) / SRAM_SECURE_ATTRIBUTION_REGION_SIZE;
107-
return region_id >= start_id && region_id <= end_id;
108-
}
109-
#endif
110-
111102
static bool spu_region_is_bootloader_region(NRF_SPU_Type * p_reg, uint8_t region_id)
112103
{
113104
bool is_bootloader = false;
114105

115106
#ifdef REGION_MCUBOOT_ADDRESS
116-
is_bootloader = is_bootloader || spu_region_is_flash_region_in_address_range(region_id, REGION_MCUBOOT_ADDRESS, REGION_MCUBOOT_END_ADDRESS);
107+
is_bootloader = is_bootloader || spu_region_is_flash_region_in_address_range(region_id, REGION_MCUBOOT_ADDRESS, REGION_MCUBOOT_LIMIT);
117108
#endif
118109
#ifdef REGION_B0_ADDRESS
119-
is_bootloader = is_bootloader || spu_region_is_flash_region_in_address_range(region_id, REGION_B0_ADDRESS, REGION_B0_END_ADDRESS);
110+
is_bootloader = is_bootloader || spu_region_is_flash_region_in_address_range(region_id, REGION_B0_ADDRESS, REGION_B0_LIMIT);
120111
#endif
121112
#ifdef REGION_S0_ADDRESS
122-
is_bootloader = is_bootloader || spu_region_is_flash_region_in_address_range(region_id, REGION_S0_ADDRESS, REGION_S0_END_ADDRESS);
113+
is_bootloader = is_bootloader || spu_region_is_flash_region_in_address_range(region_id, REGION_S0_ADDRESS, REGION_S0_LIMIT);
123114
#endif
124115
#ifdef REGION_S1_ADDRESS
125-
is_bootloader = is_bootloader || spu_region_is_flash_region_in_address_range(region_id, REGION_S1_ADDRESS, REGION_S1_END_ADDRESS);
116+
is_bootloader = is_bootloader || spu_region_is_flash_region_in_address_range(region_id, REGION_S1_ADDRESS, REGION_S1_LIMIT);
126117
#endif
127118

128119
return is_bootloader;
129120
}
130121

131-
static bool spu_region_is_pcd_region(NRF_SPU_Type * p_reg, uint8_t region_id)
132-
{
133-
bool is_pcd = false;
134-
135-
#ifdef PM_PCD_SRAM_ADDRESS
136-
is_pcd = is_pcd || spu_region_is_sram_region_in_address_range(region_id, PM_PCD_SRAM_ADDRESS, PM_PCD_SRAM_END_ADDRESS);
137-
#endif
138-
139-
return is_pcd;
140-
}
141-
142122
void spu_regions_reset_unlocked_secure(void)
143123
{
144124
for (size_t i = 0; i < NUM_FLASH_SECURE_ATTRIBUTION_REGIONS ; i++) {
@@ -153,14 +133,12 @@ void spu_regions_reset_unlocked_secure(void)
153133
}
154134

155135
for (size_t i = 0; i < NUM_SRAM_SECURE_ATTRIBUTION_REGIONS ; i++) {
156-
if (!spu_region_is_pcd_region(NRF_SPU, i)) {
157-
nrf_spu_ramregion_set(NRF_SPU, i,
158-
SPU_SECURE_ATTR_SECURE,
159-
NRF_SPU_MEM_PERM_READ
160-
| NRF_SPU_MEM_PERM_WRITE
161-
| NRF_SPU_MEM_PERM_EXECUTE,
162-
SPU_LOCK_CONF_UNLOCKED);
163-
}
136+
nrf_spu_ramregion_set(NRF_SPU, i,
137+
SPU_SECURE_ATTR_SECURE,
138+
NRF_SPU_MEM_PERM_READ
139+
| NRF_SPU_MEM_PERM_WRITE
140+
| NRF_SPU_MEM_PERM_EXECUTE,
141+
SPU_LOCK_CONF_UNLOCKED);
164142
}
165143
}
166144

platform/ext/target/nordic_nrf/common/core/target_cfg.c

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -786,6 +786,18 @@ enum tfm_plat_err_t spu_init_cfg(void)
786786
SPU_SECURE_ATTR_NONSECURE, perm, SPU_LOCK_CONF_LOCKED);
787787
#endif /* NRF_NS_STORAGE_PARTITION_START */
788788

789+
#ifdef REGION_PCD_SRAM_ADDRESS
790+
/* Netcore needs PCD memory area to be non-secure. */
791+
perm = 0;
792+
perm |= NRF_SPU_MEM_PERM_READ;
793+
if (tfm_plat_provisioning_is_required()) {
794+
perm |= NRF_SPU_MEM_PERM_WRITE;
795+
}
796+
797+
spu_regions_sram_config(REGION_PCD_SRAM_ADDRESS, REGION_PCD_SRAM_LIMIT,
798+
SPU_SECURE_ATTR_NONSECURE, perm, SPU_LOCK_CONF_LOCKED);
799+
#endif
800+
789801
return TFM_PLAT_ERR_SUCCESS;
790802
}
791803

0 commit comments

Comments
 (0)