[PATCH] mxc: turn off HWCAP_NEON for older versions of imx51 silicon
Amit Kucheria
amit.kucheria at linaro.org
Wed Sep 1 20:49:13 BST 2010
Versions of silicon older than TO3 have broken NEON implementation. Turn off
NEON in such cases.
Signed-off-by: Amit Kucheria <amit.kucheria at linaro.org>
---
arch/arm/mach-mx5/board-mx51_babbage.c | 9 +++++++++
arch/arm/mach-mx5/cpu.c | 15 +++++++++++++++
2 files changed, 24 insertions(+), 0 deletions(-)
diff --git a/arch/arm/mach-mx5/board-mx51_babbage.c b/arch/arm/mach-mx5/board-mx51_babbage.c
index 6e384d9..65d1d2c 100644
--- a/arch/arm/mach-mx5/board-mx51_babbage.c
+++ b/arch/arm/mach-mx5/board-mx51_babbage.c
@@ -45,6 +45,8 @@
#define MX51_USB_PLL_DIV_19_2_MHZ 0x01
#define MX51_USB_PLL_DIV_24_MHZ 0x02
+extern void mx51_neon_fixup(void);
+
static struct platform_device *devices[] __initdata = {
&mxc_fec_device,
};
@@ -240,6 +242,12 @@ static int __init babbage_otg_mode(char *options)
}
__setup("otg_mode=", babbage_otg_mode);
+static void __init fixup_mx51_babbage(struct machine_desc *desc,
+ struct tag *tags, char **cmdline, struct meminfo *mi)
+{
+ mx51_neon_fixup();
+}
+
/*
* Board specific initialization.
*/
@@ -284,6 +292,7 @@ MACHINE_START(MX51_BABBAGE, "Freescale MX51 Babbage Board")
.phys_io = MX51_AIPS1_BASE_ADDR,
.io_pg_offst = ((MX51_AIPS1_BASE_ADDR_VIRT) >> 18) & 0xfffc,
.boot_params = PHYS_OFFSET + 0x100,
+ .fixup = fixup_mx51_babbage,
.map_io = mx51_map_io,
.init_irq = mx51_init_irq,
.init_machine = mxc_board_init,
diff --git a/arch/arm/mach-mx5/cpu.c b/arch/arm/mach-mx5/cpu.c
index 2d37785..8d081c6 100644
--- a/arch/arm/mach-mx5/cpu.c
+++ b/arch/arm/mach-mx5/cpu.c
@@ -70,6 +70,21 @@ int mx51_revision(void)
}
EXPORT_SYMBOL(mx51_revision);
+#ifdef CONFIG_NEON
+/* All versions of the silicon before Rev. 3 have broken NEON implementations */
+void mx51_neon_fixup(void)
+{
+ if (mx51_revision() < MX51_CHIP_REV_3_0) {
+ if (elf_hwcap & HWCAP_NEON) {
+ elf_hwcap &= ~HWCAP_NEON;
+ pr_info("Turning off NEON support, detected broken NEON implemention\n");
+ }
+ }
+}
+#else
+void mx51_neon_fixup(void) {}
+#endif
+
static int __init post_cpu_init(void)
{
unsigned int reg;
--
1.7.0.4
More information about the Linaro-dev
mailing list