Commit 892ff8e9 authored by Simon Glass's avatar Simon Glass
Browse files

x86: Support machines with >4GB of RAM



Some systems have more than 4GB of RAM. U-Boot can only place things below
4GB so any memory above that should not be used. Ignore any such memory so
that the memory size will not exceed the maximum.

This prevents gd->ram_size exceeding 4GB which causes problems for PCI
devices which use DMA.

Signed-off-by: default avatarSimon Glass <sjg@chromium.org>
Reviewed-by: default avatarBin Meng <bmeng.cn@gmail.com>
Reviewed-by: default avatarLukasz Majewski <l.majewski@samsung.com>
parent 4564faea
...@@ -90,7 +90,8 @@ int dram_init(void) ...@@ -90,7 +90,8 @@ int dram_init(void)
struct memrange *memrange = &lib_sysinfo.memrange[i]; struct memrange *memrange = &lib_sysinfo.memrange[i];
unsigned long long end = memrange->base + memrange->size; unsigned long long end = memrange->base + memrange->size;
if (memrange->type == CB_MEM_RAM && end > ram_size) if (memrange->type == CB_MEM_RAM && end > ram_size &&
memrange->base < (1ULL << 32))
ram_size = end; ram_size = end;
} }
gd->ram_size = ram_size; gd->ram_size = ram_size;
...@@ -108,7 +109,8 @@ void dram_init_banksize(void) ...@@ -108,7 +109,8 @@ void dram_init_banksize(void)
for (i = 0, j = 0; i < lib_sysinfo.n_memranges; i++) { for (i = 0, j = 0; i < lib_sysinfo.n_memranges; i++) {
struct memrange *memrange = &lib_sysinfo.memrange[i]; struct memrange *memrange = &lib_sysinfo.memrange[i];
if (memrange->type == CB_MEM_RAM) { if (memrange->type == CB_MEM_RAM &&
memrange->base < (1ULL << 32)) {
gd->bd->bi_dram[j].start = memrange->base; gd->bd->bi_dram[j].start = memrange->base;
gd->bd->bi_dram[j].size = memrange->size; gd->bd->bi_dram[j].size = memrange->size;
j++; j++;
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment