X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=common%2Fboard_r.c;h=abc31b17b813f33d029dda37e41b713144fd4886;hb=9a06eb800c1bdc68aa81fcad6d4f404e12dfff33;hp=9402c0ef2194f26a8cd37ca1dc43fd9191e09986;hpb=b71d9e8b3805305ea4116733f515061710ad7081;p=oweals%2Fu-boot.git diff --git a/common/board_r.c b/common/board_r.c index 9402c0ef21..abc31b17b8 100644 --- a/common/board_r.c +++ b/common/board_r.c @@ -36,7 +36,6 @@ #include #include #include -#include #include #include #include @@ -49,6 +48,10 @@ #include #include #include +#include +#if defined(CONFIG_DM_GPIO_HOG) +#include +#endif DECLARE_GLOBAL_DATA_PTR; @@ -140,15 +143,12 @@ static int initr_reloc_global_data(void) */ fixup_cpu(); #endif -#ifdef CONFIG_SYS_EXTRA_ENV_RELOC +#if !defined(CONFIG_ENV_ADDR) || defined(ENV_IS_EMBEDDED) /* - * Some systems need to relocate the env_addr pointer early because the - * location it points to will get invalidated before env_relocate is - * called. One example is on systems that might use a L2 or L3 cache - * in SRAM mode and initialize that cache from SRAM mode back to being - * a cache in cpu_init_r. + * Relocate the early env_addr pointer unless we know it is not inside + * the binary. Some systems need this and for the rest, it doesn't hurt. */ - gd->env_addr += gd->relocaddr - CONFIG_SYS_MONITOR_BASE; + gd->env_addr += gd->reloc_off; #endif #ifdef CONFIG_OF_EMBED /* @@ -158,6 +158,13 @@ static int initr_reloc_global_data(void) gd->fdt_blob += gd->reloc_off; #endif #ifdef CONFIG_EFI_LOADER + /* + * On the ARM architecture gd is mapped to a fixed register (r9 or x18). + * As this register may be overwritten by an EFI payload we save it here + * and restore it on every callback entered. + */ + efi_save_gd(); + efi_runtime_relocate(gd->relocaddr, NULL); #endif @@ -382,20 +389,6 @@ static int initr_flash(void) } #endif -#if defined(CONFIG_PPC) && !defined(CONFIG_DM_SPI) -static int initr_spi(void) -{ - /* MPC8xx does this here */ -#ifdef CONFIG_MPC8XX_SPI -#if !defined(CONFIG_ENV_IS_IN_EEPROM) - spi_init_f(); -#endif - spi_init_r(); -#endif - return 0; -} -#endif - #ifdef CONFIG_CMD_NAND /* go init the NAND */ static int initr_nand(void) @@ -456,7 +449,8 @@ static int initr_env(void) else set_default_env(NULL, 0); #ifdef CONFIG_OF_CONTROL - env_set_addr("fdtcontroladdr", gd->fdt_blob); + env_set_hex("fdtcontroladdr", + (unsigned long)map_to_sysmem(gd->fdt_blob)); #endif /* Initialize from environment */ @@ -650,10 +644,7 @@ static int run_main_loop(void) } /* - * Over time we hope to remove these functions with code fragments and - * stub functions, and instead call the relevant function directly. - * - * We also hope to remove most of the driver-related init and do it if/when + * We hope to remove most of the driver-related init and do it if/when * the driver is later used. * * TODO: perhaps reset the watchdog in the initcall function after each call? @@ -709,6 +700,9 @@ static init_fnc_t init_sequence_r[] = { stdio_init_tables, initr_serial, initr_announce, +#if defined(CONFIG_WDT) + initr_watchdog, +#endif INIT_FUNC_WATCHDOG_RESET #ifdef CONFIG_NEEDS_MANUAL_RELOC initr_manual_reloc_cmdtable, @@ -746,9 +740,6 @@ static init_fnc_t init_sequence_r[] = { /* initialize higher level parts of CPU like time base and timers */ cpu_init_r, #endif -#ifdef CONFIG_PPC - initr_spi, -#endif #ifdef CONFIG_CMD_NAND initr_nand, #endif @@ -808,6 +799,9 @@ static init_fnc_t init_sequence_r[] = { #ifdef CONFIG_CMD_NET initr_ethaddr, #endif +#if defined(CONFIG_DM_GPIO_HOG) + gpio_hog_probe_all, +#endif #ifdef CONFIG_BOARD_LATE_INIT board_late_init, #endif