summaryrefslogtreecommitdiffstats
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.S26
1 files changed, 17 insertions, 9 deletions
diff --git a/arch/m68k/kernel/sun3-head.S b/arch/m68k/kernel/sun3-head.S
index 66834855d..eabcd6138 100644
--- a/arch/m68k/kernel/sun3-head.S
+++ b/arch/m68k/kernel/sun3-head.S
@@ -11,7 +11,7 @@ CACHES_OFF = 0x00000008 | actually a clear and disable --m
#define MAS_STACK INT_STACK
ROOT_TABLE_SIZE = 128
PAGESIZE = 8192
-
+SUN3_INVALID_PMEG = 255
.globl SYMBOL_NAME(bootup_user_stack)
.globl SYMBOL_NAME(bootup_kernel_stack)
.globl SYMBOL_NAME(pg0)
@@ -20,6 +20,7 @@ PAGESIZE = 8192
.globl SYMBOL_NAME(empty_zero_page)
.globl SYMBOL_NAME(swapper_pg_dir)
.globl SYMBOL_NAME(kernel_pmd_table)
+.globl SYMBOL_NAME(availmem)
.global SYMBOL_NAME(m68k_pgtable_cachemode)
.global SYMBOL_NAME(kpt)
| todo: all these should be in bss!
@@ -47,15 +48,20 @@ ENTRY(_start)
moveq #0, %d0
movsb %d0, AC_CONTEXT
-/* Copy mappings for first megabyte of RAM to address 0xE000000. */
- lea (AC_SEGMAP+0),%a0
+/* map everything the bootloader left us into high memory, clean up the
+ excess later */
+ lea (AC_SEGMAP+0),%a0
lea (AC_SEGMAP+KERNBASE),%a1
- moveq #(0x140000/NBSG-1),%d0
-1: movsb %a0@,%d1
- movsb %d1,%a1@
- addl #NBSG,%a0
+1:
+ movsb %a0@, %d1
+ movsb %d1, %a1@
+ cmpib #SUN3_INVALID_PMEG, %d1
+ beq 2f
+ addl #NBSG,%a0
addl #NBSG,%a1
- dbf %d0,1b
+ jmp 1b
+
+2:
/* Disable caches and jump to high code. */
moveq #ICACHE_ONLY,%d0 | Cache disabled until we're ready to enable it
@@ -83,7 +89,9 @@ ENTRY(_start)
movsb %d0,(AC_SEGMAP+0x0)
jbsr SYMBOL_NAME(sun3_init)
-
+
+ jbsr SYMBOL_NAME(base_trap_init)
+
jbsr SYMBOL_NAME(start_kernel)
trap #15