mirror of
https://xff.cz/git/u-boot/
synced 2025-09-30 06:51:28 +02:00
x86: efi_loader: Use efi_add_conventional_memory_map()
Use efi_add_conventional_memory_map() to configure EFI conventional memory properly with ram_top value. This will give 32-bit mode U-Boot proper conventional memory regions even if e820 has an entry which is greater than 32-bit address space. Signed-off-by: Aiden Park <aiden.park@intel.com> Tested-by: Heinrich Schuchardt <xypron.glpk@gmx.de> Reviewed-by: Heinrich Schuchardt <xypron.glpk@gmx.de> [bmeng: fixed some typos in the commit message] Signed-off-by: Bin Meng <bmeng.cn@gmail.com>
This commit is contained in:
@@ -41,14 +41,17 @@ void efi_add_known_memory(void)
|
|||||||
{
|
{
|
||||||
struct e820_entry e820[E820MAX];
|
struct e820_entry e820[E820MAX];
|
||||||
unsigned int i, num;
|
unsigned int i, num;
|
||||||
u64 start, pages;
|
u64 start, pages, ram_top;
|
||||||
int type;
|
int type;
|
||||||
|
|
||||||
num = install_e820_map(ARRAY_SIZE(e820), e820);
|
num = install_e820_map(ARRAY_SIZE(e820), e820);
|
||||||
|
|
||||||
|
ram_top = (u64)gd->ram_top & ~EFI_PAGE_MASK;
|
||||||
|
if (!ram_top)
|
||||||
|
ram_top = 0x100000000ULL;
|
||||||
|
|
||||||
for (i = 0; i < num; ++i) {
|
for (i = 0; i < num; ++i) {
|
||||||
start = e820[i].addr;
|
start = e820[i].addr;
|
||||||
pages = ALIGN(e820[i].size, EFI_PAGE_SIZE) >> EFI_PAGE_SHIFT;
|
|
||||||
|
|
||||||
switch (e820[i].type) {
|
switch (e820[i].type) {
|
||||||
case E820_RAM:
|
case E820_RAM:
|
||||||
@@ -69,7 +72,15 @@ void efi_add_known_memory(void)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (type == EFI_CONVENTIONAL_MEMORY) {
|
||||||
|
efi_add_conventional_memory_map(start,
|
||||||
|
start + e820[i].size,
|
||||||
|
ram_top);
|
||||||
|
} else {
|
||||||
|
pages = ALIGN(e820[i].size, EFI_PAGE_SIZE)
|
||||||
|
>> EFI_PAGE_SHIFT;
|
||||||
efi_add_memory_map(start, pages, type, false);
|
efi_add_memory_map(start, pages, type, false);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_IS_ENABLED(EFI_LOADER) */
|
#endif /* CONFIG_IS_ENABLED(EFI_LOADER) */
|
||||||
|
Reference in New Issue
Block a user