x86: Add a way to add to the e820 memory table
Some boards want to reserve extra regions of memory. Add a 'chosen' property to support this. Signed-off-by: Simon Glass <sjg@chromium.org> Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
This commit is contained in:
parent
2a2ebf880c
commit
70c202c480
@ -12,6 +12,7 @@
|
||||
#include <asm/mrccache.h>
|
||||
#include <asm/mtrr.h>
|
||||
#include <asm/post.h>
|
||||
#include <dm/ofnode.h>
|
||||
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
@ -92,6 +93,8 @@ unsigned int install_e820_map(unsigned int max_entries,
|
||||
unsigned int num_entries = 0;
|
||||
const struct hob_header *hdr;
|
||||
struct hob_res_desc *res_desc;
|
||||
const fdt64_t *prop;
|
||||
int size;
|
||||
|
||||
hdr = gd->arch.hob_list;
|
||||
|
||||
@ -133,6 +136,20 @@ unsigned int install_e820_map(unsigned int max_entries,
|
||||
num_entries++;
|
||||
}
|
||||
|
||||
prop = ofnode_read_chosen_prop("e820-entries", &size);
|
||||
if (prop) {
|
||||
int count = size / (sizeof(u64) * 3);
|
||||
int i;
|
||||
|
||||
if (num_entries + count >= max_entries)
|
||||
return -ENOSPC;
|
||||
for (i = 0; i < count; i++, num_entries++, prop += 3) {
|
||||
entries[num_entries].addr = fdt64_to_cpu(prop[0]);
|
||||
entries[num_entries].size = fdt64_to_cpu(prop[1]);
|
||||
entries[num_entries].type = fdt64_to_cpu(prop[2]);
|
||||
}
|
||||
}
|
||||
|
||||
return num_entries;
|
||||
}
|
||||
|
||||
|
@ -143,3 +143,21 @@ This provides the ordering to use when writing device data to the ACPI SSDT
|
||||
node to add. The ACPI information is written in this order.
|
||||
|
||||
If the ordering does not include all nodes, an error is generated.
|
||||
|
||||
e820-entries
|
||||
------------
|
||||
|
||||
This provides a way to add entries to the e820 table which tells the OS about
|
||||
the memory map. The property contains three sets of 64-bit values:
|
||||
|
||||
address - Start address of region
|
||||
size - Size of region
|
||||
flags - Flags (E820_...)
|
||||
|
||||
Example:
|
||||
|
||||
chosen {
|
||||
e820-entries = /bits/ 64 <
|
||||
IOMAP_P2SB_BAR IOMAP P2SB_SIZE E820_RESERVED
|
||||
MCH_BASE_ADDRESS MCH_SIZE E820_RESERVED>;
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user