sh: Track the CPU family in sh_cpuinfo.
This adds a family member to struct sh_cpuinfo, which allows us to fall back more on the probe routines to work out what sort of subtype we are running on. This will be used by the CPU cache initialization code in order to first do family-level initialization, followed by subtype-level optimizations. Signed-off-by: Paul Mundt <lethal@linux-sh.org>
This commit is contained in:
@@ -29,6 +29,7 @@ int __init detect_cpu_and_cache_system(void)
|
||||
*/
|
||||
boot_cpu_data.dcache.flags |= SH_CACHE_COMBINED;
|
||||
boot_cpu_data.icache = boot_cpu_data.dcache;
|
||||
boot_cpu_data.family = CPU_FAMILY_SH2;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@@ -15,6 +15,8 @@
|
||||
|
||||
int __init detect_cpu_and_cache_system(void)
|
||||
{
|
||||
boot_cpu_data.family = CPU_FAMILY_SH2A;
|
||||
|
||||
/* All SH-2A CPUs have support for 16 and 32-bit opcodes.. */
|
||||
boot_cpu_data.flags |= CPU_HAS_OP32;
|
||||
|
||||
|
@@ -107,5 +107,7 @@ int __uses_jump_to_uncached detect_cpu_and_cache_system(void)
|
||||
boot_cpu_data.dcache.flags |= SH_CACHE_COMBINED;
|
||||
boot_cpu_data.icache = boot_cpu_data.dcache;
|
||||
|
||||
boot_cpu_data.family = CPU_FAMILY_SH3;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@@ -57,8 +57,12 @@ int __init detect_cpu_and_cache_system(void)
|
||||
* Setup some generic flags we can probe on SH-4A parts
|
||||
*/
|
||||
if (((pvr >> 16) & 0xff) == 0x10) {
|
||||
if ((cvr & 0x10000000) == 0)
|
||||
boot_cpu_data.family = CPU_FAMILY_SH4A;
|
||||
|
||||
if ((cvr & 0x10000000) == 0) {
|
||||
boot_cpu_data.flags |= CPU_HAS_DSP;
|
||||
boot_cpu_data.family = CPU_FAMILY_SH4AL_DSP;
|
||||
}
|
||||
|
||||
boot_cpu_data.flags |= CPU_HAS_LLSC | CPU_HAS_PERF_COUNTER;
|
||||
boot_cpu_data.cut_major = pvr & 0x7f;
|
||||
@@ -68,6 +72,7 @@ int __init detect_cpu_and_cache_system(void)
|
||||
} else {
|
||||
/* And some SH-4 defaults.. */
|
||||
boot_cpu_data.flags |= CPU_HAS_PTEA;
|
||||
boot_cpu_data.family = CPU_FAMILY_SH4;
|
||||
}
|
||||
|
||||
/* FPU detection works for everyone */
|
||||
@@ -174,7 +179,7 @@ int __init detect_cpu_and_cache_system(void)
|
||||
|
||||
break;
|
||||
default:
|
||||
boot_cpu_data.type = CPU_SH_NONE;
|
||||
boot_cpu_data.type = boot_cpu_data.family = CPU_SH_NONE;
|
||||
break;
|
||||
}
|
||||
|
||||
|
@@ -34,6 +34,8 @@ int __init detect_cpu_and_cache_system(void)
|
||||
/* CPU.VCR aliased at CIR address on SH5-101 */
|
||||
boot_cpu_data.type = CPU_SH5_101;
|
||||
|
||||
boot_cpu_data.family = CPU_FAMILY_SH5;
|
||||
|
||||
/*
|
||||
* First, setup some sane values for the I-cache.
|
||||
*/
|
||||
|
@@ -49,6 +49,7 @@
|
||||
struct sh_cpuinfo cpu_data[NR_CPUS] __read_mostly = {
|
||||
[0] = {
|
||||
.type = CPU_SH_NONE,
|
||||
.family = CPU_FAMILY_UNKNOWN,
|
||||
.loops_per_jiffy = 10000000,
|
||||
},
|
||||
};
|
||||
|
Reference in New Issue
Block a user