@@ -124,48 +124,25 @@ int soc_s2ram_suspend(pm_s2ram_system_off_fn_t system_off)
124124 return ret ;
125125}
126126
127- void __attribute__(( naked )) pm_s2ram_mark_set (void )
127+ void pm_s2ram_mark_set (void )
128128{
129129 /* empty */
130- __asm__ volatile ("bx lr\n" );
131130}
132131
133- bool __attribute__(( naked )) pm_s2ram_mark_check_and_clear (void )
132+ bool pm_s2ram_mark_check_and_clear (void )
134133{
135- __asm__ volatile (
136- /* Set return value to 0 */
137- "mov r0, #0\n"
134+ bool unretained_wake ;
135+ bool restore_valid ;
136+ uint32_t reset_reason = nrf_resetinfo_resetreas_local_get ( NRF_RESETINFO );
138137
139- /* Load and check RESETREAS register */
140- "ldr r3, [%[resetinfo_addr], %[resetreas_offs]]\n"
141- "cmp r3, %[resetreas_unretained_mask]\n"
142-
143- "bne exit\n"
144-
145- /* Clear RESETREAS register */
146- "str r0, [%[resetinfo_addr], %[resetreas_offs]]\n"
147-
148- /* Load RESTOREVALID register */
149- "ldr r3, [%[resetinfo_addr], %[restorevalid_offs]]\n"
150-
151- /* Clear RESTOREVALID */
152- "str r0, [%[resetinfo_addr], %[restorevalid_offs]]\n"
153-
154- /* Check RESTOREVALID register */
155- "cmp r3, %[restorevalid_present_mask]\n"
156- "bne exit\n"
157-
158- /* Set return value to 1 */
159- "mov r0, #1\n"
138+ if (reset_reason != NRF_RESETINFO_RESETREAS_LOCAL_UNRETAINED_MASK ) {
139+ return false;
140+ }
141+ unretained_wake = reset_reason & NRF_RESETINFO_RESETREAS_LOCAL_UNRETAINED_MASK ;
142+ nrf_resetinfo_resetreas_local_set (NRF_RESETINFO , 0 );
160143
161- "exit:\n"
162- "bx lr\n"
163- :
164- : [resetinfo_addr ] "r" (NRF_RESETINFO ),
165- [resetreas_offs ] "r" (offsetof(NRF_RESETINFO_Type , RESETREAS .LOCAL )),
166- [resetreas_unretained_mask ] "r" (NRF_RESETINFO_RESETREAS_LOCAL_UNRETAINED_MASK ),
167- [restorevalid_offs ] "r" (offsetof(NRF_RESETINFO_Type , RESTOREVALID )),
168- [restorevalid_present_mask ] "r" (RESETINFO_RESTOREVALID_RESTOREVALID_Msk )
144+ restore_valid = nrf_resetinfo_restore_valid_check (NRF_RESETINFO );
145+ nrf_resetinfo_restore_valid_set (NRF_RESETINFO , false);
169146
170- : "r0" , "r1" , "r3" , "r4" , "memory" ) ;
147+ return ( unretained_wake & restore_valid ) ? true : false ;
171148}
0 commit comments