mirror of
https://github.com/brain-hackers/u-boot-brain
synced 2024-08-22 09:58:52 +09:00
![Heiko Stübner](/assets/img/avatar_default.png)
In the beginning, we did SPL -> TPL -> U-Boot, but after clarification of the real ordering swapped SPL and TPL. It seems some renames were forgotten and may confuse future readers, so also swap these to reflect the actual ordering. Signed-off-by: Heiko Stuebner <heiko@sntech.de> Acked-by: Simon Glass <sjg@chromium.org>
87 lines
1.9 KiB
C
87 lines
1.9 KiB
C
/*
|
|
* (C) Copyright 2015 Google, Inc
|
|
*
|
|
* SPDX-License-Identifier: GPL-2.0+
|
|
*/
|
|
|
|
#include <common.h>
|
|
#include <debug_uart.h>
|
|
#include <spl.h>
|
|
#include <asm/io.h>
|
|
#include <asm/arch/bootrom.h>
|
|
#include <asm/arch/pmu_rk3188.h>
|
|
|
|
DECLARE_GLOBAL_DATA_PTR;
|
|
|
|
/* track how often we were entered */
|
|
static int rk3188_num_entries __attribute__ ((section(".data")));
|
|
|
|
#define PMU_BASE 0x20004000
|
|
#define SPL_ENTRY 0x10080C00
|
|
|
|
static void jump_to_spl(void)
|
|
{
|
|
typedef void __noreturn (*image_entry_noargs_t)(void);
|
|
|
|
struct rk3188_pmu * const pmu = (void *)PMU_BASE;
|
|
image_entry_noargs_t tpl_entry =
|
|
(image_entry_noargs_t)(unsigned long)SPL_ENTRY;
|
|
|
|
/* Store the SAVE_SP_ADDR in a location shared with SPL. */
|
|
writel(SAVE_SP_ADDR, &pmu->sys_reg[2]);
|
|
tpl_entry();
|
|
}
|
|
|
|
void board_init_f(ulong dummy)
|
|
{
|
|
/* Example code showing how to enable the debug UART on RK3188 */
|
|
#ifdef EARLY_UART
|
|
#include <asm/arch/grf_rk3188.h>
|
|
/* Enable early UART on the RK3188 */
|
|
#define GRF_BASE 0x20008000
|
|
struct rk3188_grf * const grf = (void *)GRF_BASE;
|
|
|
|
rk_clrsetreg(&grf->gpio1b_iomux,
|
|
GPIO1B1_MASK << GPIO1B1_SHIFT |
|
|
GPIO1B0_MASK << GPIO1B0_SHIFT,
|
|
GPIO1B1_UART2_SOUT << GPIO1B1_SHIFT |
|
|
GPIO1B0_UART2_SIN << GPIO1B0_SHIFT);
|
|
/*
|
|
* Debug UART can be used from here if required:
|
|
*
|
|
* debug_uart_init();
|
|
* printch('a');
|
|
* printhex8(0x1234);
|
|
* printascii("string");
|
|
*/
|
|
debug_uart_init();
|
|
|
|
printch('t');
|
|
printch('p');
|
|
printch('l');
|
|
printch('-');
|
|
printch(rk3188_num_entries + 1 + '0');
|
|
printch('\n');
|
|
#endif
|
|
|
|
rk3188_num_entries++;
|
|
|
|
if (rk3188_num_entries == 1) {
|
|
/*
|
|
* The original loader did some very basic integrity
|
|
* checking at this point, but the remaining few bytes
|
|
* could be used for any improvement making sense
|
|
* really early on.
|
|
*/
|
|
|
|
back_to_bootrom();
|
|
} else {
|
|
/*
|
|
* TPL part of the loader should now wait for us
|
|
* at offset 0xC00 in the sram. Should never return
|
|
* from there.
|
|
*/
|
|
jump_to_spl();
|
|
}
|
|
}
|