X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=common%2Fboard_r.c;h=c55e33eec275fdc80911332716619ae8c4948019;hb=27028f186d17a25507eb7d5c9b852d8555432679;hp=dba2102b187de63e64a42d092cba5110991ce0b8;hpb=d09ec7f81650425140776995fc9752189ddf7956;p=oweals%2Fu-boot.git diff --git a/common/board_r.c b/common/board_r.c index dba2102b18..c55e33eec2 100644 --- a/common/board_r.c +++ b/common/board_r.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: GPL-2.0+ /* * Copyright (c) 2011 The Chromium OS Authors. * (C) Copyright 2002-2006 @@ -6,35 +7,24 @@ * (C) Copyright 2002 * Sysgo Real-Time Solutions, GmbH * Marius Groeger - * - * SPDX-License-Identifier: GPL-2.0+ */ #include +#include /* TODO: can we just include all these headers whether needed or not? */ #if defined(CONFIG_CMD_BEDBUG) #include #endif #include #include -#ifdef CONFIG_HAS_DATAFLASH -#include -#endif #include #include #include -#if defined(CONFIG_CMD_IDE) #include -#endif #include -#include -#ifdef CONFIG_PS2KBD -#include -#endif #if defined(CONFIG_CMD_KGDB) #include #endif -#include #include #include #ifdef CONFIG_BITBANGMII @@ -42,6 +32,7 @@ #endif #include #include +#include #include #include #include @@ -57,9 +48,6 @@ #include #include #include -#ifdef CONFIG_AVR32 -#include -#endif #include DECLARE_GLOBAL_DATA_PTR; @@ -133,7 +121,7 @@ static int initr_reloc_global_data(void) { #ifdef __ARM__ monitor_flash_len = _end - __image_copy_start; -#elif defined(CONFIG_NDS32) +#elif defined(CONFIG_NDS32) || defined(CONFIG_RISCV) monitor_flash_len = (ulong)&_end - (ulong)&_start; #elif !defined(CONFIG_SANDBOX) && !defined(CONFIG_NIOS2) monitor_flash_len = (ulong)&__init_end - gd->relocaddr; @@ -152,21 +140,18 @@ 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 /* - * The fdt_blob needs to be moved to new relocation address - * incase of FDT blob is embedded with in image - */ + * The fdt_blob needs to be moved to new relocation address + * incase of FDT blob is embedded with in image + */ gd->fdt_blob += gd->reloc_off; #endif #ifdef CONFIG_EFI_LOADER @@ -206,19 +191,6 @@ static int initr_addr_map(void) } #endif -#ifdef CONFIG_LOGBUFFER -unsigned long logbuffer_base(void) -{ - return gd->ram_top - LOGBUFF_LEN; -} - -static int initr_logbuffer(void) -{ - logbuff_init_ptrs(); - return 0; -} -#endif - #ifdef CONFIG_POST static int initr_post_backlog(void) { @@ -227,13 +199,6 @@ static int initr_post_backlog(void) } #endif -#ifdef CONFIG_SYS_DELAYED_ICACHE -static int initr_icache_enable(void) -{ - return 0; -} -#endif - #if defined(CONFIG_SYS_INIT_RAM_LOCK) && defined(CONFIG_E500) static int initr_unlock_ram_in_cache(void) { @@ -266,7 +231,7 @@ static int initr_malloc(void) { ulong malloc_start; -#ifdef CONFIG_SYS_MALLOC_F_LEN +#if CONFIG_VAL(SYS_MALLOC_F_LEN) debug("Pre-reloc malloc() used %#lx bytes (%ld KB)\n", gd->malloc_ptr, gd->malloc_ptr / 1024); #endif @@ -294,6 +259,21 @@ static int initr_noncached(void) } #endif +#ifdef CONFIG_OF_LIVE +static int initr_of_live(void) +{ + int ret; + + bootstage_start(BOOTSTAGE_ID_ACCUM_OF_LIVE, "of_live"); + ret = of_live_build(gd->fdt_blob, (struct device_node **)&gd->of_root); + bootstage_accum(BOOTSTAGE_ID_ACCUM_OF_LIVE); + if (ret) + return ret; + + return 0; +} +#endif + #ifdef CONFIG_DM static int initr_dm(void) { @@ -305,7 +285,9 @@ static int initr_dm(void) #ifdef CONFIG_TIMER gd->timer = NULL; #endif + bootstage_start(BOOTSTATE_ID_ACCUM_DM_R, "dm_r"); ret = dm_init_and_scan(false); + bootstage_accum(BOOTSTATE_ID_ACCUM_DM_R); if (ret) return ret; #ifdef CONFIG_TIMER_EARLY @@ -320,7 +302,6 @@ static int initr_dm(void) static int initr_bootstage(void) { - /* We cannot do this before initr_dm() */ bootstage_mark_name(BOOTSTAGE_ID_START_UBOOT_R, "board_init_r"); return 0; @@ -362,14 +343,16 @@ static int initr_flash(void) print_size(flash_size, ""); #ifdef CONFIG_SYS_FLASH_CHECKSUM /* - * Compute and print flash CRC if flashchecksum is set to 'y' - * - * NOTE: Maybe we should add some WATCHDOG_RESET()? XXX - */ - if (getenv_yesno("flashchecksum") == 1) { + * Compute and print flash CRC if flashchecksum is set to 'y' + * + * NOTE: Maybe we should add some WATCHDOG_RESET()? XXX + */ + if (env_get_yesno("flashchecksum") == 1) { + const uchar *flash_base = (const uchar *)CONFIG_SYS_FLASH_BASE; + printf(" CRC: %08X", crc32(0, - (const unsigned char *) CONFIG_SYS_FLASH_BASE, - flash_size)); + flash_base, + flash_size)); } #endif /* CONFIG_SYS_FLASH_CHECKSUM */ putc('\n'); @@ -386,7 +369,6 @@ static int initr_flash(void) update_flash_size(flash_size); #endif - #if defined(CONFIG_OXC) || defined(CONFIG_RMU) /* flash mapped at end of memory map */ bd->bi_flashoffset = CONFIG_SYS_TEXT_BASE + flash_size; @@ -400,8 +382,8 @@ static int initr_flash(void) #if defined(CONFIG_PPC) && !defined(CONFIG_DM_SPI) static int initr_spi(void) { - /* PPC does this here */ -#ifdef CONFIG_SPI + /* MPC8xx does this here */ +#ifdef CONFIG_MPC8XX_SPI #if !defined(CONFIG_ENV_IS_IN_EEPROM) spi_init_f(); #endif @@ -432,7 +414,7 @@ static int initr_onenand(void) } #endif -#ifdef CONFIG_GENERIC_MMC +#ifdef CONFIG_MMC static int initr_mmc(void) { puts("MMC: "); @@ -441,15 +423,6 @@ static int initr_mmc(void) } #endif -#ifdef CONFIG_HAS_DATAFLASH -static int initr_dataflash(void) -{ - AT91F_DataflashInit(); - dataflash_print_info(); - return 0; -} -#endif - /* * Tell if it's OK to load the environment early in boot. * @@ -478,13 +451,13 @@ static int initr_env(void) if (should_load_env()) env_relocate(); else - set_default_env(NULL); + set_default_env(NULL, 0); #ifdef CONFIG_OF_CONTROL - setenv_addr("fdtcontroladdr", gd->fdt_blob); + env_set_addr("fdtcontroladdr", gd->fdt_blob); #endif /* Initialize from environment */ - load_addr = getenv_ulong("loadaddr", 16, load_addr); + load_addr = env_get_ulong("loadaddr", 16, load_addr); return 0; } @@ -517,7 +490,7 @@ static int initr_api(void) #endif /* enable exceptions */ -#if defined(CONFIG_ARM) || defined(CONFIG_AVR32) +#ifdef CONFIG_ARM static int initr_enable_interrupts(void) { enable_interrupts(); @@ -531,21 +504,21 @@ static int initr_ethaddr(void) bd_t *bd = gd->bd; /* kept around for legacy kernels only ... ignore the next section */ - eth_getenv_enetaddr("ethaddr", bd->bi_enetaddr); + eth_env_get_enetaddr("ethaddr", bd->bi_enetaddr); #ifdef CONFIG_HAS_ETH1 - eth_getenv_enetaddr("eth1addr", bd->bi_enet1addr); + eth_env_get_enetaddr("eth1addr", bd->bi_enet1addr); #endif #ifdef CONFIG_HAS_ETH2 - eth_getenv_enetaddr("eth2addr", bd->bi_enet2addr); + eth_env_get_enetaddr("eth2addr", bd->bi_enet2addr); #endif #ifdef CONFIG_HAS_ETH3 - eth_getenv_enetaddr("eth3addr", bd->bi_enet3addr); + eth_env_get_enetaddr("eth3addr", bd->bi_enet3addr); #endif #ifdef CONFIG_HAS_ETH4 - eth_getenv_enetaddr("eth4addr", bd->bi_enet4addr); + eth_env_get_enetaddr("eth4addr", bd->bi_enet4addr); #endif #ifdef CONFIG_HAS_ETH5 - eth_getenv_enetaddr("eth5addr", bd->bi_enet5addr); + eth_env_get_enetaddr("eth5addr", bd->bi_enet5addr); #endif return 0; } @@ -577,6 +550,7 @@ static int initr_scsi(void) { puts("SCSI: "); scsi_init(); + puts("\n"); return 0; } @@ -611,7 +585,7 @@ static int initr_post(void) } #endif -#if defined(CONFIG_CMD_PCMCIA) && !defined(CONFIG_CMD_IDE) +#if defined(CONFIG_CMD_PCMCIA) && !defined(CONFIG_IDE) static int initr_pcmcia(void) { puts("PCMCIA:"); @@ -620,14 +594,10 @@ static int initr_pcmcia(void) } #endif -#if defined(CONFIG_CMD_IDE) +#if defined(CONFIG_IDE) && !defined(CONFIG_BLK) static int initr_ide(void) { -#ifdef CONFIG_IDE_8xx_PCCARD - puts("PCMCIA:"); -#else puts("IDE: "); -#endif #if defined(CONFIG_START_IDE) if (board_start_ide()) ide_init(); @@ -638,7 +608,7 @@ static int initr_ide(void) } #endif -#if defined(CONFIG_PRAM) || defined(CONFIG_LOGBUFFER) +#if defined(CONFIG_PRAM) /* * Export available size of memory for Linux, taking into account the * protected RAM at top of memory @@ -648,15 +618,9 @@ int initr_mem(void) ulong pram = 0; char memsz[32]; -# ifdef CONFIG_PRAM - pram = getenv_ulong("pram", 10, CONFIG_PRAM); -# endif -# if defined(CONFIG_LOGBUFFER) && !defined(CONFIG_ALT_LB_ADDR) - /* Also take the logbuffer into account (pram is in kB) */ - pram += (LOGBUFF_LEN + LOGBUFF_OVERHEAD) / 1024; -# endif - sprintf(memsz, "%ldk", (long int) ((gd->ram_size / 1024) - pram)); - setenv("mem", memsz); + pram = env_get_ulong("pram", 10, CONFIG_PRAM); + sprintf(memsz, "%ldk", (long int)((gd->ram_size / 1024) - pram)); + env_set("mem", memsz); return 0; } @@ -671,15 +635,6 @@ static int initr_bedbug(void) } #endif -#ifdef CONFIG_PS2KBD -static int initr_kbd(void) -{ - puts("PS/2: "); - kbd_init(); - return 0; -} -#endif - static int run_main_loop(void) { #ifdef CONFIG_SANDBOX @@ -693,7 +648,7 @@ static int run_main_loop(void) /* * Over time we hope to remove these functions with code fragments and - * stub funtcions, and instead call the relevant function directly. + * 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 * the driver is later used. @@ -708,7 +663,7 @@ static init_fnc_t init_sequence_r[] = { initr_caches, /* Note: For Freescale LS2 SoCs, new MMU table is created in DDR. * A temporary mapping of IFC high region is since removed, - * so environmental variables in NOR flash is not availble + * so environmental variables in NOR flash is not available * until board_init() is called below to remap IFC to high * region. */ @@ -719,16 +674,21 @@ static init_fnc_t init_sequence_r[] = { #endif initr_barrier, initr_malloc, + log_init, + initr_bootstage, /* Needs malloc() but has its own timer */ initr_console_record, #ifdef CONFIG_SYS_NONCACHED_MEMORY initr_noncached, #endif bootstage_relocate, +#ifdef CONFIG_OF_LIVE + initr_of_live, +#endif #ifdef CONFIG_DM initr_dm, #endif - initr_bootstage, -#if defined(CONFIG_ARM) || defined(CONFIG_NDS32) +#if defined(CONFIG_ARM) || defined(CONFIG_NDS32) || defined(CONFIG_RISCV) || \ + defined(CONFIG_SANDBOX) board_init, /* Setup chipselects */ #endif /* @@ -760,20 +720,14 @@ static init_fnc_t init_sequence_r[] = { board_early_init_r, #endif INIT_FUNC_WATCHDOG_RESET -#ifdef CONFIG_LOGBUFFER - initr_logbuffer, -#endif #ifdef CONFIG_POST initr_post_backlog, #endif INIT_FUNC_WATCHDOG_RESET -#ifdef CONFIG_SYS_DELAYED_ICACHE - initr_icache_enable, -#endif #if defined(CONFIG_PCI) && defined(CONFIG_SYS_EARLY_PCI_INIT) /* * Do early PCI configuration _before_ the flash gets initialised, - * because PCU ressources are crucial for flash access on some boards. + * because PCU resources are crucial for flash access on some boards. */ initr_pci, #endif @@ -798,11 +752,8 @@ static init_fnc_t init_sequence_r[] = { #ifdef CONFIG_CMD_ONENAND initr_onenand, #endif -#ifdef CONFIG_GENERIC_MMC +#ifdef CONFIG_MMC initr_mmc, -#endif -#ifdef CONFIG_HAS_DATAFLASH - initr_dataflash, #endif initr_env, #ifdef CONFIG_SYS_BOOTPARAMS_LEN @@ -827,6 +778,7 @@ static init_fnc_t init_sequence_r[] = { #endif console_init_r, /* fully init console as a device */ #ifdef CONFIG_DISPLAY_BOARDINFO_LATE + console_announce_r, show_board_info, #endif #ifdef CONFIG_ARCH_MISC_INIT @@ -840,10 +792,10 @@ static init_fnc_t init_sequence_r[] = { initr_kgdb, #endif interrupt_init, -#if defined(CONFIG_ARM) || defined(CONFIG_AVR32) +#ifdef CONFIG_ARM initr_enable_interrupts, #endif -#if defined(CONFIG_MICROBLAZE) || defined(CONFIG_AVR32) || defined(CONFIG_M68K) +#if defined(CONFIG_MICROBLAZE) || defined(CONFIG_M68K) timer_init, /* initialize timer */ #endif #if defined(CONFIG_LED_STATUS) @@ -870,10 +822,10 @@ static init_fnc_t init_sequence_r[] = { #ifdef CONFIG_POST initr_post, #endif -#if defined(CONFIG_CMD_PCMCIA) && !defined(CONFIG_CMD_IDE) +#if defined(CONFIG_CMD_PCMCIA) && !defined(CONFIG_IDE) initr_pcmcia, #endif -#if defined(CONFIG_CMD_IDE) +#if defined(CONFIG_IDE) && !defined(CONFIG_BLK) initr_ide, #endif #ifdef CONFIG_LAST_STAGE_INIT @@ -889,11 +841,8 @@ static init_fnc_t init_sequence_r[] = { INIT_FUNC_WATCHDOG_RESET initr_bedbug, #endif -#if defined(CONFIG_PRAM) || defined(CONFIG_LOGBUFFER) +#if defined(CONFIG_PRAM) initr_mem, -#endif -#ifdef CONFIG_PS2KBD - initr_kbd, #endif run_main_loop, }; @@ -914,13 +863,10 @@ void board_init_r(gd_t *new_gd, ulong dest_addr) int i; #endif -#ifdef CONFIG_AVR32 - mmu_init_r(dest_addr); -#endif - #if !defined(CONFIG_X86) && !defined(CONFIG_ARM) && !defined(CONFIG_ARM64) gd = new_gd; #endif + gd->flags &= ~GD_FLG_LOG_READY; #ifdef CONFIG_NEEDS_MANUAL_RELOC for (i = 0; i < ARRAY_SIZE(init_sequence_r); i++)