1185377Ssam// SPDX-License-Identifier: GPL-2.0+ 2185377Ssam/* 3185377Ssam * (C) Copyright 2021 Rockchip Electronics Co., Ltd. 4185377Ssam */ 5185377Ssam 6185377Ssam#include <common.h> 7185377Ssam#include <dm.h> 8185377Ssam#include <ram.h> 9185377Ssam#include <syscon.h> 10185377Ssam#include <asm/arch-rockchip/clock.h> 11185377Ssam#include <asm/arch-rockchip/grf_rk3568.h> 12185377Ssam#include <asm/arch-rockchip/sdram.h> 13185377Ssam 14185377Ssamstruct dram_info { 15185377Ssam struct ram_info info; 16185377Ssam struct rk3568_pmugrf *pmugrf; 17203158Srpaulo}; 18185377Ssam 19185377Ssamstatic int rk3568_dmc_probe(struct udevice *dev) 20185377Ssam{ 21185377Ssam struct dram_info *priv = dev_get_priv(dev); 22185377Ssam 23185377Ssam priv->pmugrf = syscon_get_first_range(ROCKCHIP_SYSCON_PMUGRF); 24185377Ssam priv->info.base = CFG_SYS_SDRAM_BASE; 25185377Ssam priv->info.size = 26185377Ssam rockchip_sdram_size((phys_addr_t)&priv->pmugrf->pmu_os_reg2); 27185377Ssam 28185377Ssam return 0; 29185377Ssam} 30231368Sadrian 31231368Sadrianstatic int rk3568_dmc_get_info(struct udevice *dev, struct ram_info *info) 32185377Ssam{ 33203750Srpaulo struct dram_info *priv = dev_get_priv(dev); 34185377Ssam 35185377Ssam *info = priv->info; 36185377Ssam 37185377Ssam return 0; 38185377Ssam} 39185377Ssam 40185377Ssamstatic struct ram_ops rk3568_dmc_ops = { 41185377Ssam .get_info = rk3568_dmc_get_info, 42185377Ssam}; 43217634Sadrian 44217634Sadrianstatic const struct udevice_id rk3568_dmc_ids[] = { 45185377Ssam { .compatible = "rockchip,rk3568-dmc" }, 46185377Ssam { } 47217634Sadrian}; 48217634Sadrian 49217634SadrianU_BOOT_DRIVER(dmc_rk3568) = { 50185377Ssam .name = "rockchip_rk3568_dmc", 51185377Ssam .id = UCLASS_RAM, 52185377Ssam .of_match = rk3568_dmc_ids, 53185377Ssam .ops = &rk3568_dmc_ops, 54217634Sadrian .probe = rk3568_dmc_probe, 55185377Ssam .priv_auto = sizeof(struct dram_info), 56185377Ssam}; 57185377Ssam