OSDN Git Service

H8S CCR handling fix
[uclinux-h8/linux.git] / 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 #include <asm/regs306x.h>
7 #define IRAMTOP 0xffff20
8 #endif
9 #if defined(CONFIG_CPU_H8S)
10         .h8300s
11 #include <asm/regs267x.h>
12 #define IRAMTOP 0xffc000
13 #endif
14
15         __HEAD
16         .global _start
17 _start: 
18         mov.l   #IRAMTOP,sp
19 #if !defined(CONFIG_H8300H_SIM) && \
20     !defined(CONFIG_H8S_SIM)
21         jsr     @lowlevel_init
22         
23         /* copy .data */
24         mov.l   #_begin_data,er5
25         mov.l   #_sdata,er6
26         mov.l   #_edata,er4
27         sub.l   er6,er4
28         shlr.l  er4
29         shlr.l  er4
30 1:      
31         mov.l   @er5+,er0
32         mov.l   er0,@er6
33         adds    #4,er6
34         dec.l   #1,er4
35         bne     1b      
36         /* .bss clear */
37         mov.l   #_sbss,er5
38         mov.l   #_ebss,er4
39         sub.l   er5,er4
40         shlr    er4
41         shlr    er4
42         sub.l   er0,er0
43 1:      
44         mov.l   er0,@er5
45         adds    #4,er5
46         dec.l   #1,er4
47         bne     1b
48 #else
49         /* get cmdline from gdb */
50         jsr     @0xcc
51         ;; er0 - argc
52         ;; er1 - argv
53         mov.l   #command_line,er3
54         adds    #4,er1
55         dec.l   #1,er0
56         beq     4f
57 1:
58         mov.l   @er1+,er2
59 2:      
60         mov.b   @er2+,r4l
61         beq     3f
62         mov.b   r4l,@er3
63         adds    #1,er3
64         bra     2b
65 3:
66         mov.b   #' ',r4l
67         mov.b   r4l,@er3
68         adds    #1,er3
69         dec.l   #1,er0
70         bne     1b
71         subs    #1,er3
72         mov.b   #0,r4l
73         mov.b   r4l,@er3
74 4:
75 #endif
76         /* linux kernel start */
77 #if defined(CONFIG_CPU_H8300H)
78         ldc     #0xd0,ccr       /* running kernel */
79         mov.l   #SYSCR,er0
80         bclr    #3,@er0
81 #endif
82 #if defined(CONFIG_CPU_H8S)
83         ldc     #0x07,exr
84         bclr    #4,@INTCR:8
85         bset    #5,@INTCR:8     /* Interrupt mode 2 */
86         ldc     #0x90,ccr       /* running kernel */
87 #endif
88         mov.l   #init_thread_union,sp
89         add.l   #0x2000,sp
90         jsr     @start_kernel
91
92 1:
93         bra     1b
94
95         .end