@@ -52,16 +52,66 @@ const size_t kMaxHeapSize = CONFIG_SRAM_BASE_ADDRESS + KB(CONFIG_SRAM_SIZE) - PO
52
52
53
53
#endif
54
54
55
+ #ifdef CONFIG_SOC_SERIES_NRF54HX
56
+ #include < hal/nrf_resetinfo.h>
57
+ #include < platform/SaveBootReasonDFUSuit.h>
58
+ #endif
59
+
55
60
namespace chip {
56
61
namespace DeviceLayer {
57
62
58
63
namespace {
59
64
60
65
BootReasonType DetermineBootReason ()
61
66
{
62
- #ifdef CONFIG_HWINFO
67
+
68
+ #if defined(CONFIG_SOC_SERIES_NRF54HX) || defined(CONFIG_HWINFO)
63
69
uint32_t reason;
70
+ #endif
71
+
72
+ #ifdef CONFIG_SOC_SERIES_NRF54HX
73
+
74
+ bool isSoftwareBootReasonSUITInitialized = false ;
75
+ if (!isSoftwareBootReasonSUITInitialized)
76
+ {
77
+ setSoftwareRebootReasonSUIT (0 );
78
+ isSoftwareBootReasonSUITInitialized = true ;
79
+ }
80
+
81
+ reason = nrf_resetinfo_resetreas_global_get (NRF_RESETINFO);
82
+
83
+ if (reason == RESETINFO_RESETREAS_GLOBAL_ResetValue)
84
+ {
85
+ return BootReasonType::kSoftwareReset ;
86
+ }
87
+
88
+ if (reason & RESETINFO_RESETREAS_GLOBAL_RESETPORONLY_Msk)
89
+ {
90
+ return BootReasonType::kBrownOutReset ;
91
+ }
64
92
93
+ if (reason & RESETINFO_RESETREAS_GLOBAL_DOG_Msk)
94
+ {
95
+ return BootReasonType::kHardwareWatchdogReset ;
96
+ }
97
+
98
+ if ((reason & (RESETINFO_RESETREAS_GLOBAL_RESETPIN_Msk | RESETINFO_RESETREAS_GLOBAL_RESETPOR_Msk)) ==
99
+ (RESETINFO_RESETREAS_GLOBAL_RESETPIN_Msk | RESETINFO_RESETREAS_GLOBAL_RESETPOR_Msk))
100
+ {
101
+ return BootReasonType::kPowerOnReboot ;
102
+ }
103
+
104
+ if ((reason & (RESETINFO_RESETREAS_GLOBAL_RESETPOR_Msk | RESETINFO_RESETREAS_GLOBAL_SECSREQ_Msk)) ==
105
+ (RESETINFO_RESETREAS_GLOBAL_RESETPOR_Msk | RESETINFO_RESETREAS_GLOBAL_SECSREQ_Msk))
106
+ {
107
+ if (GetSoftwareRebootReason () == SoftwareRebootReason::kSoftwareUpdate )
108
+ {
109
+ return BootReasonType::kSoftwareUpdateCompleted ;
110
+ }
111
+ }
112
+ #endif
113
+
114
+ #ifdef CONFIG_HWINFO
65
115
if (hwinfo_get_reset_cause (&reason) != 0 )
66
116
{
67
117
return BootReasonType::kUnspecified ;
0 commit comments