
Hi Simon,
On Thu, Feb 19, 2015 at 5:10 AM, Simon Glass sjg@chromium.org wrote:
At present we do more in this function than we should. Create a new x86_post_cpu_init() which can be called from the board file when needed (e.g. in board_early_init_f(). This allows us to use driver model for our x86_post_cpu_init() function.
It is likely that some future refactoring will improve this and reduce the number of steps, using driver model's probing features.
Note: this needs more discussion - e.g. I believe it breaks other x86 boards. We may want to plumb this in differently (e.g. promote x86_post_cpu_init() to the board_init_f() boot sequence).
Or maybe change the order in board_f.c so that arch_cpu_init() comes after init_dm()?
Signed-off-by: Simon Glass sjg@chromium.org
arch/x86/cpu/ivybridge/cpu.c | 8 ++++++++ arch/x86/include/asm/u-boot-x86.h | 1 + board/google/chromebook_link/link.c | 6 ++++++ 3 files changed, 15 insertions(+)
diff --git a/arch/x86/cpu/ivybridge/cpu.c b/arch/x86/cpu/ivybridge/cpu.c index 5fd3753..2796314 100644 --- a/arch/x86/cpu/ivybridge/cpu.c +++ b/arch/x86/cpu/ivybridge/cpu.c @@ -116,6 +116,14 @@ static void set_spi_speed(void)
int arch_cpu_init(void) {
post_code(POST_CPU_INIT);
timer_set_base(rdtsc());
return x86_cpu_init_f();
+}
+int x86_post_cpu_init(void) +{ const void *blob = gd->fdt_blob; struct pci_controller *hose; int node; diff --git a/arch/x86/include/asm/u-boot-x86.h b/arch/x86/include/asm/u-boot-x86.h index c743efd..d5a9535 100644 --- a/arch/x86/include/asm/u-boot-x86.h +++ b/arch/x86/include/asm/u-boot-x86.h @@ -38,6 +38,7 @@ void reset_cpu(ulong addr); ulong board_get_usable_ram_top(ulong total_size); void dram_init_banksize(void); int default_print_cpuinfo(void); +int x86_post_cpu_init(void);
/* Set up a UART which can be used with printch(), printhex8(), etc. */ int setup_early_uart(void); diff --git a/board/google/chromebook_link/link.c b/board/google/chromebook_link/link.c index 9978e92..9ebbb9f 100644 --- a/board/google/chromebook_link/link.c +++ b/board/google/chromebook_link/link.c @@ -120,6 +120,12 @@ static const struct pch_gpio_map link_gpio_map = {
int board_early_init_f(void) {
int ret;
ret = x86_post_cpu_init();
if (ret)
return ret;
ich_gpio_set_gpio_map(&link_gpio_map); return 0;
--
Regards, Bin