diff --git a/examples/platform/silabs/Rpc.cpp b/examples/platform/silabs/Rpc.cpp index d265e65af7848c..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) { NVIC_SystemReset(); } + static void RebootHandler(void * timerCbArg) { GetPlatform().SoftwareReset(); } }; #endif // defined(PW_RPC_DEVICE_SERVICE) && PW_RPC_DEVICE_SERVICE @@ -225,6 +226,5 @@ void Init() // Start App task. sRpcTaskHandle = osThreadNew(RunRpcService, nullptr, &kRpcTaskAttr); } - } // namespace rpc } // namespace chip diff --git a/src/platform/silabs/ConfigurationManagerImpl.cpp b/src/platform/silabs/ConfigurationManagerImpl.cpp index 4ed23084020593..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)); - NVIC_SystemReset(); + Silabs::GetPlatform().SoftwareReset(); } #ifdef SL_WIFI diff --git a/src/platform/silabs/SiWx917/OTAImageProcessorImpl.cpp b/src/platform/silabs/SiWx917/OTAImageProcessorImpl.cpp index dfbe8f17d11d04..e68a3a59e5b3d3 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,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 - sl_si91x_soc_nvic_reset(); + GetPlatform().SoftwareReset(); } } diff --git a/src/platform/silabs/platformAbstraction/GsdkSpam.cpp b/src/platform/silabs/platformAbstraction/GsdkSpam.cpp index bc221ead6ad870..7b57604a6c7598 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::SoftwareReset() +{ + 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..fb596f103a00ac 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 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 818463ecfb9d12..ea97ee3cb5bd27 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 SoftwareReset(void) {} + // BLE Specific Method protected: diff --git a/src/platform/silabs/platformAbstraction/WiseMcuSpam.cpp b/src/platform/silabs/platformAbstraction/WiseMcuSpam.cpp index 6843d554493f48..4a82cbadb72f4d 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::SoftwareReset() +{ + sl_si91x_soc_nvic_reset(); +} + CHIP_ERROR SilabsPlatform::FlashInit() { return CHIP_NO_ERROR;