dram_init.c 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. /*
  2. * Copyright (C) 2012-2015 Masahiro Yamada <yamada.masahiro@socionext.com>
  3. *
  4. * SPDX-License-Identifier: GPL-2.0+
  5. */
  6. #include <common.h>
  7. #include <libfdt.h>
  8. #include <linux/err.h>
  9. DECLARE_GLOBAL_DATA_PTR;
  10. static const void *get_memory_reg_prop(const void *fdt, int *lenp)
  11. {
  12. int offset;
  13. offset = fdt_path_offset(fdt, "/memory");
  14. if (offset < 0)
  15. return NULL;
  16. return fdt_getprop(fdt, offset, "reg", lenp);
  17. }
  18. int dram_init(void)
  19. {
  20. const fdt32_t *val;
  21. int len;
  22. val = get_memory_reg_prop(gd->fdt_blob, &len);
  23. if (len < sizeof(*val))
  24. return -EINVAL;
  25. gd->ram_size = fdt32_to_cpu(*(val + 1));
  26. debug("DRAM size = %08lx\n", (unsigned long)gd->ram_size);
  27. return 0;
  28. }
  29. void dram_init_banksize(void)
  30. {
  31. const fdt32_t *val;
  32. int len, i;
  33. val = get_memory_reg_prop(gd->fdt_blob, &len);
  34. if (len < 0)
  35. return;
  36. len /= sizeof(*val);
  37. len /= 2;
  38. for (i = 0; i < len; i++) {
  39. gd->bd->bi_dram[i].start = fdt32_to_cpu(*val++);
  40. gd->bd->bi_dram[i].size = fdt32_to_cpu(*val++);
  41. debug("DRAM bank %d: start = %08lx, size = %08lx\n",
  42. i, (unsigned long)gd->bd->bi_dram[i].start,
  43. (unsigned long)gd->bd->bi_dram[i].size);
  44. }
  45. }