mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-28 15:41:40 +00:00
rk3288: vyasa: Add TPL support
Since the size of SPL can't be exceeded 0x8000 bytes in RK3288, it is not possible add new SPL features like Falcon mode or etc. So add TPL stage so-that adding new features to SPL is possible. - TPL: DRAM init, clocks - SPL: MMC, falcon, etc Signed-off-by: Jagan Teki <jagan@amarulasolutions.com> Reviewed-by: Philipp Tomsich <philipp.tomsich@theobroma-systems.com> Acked-by: Philipp Tomsich <philipp.tomsich@theobroma-systems.com>
This commit is contained in:
parent
a982d5156d
commit
532cb7f5ad
7 changed files with 130 additions and 1 deletions
|
@ -12,6 +12,7 @@ obj-spl-$(CONFIG_ROCKCHIP_BROM_HELPER) += bootrom.o save_boot_param.o
|
||||||
obj-tpl-$(CONFIG_ROCKCHIP_BROM_HELPER) += bootrom.o save_boot_param.o
|
obj-tpl-$(CONFIG_ROCKCHIP_BROM_HELPER) += bootrom.o save_boot_param.o
|
||||||
|
|
||||||
obj-tpl-$(CONFIG_ROCKCHIP_RK3188) += rk3188-board-tpl.o
|
obj-tpl-$(CONFIG_ROCKCHIP_RK3188) += rk3188-board-tpl.o
|
||||||
|
obj-tpl-$(CONFIG_ROCKCHIP_RK3288) += rk3288-board-tpl.o
|
||||||
obj-tpl-$(CONFIG_ROCKCHIP_RK3368) += rk3368-board-tpl.o
|
obj-tpl-$(CONFIG_ROCKCHIP_RK3368) += rk3368-board-tpl.o
|
||||||
|
|
||||||
obj-spl-$(CONFIG_ROCKCHIP_RK3036) += rk3036-board-spl.o
|
obj-spl-$(CONFIG_ROCKCHIP_RK3036) += rk3036-board-spl.o
|
||||||
|
|
|
@ -204,12 +204,15 @@ void board_init_f(ulong dummy)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if !defined(CONFIG_SUPPORT_TPL)
|
||||||
debug("\nspl:init dram\n");
|
debug("\nspl:init dram\n");
|
||||||
ret = uclass_get_device(UCLASS_RAM, 0, &dev);
|
ret = uclass_get_device(UCLASS_RAM, 0, &dev);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
debug("DRAM init failed: %d\n", ret);
|
debug("DRAM init failed: %d\n", ret);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#if CONFIG_IS_ENABLED(ROCKCHIP_BACK_TO_BROM) && !defined(CONFIG_SPL_BOARD_INIT)
|
#if CONFIG_IS_ENABLED(ROCKCHIP_BACK_TO_BROM) && !defined(CONFIG_SPL_BOARD_INIT)
|
||||||
back_to_bootrom();
|
back_to_bootrom();
|
||||||
#endif
|
#endif
|
||||||
|
|
84
arch/arm/mach-rockchip/rk3288-board-tpl.c
Normal file
84
arch/arm/mach-rockchip/rk3288-board-tpl.c
Normal file
|
@ -0,0 +1,84 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2017 Amarula Solutions
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: GPL-2.0+
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <common.h>
|
||||||
|
#include <debug_uart.h>
|
||||||
|
#include <dm.h>
|
||||||
|
#include <ram.h>
|
||||||
|
#include <spl.h>
|
||||||
|
#include <version.h>
|
||||||
|
#include <asm/io.h>
|
||||||
|
#include <asm/arch/bootrom.h>
|
||||||
|
#include <asm/arch/clock.h>
|
||||||
|
#include <asm/arch/grf_rk3288.h>
|
||||||
|
#include <asm/arch/periph.h>
|
||||||
|
#include <asm/arch/pmu_rk3288.h>
|
||||||
|
#include <asm/arch/sys_proto.h>
|
||||||
|
#include <asm/arch/timer.h>
|
||||||
|
|
||||||
|
DECLARE_GLOBAL_DATA_PTR;
|
||||||
|
|
||||||
|
#define GRF_BASE 0xff770000
|
||||||
|
void board_init_f(ulong dummy)
|
||||||
|
{
|
||||||
|
struct udevice *dev;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
/* Example code showing how to enable the debug UART on RK3288 */
|
||||||
|
/* Enable early UART on the RK3288 */
|
||||||
|
struct rk3288_grf * const grf = (void *)GRF_BASE;
|
||||||
|
|
||||||
|
rk_clrsetreg(&grf->gpio7ch_iomux, GPIO7C7_MASK << GPIO7C7_SHIFT |
|
||||||
|
GPIO7C6_MASK << GPIO7C6_SHIFT,
|
||||||
|
GPIO7C7_UART2DBG_SOUT << GPIO7C7_SHIFT |
|
||||||
|
GPIO7C6_UART2DBG_SIN << GPIO7C6_SHIFT);
|
||||||
|
/*
|
||||||
|
* Debug UART can be used from here if required:
|
||||||
|
*
|
||||||
|
* debug_uart_init();
|
||||||
|
* printch('a');
|
||||||
|
* printhex8(0x1234);
|
||||||
|
* printascii("string");
|
||||||
|
*/
|
||||||
|
debug_uart_init();
|
||||||
|
|
||||||
|
ret = spl_early_init();
|
||||||
|
if (ret) {
|
||||||
|
debug("spl_early_init() failed: %d\n", ret);
|
||||||
|
hang();
|
||||||
|
}
|
||||||
|
|
||||||
|
rockchip_timer_init();
|
||||||
|
configure_l2ctlr();
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void board_return_to_bootrom(void)
|
||||||
|
{
|
||||||
|
back_to_bootrom();
|
||||||
|
}
|
||||||
|
|
||||||
|
u32 spl_boot_device(void)
|
||||||
|
{
|
||||||
|
return BOOT_DEVICE_BOOTROM;
|
||||||
|
}
|
||||||
|
|
||||||
|
void spl_board_init(void)
|
||||||
|
{
|
||||||
|
puts("\nU-Boot TPL " PLAIN_VERSION " (" U_BOOT_DATE " - " \
|
||||||
|
U_BOOT_TIME ")\n");
|
||||||
|
}
|
|
@ -87,6 +87,22 @@ config TARGET_POPMETAL_RK3288
|
||||||
config TARGET_VYASA_RK3288
|
config TARGET_VYASA_RK3288
|
||||||
bool "Vyasa-RK3288"
|
bool "Vyasa-RK3288"
|
||||||
select BOARD_LATE_INIT
|
select BOARD_LATE_INIT
|
||||||
|
select TPL
|
||||||
|
select SUPPORT_TPL
|
||||||
|
select TPL_DM
|
||||||
|
select TPL_REGMAP
|
||||||
|
select TPL_SYSCON
|
||||||
|
select TPL_CLK
|
||||||
|
select TPL_RAM
|
||||||
|
select TPL_OF_PLATDATA
|
||||||
|
select TPL_OF_CONTROL
|
||||||
|
select TPL_BOOTROM_SUPPORT
|
||||||
|
select TPL_NEEDS_SEPARATE_TEXT_BASE if SPL
|
||||||
|
select ROCKCHIP_BROM_HELPER
|
||||||
|
select TPL_DRIVERS_MISC_SUPPORT
|
||||||
|
select TPL_LIBCOMMON_SUPPORT
|
||||||
|
select TPL_LIBGENERIC_SUPPORT
|
||||||
|
select TPL_SERIAL_SUPPORT
|
||||||
help
|
help
|
||||||
Vyasa is a RK3288-based development board with 2 USB ports,
|
Vyasa is a RK3288-based development board with 2 USB ports,
|
||||||
HDMI, VGA, micro-SD card, audio, WiFi and Gigabit Ethernet, It
|
HDMI, VGA, micro-SD card, audio, WiFi and Gigabit Ethernet, It
|
||||||
|
|
|
@ -1,8 +1,11 @@
|
||||||
CONFIG_ARM=y
|
CONFIG_ARM=y
|
||||||
|
# CONFIG_SPL_USE_ARCH_MEMCPY is not set
|
||||||
|
# CONFIG_SPL_USE_ARCH_MEMSET is not set
|
||||||
CONFIG_ARCH_ROCKCHIP=y
|
CONFIG_ARCH_ROCKCHIP=y
|
||||||
CONFIG_SYS_MALLOC_F_LEN=0x2000
|
CONFIG_SYS_MALLOC_F_LEN=0x2000
|
||||||
CONFIG_ROCKCHIP_RK3288=y
|
CONFIG_ROCKCHIP_RK3288=y
|
||||||
CONFIG_TARGET_VYASA_RK3288=y
|
CONFIG_TARGET_VYASA_RK3288=y
|
||||||
|
CONFIG_TPL_TEXT_BASE=0xff704004
|
||||||
CONFIG_SPL_STACK_R_ADDR=0x80000
|
CONFIG_SPL_STACK_R_ADDR=0x80000
|
||||||
CONFIG_DEFAULT_DEVICE_TREE="rk3288-vyasa"
|
CONFIG_DEFAULT_DEVICE_TREE="rk3288-vyasa"
|
||||||
CONFIG_DEBUG_UART=y
|
CONFIG_DEBUG_UART=y
|
||||||
|
|
|
@ -150,6 +150,24 @@ Note: rk3036 SDMMC and debug uart use the same iomux, so if you boot from SD, th
|
||||||
debug uart must be disabled
|
debug uart must be disabled
|
||||||
|
|
||||||
|
|
||||||
|
Booting from an SD card on RK3288 with TPL
|
||||||
|
==========================================
|
||||||
|
|
||||||
|
Since the size of SPL can't be exceeded 0x8000 bytes in RK3288, it is not possible add
|
||||||
|
new SPL features like Falcon mode or etc.
|
||||||
|
|
||||||
|
So introduce TPL so-that adding new features to SPL is possible because now TPL should
|
||||||
|
run minimal with code like DDR, clock etc and rest of new features in SPL.
|
||||||
|
|
||||||
|
As of now TPL is added on Vyasa-RK3288 board.
|
||||||
|
|
||||||
|
To write an image that boots from an SD card (assumed to be /dev/mmcblk0):
|
||||||
|
|
||||||
|
./tools/mkimage -n rk3288 -T rksd -d ./tpl/u-boot-tpl.bin out &&
|
||||||
|
cat ./spl/u-boot-spl-dtb.bin >> out &&
|
||||||
|
sudo dd if=out of=/dev/mmcblk0 seek=64 &&
|
||||||
|
sudo dd if=u-boot-dtb.img of=/dev/mmcblk0 seek=256
|
||||||
|
|
||||||
Booting from an SD card on RK3188
|
Booting from an SD card on RK3188
|
||||||
=================================
|
=================================
|
||||||
|
|
||||||
|
|
|
@ -32,7 +32,11 @@
|
||||||
#define CONFIG_SYS_INIT_SP_ADDR 0x00100000
|
#define CONFIG_SYS_INIT_SP_ADDR 0x00100000
|
||||||
#define CONFIG_SYS_LOAD_ADDR 0x00800800
|
#define CONFIG_SYS_LOAD_ADDR 0x00800800
|
||||||
#define CONFIG_SPL_STACK 0xff718000
|
#define CONFIG_SPL_STACK 0xff718000
|
||||||
#define CONFIG_SPL_TEXT_BASE 0xff704004
|
#if defined(CONFIG_SPL_BUILD) && defined(CONFIG_TPL_BOOTROM_SUPPORT)
|
||||||
|
# define CONFIG_SPL_TEXT_BASE 0x0
|
||||||
|
#else
|
||||||
|
# define CONFIG_SPL_TEXT_BASE 0xff704004
|
||||||
|
#endif
|
||||||
|
|
||||||
/* MMC/SD IP block */
|
/* MMC/SD IP block */
|
||||||
#define CONFIG_BOUNCE_BUFFER
|
#define CONFIG_BOUNCE_BUFFER
|
||||||
|
|
Loading…
Reference in a new issue