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/mrccache.h>
|
||||||
#include <asm/mtrr.h>
|
#include <asm/mtrr.h>
|
||||||
#include <asm/post.h>
|
#include <asm/post.h>
|
||||||
|
#include <dm/ofnode.h>
|
||||||
|
|
||||||
DECLARE_GLOBAL_DATA_PTR;
|
DECLARE_GLOBAL_DATA_PTR;
|
||||||
|
|
||||||
|
@ -92,6 +93,8 @@ unsigned int install_e820_map(unsigned int max_entries,
|
||||||
unsigned int num_entries = 0;
|
unsigned int num_entries = 0;
|
||||||
const struct hob_header *hdr;
|
const struct hob_header *hdr;
|
||||||
struct hob_res_desc *res_desc;
|
struct hob_res_desc *res_desc;
|
||||||
|
const fdt64_t *prop;
|
||||||
|
int size;
|
||||||
|
|
||||||
hdr = gd->arch.hob_list;
|
hdr = gd->arch.hob_list;
|
||||||
|
|
||||||
|
@ -133,6 +136,20 @@ unsigned int install_e820_map(unsigned int max_entries,
|
||||||
num_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;
|
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.
|
node to add. The ACPI information is written in this order.
|
||||||
|
|
||||||
If the ordering does not include all nodes, an error is generated.
|
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