mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-18 16:44:33 +00:00
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
|
.align 4
|
||||||
|
|
||||||
sun4_notsup:
|
sun4c_notsup:
|
||||||
.asciz "Sparc-Linux sun4 support does no longer exist.\n\n"
|
.asciz "Sparc-Linux sun4/sun4c support does no longer exist.\n\n"
|
||||||
.align 4
|
.align 4
|
||||||
|
|
||||||
sun4e_notsup:
|
sun4e_notsup:
|
||||||
|
@ -520,10 +520,10 @@ copy_prom_lvl14:
|
||||||
ldd [%g2 + 0x8], %g4
|
ldd [%g2 + 0x8], %g4
|
||||||
std %g4, [%g3 + 0x8] ! Copy proms handler
|
std %g4, [%g3 + 0x8] ! Copy proms handler
|
||||||
|
|
||||||
/* Must determine whether we are on a sun4c MMU, SRMMU, or SUN4/400 MUTANT
|
/* DON'T TOUCH %l0 thru %l5 in these remapping routines,
|
||||||
* MMU so we can remap ourselves properly. DON'T TOUCH %l0 thru %l5 in these
|
* we need their values afterwards!
|
||||||
* remapping routines, we need their values afterwards!
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* Now check whether we are already mapped, if we
|
/* Now check whether we are already mapped, if we
|
||||||
* are we can skip all this garbage coming up.
|
* 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
|
be go_to_highmem ! this will be a nop then
|
||||||
nop
|
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:
|
srmmu_remap:
|
||||||
/* First, check for a viking (TI) module. */
|
/* First, check for a viking (TI) module. */
|
||||||
set 0x40000000, %g2
|
set 0x40000000, %g2
|
||||||
|
@ -657,72 +637,6 @@ srmmu_nviking:
|
||||||
b go_to_highmem
|
b go_to_highmem
|
||||||
nop ! wheee....
|
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 */
|
/* Now do a non-relative jump so that PC is in high-memory */
|
||||||
go_to_highmem:
|
go_to_highmem:
|
||||||
|
@ -759,16 +673,6 @@ execute_in_high_mem:
|
||||||
be found_version
|
be found_version
|
||||||
nop
|
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:
|
found_version:
|
||||||
/* Get the machine type via the mysterious romvec node operations. */
|
/* Get the machine type via the mysterious romvec node operations. */
|
||||||
|
|
||||||
|
@ -823,16 +727,16 @@ got_prop:
|
||||||
/* Update boot_cpu_id only on boot cpu */
|
/* Update boot_cpu_id only on boot cpu */
|
||||||
stub %g1, [%g2 + %lo(boot_cpu_id)]
|
stub %g1, [%g2 + %lo(boot_cpu_id)]
|
||||||
|
|
||||||
ba sun4c_continue_boot
|
ba continue_boot
|
||||||
nop
|
nop
|
||||||
#endif
|
#endif
|
||||||
set cputypval, %o2
|
set cputypval, %o2
|
||||||
ldub [%o2 + 0x4], %l1
|
ldub [%o2 + 0x4], %l1
|
||||||
|
|
||||||
cmp %l1, ' '
|
cmp %l1, ' '
|
||||||
be 1f
|
be no_sun4c_here
|
||||||
cmp %l1, 'c'
|
cmp %l1, 'c'
|
||||||
be 1f
|
be no_sun4c_here
|
||||||
cmp %l1, 'm'
|
cmp %l1, 'm'
|
||||||
be 1f
|
be 1f
|
||||||
cmp %l1, 's'
|
cmp %l1, 's'
|
||||||
|
@ -847,19 +751,12 @@ got_prop:
|
||||||
|
|
||||||
1: set cputypval, %l1
|
1: set cputypval, %l1
|
||||||
ldub [%l1 + 0x4], %l1
|
ldub [%l1 + 0x4], %l1
|
||||||
cmp %l1, 'm' ! Test for sun4d, sun4e ?
|
cmp %l1, 'd' ! Let us see how the beast will die
|
||||||
be sun4m_init
|
|
||||||
cmp %l1, 's' ! Treat sun4s as sun4m
|
|
||||||
be sun4m_init
|
|
||||||
cmp %l1, 'd' ! Let us see how the beast will die
|
|
||||||
be sun4d_init
|
be sun4d_init
|
||||||
nop
|
nop
|
||||||
|
|
||||||
/* Jump into mmu context zero. */
|
/* If not sun4d assume sun4m */
|
||||||
set AC_CONTEXT, %g1
|
b sun4m_init
|
||||||
stba %g0, [%g1] ASI_CONTROL
|
|
||||||
|
|
||||||
b sun4c_continue_boot
|
|
||||||
nop
|
nop
|
||||||
|
|
||||||
/* CPUID in bootbus can be found at PA 0xff0140000 */
|
/* 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
|
srl %o1, 28, %o1 ! Get a type of the CPU
|
||||||
|
|
||||||
subcc %o1, 4, %g0 ! TI: Viking or MicroSPARC
|
subcc %o1, 4, %g0 ! TI: Viking or MicroSPARC
|
||||||
be sun4c_continue_boot
|
be continue_boot
|
||||||
nop
|
nop
|
||||||
|
|
||||||
set AC_M_SFSR, %o0
|
set AC_M_SFSR, %o0
|
||||||
|
@ -969,7 +866,7 @@ sun4m_init:
|
||||||
|
|
||||||
/* Fujitsu MicroSPARC-II has no asynchronous flavors of FARs */
|
/* Fujitsu MicroSPARC-II has no asynchronous flavors of FARs */
|
||||||
subcc %o1, 0, %g0
|
subcc %o1, 0, %g0
|
||||||
be sun4c_continue_boot
|
be continue_boot
|
||||||
nop
|
nop
|
||||||
|
|
||||||
set AC_M_AFSR, %o0
|
set AC_M_AFSR, %o0
|
||||||
|
@ -979,8 +876,7 @@ sun4m_init:
|
||||||
nop
|
nop
|
||||||
|
|
||||||
|
|
||||||
sun4c_continue_boot:
|
continue_boot:
|
||||||
|
|
||||||
|
|
||||||
/* Aieee, now set PC and nPC, enable traps, give ourselves a stack and it's
|
/* Aieee, now set PC and nPC, enable traps, give ourselves a stack and it's
|
||||||
* show-time!
|
* show-time!
|
||||||
|
@ -1161,18 +1057,12 @@ sun4c_continue_boot:
|
||||||
/* We should not get here. */
|
/* We should not get here. */
|
||||||
call halt_me
|
call halt_me
|
||||||
nop
|
nop
|
||||||
|
no_sun4c_here:
|
||||||
sun4_init:
|
ld [%g7 + 0x68], %o1
|
||||||
sethi %hi(SUN4_PROM_VECTOR+0x84), %o1
|
set sun4c_notsup, %o0
|
||||||
ld [%o1 + %lo(SUN4_PROM_VECTOR+0x84)], %o1
|
call %o1
|
||||||
set sun4_notsup, %o0
|
|
||||||
call %o1 /* printf */
|
|
||||||
nop
|
nop
|
||||||
sethi %hi(SUN4_PROM_VECTOR+0xc4), %o1
|
b halt_me
|
||||||
ld [%o1 + %lo(SUN4_PROM_VECTOR+0xc4)], %o1
|
|
||||||
call %o1 /* exittomon */
|
|
||||||
nop
|
|
||||||
1: ba 1b ! Cannot exit into KMON
|
|
||||||
nop
|
nop
|
||||||
|
|
||||||
no_sun4e_here:
|
no_sun4e_here:
|
||||||
|
|
Loading…
Reference in a new issue