On 10 Sep 01, Nicolas Pitre wrote:
On Wed, 1 Sep 2010, Amit Kucheria wrote:
[snip]
Unfortunately, it seems after talking to Nicolas that mdesc->fixup() is called too early.
Nicolas suggested linking the i.MX5 code _after_ the VFP module :)
Something like this patch:
----- >8 From: Nicolas Pitre nicolas.pitre@linaro.org Date: Wed, 1 Sep 2010 09:37:05 -0400 Subject: [PATCH] ARM: link board specific files after core files
This allows for board specific issues to override decisions made in generic code that might not be suitable due to some errata or the like.
Signed-off-by: Nicolas Pitre nicolas.pitre@linaro.org
diff --git a/arch/arm/Makefile b/arch/arm/Makefile index df4ab3c..3e8e3d7 100644 --- a/arch/arm/Makefile +++ b/arch/arm/Makefile @@ -243,13 +243,14 @@ ifeq ($(FASTFPE),$(wildcard $(FASTFPE))) FASTFPE_OBJ :=$(FASTFPE)/ endif -# If we have a machine-specific directory, then include it in the build. -core-y += arch/arm/kernel/ arch/arm/mm/ arch/arm/common/ -core-y += $(machdirs) $(platdirs) core-$(CONFIG_FPE_NWFPE) += arch/arm/nwfpe/ core-$(CONFIG_FPE_FASTFPE) += $(FASTFPE_OBJ) core-$(CONFIG_VFP) += arch/arm/vfp/ +# If we have a machine-specific directory, then include it in the build. +core-y += arch/arm/kernel/ arch/arm/mm/ arch/arm/common/ +core-y += $(machdirs) $(platdirs)
drivers-$(CONFIG_OPROFILE) += arch/arm/oprofile/ libs-y := arch/arm/lib/ $(libs-y) 8< -----
Then, just add your fixup in a separate patch. Beware: the above patch is untested.
My fixup patch is attached. Compile-tested along with Nico's patch. But I have no TO1/TO2 boards to test. Loic do know anybody that can test with Nico's patch and this fixup?
From caad712990cccb705b44414830d41142277538b8 Mon Sep 17 00:00:00 2001
Message-Id: caad712990cccb705b44414830d41142277538b8.1283370628.git.amit.kucheria@linaro.org From: Amit Kucheria amit.kucheria@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.kucheria@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;