Move getting the reboot cause to platform abstraction. Set a getter for the reboot cause so different stacks can obtain it (#31891)

diff --git a/src/platform/silabs/ConfigurationManagerImpl.h b/src/platform/silabs/ConfigurationManagerImpl.h
index c025f51..f34e37e 100644
--- a/src/platform/silabs/ConfigurationManagerImpl.h
+++ b/src/platform/silabs/ConfigurationManagerImpl.h
@@ -73,7 +73,6 @@
     void RunConfigUnitTest(void) override;
 
     // ===== Private members reserved for use by this class only.
-    uint32_t rebootCause;
     static void DoFactoryReset(intptr_t arg);
 };
 
diff --git a/src/platform/silabs/efr32/ConfigurationManagerImpl.cpp b/src/platform/silabs/efr32/ConfigurationManagerImpl.cpp
index ed0aaad..14da9b5 100644
--- a/src/platform/silabs/efr32/ConfigurationManagerImpl.cpp
+++ b/src/platform/silabs/efr32/ConfigurationManagerImpl.cpp
@@ -22,15 +22,12 @@
  *          for EFR32 platforms using the Silicon Labs SDK.
  */
 /* this file behaves like a config.h, comes first */
-#include <platform/internal/CHIPDeviceLayerInternal.h>
-
-#include <platform/internal/GenericConfigurationManagerImpl.ipp>
-
 #include <platform/ConfigurationManager.h>
 #include <platform/DiagnosticDataProvider.h>
+#include <platform/internal/CHIPDeviceLayerInternal.h>
+#include <platform/internal/GenericConfigurationManagerImpl.ipp>
 #include <platform/silabs/SilabsConfig.h>
-
-#include "em_rmu.h"
+#include <platform/silabs/platformAbstraction/SilabsPlatform.h>
 
 #if CHIP_DEVICE_CONFIG_ENABLE_WIFI_STATION
 #include "wfx_host_events.h"
@@ -55,12 +52,7 @@
     err = Internal::GenericConfigurationManagerImpl<SilabsConfig>::Init();
     SuccessOrExit(err);
 
-    // TODO: Initialize the global GroupKeyStore object here (#1626)
-
     IncreaseBootCount();
-    rebootCause = RMU_ResetCauseGet();
-    RMU_ResetCauseClear();
-
     err = CHIP_NO_ERROR;
 
 exit:
@@ -99,6 +91,8 @@
 {
     // rebootCause is obtained at bootup.
     BootReasonType matterBootCause;
+    uint32_t rebootCause = Silabs::GetPlatform().GetRebootCause();
+
 #if defined(_SILICON_LABS_32B_SERIES_1)
     if (rebootCause & RMU_RSTCAUSE_PORST || rebootCause & RMU_RSTCAUSE_EXTRST) // PowerOn or External pin reset
     {
diff --git a/src/platform/silabs/platformAbstraction/GsdkSpam.cpp b/src/platform/silabs/platformAbstraction/GsdkSpam.cpp
index 49f8ed4..dda1b7e 100644
--- a/src/platform/silabs/platformAbstraction/GsdkSpam.cpp
+++ b/src/platform/silabs/platformAbstraction/GsdkSpam.cpp
@@ -17,6 +17,7 @@
 
 #include <platform/silabs/platformAbstraction/SilabsPlatform.h>
 
+#include "em_rmu.h"
 #include "sl_system_kernel.h"
 
 #ifdef ENABLE_WSTK_LEDS
@@ -69,6 +70,10 @@
 {
     sl_system_init();
 
+    mRebootCause = RMU_ResetCauseGet();
+    // Clear register so it does accumualate the causes of each reset
+    RMU_ResetCauseClear();
+
 #if CHIP_ENABLE_OPENTHREAD
     sl_ot_sys_init();
 #endif
diff --git a/src/platform/silabs/platformAbstraction/SilabsPlatform.h b/src/platform/silabs/platformAbstraction/SilabsPlatform.h
index 4e5e4b2..4c42a79 100644
--- a/src/platform/silabs/platformAbstraction/SilabsPlatform.h
+++ b/src/platform/silabs/platformAbstraction/SilabsPlatform.h
@@ -49,6 +49,7 @@
 #endif
 
     inline void SetButtonsCb(SilabsButtonCb callback) override { mButtonCallback = callback; }
+    inline uint32_t GetRebootCause() { return mRebootCause; }
 
     static SilabsButtonCb mButtonCallback;
 
@@ -64,6 +65,7 @@
     SilabsPlatform(){};
     virtual ~SilabsPlatform() = default;
 
+    uint32_t mRebootCause = 0;
     static SilabsPlatform sSilabsPlatformAbstractionManager;
 };
 
diff --git a/src/platform/silabs/platformAbstraction/SilabsPlatformBase.h b/src/platform/silabs/platformAbstraction/SilabsPlatformBase.h
index f5630dd..fa38722 100644
--- a/src/platform/silabs/platformAbstraction/SilabsPlatformBase.h
+++ b/src/platform/silabs/platformAbstraction/SilabsPlatformBase.h
@@ -35,6 +35,7 @@
     virtual CHIP_ERROR InitLCD() { return CHIP_ERROR_NOT_IMPLEMENTED; }
     virtual CHIP_ERROR SetGPIO(uint32_t port, uint32_t pin, bool state) { return CHIP_ERROR_NOT_IMPLEMENTED; }
     virtual bool GetGPIO(uint32_t port, uint32_t pin) { return false; }
+    virtual uint32_t GetRebootCause() = 0;
 
     // Scheduler
     virtual void StartScheduler(void) = 0;