[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