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

Commit 08cefa9f authored by David S. Miller's avatar David S. Miller
Browse files

sparc64: Future proof Niagara cpu detection.



Recognize T4 and T5 chips.  Treating them both as "T2 plus other
stuff" should be extremely safe and make sure distributions will work
when those chips actually ship to customers.

Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 1a8e0da5
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -43,6 +43,8 @@
#define SUN4V_CHIP_NIAGARA1	0x01
#define SUN4V_CHIP_NIAGARA2	0x02
#define SUN4V_CHIP_NIAGARA3	0x03
#define SUN4V_CHIP_NIAGARA4	0x04
#define SUN4V_CHIP_NIAGARA5	0x05
#define SUN4V_CHIP_UNKNOWN	0xff

#ifndef __ASSEMBLY__
+3 −1
Original line number Diff line number Diff line
@@ -66,6 +66,8 @@ static struct xor_block_template xor_block_niagara = {
	((tlb_type == hypervisor && \
	  (sun4v_chip_type == SUN4V_CHIP_NIAGARA1 || \
	   sun4v_chip_type == SUN4V_CHIP_NIAGARA2 || \
	   sun4v_chip_type == SUN4V_CHIP_NIAGARA3)) ? \
	   sun4v_chip_type == SUN4V_CHIP_NIAGARA3 || \
	   sun4v_chip_type == SUN4V_CHIP_NIAGARA4 || \
	   sun4v_chip_type == SUN4V_CHIP_NIAGARA5)) ? \
	 &xor_block_niagara : \
	 &xor_block_VIS)
+12 −0
Original line number Diff line number Diff line
@@ -481,6 +481,18 @@ static void __init sun4v_cpu_probe(void)
		sparc_pmu_type = "niagara3";
		break;

	case SUN4V_CHIP_NIAGARA4:
		sparc_cpu_type = "UltraSparc T4 (Niagara4)";
		sparc_fpu_type = "UltraSparc T4 integrated FPU";
		sparc_pmu_type = "niagara4";
		break;

	case SUN4V_CHIP_NIAGARA5:
		sparc_cpu_type = "UltraSparc T5 (Niagara5)";
		sparc_fpu_type = "UltraSparc T5 integrated FPU";
		sparc_pmu_type = "niagara5";
		break;

	default:
		printk(KERN_WARNING "CPU: Unknown sun4v cpu type [%s]\n",
		       prom_cpu_compatible);
+2 −0
Original line number Diff line number Diff line
@@ -325,6 +325,8 @@ static int iterate_cpu(struct cpuinfo_tree *t, unsigned int root_index)
	case SUN4V_CHIP_NIAGARA1:
	case SUN4V_CHIP_NIAGARA2:
	case SUN4V_CHIP_NIAGARA3:
	case SUN4V_CHIP_NIAGARA4:
	case SUN4V_CHIP_NIAGARA5:
		rover_inc_table = niagara_iterate_method;
		break;
	default:
+22 −3
Original line number Diff line number Diff line
@@ -133,7 +133,7 @@ prom_sun4v_name:
prom_niagara_prefix:
	.asciz	"SUNW,UltraSPARC-T"
prom_sparc_prefix:
	.asciz	"SPARC-T"
	.asciz	"SPARC-"
	.align	4
prom_root_compatible:
	.skip	64
@@ -396,7 +396,7 @@ sun4v_chip_type:
	or	%g1, %lo(prom_cpu_compatible), %g1
	sethi	%hi(prom_sparc_prefix), %g7
	or	%g7, %lo(prom_sparc_prefix), %g7
	mov	7, %g3
	mov	6, %g3
90:	ldub	[%g7], %g2
	ldub	[%g1], %g4
	cmp	%g2, %g4
@@ -408,10 +408,23 @@ sun4v_chip_type:

	sethi	%hi(prom_cpu_compatible), %g1
	or	%g1, %lo(prom_cpu_compatible), %g1
	ldub	[%g1 + 7], %g2
	ldub	[%g1 + 6], %g2
	cmp	%g2, 'T'
	be,pt	%xcc, 70f
	 cmp	%g2, 'M'
	bne,pn	%xcc, 4f
	 nop

70:	ldub	[%g1 + 7], %g2
	cmp	%g2, '3'
	be,pt	%xcc, 5f
	 mov	SUN4V_CHIP_NIAGARA3, %g4
	cmp	%g2, '4'
	be,pt	%xcc, 5f
	 mov	SUN4V_CHIP_NIAGARA4, %g4
	cmp	%g2, '5'
	be,pt	%xcc, 5f
	 mov	SUN4V_CHIP_NIAGARA5, %g4
	ba,pt	%xcc, 4f
	 nop

@@ -543,6 +556,12 @@ niagara_tlb_fixup:
	be,pt	%xcc, niagara2_patch
	 nop
	cmp	%g1, SUN4V_CHIP_NIAGARA3
	be,pt	%xcc, niagara2_patch
	 nop
	cmp	%g1, SUN4V_CHIP_NIAGARA4
	be,pt	%xcc, niagara2_patch
	 nop
	cmp	%g1, SUN4V_CHIP_NIAGARA5
	be,pt	%xcc, niagara2_patch
	 nop

Loading