On 10 Sep 01, Nicolas Pitre wrote:
> On Wed, 1 Sep 2010, Amit Kucheria wrote:
> 
> > On 10 Sep 01, Nicolas Pitre wrote:
> [...]
> 
> > @@ -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,
> 
> This won't work as this is called way too early.
> 
> I'd suggest calling mx51_neon_fixup() through a late_initcall instead.  
> And making it __init too.

Argh! You're right.

It becomes a lot simpler with just late_init. Fixed patch attached.


>From 141ab741491a314bb05a4f17f9cba0870d76c74e Mon Sep 17 00:00:00 2001
Message-Id: 
<141ab741491a314bb05a4f17f9cba0870d76c74e.1283410133.git.amit.kuche...@linaro.org>
From: Amit Kucheria <amit.kuche...@linaro.org>
Date: Wed, 1 Sep 2010 22:49:13 +0300
Subject: [PATCH] mxc: turn off HWCAP_NEON for older versions of imx51 silicon

Versions of silicon older than TO3 have broken NEON implementation. Turn off
NEON in such cases.

Signed-off-by: Amit Kucheria <amit.kuche...@linaro.org>
---
 arch/arm/mach-mx5/cpu.c |   23 +++++++++++++++++++++++
 1 files changed, 23 insertions(+), 0 deletions(-)

diff --git a/arch/arm/mach-mx5/cpu.c b/arch/arm/mach-mx5/cpu.c
index 2d37785..ba5f6be 100644
--- a/arch/arm/mach-mx5/cpu.c
+++ b/arch/arm/mach-mx5/cpu.c
@@ -70,6 +70,28 @@ int mx51_revision(void)
 }
 EXPORT_SYMBOL(mx51_revision);
 
+#ifdef CONFIG_NEON
+
+/* All versions of the silicon before Rev. 3 have broken NEON implementations.
+ * Dependent on link order - so the assumption is that vfp_init is called 
before us
+ */
+static int __init 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");
+               }
+       }
+       return 0;
+}
+#else
+void mx51_neon_fixup(void)
+{
+       return 0;
+}
+#endif
+
 static int __init post_cpu_init(void)
 {
        unsigned int reg;
@@ -98,3 +120,4 @@ static int __init post_cpu_init(void)
 }
 
 postcore_initcall(post_cpu_init);
+late_initcall(mx51_neon_fixup);
-- 
1.7.0.4


_______________________________________________
linaro-dev mailing list
linaro-dev@lists.linaro.org
http://lists.linaro.org/mailman/listinfo/linaro-dev

Reply via email to