#include <linux/types.h>
#include <asm/armv8/mmu.h>
+#include "../init.h"
+
static struct mm_region uniphier_mem_map[] = {
{
.virt = 0x00000000,
};
struct mm_region *mem_map = uniphier_mem_map;
+
+void uniphier_mem_map_init(unsigned long dram_base, unsigned long dram_size)
+{
+ uniphier_mem_map[0].size = dram_base;
+ uniphier_mem_map[1].virt = dram_base;
+ uniphier_mem_map[1].phys = dram_base;
+ uniphier_mem_map[1].size = dram_size;
+}
#include <linux/sizes.h>
#include <asm/global_data.h>
+#include "init.h"
#include "sg-regs.h"
#include "soc-info.h"
int dram_init_banksize(void)
{
struct uniphier_dram_map dram_map[3] = {};
+ unsigned long base, top;
+ bool valid_bank_found = false;
int ret, i;
ret = uniphier_dram_map_get(dram_map);
return ret;
for (i = 0; i < ARRAY_SIZE(dram_map); i++) {
- if (i >= ARRAY_SIZE(gd->bd->bi_dram))
- break;
+ if (i < ARRAY_SIZE(gd->bd->bi_dram)) {
+ gd->bd->bi_dram[i].start = dram_map[i].base;
+ gd->bd->bi_dram[i].size = dram_map[i].size;
+ }
+
+ if (!dram_map[i].size)
+ continue;
- gd->bd->bi_dram[i].start = dram_map[i].base;
- gd->bd->bi_dram[i].size = dram_map[i].size;
+ if (!valid_bank_found)
+ base = dram_map[i].base;
+ top = dram_map[i].base + dram_map[i].size;
+ valid_bank_found = true;
}
+ if (!valid_bank_found)
+ return -EINVAL;
+
+ /* map all the DRAM regions */
+ uniphier_mem_map_init(base, top - base);
+
return 0;
}
int uniphier_have_internal_stm(void);
int uniphier_boot_from_backend(void);
int uniphier_pin_init(const char *pinconfig_name);
+#ifdef CONFIG_ARM64
+void uniphier_mem_map_init(unsigned long dram_base, unsigned long dram_size);
+#else
+static inline void uniphier_mem_map_init(unsigned long dram_base,
+ unsigned long dram_size)
+{
+}
+#endif
#endif /* __MACH_INIT_H */