mirror of
https://github.com/AsahiLinux/u-boot
synced 2025-02-18 06:58:54 +00: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:
parent
74b76357df
commit
5793553fa2
1 changed files with 14 additions and 3 deletions
|
@ -41,14 +41,17 @@ void efi_add_known_memory(void)
|
|||
{
|
||||
struct e820_entry e820[E820MAX];
|
||||
unsigned int i, num;
|
||||
u64 start, pages;
|
||||
u64 start, pages, ram_top;
|
||||
int type;
|
||||
|
||||
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) {
|
||||
start = e820[i].addr;
|
||||
pages = ALIGN(e820[i].size, EFI_PAGE_SIZE) >> EFI_PAGE_SHIFT;
|
||||
|
||||
switch (e820[i].type) {
|
||||
case E820_RAM:
|
||||
|
@ -69,7 +72,15 @@ void efi_add_known_memory(void)
|
|||
break;
|
||||
}
|
||||
|
||||
efi_add_memory_map(start, pages, type, false);
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif /* CONFIG_IS_ENABLED(EFI_LOADER) */
|
||||
|
|
Loading…
Add table
Reference in a new issue