Revert "drm/amd/display: Don't load DMCU for Raven 1"
[sfrench/cifs-2.6.git] / arch / x86 / kernel / e820.c
1 /*
2  * Low level x86 E820 memory map handling functions.
3  *
4  * The firmware and bootloader passes us the "E820 table", which is the primary
5  * physical memory layout description available about x86 systems.
6  *
7  * The kernel takes the E820 memory layout and optionally modifies it with
8  * quirks and other tweaks, and feeds that into the generic Linux memory
9  * allocation code routines via a platform independent interface (memblock, etc.).
10  */
11 #include <linux/crash_dump.h>
12 #include <linux/memblock.h>
13 #include <linux/suspend.h>
14 #include <linux/acpi.h>
15 #include <linux/firmware-map.h>
16 #include <linux/sort.h>
17 #include <linux/memory_hotplug.h>
18
19 #include <asm/e820/api.h>
20 #include <asm/setup.h>
21
22 /*
23  * We organize the E820 table into three main data structures:
24  *
25  * - 'e820_table_firmware': the original firmware version passed to us by the
26  *   bootloader - not modified by the kernel. It is composed of two parts:
27  *   the first 128 E820 memory entries in boot_params.e820_table and the remaining
28  *   (if any) entries of the SETUP_E820_EXT nodes. We use this to:
29  *
30  *       - inform the user about the firmware's notion of memory layout
31  *         via /sys/firmware/memmap
32  *
33  *       - the hibernation code uses it to generate a kernel-independent MD5
34  *         fingerprint of the physical memory layout of a system.
35  *
36  * - 'e820_table_kexec': a slightly modified (by the kernel) firmware version
37  *   passed to us by the bootloader - the major difference between
38  *   e820_table_firmware[] and this one is that, the latter marks the setup_data
39  *   list created by the EFI boot stub as reserved, so that kexec can reuse the
40  *   setup_data information in the second kernel. Besides, e820_table_kexec[]
41  *   might also be modified by the kexec itself to fake a mptable.
42  *   We use this to:
43  *
44  *       - kexec, which is a bootloader in disguise, uses the original E820
45  *         layout to pass to the kexec-ed kernel. This way the original kernel
46  *         can have a restricted E820 map while the kexec()-ed kexec-kernel
47  *         can have access to full memory - etc.
48  *
49  * - 'e820_table': this is the main E820 table that is massaged by the
50  *   low level x86 platform code, or modified by boot parameters, before
51  *   passed on to higher level MM layers.
52  *
53  * Once the E820 map has been converted to the standard Linux memory layout
54  * information its role stops - modifying it has no effect and does not get
55  * re-propagated. So itsmain role is a temporary bootstrap storage of firmware
56  * specific memory layout data during early bootup.
57  */
58 static struct e820_table e820_table_init                __initdata;
59 static struct e820_table e820_table_kexec_init          __initdata;
60 static struct e820_table e820_table_firmware_init       __initdata;
61
62 struct e820_table *e820_table __refdata                 = &e820_table_init;
63 struct e820_table *e820_table_kexec __refdata           = &e820_table_kexec_init;
64 struct e820_table *e820_table_firmware __refdata        = &e820_table_firmware_init;
65
66 /* For PCI or other memory-mapped resources */
67 unsigned long pci_mem_start = 0xaeedbabe;
68 #ifdef CONFIG_PCI
69 EXPORT_SYMBOL(pci_mem_start);
70 #endif
71
72 /*
73  * This function checks if any part of the range <start,end> is mapped
74  * with type.
75  */
76 static bool _e820__mapped_any(struct e820_table *table,
77                               u64 start, u64 end, enum e820_type type)
78 {
79         int i;
80
81         for (i = 0; i < table->nr_entries; i++) {
82                 struct e820_entry *entry = &table->entries[i];
83
84                 if (type && entry->type != type)
85                         continue;
86                 if (entry->addr >= end || entry->addr + entry->size <= start)
87                         continue;
88                 return 1;
89         }
90         return 0;
91 }
92
93 bool e820__mapped_raw_any(u64 start, u64 end, enum e820_type type)
94 {
95         return _e820__mapped_any(e820_table_firmware, start, end, type);
96 }
97 EXPORT_SYMBOL_GPL(e820__mapped_raw_any);
98
99 bool e820__mapped_any(u64 start, u64 end, enum e820_type type)
100 {
101         return _e820__mapped_any(e820_table, start, end, type);
102 }
103 EXPORT_SYMBOL_GPL(e820__mapped_any);
104
105 /*
106  * This function checks if the entire <start,end> range is mapped with 'type'.
107  *
108  * Note: this function only works correctly once the E820 table is sorted and
109  * not-overlapping (at least for the range specified), which is the case normally.
110  */
111 static struct e820_entry *__e820__mapped_all(u64 start, u64 end,
112                                              enum e820_type type)
113 {
114         int i;
115
116         for (i = 0; i < e820_table->nr_entries; i++) {
117                 struct e820_entry *entry = &e820_table->entries[i];
118
119                 if (type && entry->type != type)
120                         continue;
121
122                 /* Is the region (part) in overlap with the current region? */
123                 if (entry->addr >= end || entry->addr + entry->size <= start)
124                         continue;
125
126                 /*
127                  * If the region is at the beginning of <start,end> we move
128                  * 'start' to the end of the region since it's ok until there
129                  */
130                 if (entry->addr <= start)
131                         start = entry->addr + entry->size;
132
133                 /*
134                  * If 'start' is now at or beyond 'end', we're done, full
135                  * coverage of the desired range exists:
136                  */
137                 if (start >= end)
138                         return entry;
139         }
140
141         return NULL;
142 }
143
144 /*
145  * This function checks if the entire range <start,end> is mapped with type.
146  */
147 bool __init e820__mapped_all(u64 start, u64 end, enum e820_type type)
148 {
149         return __e820__mapped_all(start, end, type);
150 }
151
152 /*
153  * This function returns the type associated with the range <start,end>.
154  */
155 int e820__get_entry_type(u64 start, u64 end)
156 {
157         struct e820_entry *entry = __e820__mapped_all(start, end, 0);
158
159         return entry ? entry->type : -EINVAL;
160 }
161
162 /*
163  * Add a memory region to the kernel E820 map.
164  */
165 static void __init __e820__range_add(struct e820_table *table, u64 start, u64 size, enum e820_type type)
166 {
167         int x = table->nr_entries;
168
169         if (x >= ARRAY_SIZE(table->entries)) {
170                 pr_err("too many entries; ignoring [mem %#010llx-%#010llx]\n",
171                        start, start + size - 1);
172                 return;
173         }
174
175         table->entries[x].addr = start;
176         table->entries[x].size = size;
177         table->entries[x].type = type;
178         table->nr_entries++;
179 }
180
181 void __init e820__range_add(u64 start, u64 size, enum e820_type type)
182 {
183         __e820__range_add(e820_table, start, size, type);
184 }
185
186 static void __init e820_print_type(enum e820_type type)
187 {
188         switch (type) {
189         case E820_TYPE_RAM:             /* Fall through: */
190         case E820_TYPE_RESERVED_KERN:   pr_cont("usable");                      break;
191         case E820_TYPE_RESERVED:        pr_cont("reserved");                    break;
192         case E820_TYPE_ACPI:            pr_cont("ACPI data");                   break;
193         case E820_TYPE_NVS:             pr_cont("ACPI NVS");                    break;
194         case E820_TYPE_UNUSABLE:        pr_cont("unusable");                    break;
195         case E820_TYPE_PMEM:            /* Fall through: */
196         case E820_TYPE_PRAM:            pr_cont("persistent (type %u)", type);  break;
197         default:                        pr_cont("type %u", type);               break;
198         }
199 }
200
201 void __init e820__print_table(char *who)
202 {
203         int i;
204
205         for (i = 0; i < e820_table->nr_entries; i++) {
206                 pr_info("%s: [mem %#018Lx-%#018Lx] ",
207                         who,
208                         e820_table->entries[i].addr,
209                         e820_table->entries[i].addr + e820_table->entries[i].size - 1);
210
211                 e820_print_type(e820_table->entries[i].type);
212                 pr_cont("\n");
213         }
214 }
215
216 /*
217  * Sanitize an E820 map.
218  *
219  * Some E820 layouts include overlapping entries. The following
220  * replaces the original E820 map with a new one, removing overlaps,
221  * and resolving conflicting memory types in favor of highest
222  * numbered type.
223  *
224  * The input parameter 'entries' points to an array of 'struct
225  * e820_entry' which on entry has elements in the range [0, *nr_entries)
226  * valid, and which has space for up to max_nr_entries entries.
227  * On return, the resulting sanitized E820 map entries will be in
228  * overwritten in the same location, starting at 'entries'.
229  *
230  * The integer pointed to by nr_entries must be valid on entry (the
231  * current number of valid entries located at 'entries'). If the
232  * sanitizing succeeds the *nr_entries will be updated with the new
233  * number of valid entries (something no more than max_nr_entries).
234  *
235  * The return value from e820__update_table() is zero if it
236  * successfully 'sanitized' the map entries passed in, and is -1
237  * if it did nothing, which can happen if either of (1) it was
238  * only passed one map entry, or (2) any of the input map entries
239  * were invalid (start + size < start, meaning that the size was
240  * so big the described memory range wrapped around through zero.)
241  *
242  *      Visually we're performing the following
243  *      (1,2,3,4 = memory types)...
244  *
245  *      Sample memory map (w/overlaps):
246  *         ____22__________________
247  *         ______________________4_
248  *         ____1111________________
249  *         _44_____________________
250  *         11111111________________
251  *         ____________________33__
252  *         ___________44___________
253  *         __________33333_________
254  *         ______________22________
255  *         ___________________2222_
256  *         _________111111111______
257  *         _____________________11_
258  *         _________________4______
259  *
260  *      Sanitized equivalent (no overlap):
261  *         1_______________________
262  *         _44_____________________
263  *         ___1____________________
264  *         ____22__________________
265  *         ______11________________
266  *         _________1______________
267  *         __________3_____________
268  *         ___________44___________
269  *         _____________33_________
270  *         _______________2________
271  *         ________________1_______
272  *         _________________4______
273  *         ___________________2____
274  *         ____________________33__
275  *         ______________________4_
276  */
277 struct change_member {
278         /* Pointer to the original entry: */
279         struct e820_entry       *entry;
280         /* Address for this change point: */
281         unsigned long long      addr;
282 };
283
284 static struct change_member     change_point_list[2*E820_MAX_ENTRIES]   __initdata;
285 static struct change_member     *change_point[2*E820_MAX_ENTRIES]       __initdata;
286 static struct e820_entry        *overlap_list[E820_MAX_ENTRIES]         __initdata;
287 static struct e820_entry        new_entries[E820_MAX_ENTRIES]           __initdata;
288
289 static int __init cpcompare(const void *a, const void *b)
290 {
291         struct change_member * const *app = a, * const *bpp = b;
292         const struct change_member *ap = *app, *bp = *bpp;
293
294         /*
295          * Inputs are pointers to two elements of change_point[].  If their
296          * addresses are not equal, their difference dominates.  If the addresses
297          * are equal, then consider one that represents the end of its region
298          * to be greater than one that does not.
299          */
300         if (ap->addr != bp->addr)
301                 return ap->addr > bp->addr ? 1 : -1;
302
303         return (ap->addr != ap->entry->addr) - (bp->addr != bp->entry->addr);
304 }
305
306 int __init e820__update_table(struct e820_table *table)
307 {
308         struct e820_entry *entries = table->entries;
309         u32 max_nr_entries = ARRAY_SIZE(table->entries);
310         enum e820_type current_type, last_type;
311         unsigned long long last_addr;
312         u32 new_nr_entries, overlap_entries;
313         u32 i, chg_idx, chg_nr;
314
315         /* If there's only one memory region, don't bother: */
316         if (table->nr_entries < 2)
317                 return -1;
318
319         BUG_ON(table->nr_entries > max_nr_entries);
320
321         /* Bail out if we find any unreasonable addresses in the map: */
322         for (i = 0; i < table->nr_entries; i++) {
323                 if (entries[i].addr + entries[i].size < entries[i].addr)
324                         return -1;
325         }
326
327         /* Create pointers for initial change-point information (for sorting): */
328         for (i = 0; i < 2 * table->nr_entries; i++)
329                 change_point[i] = &change_point_list[i];
330
331         /*
332          * Record all known change-points (starting and ending addresses),
333          * omitting empty memory regions:
334          */
335         chg_idx = 0;
336         for (i = 0; i < table->nr_entries; i++) {
337                 if (entries[i].size != 0) {
338                         change_point[chg_idx]->addr     = entries[i].addr;
339                         change_point[chg_idx++]->entry  = &entries[i];
340                         change_point[chg_idx]->addr     = entries[i].addr + entries[i].size;
341                         change_point[chg_idx++]->entry  = &entries[i];
342                 }
343         }
344         chg_nr = chg_idx;
345
346         /* Sort change-point list by memory addresses (low -> high): */
347         sort(change_point, chg_nr, sizeof(*change_point), cpcompare, NULL);
348
349         /* Create a new memory map, removing overlaps: */
350         overlap_entries = 0;     /* Number of entries in the overlap table */
351         new_nr_entries = 0;      /* Index for creating new map entries */
352         last_type = 0;           /* Start with undefined memory type */
353         last_addr = 0;           /* Start with 0 as last starting address */
354
355         /* Loop through change-points, determining effect on the new map: */
356         for (chg_idx = 0; chg_idx < chg_nr; chg_idx++) {
357                 /* Keep track of all overlapping entries */
358                 if (change_point[chg_idx]->addr == change_point[chg_idx]->entry->addr) {
359                         /* Add map entry to overlap list (> 1 entry implies an overlap) */
360                         overlap_list[overlap_entries++] = change_point[chg_idx]->entry;
361                 } else {
362                         /* Remove entry from list (order independent, so swap with last): */
363                         for (i = 0; i < overlap_entries; i++) {
364                                 if (overlap_list[i] == change_point[chg_idx]->entry)
365                                         overlap_list[i] = overlap_list[overlap_entries-1];
366                         }
367                         overlap_entries--;
368                 }
369                 /*
370                  * If there are overlapping entries, decide which
371                  * "type" to use (larger value takes precedence --
372                  * 1=usable, 2,3,4,4+=unusable)
373                  */
374                 current_type = 0;
375                 for (i = 0; i < overlap_entries; i++) {
376                         if (overlap_list[i]->type > current_type)
377                                 current_type = overlap_list[i]->type;
378                 }
379
380                 /* Continue building up new map based on this information: */
381                 if (current_type != last_type || current_type == E820_TYPE_PRAM) {
382                         if (last_type != 0)      {
383                                 new_entries[new_nr_entries].size = change_point[chg_idx]->addr - last_addr;
384                                 /* Move forward only if the new size was non-zero: */
385                                 if (new_entries[new_nr_entries].size != 0)
386                                         /* No more space left for new entries? */
387                                         if (++new_nr_entries >= max_nr_entries)
388                                                 break;
389                         }
390                         if (current_type != 0)  {
391                                 new_entries[new_nr_entries].addr = change_point[chg_idx]->addr;
392                                 new_entries[new_nr_entries].type = current_type;
393                                 last_addr = change_point[chg_idx]->addr;
394                         }
395                         last_type = current_type;
396                 }
397         }
398
399         /* Copy the new entries into the original location: */
400         memcpy(entries, new_entries, new_nr_entries*sizeof(*entries));
401         table->nr_entries = new_nr_entries;
402
403         return 0;
404 }
405
406 static int __init __append_e820_table(struct boot_e820_entry *entries, u32 nr_entries)
407 {
408         struct boot_e820_entry *entry = entries;
409
410         while (nr_entries) {
411                 u64 start = entry->addr;
412                 u64 size = entry->size;
413                 u64 end = start + size - 1;
414                 u32 type = entry->type;
415
416                 /* Ignore the entry on 64-bit overflow: */
417                 if (start > end && likely(size))
418                         return -1;
419
420                 e820__range_add(start, size, type);
421
422                 entry++;
423                 nr_entries--;
424         }
425         return 0;
426 }
427
428 /*
429  * Copy the BIOS E820 map into a safe place.
430  *
431  * Sanity-check it while we're at it..
432  *
433  * If we're lucky and live on a modern system, the setup code
434  * will have given us a memory map that we can use to properly
435  * set up memory.  If we aren't, we'll fake a memory map.
436  */
437 static int __init append_e820_table(struct boot_e820_entry *entries, u32 nr_entries)
438 {
439         /* Only one memory region (or negative)? Ignore it */
440         if (nr_entries < 2)
441                 return -1;
442
443         return __append_e820_table(entries, nr_entries);
444 }
445
446 static u64 __init
447 __e820__range_update(struct e820_table *table, u64 start, u64 size, enum e820_type old_type, enum e820_type new_type)
448 {
449         u64 end;
450         unsigned int i;
451         u64 real_updated_size = 0;
452
453         BUG_ON(old_type == new_type);
454
455         if (size > (ULLONG_MAX - start))
456                 size = ULLONG_MAX - start;
457
458         end = start + size;
459         printk(KERN_DEBUG "e820: update [mem %#010Lx-%#010Lx] ", start, end - 1);
460         e820_print_type(old_type);
461         pr_cont(" ==> ");
462         e820_print_type(new_type);
463         pr_cont("\n");
464
465         for (i = 0; i < table->nr_entries; i++) {
466                 struct e820_entry *entry = &table->entries[i];
467                 u64 final_start, final_end;
468                 u64 entry_end;
469
470                 if (entry->type != old_type)
471                         continue;
472
473                 entry_end = entry->addr + entry->size;
474
475                 /* Completely covered by new range? */
476                 if (entry->addr >= start && entry_end <= end) {
477                         entry->type = new_type;
478                         real_updated_size += entry->size;
479                         continue;
480                 }
481
482                 /* New range is completely covered? */
483                 if (entry->addr < start && entry_end > end) {
484                         __e820__range_add(table, start, size, new_type);
485                         __e820__range_add(table, end, entry_end - end, entry->type);
486                         entry->size = start - entry->addr;
487                         real_updated_size += size;
488                         continue;
489                 }
490
491                 /* Partially covered: */
492                 final_start = max(start, entry->addr);
493                 final_end = min(end, entry_end);
494                 if (final_start >= final_end)
495                         continue;
496
497                 __e820__range_add(table, final_start, final_end - final_start, new_type);
498
499                 real_updated_size += final_end - final_start;
500
501                 /*
502                  * Left range could be head or tail, so need to update
503                  * its size first:
504                  */
505                 entry->size -= final_end - final_start;
506                 if (entry->addr < final_start)
507                         continue;
508
509                 entry->addr = final_end;
510         }
511         return real_updated_size;
512 }
513
514 u64 __init e820__range_update(u64 start, u64 size, enum e820_type old_type, enum e820_type new_type)
515 {
516         return __e820__range_update(e820_table, start, size, old_type, new_type);
517 }
518
519 static u64 __init e820__range_update_kexec(u64 start, u64 size, enum e820_type old_type, enum e820_type  new_type)
520 {
521         return __e820__range_update(e820_table_kexec, start, size, old_type, new_type);
522 }
523
524 /* Remove a range of memory from the E820 table: */
525 u64 __init e820__range_remove(u64 start, u64 size, enum e820_type old_type, bool check_type)
526 {
527         int i;
528         u64 end;
529         u64 real_removed_size = 0;
530
531         if (size > (ULLONG_MAX - start))
532                 size = ULLONG_MAX - start;
533
534         end = start + size;
535         printk(KERN_DEBUG "e820: remove [mem %#010Lx-%#010Lx] ", start, end - 1);
536         if (check_type)
537                 e820_print_type(old_type);
538         pr_cont("\n");
539
540         for (i = 0; i < e820_table->nr_entries; i++) {
541                 struct e820_entry *entry = &e820_table->entries[i];
542                 u64 final_start, final_end;
543                 u64 entry_end;
544
545                 if (check_type && entry->type != old_type)
546                         continue;
547
548                 entry_end = entry->addr + entry->size;
549
550                 /* Completely covered? */
551                 if (entry->addr >= start && entry_end <= end) {
552                         real_removed_size += entry->size;
553                         memset(entry, 0, sizeof(*entry));
554                         continue;
555                 }
556
557                 /* Is the new range completely covered? */
558                 if (entry->addr < start && entry_end > end) {
559                         e820__range_add(end, entry_end - end, entry->type);
560                         entry->size = start - entry->addr;
561                         real_removed_size += size;
562                         continue;
563                 }
564
565                 /* Partially covered: */
566                 final_start = max(start, entry->addr);
567                 final_end = min(end, entry_end);
568                 if (final_start >= final_end)
569                         continue;
570
571                 real_removed_size += final_end - final_start;
572
573                 /*
574                  * Left range could be head or tail, so need to update
575                  * the size first:
576                  */
577                 entry->size -= final_end - final_start;
578                 if (entry->addr < final_start)
579                         continue;
580
581                 entry->addr = final_end;
582         }
583         return real_removed_size;
584 }
585
586 void __init e820__update_table_print(void)
587 {
588         if (e820__update_table(e820_table))
589                 return;
590
591         pr_info("modified physical RAM map:\n");
592         e820__print_table("modified");
593 }
594
595 static void __init e820__update_table_kexec(void)
596 {
597         e820__update_table(e820_table_kexec);
598 }
599
600 #define MAX_GAP_END 0x100000000ull
601
602 /*
603  * Search for a gap in the E820 memory space from 0 to MAX_GAP_END (4GB).
604  */
605 static int __init e820_search_gap(unsigned long *gapstart, unsigned long *gapsize)
606 {
607         unsigned long long last = MAX_GAP_END;
608         int i = e820_table->nr_entries;
609         int found = 0;
610
611         while (--i >= 0) {
612                 unsigned long long start = e820_table->entries[i].addr;
613                 unsigned long long end = start + e820_table->entries[i].size;
614
615                 /*
616                  * Since "last" is at most 4GB, we know we'll
617                  * fit in 32 bits if this condition is true:
618                  */
619                 if (last > end) {
620                         unsigned long gap = last - end;
621
622                         if (gap >= *gapsize) {
623                                 *gapsize = gap;
624                                 *gapstart = end;
625                                 found = 1;
626                         }
627                 }
628                 if (start < last)
629                         last = start;
630         }
631         return found;
632 }
633
634 /*
635  * Search for the biggest gap in the low 32 bits of the E820
636  * memory space. We pass this space to the PCI subsystem, so
637  * that it can assign MMIO resources for hotplug or
638  * unconfigured devices in.
639  *
640  * Hopefully the BIOS let enough space left.
641  */
642 __init void e820__setup_pci_gap(void)
643 {
644         unsigned long gapstart, gapsize;
645         int found;
646
647         gapsize = 0x400000;
648         found  = e820_search_gap(&gapstart, &gapsize);
649
650         if (!found) {
651 #ifdef CONFIG_X86_64
652                 gapstart = (max_pfn << PAGE_SHIFT) + 1024*1024;
653                 pr_err("Cannot find an available gap in the 32-bit address range\n");
654                 pr_err("PCI devices with unassigned 32-bit BARs may not work!\n");
655 #else
656                 gapstart = 0x10000000;
657 #endif
658         }
659
660         /*
661          * e820__reserve_resources_late() protects stolen RAM already:
662          */
663         pci_mem_start = gapstart;
664
665         pr_info("[mem %#010lx-%#010lx] available for PCI devices\n",
666                 gapstart, gapstart + gapsize - 1);
667 }
668
669 /*
670  * Called late during init, in free_initmem().
671  *
672  * Initial e820_table and e820_table_kexec are largish __initdata arrays.
673  *
674  * Copy them to a (usually much smaller) dynamically allocated area that is
675  * sized precisely after the number of e820 entries.
676  *
677  * This is done after we've performed all the fixes and tweaks to the tables.
678  * All functions which modify them are __init functions, which won't exist
679  * after free_initmem().
680  */
681 __init void e820__reallocate_tables(void)
682 {
683         struct e820_table *n;
684         int size;
685
686         size = offsetof(struct e820_table, entries) + sizeof(struct e820_entry)*e820_table->nr_entries;
687         n = kmemdup(e820_table, size, GFP_KERNEL);
688         BUG_ON(!n);
689         e820_table = n;
690
691         size = offsetof(struct e820_table, entries) + sizeof(struct e820_entry)*e820_table_kexec->nr_entries;
692         n = kmemdup(e820_table_kexec, size, GFP_KERNEL);
693         BUG_ON(!n);
694         e820_table_kexec = n;
695
696         size = offsetof(struct e820_table, entries) + sizeof(struct e820_entry)*e820_table_firmware->nr_entries;
697         n = kmemdup(e820_table_firmware, size, GFP_KERNEL);
698         BUG_ON(!n);
699         e820_table_firmware = n;
700 }
701
702 /*
703  * Because of the small fixed size of struct boot_params, only the first
704  * 128 E820 memory entries are passed to the kernel via boot_params.e820_table,
705  * the remaining (if any) entries are passed via the SETUP_E820_EXT node of
706  * struct setup_data, which is parsed here.
707  */
708 void __init e820__memory_setup_extended(u64 phys_addr, u32 data_len)
709 {
710         int entries;
711         struct boot_e820_entry *extmap;
712         struct setup_data *sdata;
713
714         sdata = early_memremap(phys_addr, data_len);
715         entries = sdata->len / sizeof(*extmap);
716         extmap = (struct boot_e820_entry *)(sdata->data);
717
718         __append_e820_table(extmap, entries);
719         e820__update_table(e820_table);
720
721         memcpy(e820_table_kexec, e820_table, sizeof(*e820_table_kexec));
722         memcpy(e820_table_firmware, e820_table, sizeof(*e820_table_firmware));
723
724         early_memunmap(sdata, data_len);
725         pr_info("extended physical RAM map:\n");
726         e820__print_table("extended");
727 }
728
729 /*
730  * Find the ranges of physical addresses that do not correspond to
731  * E820 RAM areas and register the corresponding pages as 'nosave' for
732  * hibernation (32-bit) or software suspend and suspend to RAM (64-bit).
733  *
734  * This function requires the E820 map to be sorted and without any
735  * overlapping entries.
736  */
737 void __init e820__register_nosave_regions(unsigned long limit_pfn)
738 {
739         int i;
740         unsigned long pfn = 0;
741
742         for (i = 0; i < e820_table->nr_entries; i++) {
743                 struct e820_entry *entry = &e820_table->entries[i];
744
745                 if (pfn < PFN_UP(entry->addr))
746                         register_nosave_region(pfn, PFN_UP(entry->addr));
747
748                 pfn = PFN_DOWN(entry->addr + entry->size);
749
750                 if (entry->type != E820_TYPE_RAM && entry->type != E820_TYPE_RESERVED_KERN)
751                         register_nosave_region(PFN_UP(entry->addr), pfn);
752
753                 if (pfn >= limit_pfn)
754                         break;
755         }
756 }
757
758 #ifdef CONFIG_ACPI
759 /*
760  * Register ACPI NVS memory regions, so that we can save/restore them during
761  * hibernation and the subsequent resume:
762  */
763 static int __init e820__register_nvs_regions(void)
764 {
765         int i;
766
767         for (i = 0; i < e820_table->nr_entries; i++) {
768                 struct e820_entry *entry = &e820_table->entries[i];
769
770                 if (entry->type == E820_TYPE_NVS)
771                         acpi_nvs_register(entry->addr, entry->size);
772         }
773
774         return 0;
775 }
776 core_initcall(e820__register_nvs_regions);
777 #endif
778
779 /*
780  * Allocate the requested number of bytes with the requsted alignment
781  * and return (the physical address) to the caller. Also register this
782  * range in the 'kexec' E820 table as a reserved range.
783  *
784  * This allows kexec to fake a new mptable, as if it came from the real
785  * system.
786  */
787 u64 __init e820__memblock_alloc_reserved(u64 size, u64 align)
788 {
789         u64 addr;
790
791         addr = memblock_phys_alloc(size, align);
792         if (addr) {
793                 e820__range_update_kexec(addr, size, E820_TYPE_RAM, E820_TYPE_RESERVED);
794                 pr_info("update e820_table_kexec for e820__memblock_alloc_reserved()\n");
795                 e820__update_table_kexec();
796         }
797
798         return addr;
799 }
800
801 #ifdef CONFIG_X86_32
802 # ifdef CONFIG_X86_PAE
803 #  define MAX_ARCH_PFN          (1ULL<<(36-PAGE_SHIFT))
804 # else
805 #  define MAX_ARCH_PFN          (1ULL<<(32-PAGE_SHIFT))
806 # endif
807 #else /* CONFIG_X86_32 */
808 # define MAX_ARCH_PFN MAXMEM>>PAGE_SHIFT
809 #endif
810
811 /*
812  * Find the highest page frame number we have available
813  */
814 static unsigned long __init e820_end_pfn(unsigned long limit_pfn, enum e820_type type)
815 {
816         int i;
817         unsigned long last_pfn = 0;
818         unsigned long max_arch_pfn = MAX_ARCH_PFN;
819
820         for (i = 0; i < e820_table->nr_entries; i++) {
821                 struct e820_entry *entry = &e820_table->entries[i];
822                 unsigned long start_pfn;
823                 unsigned long end_pfn;
824
825                 if (entry->type != type)
826                         continue;
827
828                 start_pfn = entry->addr >> PAGE_SHIFT;
829                 end_pfn = (entry->addr + entry->size) >> PAGE_SHIFT;
830
831                 if (start_pfn >= limit_pfn)
832                         continue;
833                 if (end_pfn > limit_pfn) {
834                         last_pfn = limit_pfn;
835                         break;
836                 }
837                 if (end_pfn > last_pfn)
838                         last_pfn = end_pfn;
839         }
840
841         if (last_pfn > max_arch_pfn)
842                 last_pfn = max_arch_pfn;
843
844         pr_info("last_pfn = %#lx max_arch_pfn = %#lx\n",
845                 last_pfn, max_arch_pfn);
846         return last_pfn;
847 }
848
849 unsigned long __init e820__end_of_ram_pfn(void)
850 {
851         return e820_end_pfn(MAX_ARCH_PFN, E820_TYPE_RAM);
852 }
853
854 unsigned long __init e820__end_of_low_ram_pfn(void)
855 {
856         return e820_end_pfn(1UL << (32 - PAGE_SHIFT), E820_TYPE_RAM);
857 }
858
859 static void __init early_panic(char *msg)
860 {
861         early_printk(msg);
862         panic(msg);
863 }
864
865 static int userdef __initdata;
866
867 /* The "mem=nopentium" boot option disables 4MB page tables on 32-bit kernels: */
868 static int __init parse_memopt(char *p)
869 {
870         u64 mem_size;
871
872         if (!p)
873                 return -EINVAL;
874
875         if (!strcmp(p, "nopentium")) {
876 #ifdef CONFIG_X86_32
877                 setup_clear_cpu_cap(X86_FEATURE_PSE);
878                 return 0;
879 #else
880                 pr_warn("mem=nopentium ignored! (only supported on x86_32)\n");
881                 return -EINVAL;
882 #endif
883         }
884
885         userdef = 1;
886         mem_size = memparse(p, &p);
887
888         /* Don't remove all memory when getting "mem={invalid}" parameter: */
889         if (mem_size == 0)
890                 return -EINVAL;
891
892         e820__range_remove(mem_size, ULLONG_MAX - mem_size, E820_TYPE_RAM, 1);
893
894 #ifdef CONFIG_MEMORY_HOTPLUG
895         max_mem_size = mem_size;
896 #endif
897
898         return 0;
899 }
900 early_param("mem", parse_memopt);
901
902 static int __init parse_memmap_one(char *p)
903 {
904         char *oldp;
905         u64 start_at, mem_size;
906
907         if (!p)
908                 return -EINVAL;
909
910         if (!strncmp(p, "exactmap", 8)) {
911 #ifdef CONFIG_CRASH_DUMP
912                 /*
913                  * If we are doing a crash dump, we still need to know
914                  * the real memory size before the original memory map is
915                  * reset.
916                  */
917                 saved_max_pfn = e820__end_of_ram_pfn();
918 #endif
919                 e820_table->nr_entries = 0;
920                 userdef = 1;
921                 return 0;
922         }
923
924         oldp = p;
925         mem_size = memparse(p, &p);
926         if (p == oldp)
927                 return -EINVAL;
928
929         userdef = 1;
930         if (*p == '@') {
931                 start_at = memparse(p+1, &p);
932                 e820__range_add(start_at, mem_size, E820_TYPE_RAM);
933         } else if (*p == '#') {
934                 start_at = memparse(p+1, &p);
935                 e820__range_add(start_at, mem_size, E820_TYPE_ACPI);
936         } else if (*p == '$') {
937                 start_at = memparse(p+1, &p);
938                 e820__range_add(start_at, mem_size, E820_TYPE_RESERVED);
939         } else if (*p == '!') {
940                 start_at = memparse(p+1, &p);
941                 e820__range_add(start_at, mem_size, E820_TYPE_PRAM);
942         } else if (*p == '%') {
943                 enum e820_type from = 0, to = 0;
944
945                 start_at = memparse(p + 1, &p);
946                 if (*p == '-')
947                         from = simple_strtoull(p + 1, &p, 0);
948                 if (*p == '+')
949                         to = simple_strtoull(p + 1, &p, 0);
950                 if (*p != '\0')
951                         return -EINVAL;
952                 if (from && to)
953                         e820__range_update(start_at, mem_size, from, to);
954                 else if (to)
955                         e820__range_add(start_at, mem_size, to);
956                 else if (from)
957                         e820__range_remove(start_at, mem_size, from, 1);
958                 else
959                         e820__range_remove(start_at, mem_size, 0, 0);
960         } else {
961                 e820__range_remove(mem_size, ULLONG_MAX - mem_size, E820_TYPE_RAM, 1);
962         }
963
964         return *p == '\0' ? 0 : -EINVAL;
965 }
966
967 static int __init parse_memmap_opt(char *str)
968 {
969         while (str) {
970                 char *k = strchr(str, ',');
971
972                 if (k)
973                         *k++ = 0;
974
975                 parse_memmap_one(str);
976                 str = k;
977         }
978
979         return 0;
980 }
981 early_param("memmap", parse_memmap_opt);
982
983 /*
984  * Reserve all entries from the bootloader's extensible data nodes list,
985  * because if present we are going to use it later on to fetch e820
986  * entries from it:
987  */
988 void __init e820__reserve_setup_data(void)
989 {
990         struct setup_data *data;
991         u64 pa_data;
992
993         pa_data = boot_params.hdr.setup_data;
994         if (!pa_data)
995                 return;
996
997         while (pa_data) {
998                 data = early_memremap(pa_data, sizeof(*data));
999                 e820__range_update(pa_data, sizeof(*data)+data->len, E820_TYPE_RAM, E820_TYPE_RESERVED_KERN);
1000                 e820__range_update_kexec(pa_data, sizeof(*data)+data->len, E820_TYPE_RAM, E820_TYPE_RESERVED_KERN);
1001                 pa_data = data->next;
1002                 early_memunmap(data, sizeof(*data));
1003         }
1004
1005         e820__update_table(e820_table);
1006         e820__update_table(e820_table_kexec);
1007
1008         pr_info("extended physical RAM map:\n");
1009         e820__print_table("reserve setup_data");
1010 }
1011
1012 /*
1013  * Called after parse_early_param(), after early parameters (such as mem=)
1014  * have been processed, in which case we already have an E820 table filled in
1015  * via the parameter callback function(s), but it's not sorted and printed yet:
1016  */
1017 void __init e820__finish_early_params(void)
1018 {
1019         if (userdef) {
1020                 if (e820__update_table(e820_table) < 0)
1021                         early_panic("Invalid user supplied memory map");
1022
1023                 pr_info("user-defined physical RAM map:\n");
1024                 e820__print_table("user");
1025         }
1026 }
1027
1028 static const char *__init e820_type_to_string(struct e820_entry *entry)
1029 {
1030         switch (entry->type) {
1031         case E820_TYPE_RESERVED_KERN:   /* Fall-through: */
1032         case E820_TYPE_RAM:             return "System RAM";
1033         case E820_TYPE_ACPI:            return "ACPI Tables";
1034         case E820_TYPE_NVS:             return "ACPI Non-volatile Storage";
1035         case E820_TYPE_UNUSABLE:        return "Unusable memory";
1036         case E820_TYPE_PRAM:            return "Persistent Memory (legacy)";
1037         case E820_TYPE_PMEM:            return "Persistent Memory";
1038         case E820_TYPE_RESERVED:        return "Reserved";
1039         default:                        return "Unknown E820 type";
1040         }
1041 }
1042
1043 static unsigned long __init e820_type_to_iomem_type(struct e820_entry *entry)
1044 {
1045         switch (entry->type) {
1046         case E820_TYPE_RESERVED_KERN:   /* Fall-through: */
1047         case E820_TYPE_RAM:             return IORESOURCE_SYSTEM_RAM;
1048         case E820_TYPE_ACPI:            /* Fall-through: */
1049         case E820_TYPE_NVS:             /* Fall-through: */
1050         case E820_TYPE_UNUSABLE:        /* Fall-through: */
1051         case E820_TYPE_PRAM:            /* Fall-through: */
1052         case E820_TYPE_PMEM:            /* Fall-through: */
1053         case E820_TYPE_RESERVED:        /* Fall-through: */
1054         default:                        return IORESOURCE_MEM;
1055         }
1056 }
1057
1058 static unsigned long __init e820_type_to_iores_desc(struct e820_entry *entry)
1059 {
1060         switch (entry->type) {
1061         case E820_TYPE_ACPI:            return IORES_DESC_ACPI_TABLES;
1062         case E820_TYPE_NVS:             return IORES_DESC_ACPI_NV_STORAGE;
1063         case E820_TYPE_PMEM:            return IORES_DESC_PERSISTENT_MEMORY;
1064         case E820_TYPE_PRAM:            return IORES_DESC_PERSISTENT_MEMORY_LEGACY;
1065         case E820_TYPE_RESERVED_KERN:   /* Fall-through: */
1066         case E820_TYPE_RAM:             /* Fall-through: */
1067         case E820_TYPE_UNUSABLE:        /* Fall-through: */
1068         case E820_TYPE_RESERVED:        /* Fall-through: */
1069         default:                        return IORES_DESC_NONE;
1070         }
1071 }
1072
1073 static bool __init do_mark_busy(enum e820_type type, struct resource *res)
1074 {
1075         /* this is the legacy bios/dos rom-shadow + mmio region */
1076         if (res->start < (1ULL<<20))
1077                 return true;
1078
1079         /*
1080          * Treat persistent memory like device memory, i.e. reserve it
1081          * for exclusive use of a driver
1082          */
1083         switch (type) {
1084         case E820_TYPE_RESERVED:
1085         case E820_TYPE_PRAM:
1086         case E820_TYPE_PMEM:
1087                 return false;
1088         case E820_TYPE_RESERVED_KERN:
1089         case E820_TYPE_RAM:
1090         case E820_TYPE_ACPI:
1091         case E820_TYPE_NVS:
1092         case E820_TYPE_UNUSABLE:
1093         default:
1094                 return true;
1095         }
1096 }
1097
1098 /*
1099  * Mark E820 reserved areas as busy for the resource manager:
1100  */
1101
1102 static struct resource __initdata *e820_res;
1103
1104 void __init e820__reserve_resources(void)
1105 {
1106         int i;
1107         struct resource *res;
1108         u64 end;
1109
1110         res = memblock_alloc(sizeof(*res) * e820_table->nr_entries,
1111                              SMP_CACHE_BYTES);
1112         if (!res)
1113                 panic("%s: Failed to allocate %zu bytes\n", __func__,
1114                       sizeof(*res) * e820_table->nr_entries);
1115         e820_res = res;
1116
1117         for (i = 0; i < e820_table->nr_entries; i++) {
1118                 struct e820_entry *entry = e820_table->entries + i;
1119
1120                 end = entry->addr + entry->size - 1;
1121                 if (end != (resource_size_t)end) {
1122                         res++;
1123                         continue;
1124                 }
1125                 res->start = entry->addr;
1126                 res->end   = end;
1127                 res->name  = e820_type_to_string(entry);
1128                 res->flags = e820_type_to_iomem_type(entry);
1129                 res->desc  = e820_type_to_iores_desc(entry);
1130
1131                 /*
1132                  * Don't register the region that could be conflicted with
1133                  * PCI device BAR resources and insert them later in
1134                  * pcibios_resource_survey():
1135                  */
1136                 if (do_mark_busy(entry->type, res)) {
1137                         res->flags |= IORESOURCE_BUSY;
1138                         insert_resource(&iomem_resource, res);
1139                 }
1140                 res++;
1141         }
1142
1143         /* Expose the bootloader-provided memory layout to the sysfs. */
1144         for (i = 0; i < e820_table_firmware->nr_entries; i++) {
1145                 struct e820_entry *entry = e820_table_firmware->entries + i;
1146
1147                 firmware_map_add_early(entry->addr, entry->addr + entry->size, e820_type_to_string(entry));
1148         }
1149 }
1150
1151 /*
1152  * How much should we pad the end of RAM, depending on where it is?
1153  */
1154 static unsigned long __init ram_alignment(resource_size_t pos)
1155 {
1156         unsigned long mb = pos >> 20;
1157
1158         /* To 64kB in the first megabyte */
1159         if (!mb)
1160                 return 64*1024;
1161
1162         /* To 1MB in the first 16MB */
1163         if (mb < 16)
1164                 return 1024*1024;
1165
1166         /* To 64MB for anything above that */
1167         return 64*1024*1024;
1168 }
1169
1170 #define MAX_RESOURCE_SIZE ((resource_size_t)-1)
1171
1172 void __init e820__reserve_resources_late(void)
1173 {
1174         int i;
1175         struct resource *res;
1176
1177         res = e820_res;
1178         for (i = 0; i < e820_table->nr_entries; i++) {
1179                 if (!res->parent && res->end)
1180                         insert_resource_expand_to_fit(&iomem_resource, res);
1181                 res++;
1182         }
1183
1184         /*
1185          * Try to bump up RAM regions to reasonable boundaries, to
1186          * avoid stolen RAM:
1187          */
1188         for (i = 0; i < e820_table->nr_entries; i++) {
1189                 struct e820_entry *entry = &e820_table->entries[i];
1190                 u64 start, end;
1191
1192                 if (entry->type != E820_TYPE_RAM)
1193                         continue;
1194
1195                 start = entry->addr + entry->size;
1196                 end = round_up(start, ram_alignment(start)) - 1;
1197                 if (end > MAX_RESOURCE_SIZE)
1198                         end = MAX_RESOURCE_SIZE;
1199                 if (start >= end)
1200                         continue;
1201
1202                 printk(KERN_DEBUG "e820: reserve RAM buffer [mem %#010llx-%#010llx]\n", start, end);
1203                 reserve_region_with_split(&iomem_resource, start, end, "RAM buffer");
1204         }
1205 }
1206
1207 /*
1208  * Pass the firmware (bootloader) E820 map to the kernel and process it:
1209  */
1210 char *__init e820__memory_setup_default(void)
1211 {
1212         char *who = "BIOS-e820";
1213
1214         /*
1215          * Try to copy the BIOS-supplied E820-map.
1216          *
1217          * Otherwise fake a memory map; one section from 0k->640k,
1218          * the next section from 1mb->appropriate_mem_k
1219          */
1220         if (append_e820_table(boot_params.e820_table, boot_params.e820_entries) < 0) {
1221                 u64 mem_size;
1222
1223                 /* Compare results from other methods and take the one that gives more RAM: */
1224                 if (boot_params.alt_mem_k < boot_params.screen_info.ext_mem_k) {
1225                         mem_size = boot_params.screen_info.ext_mem_k;
1226                         who = "BIOS-88";
1227                 } else {
1228                         mem_size = boot_params.alt_mem_k;
1229                         who = "BIOS-e801";
1230                 }
1231
1232                 e820_table->nr_entries = 0;
1233                 e820__range_add(0, LOWMEMSIZE(), E820_TYPE_RAM);
1234                 e820__range_add(HIGH_MEMORY, mem_size << 10, E820_TYPE_RAM);
1235         }
1236
1237         /* We just appended a lot of ranges, sanitize the table: */
1238         e820__update_table(e820_table);
1239
1240         return who;
1241 }
1242
1243 /*
1244  * Calls e820__memory_setup_default() in essence to pick up the firmware/bootloader
1245  * E820 map - with an optional platform quirk available for virtual platforms
1246  * to override this method of boot environment processing:
1247  */
1248 void __init e820__memory_setup(void)
1249 {
1250         char *who;
1251
1252         /* This is a firmware interface ABI - make sure we don't break it: */
1253         BUILD_BUG_ON(sizeof(struct boot_e820_entry) != 20);
1254
1255         who = x86_init.resources.memory_setup();
1256
1257         memcpy(e820_table_kexec, e820_table, sizeof(*e820_table_kexec));
1258         memcpy(e820_table_firmware, e820_table, sizeof(*e820_table_firmware));
1259
1260         pr_info("BIOS-provided physical RAM map:\n");
1261         e820__print_table(who);
1262 }
1263
1264 void __init e820__memblock_setup(void)
1265 {
1266         int i;
1267         u64 end;
1268
1269         /*
1270          * The bootstrap memblock region count maximum is 128 entries
1271          * (INIT_MEMBLOCK_REGIONS), but EFI might pass us more E820 entries
1272          * than that - so allow memblock resizing.
1273          *
1274          * This is safe, because this call happens pretty late during x86 setup,
1275          * so we know about reserved memory regions already. (This is important
1276          * so that memblock resizing does no stomp over reserved areas.)
1277          */
1278         memblock_allow_resize();
1279
1280         for (i = 0; i < e820_table->nr_entries; i++) {
1281                 struct e820_entry *entry = &e820_table->entries[i];
1282
1283                 end = entry->addr + entry->size;
1284                 if (end != (resource_size_t)end)
1285                         continue;
1286
1287                 if (entry->type != E820_TYPE_RAM && entry->type != E820_TYPE_RESERVED_KERN)
1288                         continue;
1289
1290                 memblock_add(entry->addr, entry->size);
1291         }
1292
1293         /* Throw away partial pages: */
1294         memblock_trim_memory(PAGE_SIZE);
1295
1296         memblock_dump_all();
1297 }