diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/commonlib/include/commonlib/coreboot_tables.h | 1 | ||||
-rw-r--r-- | src/include/bootmem.h | 1 | ||||
-rw-r--r-- | src/include/device/device.h | 3 | ||||
-rw-r--r-- | src/include/device/resource.h | 2 | ||||
-rw-r--r-- | src/lib/bootmem.c | 5 |
5 files changed, 12 insertions, 0 deletions
diff --git a/src/commonlib/include/commonlib/coreboot_tables.h b/src/commonlib/include/commonlib/coreboot_tables.h index 86bf5438b7..e299e54a38 100644 --- a/src/commonlib/include/commonlib/coreboot_tables.h +++ b/src/commonlib/include/commonlib/coreboot_tables.h @@ -140,6 +140,7 @@ struct lb_memory_range { #define LB_MEM_UNUSABLE 5 /* Unusable address space */ #define LB_MEM_VENDOR_RSVD 6 /* Vendor Reserved */ #define LB_MEM_TABLE 16 /* Ram configuration tables are kept in */ +#define LB_MEM_SOFT_RESERVED 0xefffffff /* Specific purpose memory */ }; struct lb_memory { diff --git a/src/include/bootmem.h b/src/include/bootmem.h index 6ccdd884aa..0478a12755 100644 --- a/src/include/bootmem.h +++ b/src/include/bootmem.h @@ -22,6 +22,7 @@ enum bootmem_type { BM_MEM_FIRST = 0x10000, /* First entry in this list */ BM_MEM_RAM, /* Memory anyone can use */ BM_MEM_RESERVED, /* Don't use this memory region */ + BM_MEM_SOFT_RESERVED, /* Specific purpose memory */ BM_MEM_ACPI, /* ACPI Tables */ BM_MEM_NVS, /* ACPI NVS Memory */ BM_MEM_UNUSABLE, /* Unusable address space */ diff --git a/src/include/device/device.h b/src/include/device/device.h index b4b2d20e11..8a663f095c 100644 --- a/src/include/device/device.h +++ b/src/include/device/device.h @@ -428,6 +428,9 @@ static inline void fixed_mem_resource_kb(struct device *dev, unsigned long index fixed_mem_resource_kb(dev, idx, basek, sizek, IORESOURCE_CACHEABLE \ | IORESOURCE_RESERVE) +#define soft_reserved_ram_resource(dev, idx, basek, sizek) \ + fixed_mem_resource(dev, idx, basek, sizek, IORESOURCE_SOFT_RESERVE) + #define bad_ram_resource_kb(dev, idx, basek, sizek) \ reserved_ram_resource_kb((dev), (idx), (basek), (sizek)) diff --git a/src/include/device/resource.h b/src/include/device/resource.h index 96241358a4..3afdf6a07d 100644 --- a/src/include/device/resource.h +++ b/src/include/device/resource.h @@ -28,6 +28,8 @@ #define IORESOURCE_BRIDGE 0x00080000 /* This is a request to allocate resource about 4G boundary. */ #define IORESOURCE_ABOVE_4G 0x00100000 +/* The resource needs to be soft reserved in the coreboot table */ +#define IORESOURCE_SOFT_RESERVE 0x00200000 /* The resource needs to be reserved in the coreboot table */ #define IORESOURCE_RESERVE 0x10000000 /* The IO resource assignment has been stored in the device */ diff --git a/src/lib/bootmem.c b/src/lib/bootmem.c index ea971b6851..578ddac19f 100644 --- a/src/lib/bootmem.c +++ b/src/lib/bootmem.c @@ -50,6 +50,8 @@ static uint32_t bootmem_to_lb_tag(const enum bootmem_type tag) return LB_MEM_RESERVED; case BM_MEM_TABLE: return LB_MEM_TABLE; + case BM_MEM_SOFT_RESERVED: + return LB_MEM_SOFT_RESERVED; default: printk(BIOS_ERR, "Unsupported tag %u\n", tag); return LB_MEM_RESERVED; @@ -60,6 +62,7 @@ static void bootmem_init(void) { const unsigned long cacheable = IORESOURCE_CACHEABLE; const unsigned long reserved = IORESOURCE_RESERVE; + const unsigned long soft_reserved = IORESOURCE_SOFT_RESERVE; struct memranges *bm = &bootmem; initialized = 1; @@ -71,6 +74,7 @@ static void bootmem_init(void) */ memranges_init(bm, cacheable, cacheable, BM_MEM_RAM); memranges_add_resources(bm, reserved, reserved, BM_MEM_RESERVED); + memranges_add_resources(bm, soft_reserved, soft_reserved, BM_MEM_SOFT_RESERVED); memranges_clone(&bootmem_os, bm); /* Add memory used by CBMEM. */ @@ -136,6 +140,7 @@ static const struct range_strings type_strings[] = { { BM_MEM_BL31, "BL31" }, { BM_MEM_OPENSBI, "OPENSBI" }, { BM_MEM_TABLE, "CONFIGURATION TABLES" }, + { BM_MEM_SOFT_RESERVED, "SOFT RESERVED" }, { BM_MEM_RAMSTAGE, "RAMSTAGE" }, { BM_MEM_PAYLOAD, "PAYLOAD" }, }; |