Skip to content
Snippets Groups Projects
Commit 94f536fc authored by Srinivas, Madan's avatar Srinivas, Madan Committed by Tom Rini
Browse files

arm: mach-keystone: Fixes issue with return values in inline assembly


The inline assembly functions in mon.c assume that the caller will
check for the return value in r0 according to regular ARM calling
conventions.

However, this assumption breaks down if the compiler inlines the
functions. The caller is then under no obligation to use r0 for the
result.

To fix this disconnect, we must explicitly move the return value
from the smc/bl call to the variable that the function returns.

Signed-off-by: default avatarMadan Srinivas <madans@ti.com>
Reviewed-by: default avatarTom Rini <trini@konsulko.com>
parent 1a7c159a
No related branches found
No related tags found
No related merge requests found
......@@ -24,6 +24,7 @@ int mon_install(u32 addr, u32 dpsc, u32 freq, u32 bm_addr)
"mov r2, %3\n"
"mov r3, %4\n"
"blx r0\n"
"mov %0, r0\n"
"ldmfd r13!, {lr}\n"
: "=&r" (result)
: "r" (addr), "r" (dpsc), "r" (freq), "r" (bm_addr)
......@@ -41,6 +42,7 @@ int mon_power_on(int core_id, void *ep)
"mov r2, %2\n"
"mov r0, #0\n"
"smc #0\n"
"mov %0, r0\n"
"ldmfd r13!, {lr}\n"
: "=&r" (result)
: "r" (core_id), "r" (ep)
......@@ -57,6 +59,7 @@ int mon_power_off(int core_id)
"mov r1, %1\n"
"mov r0, #1\n"
"smc #1\n"
"mov %0, r0\n"
"ldmfd r13!, {lr}\n"
: "=&r" (result)
: "r" (core_id)
......@@ -90,6 +93,7 @@ static int k2_hs_bm_auth(int cmd, void *arg1)
"mov r0, %1\n"
"mov r1, %2\n"
"smc #2\n"
"mov %0, r0\n"
"ldmfd r13!, {r4-r12, lr}\n"
: "=&r" (result)
: "r" (cmd), "r" (arg1)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment