[PATCH v4 04/10] arm/tegra: prepare early init for multiple tegra variants
From: Stephen Warren <hidden>
Date: 2011-11-11 21:54:43
Also in:
linux-tegra, lkml
From: Stephen Warren <hidden>
Date: 2011-11-11 21:54:43
Also in:
linux-tegra, lkml
Jamie Iles wrote at Friday, November 11, 2011 4:45 AM:
On Fri, Nov 11, 2011 at 01:22:10PM +0200, Peter De Schrijver wrote:quoted
This patch splits the early init code in a common and a tegra20 specific part. L2 cache initialization is generalized and discovers the cache associativity at runtime. Also use arm_pm_restart instead of arm_arch_reset and reset the the system using the PMC reset feature rather then the CAR system reset.
...
quoted
diff --git a/arch/arm/mach-tegra/board-dt.c b/arch/arm/mach-tegra/board-dt.c
...
quoted
+static struct { + const char *machine; + void (*init)(void); +} early_init[] __initdata = { +#ifdef CONFIG_ARCH_TEGRA_2x_SOC + { "nvidia,tegra20", tegra20_init_early }, +#endif +}; + +static void __init tegra_init_early(void) +{ + + int i; + + for (i = 0; i < ARRAY_SIZE(early_init); i++) + if (of_machine_is_compatible(early_init[i].machine)) + return early_init[i].init(); + + pr_warn("Unknown platform detected\n"); +}Wouldn't it be better just to have separate machine descs for tegra20 and tegra30 and have a different .init_early for each? I'm not sure that this extra indirection buys us much, especially if we had to repeat it for any of the other entries.
Jamie, thanks for pointing that. I think that does sound a lot simpler. -- nvpublic