On Thu, 2 Sep 2010, Amit Kucheria wrote:
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.
You could make this even simpler still.
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
Instead of having this empty mx51_neon_fixup() in the #else part...
@@ -98,3 +120,4 @@ static int __init post_cpu_init(void) } postcore_initcall(post_cpu_init); +late_initcall(mx51_neon_fixup);
... why don't you move this late_initcall() _inside_ the #ifdef CONFIG_NEON ?
Nicolas