Skip to content

Commit 504a8ab

Browse files
[nrf fromlist] Revert "soc: nordic: s2ram: Align s2ram marking procedures"
The marking procedures can be reverted, since at this stage it is already allowed to use the stack. The MSP is temporairly set to interrupt stack in `reset.S` file before calling s2ram procedures.. Upstream PR #: 87304 Signed-off-by: Adam Kondraciuk <[email protected]> This reverts commit e68d110f7c175f2a9275659d023c9d37d1e4b4f1.
1 parent 3536557 commit 504a8ab

File tree

1 file changed

+13
-36
lines changed

1 file changed

+13
-36
lines changed

soc/nordic/nrf54h/pm_s2ram.c

+13-36
Original file line numberDiff line numberDiff line change
@@ -177,48 +177,25 @@ int soc_s2ram_suspend(pm_s2ram_system_off_fn_t system_off)
177177
return ret;
178178
}
179179

180-
void __attribute__((naked)) pm_s2ram_mark_set(void)
180+
void pm_s2ram_mark_set(void)
181181
{
182182
/* empty */
183-
__asm__ volatile("bx lr\n");
184183
}
185184

186-
bool __attribute__((naked)) pm_s2ram_mark_check_and_clear(void)
185+
bool pm_s2ram_mark_check_and_clear(void)
187186
{
188-
__asm__ volatile(
189-
/* Set return value to 0 */
190-
"mov r0, #0\n"
187+
bool unretained_wake;
188+
bool restore_valid;
189+
uint32_t reset_reason = nrf_resetinfo_resetreas_local_get(NRF_RESETINFO);
191190

192-
/* Load and check RESETREAS register */
193-
"ldr r3, [%[resetinfo_addr], %[resetreas_offs]]\n"
194-
"cmp r3, %[resetreas_unretained_mask]\n"
195-
196-
"bne exit\n"
197-
198-
/* Clear RESETREAS register */
199-
"str r0, [%[resetinfo_addr], %[resetreas_offs]]\n"
200-
201-
/* Load RESTOREVALID register */
202-
"ldr r3, [%[resetinfo_addr], %[restorevalid_offs]]\n"
203-
204-
/* Clear RESTOREVALID */
205-
"str r0, [%[resetinfo_addr], %[restorevalid_offs]]\n"
206-
207-
/* Check RESTOREVALID register */
208-
"cmp r3, %[restorevalid_present_mask]\n"
209-
"bne exit\n"
210-
211-
/* Set return value to 1 */
212-
"mov r0, #1\n"
191+
if (reset_reason != NRF_RESETINFO_RESETREAS_LOCAL_UNRETAINED_MASK) {
192+
return false;
193+
}
194+
unretained_wake = reset_reason & NRF_RESETINFO_RESETREAS_LOCAL_UNRETAINED_MASK;
195+
nrf_resetinfo_resetreas_local_set(NRF_RESETINFO, 0);
213196

214-
"exit:\n"
215-
"bx lr\n"
216-
:
217-
: [resetinfo_addr] "r"(NRF_RESETINFO),
218-
[resetreas_offs] "r"(offsetof(NRF_RESETINFO_Type, RESETREAS.LOCAL)),
219-
[resetreas_unretained_mask] "r"(NRF_RESETINFO_RESETREAS_LOCAL_UNRETAINED_MASK),
220-
[restorevalid_offs] "r"(offsetof(NRF_RESETINFO_Type, RESTOREVALID)),
221-
[restorevalid_present_mask] "r"(RESETINFO_RESTOREVALID_RESTOREVALID_Msk)
197+
restore_valid = nrf_resetinfo_restore_valid_check(NRF_RESETINFO);
198+
nrf_resetinfo_restore_valid_set(NRF_RESETINFO, false);
222199

223-
: "r0", "r1", "r3", "r4", "memory");
200+
return (unretained_wake & restore_valid) ? true : false;
224201
}

0 commit comments

Comments
 (0)