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