Skip to content

Commit d93e147

Browse files
[SL-ONLY] Generator Firnware (GFW) TrustZone support.
1 parent 2b2249e commit d93e147

File tree

2 files changed

+24
-12
lines changed

2 files changed

+24
-12
lines changed

examples/platform/silabs/provision/ProvisionStorageDefault.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,9 @@
4141
#endif
4242

4343
#ifdef SL_PROVISION_GENERATOR
44+
#if !defined(SL_TRUSTZONE_NONSECURE)
4445
extern void setNvm3End(uint32_t addr);
46+
#endif
4547
#elif !SL_MATTER_GN_BUILD
4648
#include <sl_matter_provision_config.h>
4749
#endif
@@ -165,7 +167,7 @@ CHIP_ERROR Storage::Initialize(uint32_t flash_addr, uint32_t flash_size)
165167
base_addr = (flash_addr + flash_size - FLASH_PAGE_SIZE);
166168
#endif // SLI_SI91X_MCU_INTERFACE
167169
chip::DeviceLayer::Silabs::GetPlatform().FlashInit();
168-
#ifdef SL_PROVISION_GENERATOR
170+
#if defined(SL_PROVISION_GENERATOR) && !defined(SL_TRUSTZONE_NONSECURE)
169171
setNvm3End(base_addr);
170172
#endif
171173
}

src/platform/silabs/platformAbstraction/GsdkSpam.cpp

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,10 @@ extern "C" {
5555

5656
#endif // (defined(SL_MATTER_RGB_LED_ENABLED) && SL_MATTER_RGB_LED_ENABLED == 1)
5757
}
58+
#endif
5859

60+
#if defined(SL_PROVISION_GENERATOR) && defined(SL_TRUSTZONE_NONSECURE)
61+
#include "gfw_tz_secure.h"
5962
#endif
6063

6164
#ifdef SL_CATALOG_SIMPLE_BUTTON_PRESENT
@@ -155,26 +158,29 @@ void SilabsPlatform::SoftwareReset()
155158

156159
CHIP_ERROR SilabsPlatform::FlashInit()
157160
{
158-
#if defined(SL_TRUSTZONE_NONSECURE)
159-
return CHIP_ERROR_NOT_IMPLEMENTED;
161+
#if defined(SL_PROVISION_GENERATOR) && defined(SL_TRUSTZONE_NONSECURE)
162+
return GFW_Flash_Init() ? CHIP_ERROR_INTERNAL : CHIP_NO_ERROR;
160163
#elif defined(_SILICON_LABS_32B_SERIES_2)
161164
MSC_Init();
165+
return CHIP_NO_ERROR;
162166
#elif defined(_SILICON_LABS_32B_SERIES_3)
163167
sl_status_t status;
164168
status = sl_se_init();
165169
VerifyOrReturnError(status == SL_STATUS_OK, CHIP_ERROR(status));
166170
status = sl_se_init_command_context(&cmd_ctx);
167171
VerifyOrReturnError(status == SL_STATUS_OK, CHIP_ERROR(status));
168-
#endif
169172
return CHIP_NO_ERROR;
173+
#else
174+
return CHIP_ERROR_NOT_IMPLEMENTED;
175+
#endif
170176
}
171177

172178
CHIP_ERROR SilabsPlatform::FlashErasePage(uint32_t addr)
173179
{
174-
#if defined(SL_TRUSTZONE_NONSECURE)
175-
return CHIP_ERROR_NOT_IMPLEMENTED;
180+
#if defined(SL_PROVISION_GENERATOR) && defined(SL_TRUSTZONE_NONSECURE)
181+
return GFW_Flash_ErasePage(addr) ? CHIP_ERROR_INTERNAL : CHIP_NO_ERROR;
176182
#elif defined(_SILICON_LABS_32B_SERIES_2)
177-
MSC_ErasePage((uint32_t *) addr);
183+
return MSC_ErasePage((uint32_t *) addr) ? CHIP_ERROR_INTERNAL : CHIP_NO_ERROR;
178184
#elif defined(_SILICON_LABS_32B_SERIES_3)
179185
sl_status_t status;
180186
uint32_t * data_start = NULL;
@@ -185,16 +191,18 @@ CHIP_ERROR SilabsPlatform::FlashErasePage(uint32_t addr)
185191
VerifyOrReturnError(GENERIC_ADDRESS(addr) > GENERIC_ADDRESS((uint32_t) data_start), CHIP_ERROR_INVALID_ADDRESS);
186192
status = sl_se_data_region_erase(&cmd_ctx, (void *) addr, 1); // Erase one page
187193
VerifyOrReturnError(status == SL_STATUS_OK, CHIP_ERROR(status));
188-
#endif
189194
return CHIP_NO_ERROR;
195+
#else
196+
return CHIP_ERROR_NOT_IMPLEMENTED;
197+
#endif
190198
}
191199

192200
CHIP_ERROR SilabsPlatform::FlashWritePage(uint32_t addr, const uint8_t * data, size_t size)
193201
{
194-
#if defined(SL_TRUSTZONE_NONSECURE)
195-
return CHIP_ERROR_NOT_IMPLEMENTED;
202+
#if defined(SL_PROVISION_GENERATOR) && defined(SL_TRUSTZONE_NONSECURE)
203+
return GFW_Flash_WriteWord(addr, data, size) ? CHIP_ERROR_INTERNAL : CHIP_NO_ERROR;
196204
#elif defined(_SILICON_LABS_32B_SERIES_2)
197-
MSC_WriteWord((uint32_t *) addr, data, size);
205+
return MSC_WriteWord((uint32_t *) addr, data, size) ? CHIP_ERROR_INTERNAL : CHIP_NO_ERROR;
198206
#elif defined(_SILICON_LABS_32B_SERIES_3)
199207
sl_status_t status;
200208
uint32_t * data_start = NULL;
@@ -205,8 +213,10 @@ CHIP_ERROR SilabsPlatform::FlashWritePage(uint32_t addr, const uint8_t * data, s
205213
VerifyOrReturnError(GENERIC_ADDRESS(addr) > GENERIC_ADDRESS((uint32_t) data_start), CHIP_ERROR_INVALID_ADDRESS);
206214
status = sl_se_data_region_write(&cmd_ctx, (void *) addr, data, size);
207215
VerifyOrReturnError(status == SL_STATUS_OK, CHIP_ERROR(status));
208-
#endif
209216
return CHIP_NO_ERROR;
217+
#else
218+
return CHIP_ERROR_NOT_IMPLEMENTED;
219+
#endif
210220
}
211221

212222
#ifdef ENABLE_WSTK_LEDS

0 commit comments

Comments
 (0)