rockchip: rk3368: add sdram driver for U-Boot
Add sdram driver in U-Boot for get the correct sdram size from sys_reg, so that U-Boot can co-work with Rockchip loader or SPL to get different dram capability and then tell the kernel. Signed-off-by: Kever Yang <kever.yang@rock-chips.com> Reviewed-by: Philipp Tomsich <philipp.tomsich@theobroma-systems.com>
This commit is contained in:
		
							parent
							
								
									39648e6167
								
							
						
					
					
						commit
						cc89369fb0
					
				| 
						 | 
				
			
			@ -92,8 +92,10 @@ struct rk3368_pmu_grf {
 | 
			
		|||
	u32 gpio0d_drv;
 | 
			
		||||
	u32 gpio0l_sr;
 | 
			
		||||
	u32 gpio0h_sr;
 | 
			
		||||
	u32 reserved[(0x200 - 0x34) / 4 - 1];
 | 
			
		||||
	u32 os_reg[4];
 | 
			
		||||
};
 | 
			
		||||
check_member(rk3368_pmu_grf, gpio0h_sr, 0x34);
 | 
			
		||||
check_member(rk3368_pmu_grf, os_reg[3], 0x20c);
 | 
			
		||||
 | 
			
		||||
/*GRF_GPIO0C_IOMUX*/
 | 
			
		||||
enum {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -5,4 +5,5 @@
 | 
			
		|||
#
 | 
			
		||||
obj-y		+= clk_rk3368.o
 | 
			
		||||
obj-y		+= rk3368.o
 | 
			
		||||
obj-y 		+= sdram_rk3368.o
 | 
			
		||||
obj-y 		+= syscon_rk3368.o
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,60 @@
 | 
			
		|||
/*
 | 
			
		||||
 * (C) Copyright 2016 Rockchip Electronics Co., Ltd.
 | 
			
		||||
 *
 | 
			
		||||
 * SPDX-License-Identifier:     GPL-2.0
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <common.h>
 | 
			
		||||
#include <dm.h>
 | 
			
		||||
#include <ram.h>
 | 
			
		||||
#include <syscon.h>
 | 
			
		||||
#include <asm/arch/clock.h>
 | 
			
		||||
#include <asm/arch/grf_rk3368.h>
 | 
			
		||||
#include <asm/arch/sdram_common.h>
 | 
			
		||||
 | 
			
		||||
DECLARE_GLOBAL_DATA_PTR;
 | 
			
		||||
struct dram_info {
 | 
			
		||||
	struct ram_info info;
 | 
			
		||||
	struct rk3368_pmu_grf *pmugrf;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static int rk3368_dmc_probe(struct udevice *dev)
 | 
			
		||||
{
 | 
			
		||||
	struct dram_info *priv = dev_get_priv(dev);
 | 
			
		||||
 | 
			
		||||
	priv->pmugrf = syscon_get_first_range(ROCKCHIP_SYSCON_PMUGRF);
 | 
			
		||||
	debug("%s: grf=%p\n", __func__, priv->pmugrf);
 | 
			
		||||
	priv->info.base = CONFIG_SYS_SDRAM_BASE;
 | 
			
		||||
	priv->info.size = rockchip_sdram_size(
 | 
			
		||||
			(phys_addr_t)&priv->pmugrf->os_reg[2]);
 | 
			
		||||
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int rk3368_dmc_get_info(struct udevice *dev, struct ram_info *info)
 | 
			
		||||
{
 | 
			
		||||
	struct dram_info *priv = dev_get_priv(dev);
 | 
			
		||||
 | 
			
		||||
	*info = priv->info;
 | 
			
		||||
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static struct ram_ops rk3368_dmc_ops = {
 | 
			
		||||
	.get_info = rk3368_dmc_get_info,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static const struct udevice_id rk3368_dmc_ids[] = {
 | 
			
		||||
	{ .compatible = "rockchip,rk3368-dmc" },
 | 
			
		||||
	{ }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
U_BOOT_DRIVER(dmc_rk3368) = {
 | 
			
		||||
	.name = "rockchip_rk3368_dmc",
 | 
			
		||||
	.id = UCLASS_RAM,
 | 
			
		||||
	.of_match = rk3368_dmc_ids,
 | 
			
		||||
	.ops = &rk3368_dmc_ops,
 | 
			
		||||
	.probe = rk3368_dmc_probe,
 | 
			
		||||
	.priv_auto_alloc_size = sizeof(struct dram_info),
 | 
			
		||||
};
 | 
			
		||||
		Loading…
	
		Reference in New Issue