First Support on Ginger and OMAP TI
[linux-ginger.git] / arch / m68knommu / platform / 68328 / head-de2.S
blob92d96456d3635c9118d8041fb04d948e57839227
2 #if defined(CONFIG_RAM32MB)
3 #define MEM_END 0x02000000      /* Memory size 32Mb */
4 #elif defined(CONFIG_RAM16MB)
5 #define MEM_END 0x01000000      /* Memory size 16Mb */
6 #else
7 #define MEM_END 0x00800000      /* Memory size 8Mb */
8 #endif
10 #undef CRT_DEBUG
12 .macro  PUTC CHAR
13 #ifdef CRT_DEBUG
14         moveq   #\CHAR, %d7
15         jsr     putc
16 #endif
17 .endm
19         .global _start
20         .global _rambase
21         .global _ramvec
22         .global _ramstart
23         .global _ramend
24         
25         .data
28  *      Set up the usable of RAM stuff
29  */
30 _rambase:
31         .long   0
32 _ramvec:
33         .long   0
34 _ramstart:
35         .long   0
36 _ramend:
37         .long   0
39         .text
41 _start:
44  * Setup initial stack
45  */
46         /* disable all interrupts */
47         movew   #0x2700, %sr
48         movel   #-1, 0xfffff304
49         movel   #MEM_END-4, %sp
51         PUTC    '\r'
52         PUTC    '\n'
53         PUTC    'A'
54         PUTC    'B'
57  *      Determine end of RAM
58  */
60         movel   #MEM_END, %a0
61         movel   %a0, _ramend
63         PUTC    'C'
66  *      Move ROM filesystem above bss :-)
67  */
69         moveal  #_sbss, %a0                     /* romfs at the start of bss */
70         moveal  #_ebss, %a1                     /* Set up destination  */
71         movel   %a0, %a2                        /* Copy of bss start */
73         movel   8(%a0), %d1                     /* Get size of ROMFS */
74         addql   #8, %d1                         /* Allow for rounding */
75         andl    #0xfffffffc, %d1        /* Whole words */
77         addl    %d1, %a0                        /* Copy from end */
78         addl    %d1, %a1                        /* Copy from end */
79         movel   %a1, _ramstart          /* Set start of ram */
82         movel   -(%a0), %d0                     /* Copy dword */
83         movel   %d0, -(%a1)
84         cmpl    %a0, %a2                        /* Check if at end */
85         bne     1b
87         PUTC    'D'
90  * Initialize BSS segment to 0
91  */
93         lea     _sbss, %a0
94         lea     _ebss, %a1
96         /* Copy 0 to %a0 until %a0 == %a1 */
97 2:      cmpal   %a0, %a1
98         beq     1f
99         clrl    (%a0)+
100         bra     2b
103         PUTC    'E'
106  * Load the current task pointer and stack
107  */
109         lea     init_thread_union, %a0
110         lea     0x2000(%a0), %sp
112         PUTC    'F'
113         PUTC    '\r'
114         PUTC    '\n'
117  * Go
118  */
120         jmp     start_kernel
123  * Local functions
124  */
126 #ifdef CRT_DEBUG
127 putc:
128         moveb   %d7, 0xfffff907
130         movew   0xfffff906, %d7
131         andw    #0x2000, %d7
132         beq     1b
133         rts
134 #endif