Skip to content

Commit 5eed4b4

Browse files
[nrf fromlist] soc: nordic: nrf54h20: disallow using LR in s2ram marking function
This change ensures that LR will not be implicitly used when calling `pm_s2ram_mark_check_and_clear`. Upstream PR #: 81853 Signed-off-by: Adam Kondraciuk <[email protected]>
1 parent 382877e commit 5eed4b4

File tree

1 file changed

+6
-3
lines changed

1 file changed

+6
-3
lines changed

soc/nordic/nrf54h/pm_s2ram.c

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,8 @@ void __attribute__((naked)) pm_s2ram_mark_set(void)
132132

133133
bool __attribute__((naked)) pm_s2ram_mark_check_and_clear(void)
134134
{
135+
register uint32_t link_reg __asm__("r14");
136+
135137
__asm__ volatile(
136138
/* Set return value to 0 */
137139
"mov r0, #0\n"
@@ -159,13 +161,14 @@ bool __attribute__((naked)) pm_s2ram_mark_check_and_clear(void)
159161
"mov r0, #1\n"
160162

161163
"exit:\n"
162-
"bx lr\n"
164+
"bx %[link_reg]\n"
163165
:
164166
: [resetinfo_addr] "r"(NRF_RESETINFO),
165167
[resetreas_offs] "r"(offsetof(NRF_RESETINFO_Type, RESETREAS.LOCAL)),
166168
[resetreas_unretained_mask] "r"(NRF_RESETINFO_RESETREAS_LOCAL_UNRETAINED_MASK),
167169
[restorevalid_offs] "r"(offsetof(NRF_RESETINFO_Type, RESTOREVALID)),
168-
[restorevalid_present_mask] "r"(RESETINFO_RESTOREVALID_RESTOREVALID_Msk)
170+
[restorevalid_present_mask] "r"(RESETINFO_RESTOREVALID_RESTOREVALID_Msk),
171+
[link_reg] "r"(link_reg)
169172

170-
: "r0", "r1", "r3", "r4", "memory");
173+
: "r0", "r1", "r3", "r4", "cc", "memory");
171174
}

0 commit comments

Comments
 (0)