sdram_rk3568.c 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. // SPDX-License-Identifier: GPL-2.0+
  2. /*
  3. * (C) Copyright 2021 Rockchip Electronics Co., Ltd.
  4. */
  5. #include <common.h>
  6. #include <dm.h>
  7. #include <ram.h>
  8. #include <syscon.h>
  9. #include <asm/arch-rockchip/clock.h>
  10. #include <asm/arch-rockchip/grf_rk3568.h>
  11. #include <asm/arch-rockchip/sdram.h>
  12. struct dram_info {
  13. struct ram_info info;
  14. struct rk3568_pmugrf *pmugrf;
  15. };
  16. static int rk3568_dmc_probe(struct udevice *dev)
  17. {
  18. struct dram_info *priv = dev_get_priv(dev);
  19. priv->pmugrf = syscon_get_first_range(ROCKCHIP_SYSCON_PMUGRF);
  20. priv->info.base = CFG_SYS_SDRAM_BASE;
  21. priv->info.size =
  22. rockchip_sdram_size((phys_addr_t)&priv->pmugrf->pmu_os_reg2);
  23. return 0;
  24. }
  25. static int rk3568_dmc_get_info(struct udevice *dev, struct ram_info *info)
  26. {
  27. struct dram_info *priv = dev_get_priv(dev);
  28. *info = priv->info;
  29. return 0;
  30. }
  31. static struct ram_ops rk3568_dmc_ops = {
  32. .get_info = rk3568_dmc_get_info,
  33. };
  34. static const struct udevice_id rk3568_dmc_ids[] = {
  35. { .compatible = "rockchip,rk3568-dmc" },
  36. { }
  37. };
  38. U_BOOT_DRIVER(dmc_rk3568) = {
  39. .name = "rockchip_rk3568_dmc",
  40. .id = UCLASS_RAM,
  41. .of_match = rk3568_dmc_ids,
  42. .ops = &rk3568_dmc_ops,
  43. .probe = rk3568_dmc_probe,
  44. .priv_auto = sizeof(struct dram_info),
  45. };