// SPDX-License-Identifier: GPL-2.0+ /* * (C) Copyright 2019 Rockchip Electronics Co., Ltd */ #include #include #include #include #include #include #include #define TIMER_CHN10_BASE 0xff8680a0 #define TIMER_END_COUNT_L 0x00 #define TIMER_END_COUNT_H 0x04 #define TIMER_INIT_COUNT_L 0x10 #define TIMER_INIT_COUNT_H 0x14 #define TIMER_CONTROL_REG 0x1c #define TIMER_EN 0x1 #define TIMER_FMODE (0 << 1) #define TIMER_RMODE (1 << 1) void secure_timer_init(void) { writel(0xffffffff, TIMER_CHN10_BASE + TIMER_END_COUNT_L); writel(0xffffffff, TIMER_CHN10_BASE + TIMER_END_COUNT_H); writel(0, TIMER_CHN10_BASE + TIMER_INIT_COUNT_L); writel(0, TIMER_CHN10_BASE + TIMER_INIT_COUNT_H); writel(TIMER_EN | TIMER_FMODE, TIMER_CHN10_BASE + TIMER_CONTROL_REG); } void board_init_f(ulong dummy) { struct udevice *dev; int ret; #ifdef CONFIG_DEBUG_UART debug_uart_init(); /* * Debug UART can be used from here if required: * * debug_uart_init(); * printch('a'); * printhex8(0x1234); * printascii("string"); */ printascii("U-Boot TPL board init\n"); #endif ret = spl_early_init(); if (ret) { debug("spl_early_init() failed: %d\n", ret); hang(); } secure_timer_init(); ret = uclass_get_device(UCLASS_RAM, 0, &dev); if (ret) { pr_err("DRAM init failed: %d\n", ret); return; } } void board_return_to_bootrom(void) { back_to_bootrom(BROM_BOOT_NEXTSTAGE); } u32 spl_boot_device(void) { return BOOT_DEVICE_BOOTROM; } #ifdef CONFIG_SPL_LOAD_FIT int board_fit_config_name_match(const char *name) { /* Just empty function now - can't decide what to choose */ debug("%s: %s\n", __func__, name); return 0; } #endif