diff options
Diffstat (limited to 'arch/mips/kernel/cpu-probe.c')
-rw-r--r-- | arch/mips/kernel/cpu-probe.c | 28 |
1 files changed, 25 insertions, 3 deletions
diff --git a/arch/mips/kernel/cpu-probe.c b/arch/mips/kernel/cpu-probe.c index c7d3cf1ce46..0bab464b8e3 100644 --- a/arch/mips/kernel/cpu-probe.c +++ b/arch/mips/kernel/cpu-probe.c | |||
@@ -191,6 +191,8 @@ void __init check_wait(void) | |||
191 | case CPU_CAVIUM_OCTEON_PLUS: | 191 | case CPU_CAVIUM_OCTEON_PLUS: |
192 | case CPU_CAVIUM_OCTEON2: | 192 | case CPU_CAVIUM_OCTEON2: |
193 | case CPU_JZRISC: | 193 | case CPU_JZRISC: |
194 | case CPU_XLR: | ||
195 | case CPU_XLP: | ||
194 | cpu_wait = r4k_wait; | 196 | cpu_wait = r4k_wait; |
195 | break; | 197 | break; |
196 | 198 | ||
@@ -1014,6 +1016,13 @@ static inline void cpu_probe_netlogic(struct cpuinfo_mips *c, int cpu) | |||
1014 | { | 1016 | { |
1015 | decode_configs(c); | 1017 | decode_configs(c); |
1016 | 1018 | ||
1019 | if ((c->processor_id & 0xff00) == PRID_IMP_NETLOGIC_AU13XX) { | ||
1020 | c->cputype = CPU_ALCHEMY; | ||
1021 | __cpu_name[cpu] = "Au1300"; | ||
1022 | /* following stuff is not for Alchemy */ | ||
1023 | return; | ||
1024 | } | ||
1025 | |||
1017 | c->options = (MIPS_CPU_TLB | | 1026 | c->options = (MIPS_CPU_TLB | |
1018 | MIPS_CPU_4KEX | | 1027 | MIPS_CPU_4KEX | |
1019 | MIPS_CPU_COUNTER | | 1028 | MIPS_CPU_COUNTER | |
@@ -1023,6 +1032,12 @@ static inline void cpu_probe_netlogic(struct cpuinfo_mips *c, int cpu) | |||
1023 | MIPS_CPU_LLSC); | 1032 | MIPS_CPU_LLSC); |
1024 | 1033 | ||
1025 | switch (c->processor_id & 0xff00) { | 1034 | switch (c->processor_id & 0xff00) { |
1035 | case PRID_IMP_NETLOGIC_XLP8XX: | ||
1036 | case PRID_IMP_NETLOGIC_XLP3XX: | ||
1037 | c->cputype = CPU_XLP; | ||
1038 | __cpu_name[cpu] = "Netlogic XLP"; | ||
1039 | break; | ||
1040 | |||
1026 | case PRID_IMP_NETLOGIC_XLR732: | 1041 | case PRID_IMP_NETLOGIC_XLR732: |
1027 | case PRID_IMP_NETLOGIC_XLR716: | 1042 | case PRID_IMP_NETLOGIC_XLR716: |
1028 | case PRID_IMP_NETLOGIC_XLR532: | 1043 | case PRID_IMP_NETLOGIC_XLR532: |
@@ -1053,14 +1068,21 @@ static inline void cpu_probe_netlogic(struct cpuinfo_mips *c, int cpu) | |||
1053 | break; | 1068 | break; |
1054 | 1069 | ||
1055 | default: | 1070 | default: |
1056 | printk(KERN_INFO "Unknown Netlogic chip id [%02x]!\n", | 1071 | pr_info("Unknown Netlogic chip id [%02x]!\n", |
1057 | c->processor_id); | 1072 | c->processor_id); |
1058 | c->cputype = CPU_XLR; | 1073 | c->cputype = CPU_XLR; |
1059 | break; | 1074 | break; |
1060 | } | 1075 | } |
1061 | 1076 | ||
1062 | c->isa_level = MIPS_CPU_ISA_M64R1; | 1077 | if (c->cputype == CPU_XLP) { |
1063 | c->tlbsize = ((read_c0_config1() >> 25) & 0x3f) + 1; | 1078 | c->isa_level = MIPS_CPU_ISA_M64R2; |
1079 | c->options |= (MIPS_CPU_FPU | MIPS_CPU_ULRI | MIPS_CPU_MCHECK); | ||
1080 | /* This will be updated again after all threads are woken up */ | ||
1081 | c->tlbsize = ((read_c0_config6() >> 16) & 0xffff) + 1; | ||
1082 | } else { | ||
1083 | c->isa_level = MIPS_CPU_ISA_M64R1; | ||
1084 | c->tlbsize = ((read_c0_config1() >> 25) & 0x3f) + 1; | ||
1085 | } | ||
1064 | } | 1086 | } |
1065 | 1087 | ||
1066 | #ifdef CONFIG_64BIT | 1088 | #ifdef CONFIG_64BIT |