x86: coreboot: Correctly report E820 types
[oweals/u-boot.git] / arch / x86 / cpu / coreboot / sdram.c
index 9c3ab81734255d55b7c22300e8de067b134a0645..27228861de56908bf615cc582f8a3192a9ee58ab 100644 (file)
@@ -22,9 +22,10 @@ DECLARE_GLOBAL_DATA_PTR;
 
 unsigned install_e820_map(unsigned max_entries, struct e820entry *entries)
 {
+       unsigned num_entries;
        int i;
 
-       unsigned num_entries = min((unsigned)lib_sysinfo.n_memranges, max_entries);
+       num_entries = min((unsigned)lib_sysinfo.n_memranges, max_entries);
        if (num_entries < lib_sysinfo.n_memranges) {
                printf("Warning: Limiting e820 map to %d entries.\n",
                        num_entries);
@@ -34,8 +35,18 @@ unsigned install_e820_map(unsigned max_entries, struct e820entry *entries)
 
                entries[i].addr = memrange->base;
                entries[i].size = memrange->size;
-               entries[i].type = memrange->type;
+
+               /*
+                * coreboot has some extensions (type 6 & 16) to the E820 types.
+                * When we detect this, mark it as E820_RESERVED.
+                */
+               if (memrange->type == CB_MEM_VENDOR_RSVD ||
+                   memrange->type == CB_MEM_TABLE)
+                       entries[i].type = E820_RESERVED;
+               else
+                       entries[i].type = memrange->type;
        }
+
        return num_entries;
 }