These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git] / kernel / arch / h8300 / kernel / head_rom.S
1 #include <linux/init.h>
2 #include <asm/thread_info.h>
3
4 #if defined(CONFIG_CPU_H8300H)
5         .h8300h
6 #define SYSCR 0xfee012
7 #define IRAMTOP 0xffff20
8 #define NR_INT 64
9 #endif
10 #if defined(CONFIG_CPU_H8S)
11         .h8300s
12 #define INTCR 0xffff31
13 #define IRAMTOP 0xffc000
14 #define NR_INT 128
15 #endif
16
17         __HEAD
18         .global _start
19 _start:
20         mov.l   #IRAMTOP,sp
21 #if !defined(CONFIG_H8300H_SIM) && \
22     !defined(CONFIG_H8S_SIM)
23         jsr     @lowlevel_init
24
25         /* copy .data */
26         mov.l   #_begin_data,er5
27         mov.l   #_sdata,er6
28         mov.l   #_edata,er4
29         sub.l   er6,er4
30         shlr.l  er4
31         shlr.l  er4
32 1:
33         mov.l   @er5+,er0
34         mov.l   er0,@er6
35         adds    #4,er6
36         dec.l   #1,er4
37         bne     1b
38         /* .bss clear */
39         mov.l   #_sbss,er5
40         mov.l   #_ebss,er4
41         sub.l   er5,er4
42         shlr    er4
43         shlr    er4
44         sub.l   er0,er0
45 1:
46         mov.l   er0,@er5
47         adds    #4,er5
48         dec.l   #1,er4
49         bne     1b
50 #else
51         /* get cmdline from gdb */
52         jsr     @0xcc
53         ;; er0 - argc
54         ;; er1 - argv
55         mov.l   #command_line,er3
56         adds    #4,er1
57         dec.l   #1,er0
58         beq     4f
59 1:
60         mov.l   @er1+,er2
61 2:
62         mov.b   @er2+,r4l
63         beq     3f
64         mov.b   r4l,@er3
65         adds    #1,er3
66         bra     2b
67 3:
68         mov.b   #' ',r4l
69         mov.b   r4l,@er3
70         adds    #1,er3
71         dec.l   #1,er0
72         bne     1b
73         subs    #1,er3
74         mov.b   #0,r4l
75         mov.b   r4l,@er3
76 4:
77 #endif
78         sub.l   er0,er0
79         jsr     @h8300_fdt_init
80         /* linux kernel start */
81 #if defined(CONFIG_CPU_H8300H)
82         ldc     #0xd0,ccr       /* running kernel */
83         mov.l   #SYSCR,er0
84         bclr    #3,@er0
85 #endif
86 #if defined(CONFIG_CPU_H8S)
87         ldc     #0x07,exr
88         bclr    #4,@INTCR:8
89         bset    #5,@INTCR:8     /* Interrupt mode 2 */
90         ldc     #0x90,ccr       /* running kernel */
91 #endif
92         mov.l   #init_thread_union,sp
93         add.l   #0x2000,sp
94         jsr     @start_kernel
95
96 1:
97         bra     1b
98
99 #if defined(CONFIG_ROMKERNEL)
100         /* interrupt vector */
101         .section .vectors,"ax"
102         .long   _start
103         .long   _start
104 vector  =       2
105         .rept   NR_INT - 2
106         .long   _interrupt_redirect_table+vector*4
107 vector  =       vector + 1
108         .endr
109 #endif
110         .end