[U-Boot] [PATCH v1 4/6] Blackfin: adjust asm constraints with NMI workaround
Sonic Zhang
sonic.adi at gmail.com
Wed Feb 27 07:50:05 CET 2013
From: Mike Frysinger <vapier at gentoo.org>
Newer gcc versions will sometimes use a Preg when "r" constraints, but
that'll fail if we use an Ireg in the assignment. So force the code
to always use a Dreg.
This also fixes early boot crashes for older Blackfin parts when compiled
with gcc-4.5. This version ends up selecting the same register for the
input and output variables which corrupts the output assignment triggering
an exception.
P2 = 0xffe02008; /* EVT2 */
R0 = RETS;
CALL 1f;
RTN;
1: P2 = RETS; <-- BAD
RETS = R0;
[P2] = P2; <-- BAD
Signed-off-by: Mike Frysinger <vapier at gentoo.org>
Signed-off-by: Sonic Zhang <sonic.zhang at analog.com>
---
arch/blackfin/cpu/initcode.c | 3 ++-
1 files changed, 2 insertions(+), 1 deletions(-)
diff --git a/arch/blackfin/cpu/initcode.c b/arch/blackfin/cpu/initcode.c
index 1a06680..e8ea0ba 100644
--- a/arch/blackfin/cpu/initcode.c
+++ b/arch/blackfin/cpu/initcode.c
@@ -262,7 +262,8 @@ program_nmi_handler(void)
"%1 = RETS;" /* Load addr of NMI handler */
"RETS = %0;" /* Restore RETS */
"[%2] = %1;" /* Write NMI handler */
- : "=r"(tmp1), "=r"(tmp2) : "ab"(EVT2)
+ : "=d"(tmp1), "=d"(tmp2)
+ : "ab"(EVT2)
);
}
--
1.7.0.4
More information about the U-Boot
mailing list