openrisc: head: Init r0 to 0 on start
authorStafford Horne <shorne@gmail.com>
Sun, 5 Feb 2017 09:55:40 +0000 (18:55 +0900)
committerStafford Horne <shorne@gmail.com>
Fri, 24 Feb 2017 20:08:47 +0000 (05:08 +0900)
Originally openrisc spec 0 specified that r0 would be wired to ground.
This is no longer the case.  r0 is not guaranteed to be 0 at init, so we
need to initialize it to 0 before using it.

Also, if we are clearing r0 we cant use r0 to clear itself. Change the
the CLEAR_GPR macro to use movhi for clearing.

Reported-by: Jakob Viketoft <jakob.viketoft@aacmicrotec.com>
Signed-off-by: Stafford Horne <shorne@gmail.com>
arch/openrisc/kernel/head.S

index fe55156983e00f4c5605ab7aaaa967f18aa89584..d01b82eace3e67bfaac96aff712747e56247fdd0 100644 (file)
@@ -35,7 +35,7 @@
        l.add   rd,rd,rs
 
 #define CLEAR_GPR(gpr)                         \
-       l.or    gpr,r0,r0
+       l.movhi gpr,0x0
 
 #define LOAD_SYMBOL_2_GPR(gpr,symbol)          \
        l.movhi gpr,hi(symbol)                  ;\
@@ -443,6 +443,9 @@ _dispatch_do_ipage_fault:
        __HEAD
        .global _start
 _start:
+       /* Init r0 to zero as per spec */
+       CLEAR_GPR(r0)
+
        /* save kernel parameters */
        l.or    r25,r0,r3       /* pointer to fdt */