Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 323206a1 authored by Sam Ravnborg's avatar Sam Ravnborg Committed by David S. Miller
Browse files

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: default avatarSam Ravnborg <sam@ravnborg.org>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 3c23a766
Loading
Loading
Loading
Loading
+19 −129
Original line number Diff line number Diff line
@@ -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
		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 */
		 nop
		sethi   %hi(SUN4_PROM_VECTOR+0xc4), %o1
		ld      [%o1 + %lo(SUN4_PROM_VECTOR+0xc4)], %o1
		call    %o1	/* exittomon */
no_sun4c_here:
		ld	[%g7 + 0x68], %o1
		set	sun4c_notsup, %o0
		call	%o1
		 nop
1:		ba      1b                      ! Cannot exit into KMON
		b	halt_me
		 nop

no_sun4e_here: