aboutsummaryrefslogtreecommitdiffstats
path: root/arch/m68k/kernel/sun3-head.S
diff options
context:
space:
mode:
Diffstat (limited to 'arch/m68k/kernel/sun3-head.S')
-rw-r--r--arch/m68k/kernel/sun3-head.S104
1 files changed, 104 insertions, 0 deletions
diff --git a/arch/m68k/kernel/sun3-head.S b/arch/m68k/kernel/sun3-head.S
new file mode 100644
index 000000000000..bffd69a4a1ab
--- /dev/null
+++ b/arch/m68k/kernel/sun3-head.S
@@ -0,0 +1,104 @@
1#include <linux/linkage.h>
2
3#include <asm/entry.h>
4#include <asm/page.h>
5#include <asm/contregs.h>
6#include <asm/sun3-head.h>
7
8PSL_HIGHIPL = 0x2700
9NBSG = 0x20000
10ICACHE_ONLY = 0x00000009
11CACHES_OFF = 0x00000008 | actually a clear and disable --m
12#define MAS_STACK INT_STACK
13ROOT_TABLE_SIZE = 128
14PAGESIZE = 8192
15SUN3_INVALID_PMEG = 255
16.globl bootup_user_stack
17.globl bootup_kernel_stack
18.globl pg0
19.globl swapper_pg_dir
20.globl kernel_pmd_table
21.globl availmem
22.global m68k_pgtable_cachemode
23.global kpt
24| todo: all these should be in bss!
25swapper_pg_dir: .skip 0x2000
26pg0: .skip 0x2000
27kernel_pmd_table: .skip 0x2000
28
29.globl kernel_pg_dir
30.equ kernel_pg_dir,kernel_pmd_table
31
32 .section .head
33ENTRY(_stext)
34ENTRY(_start)
35
36/* Firstly, disable interrupts and set up function codes. */
37 movew #PSL_HIGHIPL, %sr
38 moveq #FC_CONTROL, %d0
39 movec %d0, %sfc
40 movec %d0, %dfc
41
42/* Make sure we're in context zero. */
43 moveq #0, %d0
44 movsb %d0, AC_CONTEXT
45
46/* map everything the bootloader left us into high memory, clean up the
47 excess later */
48 lea (AC_SEGMAP+0),%a0
49 lea (AC_SEGMAP+KERNBASE),%a1
501:
51 movsb %a0@, %d1
52 movsb %d1, %a1@
53 cmpib #SUN3_INVALID_PMEG, %d1
54 beq 2f
55 addl #NBSG,%a0
56 addl #NBSG,%a1
57 jmp 1b
58
592:
60
61/* Disable caches and jump to high code. */
62 moveq #ICACHE_ONLY,%d0 | Cache disabled until we're ready to enable it
63 movc %d0, %cacr | is this the right value? (yes --m)
64 jmp 1f:l
65
66/* Following code executes at high addresses (0xE000xxx). */
671: lea init_task,%curptr | get initial thread...
68 lea init_thread_union+THREAD_SIZE,%sp | ...and its stack.
69
70/* copy bootinfo records from the loader to _end */
71 lea _end, %a1
72 lea BI_START, %a0
73 /* number of longs to copy */
74 movel %a0@, %d0
751: addl #4, %a0
76 movel %a0@, %a1@
77 addl #4, %a1
78 dbf %d0, 1b
79
80/* Point MSP at an invalid page to trap if it's used. --m */
81 movl #(PAGESIZE),%d0
82 movc %d0,%msp
83 moveq #-1,%d0
84 movsb %d0,(AC_SEGMAP+0x0)
85
86 jbsr sun3_init
87
88 jbsr base_trap_init
89
90 jbsr start_kernel
91 trap #15
92
93 .data
94 .even
95kpt:
96 .long 0
97availmem:
98 .long 0
99| todo: remove next two. --m
100is_medusa:
101 .long 0
102m68k_pgtable_cachemode:
103 .long 0
104