sparc32: drop sun4c bits from head_32.S
As we no longer support sun4c we can remove all the code to support remapping the kernel in head_32.S. We also try to tell the user that the machine is not support, in case someone try to boot the kernel on a sun4c one day Signed-off-by: Sam Ravnborg <sam@ravnborg.org> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
3c23a7665b
commit
323206a1d5
1 changed files with 19 additions and 129 deletions
|
@ -63,8 +63,8 @@ cputypvar_sun4m:
|
|||
|
||||
.align 4
|
||||
|
||||
sun4_notsup:
|
||||
.asciz "Sparc-Linux sun4 support does no longer exist.\n\n"
|
||||
sun4c_notsup:
|
||||
.asciz "Sparc-Linux sun4/sun4c support does no longer exist.\n\n"
|
||||
.align 4
|
||||
|
||||
sun4e_notsup:
|
||||
|
@ -520,10 +520,10 @@ copy_prom_lvl14:
|
|||
ldd [%g2 + 0x8], %g4
|
||||
std %g4, [%g3 + 0x8] ! Copy proms handler
|
||||
|
||||
/* Must determine whether we are on a sun4c MMU, SRMMU, or SUN4/400 MUTANT
|
||||
* MMU so we can remap ourselves properly. DON'T TOUCH %l0 thru %l5 in these
|
||||
* remapping routines, we need their values afterwards!
|
||||
/* DON'T TOUCH %l0 thru %l5 in these remapping routines,
|
||||
* we need their values afterwards!
|
||||
*/
|
||||
|
||||
/* Now check whether we are already mapped, if we
|
||||
* are we can skip all this garbage coming up.
|
||||
*/
|
||||
|
@ -532,26 +532,6 @@ copy_prom_done:
|
|||
be go_to_highmem ! this will be a nop then
|
||||
nop
|
||||
|
||||
set LOAD_ADDR, %g6
|
||||
cmp %g7, %g6
|
||||
bne remap_not_a_sun4 ! This is not a Sun4
|
||||
nop
|
||||
|
||||
or %g0, 0x1, %g1
|
||||
lduba [%g1] ASI_CONTROL, %g1 ! Only safe to try on Sun4.
|
||||
subcc %g1, 0x24, %g0 ! Is this a mutant Sun4/400???
|
||||
be sun4_mutant_remap ! Ugh, it is...
|
||||
nop
|
||||
|
||||
b sun4_normal_remap ! regular sun4, 2 level mmu
|
||||
nop
|
||||
|
||||
remap_not_a_sun4:
|
||||
lda [%g0] ASI_M_MMUREGS, %g1 ! same as ASI_PTE on sun4c
|
||||
and %g1, 0x1, %g1 ! Test SRMMU Enable bit ;-)
|
||||
cmp %g1, 0x0
|
||||
be sun4c_remap ! A sun4c MMU or normal Sun4
|
||||
nop
|
||||
srmmu_remap:
|
||||
/* First, check for a viking (TI) module. */
|
||||
set 0x40000000, %g2
|
||||
|
@ -657,72 +637,6 @@ srmmu_nviking:
|
|||
b go_to_highmem
|
||||
nop ! wheee....
|
||||
|
||||
/* This remaps the kernel on Sun4/4xx machines
|
||||
* that have the Sun Mutant Three Level MMU.
|
||||
* It's like a platypus, Sun didn't have the
|
||||
* SRMMU in conception so they kludged the three
|
||||
* level logic in the regular Sun4 MMU probably.
|
||||
*
|
||||
* Basically, you take each entry in the top level
|
||||
* directory that maps the low 3MB starting at
|
||||
* address zero and put the mapping in the KERNBASE
|
||||
* slots. These top level pgd's are called regmaps.
|
||||
*/
|
||||
sun4_mutant_remap:
|
||||
or %g0, %g0, %g3 ! source base
|
||||
sethi %hi(KERNBASE), %g4 ! destination base
|
||||
or %g4, %lo(KERNBASE), %g4
|
||||
sethi %hi(0x300000), %g5
|
||||
or %g5, %lo(0x300000), %g5 ! upper bound 3MB
|
||||
or %g0, 0x1, %l6
|
||||
sll %l6, 24, %l6 ! Regmap mapping size
|
||||
add %g3, 0x2, %g3 ! Base magic
|
||||
add %g4, 0x2, %g4 ! Base magic
|
||||
|
||||
/* Main remapping loop on Sun4-Mutant-MMU.
|
||||
* "I am not an animal..." -Famous Mutant Person
|
||||
*/
|
||||
sun4_mutant_loop:
|
||||
lduha [%g3] ASI_REGMAP, %g2 ! Get lower entry
|
||||
stha %g2, [%g4] ASI_REGMAP ! Store in high entry
|
||||
add %g4, %l6, %g4 ! Move up high memory ptr
|
||||
subcc %g3, %g5, %g0 ! Reached our limit?
|
||||
blu sun4_mutant_loop ! Nope, loop again
|
||||
add %g3, %l6, %g3 ! delay, Move up low ptr
|
||||
b go_to_highmem ! Jump to high memory.
|
||||
nop
|
||||
|
||||
/* The following is for non-4/4xx sun4 MMU's. */
|
||||
sun4_normal_remap:
|
||||
mov 0, %g3 ! source base
|
||||
set KERNBASE, %g4 ! destination base
|
||||
set 0x300000, %g5 ! upper bound 3MB
|
||||
mov 1, %l6
|
||||
sll %l6, 18, %l6 ! sun4 mmu segmap size
|
||||
sun4_normal_loop:
|
||||
lduha [%g3] ASI_SEGMAP, %g6 ! load phys_seg
|
||||
stha %g6, [%g4] ASI_SEGMAP ! stort new virt mapping
|
||||
add %g3, %l6, %g3 ! increment source pointer
|
||||
subcc %g3, %g5, %g0 ! reached limit?
|
||||
blu sun4_normal_loop ! nope, loop again
|
||||
add %g4, %l6, %g4 ! delay, increment dest ptr
|
||||
b go_to_highmem
|
||||
nop
|
||||
|
||||
/* The following works for Sun4c MMU's */
|
||||
sun4c_remap:
|
||||
mov 0, %g3 ! source base
|
||||
set KERNBASE, %g4 ! destination base
|
||||
set 0x300000, %g5 ! upper bound 3MB
|
||||
mov 1, %l6
|
||||
sll %l6, 18, %l6 ! sun4c mmu segmap size
|
||||
sun4c_remap_loop:
|
||||
lda [%g3] ASI_SEGMAP, %g6 ! load phys_seg
|
||||
sta %g6, [%g4] ASI_SEGMAP ! store new virt mapping
|
||||
add %g3, %l6, %g3 ! Increment source ptr
|
||||
subcc %g3, %g5, %g0 ! Reached limit?
|
||||
bl sun4c_remap_loop ! Nope, loop again
|
||||
add %g4, %l6, %g4 ! delay, Increment dest ptr
|
||||
|
||||
/* Now do a non-relative jump so that PC is in high-memory */
|
||||
go_to_highmem:
|
||||
|
@ -759,16 +673,6 @@ execute_in_high_mem:
|
|||
be found_version
|
||||
nop
|
||||
|
||||
/* Old sun4's pass our load address into %o0 instead of the prom
|
||||
* pointer. On sun4's you have to hard code the romvec pointer into
|
||||
* your code. Sun probably still does that because they don't even
|
||||
* trust their own "OpenBoot" specifications.
|
||||
*/
|
||||
set LOAD_ADDR, %g6
|
||||
cmp %o0, %g6 ! an old sun4?
|
||||
be sun4_init
|
||||
nop
|
||||
|
||||
found_version:
|
||||
/* Get the machine type via the mysterious romvec node operations. */
|
||||
|
||||
|
@ -823,16 +727,16 @@ got_prop:
|
|||
/* Update boot_cpu_id only on boot cpu */
|
||||
stub %g1, [%g2 + %lo(boot_cpu_id)]
|
||||
|
||||
ba sun4c_continue_boot
|
||||
ba continue_boot
|
||||
nop
|
||||
#endif
|
||||
set cputypval, %o2
|
||||
ldub [%o2 + 0x4], %l1
|
||||
|
||||
cmp %l1, ' '
|
||||
be 1f
|
||||
be no_sun4c_here
|
||||
cmp %l1, 'c'
|
||||
be 1f
|
||||
be no_sun4c_here
|
||||
cmp %l1, 'm'
|
||||
be 1f
|
||||
cmp %l1, 's'
|
||||
|
@ -847,19 +751,12 @@ got_prop:
|
|||
|
||||
1: set cputypval, %l1
|
||||
ldub [%l1 + 0x4], %l1
|
||||
cmp %l1, 'm' ! Test for sun4d, sun4e ?
|
||||
be sun4m_init
|
||||
cmp %l1, 's' ! Treat sun4s as sun4m
|
||||
be sun4m_init
|
||||
cmp %l1, 'd' ! Let us see how the beast will die
|
||||
cmp %l1, 'd' ! Let us see how the beast will die
|
||||
be sun4d_init
|
||||
nop
|
||||
|
||||
/* Jump into mmu context zero. */
|
||||
set AC_CONTEXT, %g1
|
||||
stba %g0, [%g1] ASI_CONTROL
|
||||
|
||||
b sun4c_continue_boot
|
||||
/* If not sun4d assume sun4m */
|
||||
b sun4m_init
|
||||
nop
|
||||
|
||||
/* CPUID in bootbus can be found at PA 0xff0140000 */
|
||||
|
@ -959,7 +856,7 @@ sun4m_init:
|
|||
srl %o1, 28, %o1 ! Get a type of the CPU
|
||||
|
||||
subcc %o1, 4, %g0 ! TI: Viking or MicroSPARC
|
||||
be sun4c_continue_boot
|
||||
be continue_boot
|
||||
nop
|
||||
|
||||
set AC_M_SFSR, %o0
|
||||
|
@ -969,7 +866,7 @@ sun4m_init:
|
|||
|
||||
/* Fujitsu MicroSPARC-II has no asynchronous flavors of FARs */
|
||||
subcc %o1, 0, %g0
|
||||
be sun4c_continue_boot
|
||||
be continue_boot
|
||||
nop
|
||||
|
||||
set AC_M_AFSR, %o0
|
||||
|
@ -979,8 +876,7 @@ sun4m_init:
|
|||
nop
|
||||
|
||||
|
||||
sun4c_continue_boot:
|
||||
|
||||
continue_boot:
|
||||
|
||||
/* Aieee, now set PC and nPC, enable traps, give ourselves a stack and it's
|
||||
* show-time!
|
||||
|
@ -1161,18 +1057,12 @@ sun4c_continue_boot:
|
|||
/* We should not get here. */
|
||||
call halt_me
|
||||
nop
|
||||
|
||||
sun4_init:
|
||||
sethi %hi(SUN4_PROM_VECTOR+0x84), %o1
|
||||
ld [%o1 + %lo(SUN4_PROM_VECTOR+0x84)], %o1
|
||||
set sun4_notsup, %o0
|
||||
call %o1 /* printf */
|
||||
no_sun4c_here:
|
||||
ld [%g7 + 0x68], %o1
|
||||
set sun4c_notsup, %o0
|
||||
call %o1
|
||||
nop
|
||||
sethi %hi(SUN4_PROM_VECTOR+0xc4), %o1
|
||||
ld [%o1 + %lo(SUN4_PROM_VECTOR+0xc4)], %o1
|
||||
call %o1 /* exittomon */
|
||||
nop
|
||||
1: ba 1b ! Cannot exit into KMON
|
||||
b halt_me
|
||||
nop
|
||||
|
||||
no_sun4e_here:
|
||||
|
|
Loading…
Reference in a new issue