mirror of
https://source.denx.de/u-boot/u-boot.git
synced 2025-11-29 14:41:26 +01:00
ARM: uniphier: make mem_map run-time configurable
Currently, mem_map is hard-coded, and it worked well until the last SoC. For a planned new SoC, the addresses of peripherals and DRAM will be changed. Set it up run-time. Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
This commit is contained in:
parent
df72534121
commit
34e29f7d94
@ -7,6 +7,8 @@
|
|||||||
#include <linux/types.h>
|
#include <linux/types.h>
|
||||||
#include <asm/armv8/mmu.h>
|
#include <asm/armv8/mmu.h>
|
||||||
|
|
||||||
|
#include "../init.h"
|
||||||
|
|
||||||
static struct mm_region uniphier_mem_map[] = {
|
static struct mm_region uniphier_mem_map[] = {
|
||||||
{
|
{
|
||||||
.virt = 0x00000000,
|
.virt = 0x00000000,
|
||||||
@ -27,3 +29,11 @@ static struct mm_region uniphier_mem_map[] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
struct mm_region *mem_map = uniphier_mem_map;
|
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;
|
||||||
|
}
|
||||||
|
|||||||
@ -13,6 +13,7 @@
|
|||||||
#include <linux/sizes.h>
|
#include <linux/sizes.h>
|
||||||
#include <asm/global_data.h>
|
#include <asm/global_data.h>
|
||||||
|
|
||||||
|
#include "init.h"
|
||||||
#include "sg-regs.h"
|
#include "sg-regs.h"
|
||||||
#include "soc-info.h"
|
#include "soc-info.h"
|
||||||
|
|
||||||
@ -271,6 +272,8 @@ int dram_init(void)
|
|||||||
int dram_init_banksize(void)
|
int dram_init_banksize(void)
|
||||||
{
|
{
|
||||||
struct uniphier_dram_map dram_map[3] = {};
|
struct uniphier_dram_map dram_map[3] = {};
|
||||||
|
unsigned long base, top;
|
||||||
|
bool valid_bank_found = false;
|
||||||
int ret, i;
|
int ret, i;
|
||||||
|
|
||||||
ret = uniphier_dram_map_get(dram_map);
|
ret = uniphier_dram_map_get(dram_map);
|
||||||
@ -278,12 +281,25 @@ int dram_init_banksize(void)
|
|||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
for (i = 0; i < ARRAY_SIZE(dram_map); i++) {
|
for (i = 0; i < ARRAY_SIZE(dram_map); i++) {
|
||||||
if (i >= ARRAY_SIZE(gd->bd->bi_dram))
|
if (i < ARRAY_SIZE(gd->bd->bi_dram)) {
|
||||||
break;
|
|
||||||
|
|
||||||
gd->bd->bi_dram[i].start = dram_map[i].base;
|
gd->bd->bi_dram[i].start = dram_map[i].base;
|
||||||
gd->bd->bi_dram[i].size = dram_map[i].size;
|
gd->bd->bi_dram[i].size = dram_map[i].size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!dram_map[i].size)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -102,5 +102,13 @@ unsigned int uniphier_boot_device_raw(void);
|
|||||||
int uniphier_have_internal_stm(void);
|
int uniphier_have_internal_stm(void);
|
||||||
int uniphier_boot_from_backend(void);
|
int uniphier_boot_from_backend(void);
|
||||||
int uniphier_pin_init(const char *pinconfig_name);
|
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 */
|
#endif /* __MACH_INIT_H */
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user