diff options
Diffstat (limited to 'arch/sparc64/kernel/head.S')
-rw-r--r-- | arch/sparc64/kernel/head.S | 31 |
1 files changed, 23 insertions, 8 deletions
diff --git a/arch/sparc64/kernel/head.S b/arch/sparc64/kernel/head.S index fdbe87aa3..4babe3eb4 100644 --- a/arch/sparc64/kernel/head.S +++ b/arch/sparc64/kernel/head.S @@ -1,4 +1,4 @@ -/* $Id: head.S,v 1.27 1997/04/04 00:49:49 davem Exp $ +/* $Id: head.S,v 1.30 1997/05/18 22:52:12 davem Exp $ * head.S: Initial boot code for the Sparc64 port of Linux. * * Copyright (C) 1996,1997 David S. Miller (davem@caip.rutgers.edu) @@ -262,16 +262,22 @@ sun4u_init: stx %g6, [%g2 + %g4] stx %g5, [%g3 + %g4] - sethi %hi(init_task), %g6 - or %g6, %lo(init_task), %g6 + sethi %hi(init_task_union), %g6 + or %g6, %lo(init_task_union), %g6 add %g6, %g4, %g6 ! g6 usage is fixed as well mov %sp, %l6 mov %o4, %l7 - sethi %hi(bootup_kernel_stack + 0x2000 - STACK_BIAS - REGWIN_SZ), %g5 - or %g5, %lo(bootup_kernel_stack + 0x2000 - STACK_BIAS - REGWIN_SZ), %g5 - add %g5, %g4, %sp + /* Setup "Linux Current Register", thanks Sun 8-) */ + wr %g0, 0x1, %pcr + wr %g6, 0x0, %pic + + mov 1, %g5 + sllx %g5, (PAGE_SHIFT + 1), %g5 + sub %g5, (REGWIN_SZ + STACK_BIAS), %g5 + add %g6, %g5, %sp mov 0, %fp + wrpr %g0, 0, %wstate wrpr %g0, 0x0, %tl @@ -287,14 +293,20 @@ sun4u_init: add %l2, 1, %l2 add %l0, %g4, %o0 1: - call bzero_1page + clr %o1 + sethi %hi(PAGE_SIZE), %o2 + or %o2, %lo(PAGE_SIZE), %o2 + call __memset add %l0, %l2, %l0 cmp %l0, %l1 blu,pt %xcc, 1b add %l0, %g4, %o0 /* Now clear empty_zero_page */ - call bzero_1page + clr %o1 + sethi %hi(PAGE_SIZE), %o2 + or %o2, %lo(PAGE_SIZE), %o2 + call __memset mov %g4, %o0 mov %l6, %o1 ! OpenPROM stack @@ -361,6 +373,9 @@ bootup_kernel_stack: #include "ttable.S" + /* This is just anal retentiveness on my part... */ + .align 16384 + .data .align 8 .globl nwindows, nwindowsm1 |