From f1fcaad27ab7254595b5ca95e0dab14df002da5e Mon Sep 17 00:00:00 2001 From: bhmanda Date: Tue, 11 Mar 2025 14:46:21 +0530 Subject: [PATCH 1/4] Added platform abstraction reset function for EFR and SoC platforms --- src/platform/silabs/ConfigurationManagerImpl.cpp | 2 +- src/platform/silabs/platformAbstraction/GsdkSpam.cpp | 5 +++++ src/platform/silabs/platformAbstraction/SilabsPlatform.h | 2 ++ .../silabs/platformAbstraction/SilabsPlatformBase.h | 3 +++ src/platform/silabs/platformAbstraction/WiseMcuSpam.cpp | 7 +++++++ 5 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/platform/silabs/ConfigurationManagerImpl.cpp b/src/platform/silabs/ConfigurationManagerImpl.cpp index 4ed23084020593..fbf566e84fd3d8 100644 --- a/src/platform/silabs/ConfigurationManagerImpl.cpp +++ b/src/platform/silabs/ConfigurationManagerImpl.cpp @@ -309,7 +309,7 @@ void ConfigurationManagerImpl::DoFactoryReset(intptr_t arg) // Block the task for 500 ms before the reset occurs to allow RPC response to be sent osDelay(pdMS_TO_TICKS(500)); - NVIC_SystemReset(); + Silabs::GetPlatform().DoSoftreset(); } #ifdef SL_WIFI diff --git a/src/platform/silabs/platformAbstraction/GsdkSpam.cpp b/src/platform/silabs/platformAbstraction/GsdkSpam.cpp index bc221ead6ad870..c3e4d1f20de27b 100644 --- a/src/platform/silabs/platformAbstraction/GsdkSpam.cpp +++ b/src/platform/silabs/platformAbstraction/GsdkSpam.cpp @@ -124,6 +124,11 @@ CHIP_ERROR SilabsPlatform::Init(void) return CHIP_NO_ERROR; } +void SilabsPlatform::DoSoftreset() +{ + NVIC_SystemReset(); +} + CHIP_ERROR SilabsPlatform::FlashInit() { #if defined(SL_TRUSTZONE_NONSECURE) diff --git a/src/platform/silabs/platformAbstraction/SilabsPlatform.h b/src/platform/silabs/platformAbstraction/SilabsPlatform.h index df84224c50da35..5fdb6a60a9ff73 100644 --- a/src/platform/silabs/platformAbstraction/SilabsPlatform.h +++ b/src/platform/silabs/platformAbstraction/SilabsPlatform.h @@ -61,6 +61,8 @@ class SilabsPlatform : virtual public SilabsPlatformAbstractionBase CHIP_ERROR FlashErasePage(uint32_t addr) override; CHIP_ERROR FlashWritePage(uint32_t addr, const uint8_t * data, size_t size) override; + void DoSoftreset(void) override; + private: friend SilabsPlatform & GetPlatform(void); diff --git a/src/platform/silabs/platformAbstraction/SilabsPlatformBase.h b/src/platform/silabs/platformAbstraction/SilabsPlatformBase.h index 818463ecfb9d12..0dbaad15e486e8 100644 --- a/src/platform/silabs/platformAbstraction/SilabsPlatformBase.h +++ b/src/platform/silabs/platformAbstraction/SilabsPlatformBase.h @@ -56,6 +56,9 @@ class SilabsPlatformAbstractionBase virtual CHIP_ERROR FlashErasePage(uint32_t addr) { return CHIP_ERROR_NOT_IMPLEMENTED; } virtual CHIP_ERROR FlashWritePage(uint32_t addr, const uint8_t * data, size_t size) { return CHIP_ERROR_NOT_IMPLEMENTED; } + // soft reset + virtual void DoSoftreset(void) {} + // BLE Specific Method protected: diff --git a/src/platform/silabs/platformAbstraction/WiseMcuSpam.cpp b/src/platform/silabs/platformAbstraction/WiseMcuSpam.cpp index 6843d554493f48..20d0764bdbd63c 100644 --- a/src/platform/silabs/platformAbstraction/WiseMcuSpam.cpp +++ b/src/platform/silabs/platformAbstraction/WiseMcuSpam.cpp @@ -38,6 +38,8 @@ extern "C" { #endif // SL_SI91X_BOARD_INIT #include "sl_event_handler.h" +#include "sl_si91x_hal_soc_soft_reset.h" + #ifdef SL_CATALOG_SIMPLE_BUTTON_PRESENT #include "sl_si91x_button.h" #include "sl_si91x_button_pin_config.h" @@ -208,6 +210,11 @@ uint8_t SilabsPlatform::GetButtonState(uint8_t button) } #endif // SL_CATALOG_SIMPLE_BUTTON_PRESENT +void SilabsPlatform::DoSoftreset() +{ + sl_si91x_soc_nvic_reset(); +} + CHIP_ERROR SilabsPlatform::FlashInit() { return CHIP_NO_ERROR; From 186c7c3457ba153a322b0b7a467e2c79140f25b5 Mon Sep 17 00:00:00 2001 From: bhmanda Date: Tue, 11 Mar 2025 22:13:04 +0530 Subject: [PATCH 2/4] Renamed the SPAM soft reset API --- src/platform/silabs/ConfigurationManagerImpl.cpp | 2 +- src/platform/silabs/platformAbstraction/GsdkSpam.cpp | 2 +- src/platform/silabs/platformAbstraction/SilabsPlatform.h | 2 +- src/platform/silabs/platformAbstraction/SilabsPlatformBase.h | 2 +- src/platform/silabs/platformAbstraction/WiseMcuSpam.cpp | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/platform/silabs/ConfigurationManagerImpl.cpp b/src/platform/silabs/ConfigurationManagerImpl.cpp index fbf566e84fd3d8..639beb373a74c5 100644 --- a/src/platform/silabs/ConfigurationManagerImpl.cpp +++ b/src/platform/silabs/ConfigurationManagerImpl.cpp @@ -309,7 +309,7 @@ void ConfigurationManagerImpl::DoFactoryReset(intptr_t arg) // Block the task for 500 ms before the reset occurs to allow RPC response to be sent osDelay(pdMS_TO_TICKS(500)); - Silabs::GetPlatform().DoSoftreset(); + Silabs::GetPlatform().SoftwareReset(); } #ifdef SL_WIFI diff --git a/src/platform/silabs/platformAbstraction/GsdkSpam.cpp b/src/platform/silabs/platformAbstraction/GsdkSpam.cpp index c3e4d1f20de27b..7b57604a6c7598 100644 --- a/src/platform/silabs/platformAbstraction/GsdkSpam.cpp +++ b/src/platform/silabs/platformAbstraction/GsdkSpam.cpp @@ -124,7 +124,7 @@ CHIP_ERROR SilabsPlatform::Init(void) return CHIP_NO_ERROR; } -void SilabsPlatform::DoSoftreset() +void SilabsPlatform::SoftwareReset() { NVIC_SystemReset(); } diff --git a/src/platform/silabs/platformAbstraction/SilabsPlatform.h b/src/platform/silabs/platformAbstraction/SilabsPlatform.h index 5fdb6a60a9ff73..fb596f103a00ac 100644 --- a/src/platform/silabs/platformAbstraction/SilabsPlatform.h +++ b/src/platform/silabs/platformAbstraction/SilabsPlatform.h @@ -61,7 +61,7 @@ class SilabsPlatform : virtual public SilabsPlatformAbstractionBase CHIP_ERROR FlashErasePage(uint32_t addr) override; CHIP_ERROR FlashWritePage(uint32_t addr, const uint8_t * data, size_t size) override; - void DoSoftreset(void) override; + void SoftwareReset(void) override; private: friend SilabsPlatform & GetPlatform(void); diff --git a/src/platform/silabs/platformAbstraction/SilabsPlatformBase.h b/src/platform/silabs/platformAbstraction/SilabsPlatformBase.h index 0dbaad15e486e8..ea97ee3cb5bd27 100644 --- a/src/platform/silabs/platformAbstraction/SilabsPlatformBase.h +++ b/src/platform/silabs/platformAbstraction/SilabsPlatformBase.h @@ -57,7 +57,7 @@ class SilabsPlatformAbstractionBase virtual CHIP_ERROR FlashWritePage(uint32_t addr, const uint8_t * data, size_t size) { return CHIP_ERROR_NOT_IMPLEMENTED; } // soft reset - virtual void DoSoftreset(void) {} + virtual void SoftwareReset(void) {} // BLE Specific Method diff --git a/src/platform/silabs/platformAbstraction/WiseMcuSpam.cpp b/src/platform/silabs/platformAbstraction/WiseMcuSpam.cpp index 20d0764bdbd63c..4a82cbadb72f4d 100644 --- a/src/platform/silabs/platformAbstraction/WiseMcuSpam.cpp +++ b/src/platform/silabs/platformAbstraction/WiseMcuSpam.cpp @@ -210,7 +210,7 @@ uint8_t SilabsPlatform::GetButtonState(uint8_t button) } #endif // SL_CATALOG_SIMPLE_BUTTON_PRESENT -void SilabsPlatform::DoSoftreset() +void SilabsPlatform::SoftwareReset() { sl_si91x_soc_nvic_reset(); } From 1dd2c287f2b10518c34825958e2c91062286b470 Mon Sep 17 00:00:00 2001 From: bhmanda Date: Wed, 12 Mar 2025 11:51:28 +0530 Subject: [PATCH 3/4] Added SPAM reset call in matter code --- examples/platform/silabs/Rpc.cpp | 3 +-- src/platform/silabs/SiWx917/OTAImageProcessorImpl.cpp | 4 ++-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/examples/platform/silabs/Rpc.cpp b/examples/platform/silabs/Rpc.cpp index d265e65af7848c..d7456a8742874c 100644 --- a/examples/platform/silabs/Rpc.cpp +++ b/examples/platform/silabs/Rpc.cpp @@ -117,7 +117,7 @@ class Efr32Device final : public Device osTimer_t mRebootTimerBuffer; osTimerAttr_t mRebootTimerAttr = { .name = "Reboot", .cb_mem = &mRebootTimerBuffer, .cb_size = osTimerCbSize }; - static void RebootHandler(void * timerCbArg) { NVIC_SystemReset(); } + static void RebootHandler(void * timerCbArg) { Silabs::GetPlatform().SoftwareReset(); } }; #endif // defined(PW_RPC_DEVICE_SERVICE) && PW_RPC_DEVICE_SERVICE @@ -225,6 +225,5 @@ void Init() // Start App task. sRpcTaskHandle = osThreadNew(RunRpcService, nullptr, &kRpcTaskAttr); } - } // namespace rpc } // namespace chip diff --git a/src/platform/silabs/SiWx917/OTAImageProcessorImpl.cpp b/src/platform/silabs/SiWx917/OTAImageProcessorImpl.cpp index dfbe8f17d11d04..b6af7664be3aa1 100644 --- a/src/platform/silabs/SiWx917/OTAImageProcessorImpl.cpp +++ b/src/platform/silabs/SiWx917/OTAImageProcessorImpl.cpp @@ -20,6 +20,7 @@ #include #include #include +#include #include #if CHIP_CONFIG_ENABLE_ICD_SERVER @@ -42,7 +43,6 @@ extern "C" { uint8_t flag = RPS_HEADER; static chip::OTAImageProcessorImpl gImageProcessor; - namespace chip { // Define static memebers @@ -229,7 +229,7 @@ void OTAImageProcessorImpl::HandleApply(intptr_t context) // send system reset request to reset the MCU and upgrade the m4 image ChipLogProgress(SoftwareUpdate, "SoC Soft Reset initiated!"); // Reboots the device - sl_si91x_soc_nvic_reset(); + DeviceLayer::Silabs::GetPlatform().SoftwareReset(); } } From 12928c3695d15606419150fea2f1f72208253507 Mon Sep 17 00:00:00 2001 From: bhmanda Date: Wed, 12 Mar 2025 17:52:09 +0530 Subject: [PATCH 4/4] Fixed EFR32 build issue due to namespace is missing --- examples/platform/silabs/Rpc.cpp | 5 +++-- src/platform/silabs/SiWx917/OTAImageProcessorImpl.cpp | 3 ++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/examples/platform/silabs/Rpc.cpp b/examples/platform/silabs/Rpc.cpp index d7456a8742874c..2588ffd1b31c2d 100644 --- a/examples/platform/silabs/Rpc.cpp +++ b/examples/platform/silabs/Rpc.cpp @@ -21,6 +21,7 @@ #include "pigweed/RpcService.h" #include "pw_sys_io_efr32/init.h" #include +#include #include #if defined(PW_RPC_ATTRIBUTE_SERVICE) && PW_RPC_ATTRIBUTE_SERVICE @@ -72,7 +73,7 @@ size_t pw_trace_GetTraceTimeTicksPerSecond() } #endif // defined(PW_RPC_TRACING_SERVICE) && PW_RPC_TRACING_SERVICE - +using namespace chip::DeviceLayer::Silabs; namespace chip { namespace rpc { @@ -117,7 +118,7 @@ class Efr32Device final : public Device osTimer_t mRebootTimerBuffer; osTimerAttr_t mRebootTimerAttr = { .name = "Reboot", .cb_mem = &mRebootTimerBuffer, .cb_size = osTimerCbSize }; - static void RebootHandler(void * timerCbArg) { Silabs::GetPlatform().SoftwareReset(); } + static void RebootHandler(void * timerCbArg) { GetPlatform().SoftwareReset(); } }; #endif // defined(PW_RPC_DEVICE_SERVICE) && PW_RPC_DEVICE_SERVICE diff --git a/src/platform/silabs/SiWx917/OTAImageProcessorImpl.cpp b/src/platform/silabs/SiWx917/OTAImageProcessorImpl.cpp index b6af7664be3aa1..e68a3a59e5b3d3 100644 --- a/src/platform/silabs/SiWx917/OTAImageProcessorImpl.cpp +++ b/src/platform/silabs/SiWx917/OTAImageProcessorImpl.cpp @@ -43,6 +43,7 @@ extern "C" { uint8_t flag = RPS_HEADER; static chip::OTAImageProcessorImpl gImageProcessor; +using namespace chip::DeviceLayer::Silabs; namespace chip { // Define static memebers @@ -229,7 +230,7 @@ void OTAImageProcessorImpl::HandleApply(intptr_t context) // send system reset request to reset the MCU and upgrade the m4 image ChipLogProgress(SoftwareUpdate, "SoC Soft Reset initiated!"); // Reboots the device - DeviceLayer::Silabs::GetPlatform().SoftwareReset(); + GetPlatform().SoftwareReset(); } }