OSDN Git Service

2013.10.24
[uclinux-h8/uClinux-dist.git] / vendors / Hitachi / EDOSK2674 / boot.S
1 /*****************************************************************************/
2 /*
3  *      boot.S -- startup code for H8S platforms.
4  *      Copyright (C) 2003, David McCullough <davidm@snapgear.com>
5  */
6 /*****************************************************************************/
7
8 .global __start
9 .global __vectors
10 .global _startimage
11 .global _nop
12 .extern _main
13
14 /*****************************************************************************/
15
16         .h8300s
17         .align 4
18         .text
19 __vectors: /* redirect vectors via the internal RAM */
20         jmp     __start
21         jmp     __start
22         .rept   128-2
23         jmp     0x00ffbe00 + . - __vectors
24         .endr
25
26         /* put the boot args at a known location */
27         .align 4
28 boot_args:
29         .ascii  "console=ttySC2,38400\0"
30
31         .align 4
32 __start:
33         /*
34          * initial stack setup
35          */
36         orc     #0xC0, ccr
37         mov.l   #0x00FFBFF0, er7
38
39         /*
40          * Get console going for early debug
41          */
42         mov.l   #0xffff41, er3          /* MSTPCRL &= 0xf7 - enable module */
43         mov.b   @er3, r2l
44         and.b   #0xf7, r2l
45         mov.b   r2l, @er3
46         sub.l   er2, er2                        /* SCSCR   =  0x00 */
47         mov.b   r2l, @0xffff8a:32
48         mov.l   #0xffff88, er3          /* SCSMR  &= ~0x03 */
49         mov.b   @er3, r2l
50         and.b   #0xfc, r2l
51         mov.b   r2l, @(0,er3)
52         sub.l   er2, er2                        /* SCBRR   =  0x19 - 38400 */
53         add.b   #0x19, r2l
54         mov.b   r2l, @0xffff89:32
55         /*
56          * delay 1 bit times
57          */
58         sub.l   er2, er2
59 1:
60         adds    #0x1, er2
61         cmp.l   #0x270f, er2
62         ble             1b
63         /*
64          * enable RX/TX
65          */
66         mov.b   #0x30, r2l                      /* SCSCR   = 0x30 */
67         mov.b   r2l, @0xffff8a:32
68
69         mov.l   #header, er0
70         jsr             dbg_string
71
72         /*
73          * BSC setup
74          */
75         mov.b   #0xff, r2l                      /* ASTCR   = 0xff */
76         mov.b   r2l, @0xfffec1:32
77         mov.b   #0x27, r2l                      /* WTCRAH  = 0x27 */
78         mov.b   r2l, @0xfffec2:32
79         mov.b   #0x77, r2l                      /* WTCRAL  = 0x77 */
80         mov.b   r2l, @0xfffec3:32
81         mov.b   #0x71, r2l                      /* WTCRBH  = 0x71 */
82         mov.b   r2l, @0xfffec4:32
83         mov.b   #0x00, r2l                      /* RDNCR   = 0x00 */
84         mov.b   r2l, @0xfffec6:32
85         mov.b   #0x80, r2l                      /* CSACRH  = 0x80 */
86         mov.b   r2l, @0xfffec8:32
87         mov.b   #0x80, r2l                      /* CSACRL  = 0x80 */
88         mov.b   r2l, @0xfffec9:32
89         mov.b   #0xa0, r2l                      /* BROMCRL = 0xa0 */
90         mov.b   r2l, @0xfffecb:32
91         mov.w   #0x0d04, r2                     /* BCR     = 0x0d04 */
92         mov.w   r2, @0xfffecc:32
93         mov.b   #0x80, r2l                      /* ABWCR   = 0x80 */
94         mov.b   r2l, @0xfffec0:32
95         mov.b   #0x22, r2l                      /* WTCRBL  = 0x22 */
96         mov.b   r2l, @0xfffec5:32
97         mov.b   #0xa0, r2l                      /* BROMCRH = 0xa0 */
98         mov.b   r2l, @0xfffeca:32
99
100         /*
101          * Port setup
102          */
103         mov.b   #0x00, r2l                      /* P3DR    = 0x00 */
104         mov.b   r2l, @0xffff62:32
105         mov.b   #0x30, r2l                      /* P3DDR   = 0x30 */
106         mov.b   r2l, @0xfffe22:32
107         mov.b   #0x06, r2l                      /* P3ODR   = 0x06 */
108         mov.b   r2l, @0xfffe3c:32
109         // mov.b        #0x0d, r2l                      /* PFCR2   = 0x0D */
110         mov.b   #0x01, r2l                      /* PFCR2   = 0x01 */
111         mov.b   r2l, @0xfffe34:32
112         mov.b   #0xff, r2l                      /* PADDR   = 0xff */
113         mov.b   r2l, @0xfffe29:32
114         mov.b   #0x0f, r2l                      /* PGDDR   = 0x0f */
115         mov.b   r2l, @0xfffe2f:32
116         mov.b   #0x0f, r2l                      /* PHDDR   = 0x0f */
117         mov.b   r2l, @0xffff74:32
118         mov.b   #0xfe,r2l                       /* PFDDR   = 0xfe */
119         mov.b   r2l, @0xfffe2e:32
120         mov.b   #0xff,r2l                       /* PFCR0   = 0xff */
121         mov.b   r2l, @0xfffe32:32
122
123         /*
124          * SDRAM setup
125          */
126         mov.w   #0x9000, r2                     /* DRACCR  = 0x9000 */
127         mov.w   r2, @0xfffed2:32
128         mov.w   #0x0188, r2                     /* REFCR   = 0x0188 */
129         mov.w   r2, @0xfffed4:32
130         mov.b   #0xff, r2l                      /* RTCOR   = 0xff */
131         mov.b   r2l, @0xfffed7:32
132         mov.b   #0xff, r2l                      /* PADDR   = 0xff */
133         mov.b   r2l, @0xfffe29:32
134         mov.b   #0xff, r2l                      /* PFCR1   = 0xff */
135         mov.b   r2l, @0xfffe33:32
136         mov.w   #0x85b4,r2                      /* DRAMCR  = 0x85b4 */
137         mov.w   r2, @0xfffed0:32
138         mov.b   #0x00, r2l                      /* SDRAM_CONTRL = 0 */
139         mov.b   r2l, @0x400040:32
140         mov.w   #0x84b4,r2                      /* DRAMCR  = 0x84b4 */
141         mov.w   r2, @0xfffed0:32
142
143         /*
144          * Interrupt controller setup
145          */
146         mov.w   #0x0000, r2                     /* IER   = 0x0000 */
147         mov.w   r2, @0xffff32:32
148         mov.b   #0x04, r2l                      /* INTCR = 0x04; */
149         mov.b   r2l, @0xffff31:32
150         mov.w   #0x0555, r2                     /* ISCRL = 0x0555 */
151         mov.w   r2, @0xfffe1c:32
152         mov.w   #0xff3f, r2                     /* ITSR  = 0xff3f */
153         mov.w   r2, @0xfffe16:32
154
155         /*
156          * copy kernel from ROM (256K) to RAM,  we don't know how big it
157          * is so copy 4Mb - 256K (slow I know)
158          */
159         mov.l   #0x40000, er5
160         mov.l   #0x400000, er6
161 1:
162         mov.l   #0x8000, er4
163         mov.b   #'.', r0l
164         jsr             dbg_char
165         eepmov.w
166         cmp.l   #0x400000, er5
167         bne             1b
168
169         mov.b   #'\r', r0l
170         jsr             dbg_char
171         mov.b   #'\n', r0l
172         jsr             dbg_char
173
174         /*
175          * Copy the boot args
176          */
177         mov.l   #boot_args, er5
178         mov.l   #0x00bffe00, er6
179         mov.l   #512, er4
180         eepmov.w
181
182         /*
183          * jump into kernel at start of RAM
184          */
185         mov.l   #0x400000, er1
186         jmp @er1
187
188         .align 4
189 dbg_char:
190         mov.l   #0xFFFF8C, er3
191         mov.b   @er3, r2l
192         bge dbg_char
193         mov.b   r0l, @0xFFFF8B:32
194         mov.b   @er3, r2l
195         and.b   #0x7f, r2l
196         mov.b   r2l, @er3
197         rts
198
199         .align 4
200 dbg_string:
201         mov.l   er0, er1
202 1:
203         mov.b   @er1+, r0l
204         beq             2f
205         jsr             dbg_char
206         bra             1b
207 2:
208         rts
209
210 header:
211         .ascii  "Hitachi EDOSK2674 Simple Boot Loader\r\n"
212         .ascii  "Copyright (C) 2003 David McCullough <davidm@snapgear.com>\r\n\0"
213
214 /****************************************************************************/