diff options
Diffstat (limited to 'arch/arm/kernel/setup.c')
-rw-r--r-- | arch/arm/kernel/setup.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c index 7ae65dc594a4..648c3c1e16c4 100644 --- a/arch/arm/kernel/setup.c +++ b/arch/arm/kernel/setup.c | |||
@@ -269,6 +269,21 @@ static void __init cacheid_init(void) | |||
269 | extern struct proc_info_list *lookup_processor_type(unsigned int); | 269 | extern struct proc_info_list *lookup_processor_type(unsigned int); |
270 | extern struct machine_desc *lookup_machine_type(unsigned int); | 270 | extern struct machine_desc *lookup_machine_type(unsigned int); |
271 | 271 | ||
272 | static void __init feat_v6_fixup(void) | ||
273 | { | ||
274 | int id = read_cpuid_id(); | ||
275 | |||
276 | if ((id & 0xff0f0000) != 0x41070000) | ||
277 | return; | ||
278 | |||
279 | /* | ||
280 | * HWCAP_TLS is available only on 1136 r1p0 and later, | ||
281 | * see also kuser_get_tls_init. | ||
282 | */ | ||
283 | if ((((id >> 4) & 0xfff) == 0xb36) && (((id >> 20) & 3) == 0)) | ||
284 | elf_hwcap &= ~HWCAP_TLS; | ||
285 | } | ||
286 | |||
272 | static void __init setup_processor(void) | 287 | static void __init setup_processor(void) |
273 | { | 288 | { |
274 | struct proc_info_list *list; | 289 | struct proc_info_list *list; |
@@ -311,6 +326,8 @@ static void __init setup_processor(void) | |||
311 | elf_hwcap &= ~HWCAP_THUMB; | 326 | elf_hwcap &= ~HWCAP_THUMB; |
312 | #endif | 327 | #endif |
313 | 328 | ||
329 | feat_v6_fixup(); | ||
330 | |||
314 | cacheid_init(); | 331 | cacheid_init(); |
315 | cpu_proc_init(); | 332 | cpu_proc_init(); |
316 | } | 333 | } |