// SPDX-License-Identifier: GPL-2.0+ /* * Copyright (C) 2022-2023 StarFive Technology Co., Ltd. * Author: yanhong * */ #include #include #include #include #include #include #include #include #define MODE_SELECT_REG 0x1702002c int spl_board_init_f(void) { int ret; ret = spl_soc_init(); if (ret) { debug("JH7110 SPL init failed: %d\n", ret); return ret; } return 0; } u32 spl_boot_device(void) { int boot_mode = 0; boot_mode = readl((const volatile void *)MODE_SELECT_REG) & 0xF; switch (boot_mode) { case 0: return BOOT_DEVICE_SPI; case 1: return BOOT_DEVICE_MMC2; case 2: return BOOT_DEVICE_MMC1; case 4: return BOOT_DEVICE_UART; default: debug("Unsupported boot device 0x%x.\n", boot_mode); return BOOT_DEVICE_NONE; } } struct image_header *spl_get_load_buffer(ssize_t offset, size_t size) { return (struct image_header *)(STARFIVE_SPL_BOOT_LOAD_ADDR); } void board_init_f(ulong dummy) { int ret; ret = spl_early_init(); if (ret) panic("spl_early_init() failed: %d\n", ret); arch_cpu_init_dm(); preloader_console_init(); ret = spl_board_init_f(); if (ret) { debug("spl_board_init_f init failed: %d\n", ret); return; } } #ifdef CONFIG_SPL_LOAD_FIT int board_fit_config_name_match(const char *name) { /* boot using first FIT config */ return 0; } #endif