blob: 7b50345b9e840dccc0a299efed88c402324a9da2 [file] [log] [blame]
David Howellsb920de12008-02-08 04:19:31 -08001/* Boot entry point for a compressed MN10300 kernel
2 *
3 * Copyright (C) 2007 Red Hat, Inc. All Rights Reserved.
4 * Written by David Howells (dhowells@redhat.com)
5 *
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public Licence
8 * as published by the Free Software Foundation; either version
9 * 2 of the Licence, or (at your option) any later version.
10 */
11 .section .text
12
13#define DEBUG
14
15#include <linux/linkage.h>
16#include <asm/cpu-regs.h>
Akira Takeuchi63317182010-10-27 17:28:47 +010017#include <asm/cache.h>
Akira Takeuchi368dd5a2010-10-27 17:28:55 +010018#ifdef CONFIG_SMP
19#include <proc/smp-regs.h>
20#endif
David Howellsb920de12008-02-08 04:19:31 -080021
22 .globl startup_32
23startup_32:
Akira Takeuchi368dd5a2010-10-27 17:28:55 +010024#ifdef CONFIG_SMP
25 #
26 # Secondary CPUs jump directly to the kernel entry point
27 #
28 # Must save primary CPU's D0-D2 registers as they hold boot parameters
29 #
30 mov (CPUID), d3
31 and CPUID_MASK,d3
32 beq startup_primary
33 mov CONFIG_KERNEL_TEXT_ADDRESS,a0
34 jmp (a0)
35
36startup_primary:
37#endif /* CONFIG_SMP */
38
39 # first save parameters from bootloader
David Howellsb920de12008-02-08 04:19:31 -080040 mov param_save_area,a0
41 mov d0,(a0)
42 mov d1,(4,a0)
43 mov d2,(8,a0)
44
45 mov sp,a3
46 mov decomp_stack+0x2000-4,a0
47 mov a0,sp
48
49 # invalidate and enable both of the caches
50 mov CHCTR,a0
51 clr d0
52 movhu d0,(a0) # turn off first
53 mov CHCTR_ICINV|CHCTR_DCINV,d0
54 movhu d0,(a0)
55 setlb
56 mov (a0),d0
57 btst CHCTR_ICBUSY|CHCTR_DCBUSY,d0 # wait till not busy
58 lne
Akira Takeuchi63317182010-10-27 17:28:47 +010059
60#ifdef CONFIG_MN10300_CACHE_ENABLED
61#ifdef CONFIG_MN10300_CACHE_WBACK
62 mov CHCTR_ICEN|CHCTR_DCEN|CHCTR_DCWTMD_WRBACK,d0
63#else
64 mov CHCTR_ICEN|CHCTR_DCEN|CHCTR_DCWTMD_WRTHROUGH,d0
65#endif /* WBACK */
David Howellsb920de12008-02-08 04:19:31 -080066 movhu d0,(a0) # enable
Akira Takeuchi63317182010-10-27 17:28:47 +010067#endif /* !ENABLED */
David Howellsb920de12008-02-08 04:19:31 -080068
69 # clear the BSS area
70 mov __bss_start,a0
71 mov _end,a1
72 clr d0
73bssclear:
74 cmp a1,a0
75 bge bssclear_end
76 movbu d0,(a0)
77 inc a0
78 bra bssclear
79bssclear_end:
80
81 # decompress the kernel
82 call decompress_kernel[],0
Akira Takeuchi63317182010-10-27 17:28:47 +010083#ifdef CONFIG_MN10300_CACHE_WBACK
84 call mn10300_dcache_flush_inv[],0
85#endif
David Howellsb920de12008-02-08 04:19:31 -080086
87 # disable caches again
88 mov CHCTR,a0
89 clr d0
90 movhu d0,(a0)
91 setlb
92 mov (a0),d0
93 btst CHCTR_ICBUSY|CHCTR_DCBUSY,d0 # wait till not busy
94 lne
95
96 mov param_save_area,a0
97 mov (a0),d0
98 mov (4,a0),d1
99 mov (8,a0),d2
100
Akira Takeuchi63317182010-10-27 17:28:47 +0100101 # jump to the kernel proper entry point
David Howellsb920de12008-02-08 04:19:31 -0800102 mov a3,sp
103 mov CONFIG_KERNEL_TEXT_ADDRESS,a0
104 jmp (a0)
105
Akira Takeuchi63317182010-10-27 17:28:47 +0100106
107###############################################################################
108#
109# Cache flush routines
110#
111###############################################################################
112#ifdef CONFIG_MN10300_CACHE_WBACK
113mn10300_dcache_flush_inv:
114 movhu (CHCTR),d0
115 btst CHCTR_DCEN,d0
116 beq mn10300_dcache_flush_inv_end
117
118 mov L1_CACHE_NENTRIES,d1
119 clr a1
120
121mn10300_dcache_flush_inv_loop:
122 mov (DCACHE_PURGE_WAY0(0),a1),d0 # unconditional purge
123 mov (DCACHE_PURGE_WAY1(0),a1),d0 # unconditional purge
124 mov (DCACHE_PURGE_WAY2(0),a1),d0 # unconditional purge
125 mov (DCACHE_PURGE_WAY3(0),a1),d0 # unconditional purge
126
127 add L1_CACHE_BYTES,a1
128 add -1,d1
129 bne mn10300_dcache_flush_inv_loop
130
131mn10300_dcache_flush_inv_end:
132 ret [],0
133#endif /* CONFIG_MN10300_CACHE_WBACK */
134
135
136###############################################################################
137#
138# Data areas
139#
140###############################################################################
David Howellsb920de12008-02-08 04:19:31 -0800141 .data
142 .align 4
143param_save_area:
144 .rept 3
145 .word 0
146 .endr
147
148 .section .bss
149 .align 4
150decomp_stack:
151 .space 0x2000