These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git] / kernel / arch / h8300 / kernel / head_ram.S
diff --git a/kernel/arch/h8300/kernel/head_ram.S b/kernel/arch/h8300/kernel/head_ram.S
new file mode 100644 (file)
index 0000000..84ac5c3
--- /dev/null
@@ -0,0 +1,60 @@
+
+#include <linux/sys.h>
+#include <linux/init.h>
+#include <asm/unistd.h>
+#include <asm/setup.h>
+#include <asm/segment.h>
+#include <asm/linkage.h>
+#include <asm/asm-offsets.h>
+#include <asm/thread_info.h>
+#include <asm/errno.h>
+
+#if defined(CONFIG_CPU_H8300H)
+       .h8300h
+#define SYSCR 0xfee012
+#define IRAMTOP 0xffff20
+#endif
+#if defined(CONFIG_CPU_H8S)
+       .h8300s
+#define INTCR 0xffff31
+#define IRAMTOP 0xffc000
+#endif
+
+       __HEAD
+       .global _start
+_start:
+       mov.l   #IRAMTOP,sp
+       /* .bss clear */
+       mov.l   #_sbss,er5
+       mov.l   #_ebss,er4
+       sub.l   er5,er4
+       shlr    er4
+       shlr    er4
+       sub.l   er2,er2
+1:
+       mov.l   er2,@er5
+       adds    #4,er5
+       dec.l   #1,er4
+       bne     1b
+       jsr     @h8300_fdt_init
+
+       /* linux kernel start */
+#if defined(CONFIG_CPU_H8300H)
+       ldc     #0xd0,ccr       /* running kernel */
+       mov.l   #SYSCR,er0
+       bclr    #3,@er0
+#endif
+#if defined(CONFIG_CPU_H8S)
+       ldc     #0x07,exr
+       bclr    #4,@INTCR:8
+       bset    #5,@INTCR:8     /* Interrupt mode 2 */
+       ldc     #0x90,ccr       /* running kernel */
+#endif
+       mov.l   #init_thread_union,sp
+       add.l   #0x2000,sp
+       jsr     @start_kernel
+
+1:
+       bra     1b
+
+       .end