diff options
| author | Ralf Baechle <ralf@linux-mips.org> | 2005-12-08 09:04:24 -0500 |
|---|---|---|
| committer | <ralf@denk.linux-mips.net> | 2006-01-10 08:39:06 -0500 |
| commit | b4672d37293cb045ec4d57e8b76a62810c96da71 (patch) | |
| tree | 21ba827850d7bc7c36d7009575b979d12b35227c | |
| parent | e7958bb90d57f0da073cbd031a1808de51d1de15 (diff) | |
MIPS: Introduce machinery for testing for MIPSxxR1/2.
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
| -rw-r--r-- | arch/mips/kernel/cpu-probe.c | 35 | ||||
| -rw-r--r-- | arch/mips/kernel/time.c | 6 | ||||
| -rw-r--r-- | include/asm-mips/cpu-features.h | 24 | ||||
| -rw-r--r-- | include/asm-mips/cpu.h | 4 | ||||
| -rw-r--r-- | include/asm-mips/mach-ip22/cpu-feature-overrides.h | 5 | ||||
| -rw-r--r-- | include/asm-mips/mach-ip27/cpu-feature-overrides.h | 5 | ||||
| -rw-r--r-- | include/asm-mips/mach-ip32/cpu-feature-overrides.h | 5 | ||||
| -rw-r--r-- | include/asm-mips/mach-ja/cpu-feature-overrides.h | 5 | ||||
| -rw-r--r-- | include/asm-mips/mach-ocelot3/cpu-feature-overrides.h | 5 | ||||
| -rw-r--r-- | include/asm-mips/mach-rm200/cpu-feature-overrides.h | 5 | ||||
| -rw-r--r-- | include/asm-mips/mach-yosemite/cpu-feature-overrides.h | 5 |
11 files changed, 95 insertions, 9 deletions
diff --git a/arch/mips/kernel/cpu-probe.c b/arch/mips/kernel/cpu-probe.c index d00f8768e2a0..fac48ad27b34 100644 --- a/arch/mips/kernel/cpu-probe.c +++ b/arch/mips/kernel/cpu-probe.c | |||
| @@ -435,6 +435,9 @@ static inline void cpu_probe_legacy(struct cpuinfo_mips *c) | |||
| 435 | } | 435 | } |
| 436 | } | 436 | } |
| 437 | 437 | ||
| 438 | static char unknown_isa[] __initdata = KERN_ERR \ | ||
| 439 | "Unsupported ISA type, c0.config0: %d."; | ||
| 440 | |||
| 438 | static inline unsigned int decode_config0(struct cpuinfo_mips *c) | 441 | static inline unsigned int decode_config0(struct cpuinfo_mips *c) |
| 439 | { | 442 | { |
| 440 | unsigned int config0; | 443 | unsigned int config0; |
| @@ -447,16 +450,37 @@ static inline unsigned int decode_config0(struct cpuinfo_mips *c) | |||
| 447 | isa = (config0 & MIPS_CONF_AT) >> 13; | 450 | isa = (config0 & MIPS_CONF_AT) >> 13; |
| 448 | switch (isa) { | 451 | switch (isa) { |
| 449 | case 0: | 452 | case 0: |
| 450 | c->isa_level = MIPS_CPU_ISA_M32R1; | 453 | switch ((config0 >> 10) & 7) { |
| 454 | case 0: | ||
| 455 | c->isa_level = MIPS_CPU_ISA_M32R1; | ||
| 456 | break; | ||
| 457 | case 1: | ||
| 458 | c->isa_level = MIPS_CPU_ISA_M32R2; | ||
| 459 | break; | ||
| 460 | default: | ||
| 461 | goto unknown; | ||
| 462 | } | ||
| 451 | break; | 463 | break; |
| 452 | case 2: | 464 | case 2: |
| 453 | c->isa_level = MIPS_CPU_ISA_M64R1; | 465 | switch ((config0 >> 10) & 7) { |
| 466 | case 0: | ||
| 467 | c->isa_level = MIPS_CPU_ISA_M64R1; | ||
| 468 | break; | ||
| 469 | case 1: | ||
| 470 | c->isa_level = MIPS_CPU_ISA_M64R2; | ||
| 471 | break; | ||
| 472 | default: | ||
| 473 | goto unknown; | ||
| 474 | } | ||
| 454 | break; | 475 | break; |
| 455 | default: | 476 | default: |
| 456 | panic("Unsupported ISA type, cp0.config0.at: %d.", isa); | 477 | goto unknown; |
| 457 | } | 478 | } |
| 458 | 479 | ||
| 459 | return config0 & MIPS_CONF_M; | 480 | return config0 & MIPS_CONF_M; |
| 481 | |||
| 482 | unknown: | ||
| 483 | panic(unknown_isa, config0); | ||
| 460 | } | 484 | } |
| 461 | 485 | ||
| 462 | static inline unsigned int decode_config1(struct cpuinfo_mips *c) | 486 | static inline unsigned int decode_config1(struct cpuinfo_mips *c) |
| @@ -568,7 +592,6 @@ static inline void cpu_probe_mips(struct cpuinfo_mips *c) | |||
| 568 | break; | 592 | break; |
| 569 | case PRID_IMP_34K: | 593 | case PRID_IMP_34K: |
| 570 | c->cputype = CPU_34K; | 594 | c->cputype = CPU_34K; |
| 571 | c->isa_level = MIPS_CPU_ISA_M32R1; | ||
| 572 | break; | 595 | break; |
| 573 | } | 596 | } |
| 574 | } | 597 | } |
| @@ -691,7 +714,9 @@ __init void cpu_probe(void) | |||
| 691 | c->fpu_id = cpu_get_fpu_id(); | 714 | c->fpu_id = cpu_get_fpu_id(); |
| 692 | 715 | ||
| 693 | if (c->isa_level == MIPS_CPU_ISA_M32R1 || | 716 | if (c->isa_level == MIPS_CPU_ISA_M32R1 || |
| 694 | c->isa_level == MIPS_CPU_ISA_M64R1) { | 717 | c->isa_level == MIPS_CPU_ISA_M32R2 || |
| 718 | c->isa_level == MIPS_CPU_ISA_M64R1 || | ||
| 719 | c->isa_level == MIPS_CPU_ISA_M64R2) { | ||
| 695 | if (c->fpu_id & MIPS_FPIR_3D) | 720 | if (c->fpu_id & MIPS_FPIR_3D) |
| 696 | c->ases |= MIPS_ASE_MIPS3D; | 721 | c->ases |= MIPS_ASE_MIPS3D; |
| 697 | } | 722 | } |
diff --git a/arch/mips/kernel/time.c b/arch/mips/kernel/time.c index 174959bf1d59..07e125c027b2 100644 --- a/arch/mips/kernel/time.c +++ b/arch/mips/kernel/time.c | |||
| @@ -628,9 +628,9 @@ void __init time_init(void) | |||
| 628 | mips_hpt_init = c0_hpt_init; | 628 | mips_hpt_init = c0_hpt_init; |
| 629 | } | 629 | } |
| 630 | 630 | ||
| 631 | if ((current_cpu_data.isa_level == MIPS_CPU_ISA_M32R1) || | 631 | if (cpu_has_mips32r1 || cpu_has_mips32r2 || |
| 632 | (current_cpu_data.isa_level == MIPS_CPU_ISA_I) || | 632 | (current_cpu_data.isa_level == MIPS_CPU_ISA_I) || |
| 633 | (current_cpu_data.isa_level == MIPS_CPU_ISA_II)) | 633 | (current_cpu_data.isa_level == MIPS_CPU_ISA_II)) |
| 634 | /* | 634 | /* |
| 635 | * We need to calibrate the counter but we don't have | 635 | * We need to calibrate the counter but we don't have |
| 636 | * 64-bit division. | 636 | * 64-bit division. |
diff --git a/include/asm-mips/cpu-features.h b/include/asm-mips/cpu-features.h index 03627cfb3e45..f8be4a470754 100644 --- a/include/asm-mips/cpu-features.h +++ b/include/asm-mips/cpu-features.h | |||
| @@ -144,6 +144,18 @@ | |||
| 144 | # ifndef cpu_has_64bit_addresses | 144 | # ifndef cpu_has_64bit_addresses |
| 145 | # define cpu_has_64bit_addresses 0 | 145 | # define cpu_has_64bit_addresses 0 |
| 146 | # endif | 146 | # endif |
| 147 | # ifndef cpu_has_mips32r1 | ||
| 148 | # define cpu_has_mips32r1 (cpu_data[0].isa_level & MIPS_CPU_ISA_M32R1) | ||
| 149 | # endif | ||
| 150 | # ifndef cpu_has_mips32r2 | ||
| 151 | # define cpu_has_mips32r2 (cpu_data[0].isa_level & MIPS_CPU_ISA_M32R2) | ||
| 152 | # endif | ||
| 153 | # ifndef cpu_has_mips64r1 | ||
| 154 | # define cpu_has_mips64r1 0 | ||
| 155 | # endif | ||
| 156 | # ifndef cpu_has_mips64r2 | ||
| 157 | # define cpu_has_mips64r2 0 | ||
| 158 | # endif | ||
| 147 | #endif | 159 | #endif |
| 148 | 160 | ||
| 149 | #ifdef CONFIG_64BIT | 161 | #ifdef CONFIG_64BIT |
| @@ -162,6 +174,18 @@ | |||
| 162 | # ifndef cpu_has_64bit_addresses | 174 | # ifndef cpu_has_64bit_addresses |
| 163 | # define cpu_has_64bit_addresses 1 | 175 | # define cpu_has_64bit_addresses 1 |
| 164 | # endif | 176 | # endif |
| 177 | # ifndef cpu_has_mips32r1 | ||
| 178 | # define cpu_has_mips32r1 0 | ||
| 179 | # endif | ||
| 180 | # ifndef cpu_has_mips32r2 | ||
| 181 | # define cpu_has_mips32r2 0 | ||
| 182 | # endif | ||
| 183 | # ifndef cpu_has_mips64r1 | ||
| 184 | # define cpu_has_mips64r1 (cpu_data[0].isa_level & MIPS_CPU_ISA_M64R1) | ||
| 185 | # endif | ||
| 186 | # ifndef cpu_has_mips64r2 | ||
| 187 | # define cpu_has_mips64r2 (cpu_data[0].isa_level & MIPS_CPU_ISA_M64R2) | ||
| 188 | # endif | ||
| 165 | #endif | 189 | #endif |
| 166 | 190 | ||
| 167 | #ifdef CONFIG_CPU_MIPSR2 | 191 | #ifdef CONFIG_CPU_MIPSR2 |
diff --git a/include/asm-mips/cpu.h b/include/asm-mips/cpu.h index 256fe130eae8..48c37c46053a 100644 --- a/include/asm-mips/cpu.h +++ b/include/asm-mips/cpu.h | |||
| @@ -210,7 +210,9 @@ | |||
| 210 | #define MIPS_CPU_ISA_IV (0x00000004 | MIPS_CPU_ISA_64BIT) | 210 | #define MIPS_CPU_ISA_IV (0x00000004 | MIPS_CPU_ISA_64BIT) |
| 211 | #define MIPS_CPU_ISA_V (0x00000005 | MIPS_CPU_ISA_64BIT) | 211 | #define MIPS_CPU_ISA_V (0x00000005 | MIPS_CPU_ISA_64BIT) |
| 212 | #define MIPS_CPU_ISA_M32R1 0x00000020 | 212 | #define MIPS_CPU_ISA_M32R1 0x00000020 |
| 213 | #define MIPS_CPU_ISA_M64R1 (0x00000040 | MIPS_CPU_ISA_64BIT) | 213 | #define MIPS_CPU_ISA_M32R2 0x00000040 |
| 214 | #define MIPS_CPU_ISA_M64R1 (0x00000080 | MIPS_CPU_ISA_64BIT) | ||
| 215 | #define MIPS_CPU_ISA_M64R2 (0x00000100 | MIPS_CPU_ISA_64BIT) | ||
| 214 | 216 | ||
| 215 | /* | 217 | /* |
| 216 | * CPU Option encodings | 218 | * CPU Option encodings |
diff --git a/include/asm-mips/mach-ip22/cpu-feature-overrides.h b/include/asm-mips/mach-ip22/cpu-feature-overrides.h index ab9714668177..2a37bedb4053 100644 --- a/include/asm-mips/mach-ip22/cpu-feature-overrides.h +++ b/include/asm-mips/mach-ip22/cpu-feature-overrides.h | |||
| @@ -34,4 +34,9 @@ | |||
| 34 | #define cpu_has_nofpuex 0 | 34 | #define cpu_has_nofpuex 0 |
| 35 | #define cpu_has_64bits 1 | 35 | #define cpu_has_64bits 1 |
| 36 | 36 | ||
| 37 | #define cpu_has_mips32r1 0 | ||
| 38 | #define cpu_has_mips32r2 0 | ||
| 39 | #define cpu_has_mips64r1 0 | ||
| 40 | #define cpu_has_mips64r2 0 | ||
| 41 | |||
| 37 | #endif /* __ASM_MACH_IP22_CPU_FEATURE_OVERRIDES_H */ | 42 | #endif /* __ASM_MACH_IP22_CPU_FEATURE_OVERRIDES_H */ |
diff --git a/include/asm-mips/mach-ip27/cpu-feature-overrides.h b/include/asm-mips/mach-ip27/cpu-feature-overrides.h index 4c8a90051fd0..2d2f5b91e47f 100644 --- a/include/asm-mips/mach-ip27/cpu-feature-overrides.h +++ b/include/asm-mips/mach-ip27/cpu-feature-overrides.h | |||
| @@ -37,4 +37,9 @@ | |||
| 37 | #define cpu_icache_line_size() 64 | 37 | #define cpu_icache_line_size() 64 |
| 38 | #define cpu_scache_line_size() 128 | 38 | #define cpu_scache_line_size() 128 |
| 39 | 39 | ||
| 40 | #define cpu_has_mips32r1 0 | ||
| 41 | #define cpu_has_mips32r2 0 | ||
| 42 | #define cpu_has_mips64r1 0 | ||
| 43 | #define cpu_has_mips64r2 0 | ||
| 44 | |||
| 40 | #endif /* __ASM_MACH_IP27_CPU_FEATURE_OVERRIDES_H */ | 45 | #endif /* __ASM_MACH_IP27_CPU_FEATURE_OVERRIDES_H */ |
diff --git a/include/asm-mips/mach-ip32/cpu-feature-overrides.h b/include/asm-mips/mach-ip32/cpu-feature-overrides.h index ab37fc1842ba..b80c30725cf6 100644 --- a/include/asm-mips/mach-ip32/cpu-feature-overrides.h +++ b/include/asm-mips/mach-ip32/cpu-feature-overrides.h | |||
| @@ -39,4 +39,9 @@ | |||
| 39 | #define cpu_has_ic_fills_f_dc 0 | 39 | #define cpu_has_ic_fills_f_dc 0 |
| 40 | #define cpu_has_dsp 0 | 40 | #define cpu_has_dsp 0 |
| 41 | 41 | ||
| 42 | #define cpu_has_mips32r1 0 | ||
| 43 | #define cpu_has_mips32r2 0 | ||
| 44 | #define cpu_has_mips64r1 0 | ||
| 45 | #define cpu_has_mips64r2 0 | ||
| 46 | |||
| 42 | #endif /* __ASM_MACH_IP32_CPU_FEATURE_OVERRIDES_H */ | 47 | #endif /* __ASM_MACH_IP32_CPU_FEATURE_OVERRIDES_H */ |
diff --git a/include/asm-mips/mach-ja/cpu-feature-overrides.h b/include/asm-mips/mach-ja/cpu-feature-overrides.h index a0fde405d4c4..90ff087083b9 100644 --- a/include/asm-mips/mach-ja/cpu-feature-overrides.h +++ b/include/asm-mips/mach-ja/cpu-feature-overrides.h | |||
| @@ -37,4 +37,9 @@ | |||
| 37 | #define cpu_icache_line_size() 32 | 37 | #define cpu_icache_line_size() 32 |
| 38 | #define cpu_scache_line_size() 32 | 38 | #define cpu_scache_line_size() 32 |
| 39 | 39 | ||
| 40 | #define cpu_has_mips32r1 0 | ||
| 41 | #define cpu_has_mips32r2 0 | ||
| 42 | #define cpu_has_mips64r1 0 | ||
| 43 | #define cpu_has_mips64r2 0 | ||
| 44 | |||
| 40 | #endif /* __ASM_MACH_JA_CPU_FEATURE_OVERRIDES_H */ | 45 | #endif /* __ASM_MACH_JA_CPU_FEATURE_OVERRIDES_H */ |
diff --git a/include/asm-mips/mach-ocelot3/cpu-feature-overrides.h b/include/asm-mips/mach-ocelot3/cpu-feature-overrides.h index 825c5f674dfc..782b986241dd 100644 --- a/include/asm-mips/mach-ocelot3/cpu-feature-overrides.h +++ b/include/asm-mips/mach-ocelot3/cpu-feature-overrides.h | |||
| @@ -40,4 +40,9 @@ | |||
| 40 | #define cpu_icache_line_size() 32 | 40 | #define cpu_icache_line_size() 32 |
| 41 | #define cpu_scache_line_size() 32 | 41 | #define cpu_scache_line_size() 32 |
| 42 | 42 | ||
| 43 | #define cpu_has_mips32r1 0 | ||
| 44 | #define cpu_has_mips32r2 0 | ||
| 45 | #define cpu_has_mips64r1 0 | ||
| 46 | #define cpu_has_mips64r2 0 | ||
| 47 | |||
| 43 | #endif /* __ASM_MACH_JA_CPU_FEATURE_OVERRIDES_H */ | 48 | #endif /* __ASM_MACH_JA_CPU_FEATURE_OVERRIDES_H */ |
diff --git a/include/asm-mips/mach-rm200/cpu-feature-overrides.h b/include/asm-mips/mach-rm200/cpu-feature-overrides.h index 79f9b064c864..91e7cf5f2bfe 100644 --- a/include/asm-mips/mach-rm200/cpu-feature-overrides.h +++ b/include/asm-mips/mach-rm200/cpu-feature-overrides.h | |||
| @@ -40,4 +40,9 @@ | |||
| 40 | #define cpu_icache_line_size() 32 | 40 | #define cpu_icache_line_size() 32 |
| 41 | #define cpu_scache_line_size() 0 /* No S-cache on R5000 I think ... */ | 41 | #define cpu_scache_line_size() 0 /* No S-cache on R5000 I think ... */ |
| 42 | 42 | ||
| 43 | #define cpu_has_mips32r1 0 | ||
| 44 | #define cpu_has_mips32r2 0 | ||
| 45 | #define cpu_has_mips64r1 0 | ||
| 46 | #define cpu_has_mips64r2 0 | ||
| 47 | |||
| 43 | #endif /* __ASM_MACH_RM200_CPU_FEATURE_OVERRIDES_H */ | 48 | #endif /* __ASM_MACH_RM200_CPU_FEATURE_OVERRIDES_H */ |
diff --git a/include/asm-mips/mach-yosemite/cpu-feature-overrides.h b/include/asm-mips/mach-yosemite/cpu-feature-overrides.h index 463d051f4683..3073542c93c7 100644 --- a/include/asm-mips/mach-yosemite/cpu-feature-overrides.h +++ b/include/asm-mips/mach-yosemite/cpu-feature-overrides.h | |||
| @@ -37,4 +37,9 @@ | |||
| 37 | #define cpu_icache_line_size() 32 | 37 | #define cpu_icache_line_size() 32 |
| 38 | #define cpu_scache_line_size() 32 | 38 | #define cpu_scache_line_size() 32 |
| 39 | 39 | ||
| 40 | #define cpu_has_mips32r1 0 | ||
| 41 | #define cpu_has_mips32r2 0 | ||
| 42 | #define cpu_has_mips64r1 0 | ||
| 43 | #define cpu_has_mips64r2 0 | ||
| 44 | |||
| 40 | #endif /* __ASM_MACH_YOSEMITE_CPU_FEATURE_OVERRIDES_H */ | 45 | #endif /* __ASM_MACH_YOSEMITE_CPU_FEATURE_OVERRIDES_H */ |
