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 gpio0d_drv;
 | 
				
			||||||
	u32 gpio0l_sr;
 | 
						u32 gpio0l_sr;
 | 
				
			||||||
	u32 gpio0h_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*/
 | 
					/*GRF_GPIO0C_IOMUX*/
 | 
				
			||||||
enum {
 | 
					enum {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -5,4 +5,5 @@
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
obj-y		+= clk_rk3368.o
 | 
					obj-y		+= clk_rk3368.o
 | 
				
			||||||
obj-y		+= rk3368.o
 | 
					obj-y		+= rk3368.o
 | 
				
			||||||
 | 
					obj-y 		+= sdram_rk3368.o
 | 
				
			||||||
obj-y 		+= syscon_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