// SPDX-License-Identifier: GPL-2.0+ /* * (C) Copyright 2015 Google, Inc */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include DECLARE_GLOBAL_DATA_PTR; void board_return_to_bootrom(void) { back_to_bootrom(BROM_BOOT_NEXTSTAGE); } u32 spl_boot_device(void) { #if !CONFIG_IS_ENABLED(OF_PLATDATA) const void *blob = gd->fdt_blob; struct udevice *dev; const char *bootdev; int node; int ret; bootdev = fdtdec_get_config_string(blob, "u-boot,boot0"); debug("Boot device %s\n", bootdev); if (!bootdev) goto fallback; node = fdt_path_offset(blob, bootdev); if (node < 0) { debug("node=%d\n", node); goto fallback; } ret = device_get_global_by_ofnode(offset_to_ofnode(node), &dev); if (ret) { debug("device at node %s/%d not found: %d\n", bootdev, node, ret); goto fallback; } debug("Found device %s\n", dev->name); switch (device_get_uclass_id(dev)) { case UCLASS_SPI_FLASH: return BOOT_DEVICE_SPI; case UCLASS_MMC: return BOOT_DEVICE_MMC1; default: debug("Booting from device uclass '%s' not supported\n", dev_get_uclass_name(dev)); } fallback: #endif return BOOT_DEVICE_MMC1; } __weak int arch_cpu_init(void) { return 0; } void board_init_f(ulong dummy) { struct udevice *dev; int ret; #ifdef CONFIG_DEBUG_UART /* * Debug UART can be used from here if required: * * debug_uart_init(); * printch('a'); * printhex8(0x1234); * printascii("string"); */ debug_uart_init(); printascii("U-Boot SPL board init"); #endif arch_cpu_init(); ret = spl_early_init(); if (ret) { debug("spl_early_init() failed: %d\n", ret); hang(); } ret = rockchip_get_clk(&dev); if (ret) { debug("CLK init failed: %d\n", ret); return; } ret = uclass_get_device(UCLASS_RAM, 0, &dev); if (ret) { debug("DRAM init failed: %d\n", ret); return; } preloader_console_init(); }