Commit 7d484acb authored by Allen Pais's avatar Allen Pais Committed by David S. Miller

sparc64: recognize and support sparc M8 cpu type

Recognize SPARC-M8 cpu type, hardware caps and cpu
distribution map.
Signed-off-by: default avatarAllen Pais <allen.pais@oracle.com>
Signed-off-by: default avatarDavid Aldridge <david.j.aldridge@oracle.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 9e48cd4a
...@@ -47,6 +47,7 @@ ...@@ -47,6 +47,7 @@
#define SUN4V_CHIP_NIAGARA5 0x05 #define SUN4V_CHIP_NIAGARA5 0x05
#define SUN4V_CHIP_SPARC_M6 0x06 #define SUN4V_CHIP_SPARC_M6 0x06
#define SUN4V_CHIP_SPARC_M7 0x07 #define SUN4V_CHIP_SPARC_M7 0x07
#define SUN4V_CHIP_SPARC_M8 0x08
#define SUN4V_CHIP_SPARC64X 0x8a #define SUN4V_CHIP_SPARC64X 0x8a
#define SUN4V_CHIP_SPARC_SN 0x8b #define SUN4V_CHIP_SPARC_SN 0x8b
#define SUN4V_CHIP_UNKNOWN 0xff #define SUN4V_CHIP_UNKNOWN 0xff
...@@ -63,6 +64,7 @@ ...@@ -63,6 +64,7 @@
#define CPU_ID_NIAGARA5 ('5') #define CPU_ID_NIAGARA5 ('5')
#define CPU_ID_M6 ('6') #define CPU_ID_M6 ('6')
#define CPU_ID_M7 ('7') #define CPU_ID_M7 ('7')
#define CPU_ID_M8 ('8')
#define CPU_ID_SONOMA1 ('N') #define CPU_ID_SONOMA1 ('N')
#ifndef __ASSEMBLY__ #ifndef __ASSEMBLY__
......
...@@ -506,6 +506,12 @@ static void __init sun4v_cpu_probe(void) ...@@ -506,6 +506,12 @@ static void __init sun4v_cpu_probe(void)
sparc_pmu_type = "sparc-m7"; sparc_pmu_type = "sparc-m7";
break; break;
case SUN4V_CHIP_SPARC_M8:
sparc_cpu_type = "SPARC-M8";
sparc_fpu_type = "SPARC-M8 integrated FPU";
sparc_pmu_type = "sparc-m8";
break;
case SUN4V_CHIP_SPARC_SN: case SUN4V_CHIP_SPARC_SN:
sparc_cpu_type = "SPARC-SN"; sparc_cpu_type = "SPARC-SN";
sparc_fpu_type = "SPARC-SN integrated FPU"; sparc_fpu_type = "SPARC-SN integrated FPU";
......
...@@ -328,6 +328,7 @@ static int iterate_cpu(struct cpuinfo_tree *t, unsigned int root_index) ...@@ -328,6 +328,7 @@ static int iterate_cpu(struct cpuinfo_tree *t, unsigned int root_index)
case SUN4V_CHIP_NIAGARA5: case SUN4V_CHIP_NIAGARA5:
case SUN4V_CHIP_SPARC_M6: case SUN4V_CHIP_SPARC_M6:
case SUN4V_CHIP_SPARC_M7: case SUN4V_CHIP_SPARC_M7:
case SUN4V_CHIP_SPARC_M8:
case SUN4V_CHIP_SPARC_SN: case SUN4V_CHIP_SPARC_SN:
case SUN4V_CHIP_SPARC64X: case SUN4V_CHIP_SPARC64X:
rover_inc_table = niagara_iterate_method; rover_inc_table = niagara_iterate_method;
......
...@@ -439,6 +439,9 @@ EXPORT_SYMBOL(sun4v_chip_type) ...@@ -439,6 +439,9 @@ EXPORT_SYMBOL(sun4v_chip_type)
cmp %g2, CPU_ID_M7 cmp %g2, CPU_ID_M7
be,pt %xcc, 5f be,pt %xcc, 5f
mov SUN4V_CHIP_SPARC_M7, %g4 mov SUN4V_CHIP_SPARC_M7, %g4
cmp %g2, CPU_ID_M8
be,pt %xcc, 5f
mov SUN4V_CHIP_SPARC_M8, %g4
cmp %g2, CPU_ID_SONOMA1 cmp %g2, CPU_ID_SONOMA1
be,pt %xcc, 5f be,pt %xcc, 5f
mov SUN4V_CHIP_SPARC_SN, %g4 mov SUN4V_CHIP_SPARC_SN, %g4
...@@ -600,6 +603,9 @@ niagara_tlb_fixup: ...@@ -600,6 +603,9 @@ niagara_tlb_fixup:
be,pt %xcc, niagara4_patch be,pt %xcc, niagara4_patch
nop nop
cmp %g1, SUN4V_CHIP_SPARC_M7 cmp %g1, SUN4V_CHIP_SPARC_M7
be,pt %xcc, niagara4_patch
nop
cmp %g1, SUN4V_CHIP_SPARC_M8
be,pt %xcc, niagara4_patch be,pt %xcc, niagara4_patch
nop nop
cmp %g1, SUN4V_CHIP_SPARC_SN cmp %g1, SUN4V_CHIP_SPARC_SN
......
...@@ -288,10 +288,17 @@ static void __init sun4v_patch(void) ...@@ -288,10 +288,17 @@ static void __init sun4v_patch(void)
sun4v_patch_2insn_range(&__sun4v_2insn_patch, sun4v_patch_2insn_range(&__sun4v_2insn_patch,
&__sun4v_2insn_patch_end); &__sun4v_2insn_patch_end);
if (sun4v_chip_type == SUN4V_CHIP_SPARC_M7 ||
sun4v_chip_type == SUN4V_CHIP_SPARC_SN) switch (sun4v_chip_type) {
case SUN4V_CHIP_SPARC_M7:
case SUN4V_CHIP_SPARC_M8:
case SUN4V_CHIP_SPARC_SN:
sun_m7_patch_2insn_range(&__sun_m7_2insn_patch, sun_m7_patch_2insn_range(&__sun_m7_2insn_patch,
&__sun_m7_2insn_patch_end); &__sun_m7_2insn_patch_end);
break;
default:
break;
}
sun4v_hvapi_init(); sun4v_hvapi_init();
} }
...@@ -529,6 +536,7 @@ static void __init init_sparc64_elf_hwcap(void) ...@@ -529,6 +536,7 @@ static void __init init_sparc64_elf_hwcap(void)
sun4v_chip_type == SUN4V_CHIP_NIAGARA5 || sun4v_chip_type == SUN4V_CHIP_NIAGARA5 ||
sun4v_chip_type == SUN4V_CHIP_SPARC_M6 || sun4v_chip_type == SUN4V_CHIP_SPARC_M6 ||
sun4v_chip_type == SUN4V_CHIP_SPARC_M7 || sun4v_chip_type == SUN4V_CHIP_SPARC_M7 ||
sun4v_chip_type == SUN4V_CHIP_SPARC_M8 ||
sun4v_chip_type == SUN4V_CHIP_SPARC_SN || sun4v_chip_type == SUN4V_CHIP_SPARC_SN ||
sun4v_chip_type == SUN4V_CHIP_SPARC64X) sun4v_chip_type == SUN4V_CHIP_SPARC64X)
cap |= HWCAP_SPARC_BLKINIT; cap |= HWCAP_SPARC_BLKINIT;
...@@ -538,6 +546,7 @@ static void __init init_sparc64_elf_hwcap(void) ...@@ -538,6 +546,7 @@ static void __init init_sparc64_elf_hwcap(void)
sun4v_chip_type == SUN4V_CHIP_NIAGARA5 || sun4v_chip_type == SUN4V_CHIP_NIAGARA5 ||
sun4v_chip_type == SUN4V_CHIP_SPARC_M6 || sun4v_chip_type == SUN4V_CHIP_SPARC_M6 ||
sun4v_chip_type == SUN4V_CHIP_SPARC_M7 || sun4v_chip_type == SUN4V_CHIP_SPARC_M7 ||
sun4v_chip_type == SUN4V_CHIP_SPARC_M8 ||
sun4v_chip_type == SUN4V_CHIP_SPARC_SN || sun4v_chip_type == SUN4V_CHIP_SPARC_SN ||
sun4v_chip_type == SUN4V_CHIP_SPARC64X) sun4v_chip_type == SUN4V_CHIP_SPARC64X)
cap |= HWCAP_SPARC_N2; cap |= HWCAP_SPARC_N2;
...@@ -568,6 +577,7 @@ static void __init init_sparc64_elf_hwcap(void) ...@@ -568,6 +577,7 @@ static void __init init_sparc64_elf_hwcap(void)
sun4v_chip_type == SUN4V_CHIP_NIAGARA5 || sun4v_chip_type == SUN4V_CHIP_NIAGARA5 ||
sun4v_chip_type == SUN4V_CHIP_SPARC_M6 || sun4v_chip_type == SUN4V_CHIP_SPARC_M6 ||
sun4v_chip_type == SUN4V_CHIP_SPARC_M7 || sun4v_chip_type == SUN4V_CHIP_SPARC_M7 ||
sun4v_chip_type == SUN4V_CHIP_SPARC_M8 ||
sun4v_chip_type == SUN4V_CHIP_SPARC_SN || sun4v_chip_type == SUN4V_CHIP_SPARC_SN ||
sun4v_chip_type == SUN4V_CHIP_SPARC64X) sun4v_chip_type == SUN4V_CHIP_SPARC64X)
cap |= (AV_SPARC_VIS | AV_SPARC_VIS2 | cap |= (AV_SPARC_VIS | AV_SPARC_VIS2 |
...@@ -578,6 +588,7 @@ static void __init init_sparc64_elf_hwcap(void) ...@@ -578,6 +588,7 @@ static void __init init_sparc64_elf_hwcap(void)
sun4v_chip_type == SUN4V_CHIP_NIAGARA5 || sun4v_chip_type == SUN4V_CHIP_NIAGARA5 ||
sun4v_chip_type == SUN4V_CHIP_SPARC_M6 || sun4v_chip_type == SUN4V_CHIP_SPARC_M6 ||
sun4v_chip_type == SUN4V_CHIP_SPARC_M7 || sun4v_chip_type == SUN4V_CHIP_SPARC_M7 ||
sun4v_chip_type == SUN4V_CHIP_SPARC_M8 ||
sun4v_chip_type == SUN4V_CHIP_SPARC_SN || sun4v_chip_type == SUN4V_CHIP_SPARC_SN ||
sun4v_chip_type == SUN4V_CHIP_SPARC64X) sun4v_chip_type == SUN4V_CHIP_SPARC64X)
cap |= (AV_SPARC_VIS3 | AV_SPARC_HPC | cap |= (AV_SPARC_VIS3 | AV_SPARC_HPC |
......
...@@ -2161,6 +2161,7 @@ static void __init sun4v_linear_pte_xor_finalize(void) ...@@ -2161,6 +2161,7 @@ static void __init sun4v_linear_pte_xor_finalize(void)
*/ */
switch (sun4v_chip_type) { switch (sun4v_chip_type) {
case SUN4V_CHIP_SPARC_M7: case SUN4V_CHIP_SPARC_M7:
case SUN4V_CHIP_SPARC_M8:
case SUN4V_CHIP_SPARC_SN: case SUN4V_CHIP_SPARC_SN:
pagecv_flag = 0x00; pagecv_flag = 0x00;
break; break;
...@@ -2313,6 +2314,7 @@ void __init paging_init(void) ...@@ -2313,6 +2314,7 @@ void __init paging_init(void)
*/ */
switch (sun4v_chip_type) { switch (sun4v_chip_type) {
case SUN4V_CHIP_SPARC_M7: case SUN4V_CHIP_SPARC_M7:
case SUN4V_CHIP_SPARC_M8:
case SUN4V_CHIP_SPARC_SN: case SUN4V_CHIP_SPARC_SN:
page_cache4v_flag = _PAGE_CP_4V; page_cache4v_flag = _PAGE_CP_4V;
break; break;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment