Skip to content

Commit 47c3a1a

Browse files
committed
feat: aarch64 smc psci support
Signed-off-by: Zone.N <[email protected]>
1 parent 66871f1 commit 47c3a1a

File tree

1 file changed

+12
-11
lines changed

1 file changed

+12
-11
lines changed

include/aarch64/cpu.hpp

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ static __always_inline auto SecureMonitorCall(uint64_t a0, uint64_t a1,
101101
uint64_t a4, uint64_t a5,
102102
uint64_t a6, uint64_t a7)
103103
-> const SMCReturnValue {
104-
SMCReturnValue ret;
104+
SMCReturnValue result;
105105
register uint64_t x0 __asm__("x0") = a0;
106106
register uint64_t x1 __asm__("x1") = a1;
107107
register uint64_t x2 __asm__("x2") = a2;
@@ -110,16 +110,17 @@ static __always_inline auto SecureMonitorCall(uint64_t a0, uint64_t a1,
110110
register uint64_t x5 __asm__("x5") = a5;
111111
register uint64_t x6 __asm__("x6") = a6;
112112
register uint64_t x7 __asm__("x7") = a7;
113-
__asm__ volatile(
114-
"smc #0\n"
115-
"stp x0, x1, [%8]\n"
116-
"stp x2, x3, [%8, #16]"
117-
: "=r"(x0), "=r"(x1), "=r"(x2), "=r"(x3), "=r"(x4), "=r"(x5), "=r"(x6),
118-
"=r"(x7)
119-
: "r"(x0), "r"(x1), "r"(x2), "r"(x3), "r"(x4), "r"(x5), "r"(x6), "r"(x7),
120-
"r"(&ret)
121-
: "memory");
122-
return ret;
113+
114+
__asm__ volatile("smc #0"
115+
: "+r"(x0), "+r"(x1), "+r"(x2), "+r"(x3)
116+
: "r"(x4), "r"(x5), "r"(x6), "r"(x7)
117+
: "memory");
118+
119+
result.a0 = x0;
120+
result.a1 = x1;
121+
result.a2 = x2;
122+
result.a3 = x3;
123+
return result;
123124
}
124125

125126
/**

0 commit comments

Comments
 (0)