mirror of
				https://github.com/smaeul/u-boot.git
				synced 2025-11-03 21:48:15 +00:00 
			
		
		
		
	rockchip: Add core Soc start-up code for rv1108
RV1108 is embedded with an ARM Cortex-A7 single core and a DSP core from Rockchip. It is designed for varies application scenario such as car DVR, sports DV, secure camera and UAV camera. Signed-off-by: Andy Yan <andy.yan@rock-chips.com> Reviewed-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
		
							parent
							
								
									bae2f282a9
								
							
						
					
					
						commit
						2c1e11dd52
					
				@ -79,6 +79,13 @@ config ROCKCHIP_RK3399
 | 
			
		||||
	  and video codec support. Peripherals include Gigabit Ethernet,
 | 
			
		||||
	  USB2 host and OTG, SDIO, I2S, UARTs, SPI, I2C and PWMs.
 | 
			
		||||
 | 
			
		||||
config ROCKCHIP_RV1108
 | 
			
		||||
	bool "Support Rockchip RV1108"
 | 
			
		||||
	select CPU_V7
 | 
			
		||||
	help
 | 
			
		||||
	  The Rockchip RV1108 is a ARM-based SoC with a single-core Cortex-A7
 | 
			
		||||
	  and a DSP.
 | 
			
		||||
 | 
			
		||||
config ROCKCHIP_SPL_BACK_TO_BROM
 | 
			
		||||
	bool "SPL returns to bootrom"
 | 
			
		||||
	default y if ROCKCHIP_RK3036
 | 
			
		||||
@ -108,4 +115,5 @@ source "arch/arm/mach-rockchip/rk3288/Kconfig"
 | 
			
		||||
source "arch/arm/mach-rockchip/rk3328/Kconfig"
 | 
			
		||||
source "arch/arm/mach-rockchip/rk3368/Kconfig"
 | 
			
		||||
source "arch/arm/mach-rockchip/rk3399/Kconfig"
 | 
			
		||||
source "arch/arm/mach-rockchip/rv1108/Kconfig"
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
@ -33,3 +33,4 @@ obj-$(CONFIG_ROCKCHIP_RK3288) += rk3288/
 | 
			
		||||
obj-$(CONFIG_ROCKCHIP_RK3328) += rk3328/
 | 
			
		||||
obj-$(CONFIG_ROCKCHIP_RK3368) += rk3368/
 | 
			
		||||
obj-$(CONFIG_ROCKCHIP_RK3399) += rk3399/
 | 
			
		||||
obj-$(CONFIG_ROCKCHIP_RV1108) += rv1108/
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										9
									
								
								arch/arm/mach-rockchip/rv1108/Kconfig
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								arch/arm/mach-rockchip/rv1108/Kconfig
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,9 @@
 | 
			
		||||
if ROCKCHIP_RV1108
 | 
			
		||||
 | 
			
		||||
config SYS_SOC
 | 
			
		||||
	default "rockchip"
 | 
			
		||||
 | 
			
		||||
config SYS_MALLOC_F_LEN
 | 
			
		||||
	default 0x400
 | 
			
		||||
 | 
			
		||||
endif
 | 
			
		||||
							
								
								
									
										11
									
								
								arch/arm/mach-rockchip/rv1108/Makefile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								arch/arm/mach-rockchip/rv1108/Makefile
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,11 @@
 | 
			
		||||
#
 | 
			
		||||
# (C) Copyright 2016 Rockchip Electronics Co., Ltd
 | 
			
		||||
#
 | 
			
		||||
# SPDX-License-Identifier:     GPL-2.0+
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
ifndef CONFIG_SPL_BUILD
 | 
			
		||||
obj-y += syscon_rv1108.o
 | 
			
		||||
endif
 | 
			
		||||
obj-y += rv1108.o
 | 
			
		||||
obj-y += clk_rv1108.o
 | 
			
		||||
							
								
								
									
										32
									
								
								arch/arm/mach-rockchip/rv1108/clk_rv1108.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								arch/arm/mach-rockchip/rv1108/clk_rv1108.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,32 @@
 | 
			
		||||
/*
 | 
			
		||||
 * (C) Copyright 2016 Rockchip Electronics Co., Ltd
 | 
			
		||||
 * Author: Andy Yan <andy.yan@rock-chips.com>
 | 
			
		||||
 * SPDX-License-Identifier:     GPL-2.0
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <common.h>
 | 
			
		||||
#include <dm.h>
 | 
			
		||||
#include <syscon.h>
 | 
			
		||||
#include <asm/arch/clock.h>
 | 
			
		||||
#include <asm/arch/cru_rv1108.h>
 | 
			
		||||
 | 
			
		||||
int rockchip_get_clk(struct udevice **devp)
 | 
			
		||||
{
 | 
			
		||||
	return uclass_get_device_by_driver(UCLASS_CLK,
 | 
			
		||||
			DM_GET_DRIVER(clk_rv1108), devp);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void *rockchip_get_cru(void)
 | 
			
		||||
{
 | 
			
		||||
	struct rv1108_clk_priv *priv;
 | 
			
		||||
	struct udevice *dev;
 | 
			
		||||
	int ret;
 | 
			
		||||
 | 
			
		||||
	ret = rockchip_get_clk(&dev);
 | 
			
		||||
	if (ret)
 | 
			
		||||
		return ERR_PTR(ret);
 | 
			
		||||
 | 
			
		||||
	priv = dev_get_priv(dev);
 | 
			
		||||
 | 
			
		||||
	return priv->cru;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										15
									
								
								arch/arm/mach-rockchip/rv1108/rv1108.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								arch/arm/mach-rockchip/rv1108/rv1108.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,15 @@
 | 
			
		||||
/*
 | 
			
		||||
 * (C) Copyright 2016 Rockchip Electronics Co., Ltd
 | 
			
		||||
 * Author: Andy Yan <andy.yan@rock-chips.com>
 | 
			
		||||
 * SPDX-License-Identifier:     GPL-2.0+
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <common.h>
 | 
			
		||||
 | 
			
		||||
#ifndef CONFIG_SYS_DCACHE_OFF
 | 
			
		||||
void enable_caches(void)
 | 
			
		||||
{
 | 
			
		||||
	/* Enable D-cache. I-cache is already enabled in start.S */
 | 
			
		||||
	dcache_enable();
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										21
									
								
								arch/arm/mach-rockchip/rv1108/syscon_rv1108.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								arch/arm/mach-rockchip/rv1108/syscon_rv1108.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,21 @@
 | 
			
		||||
/*
 | 
			
		||||
 * (C) Copyright 2016 Rockchip Electronics Co., Ltd
 | 
			
		||||
 *
 | 
			
		||||
 * SPDX-License-Identifier:     GPL-2.0+
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <common.h>
 | 
			
		||||
#include <dm.h>
 | 
			
		||||
#include <syscon.h>
 | 
			
		||||
#include <asm/arch/clock.h>
 | 
			
		||||
 | 
			
		||||
static const struct udevice_id rv1108_syscon_ids[] = {
 | 
			
		||||
	{ .compatible = "rockchip,rv1108-grf", .data = ROCKCHIP_SYSCON_GRF },
 | 
			
		||||
	{ }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
U_BOOT_DRIVER(syscon_rv1108) = {
 | 
			
		||||
	.name = "rv1108_syscon",
 | 
			
		||||
	.id = UCLASS_SYSCON,
 | 
			
		||||
	.of_match = rv1108_syscon_ids,
 | 
			
		||||
};
 | 
			
		||||
@ -17,6 +17,7 @@ obj-$(CONFIG_ROCKCHIP_RK3288) += sysreset_rk3288.o
 | 
			
		||||
obj-$(CONFIG_ROCKCHIP_RK3328) += sysreset_rk3328.o
 | 
			
		||||
obj-$(CONFIG_ROCKCHIP_RK3368) += sysreset_rk3368.o
 | 
			
		||||
obj-$(CONFIG_ROCKCHIP_RK3399) += sysreset_rk3399.o
 | 
			
		||||
obj-$(CONFIG_ROCKCHIP_RV1108) += sysreset_rv1108.o
 | 
			
		||||
obj-$(CONFIG_SANDBOX) += sysreset_sandbox.o
 | 
			
		||||
obj-$(CONFIG_ARCH_SNAPDRAGON) += sysreset_snapdragon.o
 | 
			
		||||
obj-$(CONFIG_ARCH_STI) += sysreset_sti.o
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										46
									
								
								drivers/sysreset/sysreset_rv1108.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								drivers/sysreset/sysreset_rv1108.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,46 @@
 | 
			
		||||
/*
 | 
			
		||||
 * (C) Copyright 2015 Rockchip Electronics Co., Ltd
 | 
			
		||||
 * Author: Andy Yan <andy.yan@rock-chips.com>
 | 
			
		||||
 * SPDX-License-Identifier:     GPL-2.0+
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <common.h>
 | 
			
		||||
#include <dm.h>
 | 
			
		||||
#include <errno.h>
 | 
			
		||||
#include <sysreset.h>
 | 
			
		||||
#include <asm/io.h>
 | 
			
		||||
#include <asm/arch/clock.h>
 | 
			
		||||
#include <asm/arch/cru_rv1108.h>
 | 
			
		||||
#include <asm/arch/hardware.h>
 | 
			
		||||
#include <linux/err.h>
 | 
			
		||||
 | 
			
		||||
int rv1108_sysreset_request(struct udevice *dev, enum sysreset_t type)
 | 
			
		||||
{
 | 
			
		||||
	struct rv1108_cru *cru = rockchip_get_cru();
 | 
			
		||||
 | 
			
		||||
	if (IS_ERR(cru))
 | 
			
		||||
		return PTR_ERR(cru);
 | 
			
		||||
 | 
			
		||||
	switch (type) {
 | 
			
		||||
	case SYSRESET_WARM:
 | 
			
		||||
		writel(0xeca8, &cru->glb_srst_snd_val);
 | 
			
		||||
		break;
 | 
			
		||||
	case SYSRESET_COLD:
 | 
			
		||||
		writel(0xfdb9, &cru->glb_srst_fst_val);
 | 
			
		||||
		break;
 | 
			
		||||
	default:
 | 
			
		||||
		return -EPROTONOSUPPORT;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return -EINPROGRESS;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static struct sysreset_ops rv1108_sysreset = {
 | 
			
		||||
	.request	= rv1108_sysreset_request,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
U_BOOT_DRIVER(sysreset_rv1108) = {
 | 
			
		||||
	.name	= "rv1108_sysreset",
 | 
			
		||||
	.id	= UCLASS_SYSRESET,
 | 
			
		||||
	.ops	= &rv1108_sysreset,
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										33
									
								
								include/configs/rv1108_common.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								include/configs/rv1108_common.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,33 @@
 | 
			
		||||
/*
 | 
			
		||||
 * (C) Copyright 2016 Rockchip Electronics Co., Ltd
 | 
			
		||||
 *
 | 
			
		||||
 * SPDX-License-Identifier:     GPL-2.0+
 | 
			
		||||
 */
 | 
			
		||||
#ifndef __CONFIG_RV1108_COMMON_H
 | 
			
		||||
#define __CONFIG_RV1108_COMMON_H
 | 
			
		||||
 | 
			
		||||
#include <asm/arch/hardware.h>
 | 
			
		||||
#include "rockchip-common.h"
 | 
			
		||||
 | 
			
		||||
#define CONFIG_ENV_IS_NOWHERE
 | 
			
		||||
#define CONFIG_ENV_SIZE			0x2000
 | 
			
		||||
#define CONFIG_SYS_MAXARGS		16
 | 
			
		||||
#define CONFIG_SYS_MALLOC_LEN		(32 << 20)
 | 
			
		||||
#define CONFIG_SYS_CBSIZE		1024
 | 
			
		||||
#define CONFIG_SKIP_LOWLEVEL_INIT
 | 
			
		||||
 | 
			
		||||
#define CONFIG_SYS_TIMER_RATE		(24 * 1000 * 1000)
 | 
			
		||||
/* TIMER1,initialized by ddr initialize code */
 | 
			
		||||
#define CONFIG_SYS_TIMER_BASE		0x10350020
 | 
			
		||||
#define CONFIG_SYS_TIMER_COUNTER	(CONFIG_SYS_TIMER_BASE + 8)
 | 
			
		||||
 | 
			
		||||
#define CONFIG_SYS_NS16550
 | 
			
		||||
#define CONFIG_SYS_NS16550_MEM32
 | 
			
		||||
 | 
			
		||||
#define CONFIG_SYS_SDRAM_BASE		0x60000000
 | 
			
		||||
#define CONFIG_NR_DRAM_BANKS		1
 | 
			
		||||
#define CONFIG_SYS_TEXT_BASE		CONFIG_SYS_SDRAM_BASE
 | 
			
		||||
#define CONFIG_SYS_INIT_SP_ADDR		(CONFIG_SYS_TEXT_BASE + 0x100000)
 | 
			
		||||
#define CONFIG_SYS_LOAD_ADDR		(CONFIG_SYS_SDRAM_BASE + 0x2000000)
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user