]>
Commit | Line | Data |
---|---|---|
83d290c5 | 1 | // SPDX-License-Identifier: GPL-2.0+ |
59ec719d BM |
2 | /* |
3 | * Copyright (C) 2015, Bin Meng <[email protected]> | |
59ec719d BM |
4 | */ |
5 | ||
6 | #include <common.h> | |
abe47ca7 | 7 | #include <efi_loader.h> |
59ec719d | 8 | #include <asm/e820.h> |
401d1c4f | 9 | #include <asm/global_data.h> |
59ec719d BM |
10 | |
11 | DECLARE_GLOBAL_DATA_PTR; | |
12 | ||
13 | /* | |
14 | * Install a default e820 table with 4 entries as follows: | |
15 | * | |
16 | * 0x000000-0x0a0000 Useable RAM | |
17 | * 0x0a0000-0x100000 Reserved for ISA | |
18 | * 0x100000-gd->ram_size Useable RAM | |
19 | * CONFIG_PCIE_ECAM_BASE PCIe ECAM | |
20 | */ | |
87af71c2 | 21 | __weak unsigned int install_e820_map(unsigned int max_entries, |
45519924 | 22 | struct e820_entry *entries) |
59ec719d BM |
23 | { |
24 | entries[0].addr = 0; | |
25 | entries[0].size = ISA_START_ADDRESS; | |
26 | entries[0].type = E820_RAM; | |
27 | entries[1].addr = ISA_START_ADDRESS; | |
28 | entries[1].size = ISA_END_ADDRESS - ISA_START_ADDRESS; | |
29 | entries[1].type = E820_RESERVED; | |
30 | entries[2].addr = ISA_END_ADDRESS; | |
31 | entries[2].size = gd->ram_size - ISA_END_ADDRESS; | |
32 | entries[2].type = E820_RAM; | |
33 | entries[3].addr = CONFIG_PCIE_ECAM_BASE; | |
34 | entries[3].size = CONFIG_PCIE_ECAM_SIZE; | |
35 | entries[3].type = E820_RESERVED; | |
36 | ||
37 | return 4; | |
38 | } | |
abe47ca7 | 39 | |
9b5e6396 | 40 | #if CONFIG_IS_ENABLED(EFI_LOADER) |
abe47ca7 BM |
41 | void efi_add_known_memory(void) |
42 | { | |
43 | struct e820_entry e820[E820MAX]; | |
44 | unsigned int i, num; | |
714497e3 | 45 | u64 start, ram_top; |
abe47ca7 BM |
46 | int type; |
47 | ||
48 | num = install_e820_map(ARRAY_SIZE(e820), e820); | |
49 | ||
5793553f PA |
50 | ram_top = (u64)gd->ram_top & ~EFI_PAGE_MASK; |
51 | if (!ram_top) | |
52 | ram_top = 0x100000000ULL; | |
53 | ||
abe47ca7 BM |
54 | for (i = 0; i < num; ++i) { |
55 | start = e820[i].addr; | |
abe47ca7 BM |
56 | |
57 | switch (e820[i].type) { | |
58 | case E820_RAM: | |
59 | type = EFI_CONVENTIONAL_MEMORY; | |
60 | break; | |
61 | case E820_RESERVED: | |
62 | type = EFI_RESERVED_MEMORY_TYPE; | |
63 | break; | |
64 | case E820_ACPI: | |
65 | type = EFI_ACPI_RECLAIM_MEMORY; | |
66 | break; | |
67 | case E820_NVS: | |
68 | type = EFI_ACPI_MEMORY_NVS; | |
69 | break; | |
70 | case E820_UNUSABLE: | |
71 | default: | |
72 | type = EFI_UNUSABLE_MEMORY; | |
73 | break; | |
74 | } | |
75 | ||
5793553f PA |
76 | if (type == EFI_CONVENTIONAL_MEMORY) { |
77 | efi_add_conventional_memory_map(start, | |
78 | start + e820[i].size, | |
79 | ram_top); | |
80 | } else { | |
714497e3 | 81 | efi_add_memory_map(start, e820[i].size, type); |
5793553f | 82 | } |
abe47ca7 BM |
83 | } |
84 | } | |
9b5e6396 | 85 | #endif /* CONFIG_IS_ENABLED(EFI_LOADER) */ |