* [U-Boot] [PATCH] arm: mach-keystone: Fixes issue with return values in inline assembly
@ 2017-07-17 18:02 Andrew F. Davis
2017-07-18 17:08 ` Tom Rini
2017-07-26 19:50 ` [U-Boot] " Tom Rini
0 siblings, 2 replies; 3+ messages in thread
From: Andrew F. Davis @ 2017-07-17 18:02 UTC (permalink / raw)
To: u-boot
From: "Srinivas, Madan" <madans@ti.com>
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: Madan Srinivas <madans@ti.com>
---
arch/arm/mach-keystone/mon.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/arch/arm/mach-keystone/mon.c b/arch/arm/mach-keystone/mon.c
index 7076a2a67b..dd446ab011 100644
--- a/arch/arm/mach-keystone/mon.c
+++ b/arch/arm/mach-keystone/mon.c
@@ -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)
--
2.13.0
^ permalink raw reply related [flat|nested] 3+ messages in thread
* [U-Boot] [PATCH] arm: mach-keystone: Fixes issue with return values in inline assembly
2017-07-17 18:02 [U-Boot] [PATCH] arm: mach-keystone: Fixes issue with return values in inline assembly Andrew F. Davis
@ 2017-07-18 17:08 ` Tom Rini
2017-07-26 19:50 ` [U-Boot] " Tom Rini
1 sibling, 0 replies; 3+ messages in thread
From: Tom Rini @ 2017-07-18 17:08 UTC (permalink / raw)
To: u-boot
On Mon, Jul 17, 2017 at 01:02:02PM -0500, Andrew F. Davis wrote:
> From: "Srinivas, Madan" <madans@ti.com>
>
> 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: Madan Srinivas <madans@ti.com>
Reviewed-by: Tom Rini <trini@konsulko.com>
--
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20170718/21b724e4/attachment.sig>
^ permalink raw reply [flat|nested] 3+ messages in thread
* [U-Boot] arm: mach-keystone: Fixes issue with return values in inline assembly
2017-07-17 18:02 [U-Boot] [PATCH] arm: mach-keystone: Fixes issue with return values in inline assembly Andrew F. Davis
2017-07-18 17:08 ` Tom Rini
@ 2017-07-26 19:50 ` Tom Rini
1 sibling, 0 replies; 3+ messages in thread
From: Tom Rini @ 2017-07-26 19:50 UTC (permalink / raw)
To: u-boot
On Mon, Jul 17, 2017 at 01:02:02PM -0500, Andrew F. Davis wrote:
> From: "Srinivas, Madan" <madans@ti.com>
>
> 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: Madan Srinivas <madans@ti.com>
> Reviewed-by: Tom Rini <trini@konsulko.com>
Applied to u-boot/master, thanks!
--
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20170726/b4be02a3/attachment.sig>
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2017-07-26 19:50 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-07-17 18:02 [U-Boot] [PATCH] arm: mach-keystone: Fixes issue with return values in inline assembly Andrew F. Davis
2017-07-18 17:08 ` Tom Rini
2017-07-26 19:50 ` [U-Boot] " Tom Rini
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox