ARM: 7789/1: Do not run dummy_flush_tlb_a15_erratum() on non-Cortex-A15
authorFabio Estevam <festevam@gmail.com>
Tue, 23 Jul 2013 14:13:06 +0000 (15:13 +0100)
committerRussell King <rmk+kernel@arm.linux.org.uk>
Fri, 26 Jul 2013 11:02:09 +0000 (12:02 +0100)
commit1f49856bb029779d8f1b63517a3a3b34ffe672c7
tree2fa00a1dc1f50c04c7c3fd339f534275e213590b
parent8fbac214e5c594a0c2fe78c14adf2cdbb1febc92
ARM: 7789/1: Do not run dummy_flush_tlb_a15_erratum() on non-Cortex-A15

Commit 93dc688 (ARM: 7684/1: errata: Workaround for Cortex-A15 erratum 798181 (TLBI/DSB operations)) causes the following undefined instruction error on a mx53 (Cortex-A8):

Internal error: Oops - undefined instruction: 0 [#1] SMP ARM
CPU: 0 PID: 275 Comm: modprobe Not tainted 3.11.0-rc2-next-20130722-00009-g9b0f371 #881
task: df46cc00 ti: df48e000 task.ti: df48e000
PC is at check_and_switch_context+0x17c/0x4d0
LR is at check_and_switch_context+0xdc/0x4d0

This problem happens because check_and_switch_context() calls dummy_flush_tlb_a15_erratum() without checking if we are really running on a Cortex-A15 or not.

To avoid this issue, only call dummy_flush_tlb_a15_erratum() inside
check_and_switch_context() if erratum_a15_798181() returns true, which means that we are really running on a Cortex-A15.

Signed-off-by: Fabio Estevam <fabio.estevam@freescale.com>
Acked-by: Catalin Marinas <catalin.marinas@arm.com>
Reviewed-by: Roger Quadros <rogerq@ti.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
arch/arm/include/asm/tlbflush.h
arch/arm/kernel/smp_tlb.c
arch/arm/mm/context.c