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
_______________________________________________
linaro-dev mailing list
[email protected]
http://lists.linaro.org/mailman/listinfo/linaro-dev