diff options
-rw-r--r-- | core/fast-reboot.c | 4 | ||||
-rw-r--r-- | core/mem_region.c | 24 | ||||
-rw-r--r-- | core/test/run-malloc-speed.c | 1 | ||||
-rw-r--r-- | core/test/run-malloc.c | 1 | ||||
-rw-r--r-- | core/test/run-mem_range_is_reserved.c | 2 | ||||
-rw-r--r-- | core/test/run-mem_region.c | 1 | ||||
-rw-r--r-- | core/test/run-mem_region_init.c | 2 | ||||
-rw-r--r-- | core/test/run-mem_region_next.c | 2 | ||||
-rw-r--r-- | core/test/run-mem_region_release_unused.c | 2 | ||||
-rw-r--r-- | core/test/run-mem_region_release_unused_noalloc.c | 2 | ||||
-rw-r--r-- | core/test/run-mem_region_reservations.c | 2 |
11 files changed, 40 insertions, 3 deletions
diff --git a/core/fast-reboot.c b/core/fast-reboot.c index 8a1793f8..2d8dc028 100644 --- a/core/fast-reboot.c +++ b/core/fast-reboot.c @@ -376,9 +376,7 @@ void __noreturn fast_reboot_entry(void) * preload. * * Mambo may have embedded payload here, so don't clear - * it at all. The OS may have already overwritten it, so - * mambo really should reserve memory regions for this, if - * fast reboot is to work reliably. + * it at all. */ memset(KERNEL_LOAD_BASE, 0, KERNEL_LOAD_SIZE); memset(INITRAMFS_LOAD_BASE, 0, INITRAMFS_LOAD_SIZE); diff --git a/core/mem_region.c b/core/mem_region.c index bd387f3c..7aac4e1c 100644 --- a/core/mem_region.c +++ b/core/mem_region.c @@ -21,6 +21,7 @@ #include <lock.h> #include <device.h> #include <cpu.h> +#include <chip.h> #include <affinity.h> #include <types.h> #include <mem_region.h> @@ -93,6 +94,21 @@ static struct mem_region skiboot_cpu_stacks = { .type = REGION_SKIBOOT_FIRMWARE, }; +static struct mem_region skiboot_mambo_kernel = { + .name = "ibm,firmware-mambo-kernel", + .start = (unsigned long)KERNEL_LOAD_BASE, + .len = KERNEL_LOAD_SIZE, + .type = REGION_SKIBOOT_FIRMWARE, +}; + +static struct mem_region skiboot_mambo_initramfs = { + .name = "ibm,firmware-mambo-initramfs", + .start = (unsigned long)INITRAMFS_LOAD_BASE, + .len = INITRAMFS_LOAD_SIZE, + .type = REGION_SKIBOOT_FIRMWARE, +}; + + struct alloc_hdr { bool free : 1; bool prev_free : 1; @@ -1107,6 +1123,14 @@ void mem_region_init(void) abort(); } + if (chip_quirk(QUIRK_MAMBO_CALLOUTS)) { + if (!add_region(&skiboot_mambo_kernel) || + !add_region(&skiboot_mambo_initramfs)) { + prerror("Out of memory adding mambo payload\n"); + abort(); + } + } + /* Add reserved reanges from HDAT */ list_for_each_safe(&early_reserves, region, next, list) { bool added; diff --git a/core/test/run-malloc-speed.c b/core/test/run-malloc-speed.c index 8ecef3a0..94e96e79 100644 --- a/core/test/run-malloc-speed.c +++ b/core/test/run-malloc-speed.c @@ -49,6 +49,7 @@ static inline void real_free(void *p) char __rodata_start[1], __rodata_end[1]; struct dt_node *dt_root; +enum proc_chip_quirks proc_chip_quirks; void lock_caller(struct lock *l, const char *caller) { diff --git a/core/test/run-malloc.c b/core/test/run-malloc.c index 0204e77d..cb68768c 100644 --- a/core/test/run-malloc.c +++ b/core/test/run-malloc.c @@ -51,6 +51,7 @@ static inline void real_free(void *p) #define TEST_HEAP_SIZE (1ULL << TEST_HEAP_ORDER) struct dt_node *dt_root; +enum proc_chip_quirks proc_chip_quirks; void lock_caller(struct lock *l, const char *caller) { diff --git a/core/test/run-mem_range_is_reserved.c b/core/test/run-mem_range_is_reserved.c index f44f1c2d..15dc6cbc 100644 --- a/core/test/run-mem_range_is_reserved.c +++ b/core/test/run-mem_range_is_reserved.c @@ -53,6 +53,8 @@ static void real_free(void *p) #include <assert.h> #include <stdio.h> +enum proc_chip_quirks proc_chip_quirks; + void lock_caller(struct lock *l, const char *caller) { (void)caller; diff --git a/core/test/run-mem_region.c b/core/test/run-mem_region.c index 1fd20937..4b3aff74 100644 --- a/core/test/run-mem_region.c +++ b/core/test/run-mem_region.c @@ -52,6 +52,7 @@ static inline void real_free(void *p) #include <stdio.h> struct dt_node *dt_root; +enum proc_chip_quirks proc_chip_quirks; void lock_caller(struct lock *l, const char *caller) { diff --git a/core/test/run-mem_region_init.c b/core/test/run-mem_region_init.c index f70d70f8..b6d33f5a 100644 --- a/core/test/run-mem_region_init.c +++ b/core/test/run-mem_region_init.c @@ -59,6 +59,8 @@ static inline char *skiboot_strdup(const char *str) #include <assert.h> #include <stdio.h> +enum proc_chip_quirks proc_chip_quirks; + void lock_caller(struct lock *l, const char *caller) { (void)caller; diff --git a/core/test/run-mem_region_next.c b/core/test/run-mem_region_next.c index fec5df8f..3228d4fd 100644 --- a/core/test/run-mem_region_next.c +++ b/core/test/run-mem_region_next.c @@ -48,6 +48,8 @@ static void real_free(void *p) #include <assert.h> #include <stdio.h> +enum proc_chip_quirks proc_chip_quirks; + void lock_caller(struct lock *l, const char *caller) { (void)caller; diff --git a/core/test/run-mem_region_release_unused.c b/core/test/run-mem_region_release_unused.c index 4fe62ca5..1834a4c2 100644 --- a/core/test/run-mem_region_release_unused.c +++ b/core/test/run-mem_region_release_unused.c @@ -56,6 +56,8 @@ static inline void __free(void *p, const char *location __attribute__((unused))) #include <assert.h> #include <stdio.h> +enum proc_chip_quirks proc_chip_quirks; + void lock_caller(struct lock *l, const char *caller) { (void)caller; diff --git a/core/test/run-mem_region_release_unused_noalloc.c b/core/test/run-mem_region_release_unused_noalloc.c index fe571350..9ee2742a 100644 --- a/core/test/run-mem_region_release_unused_noalloc.c +++ b/core/test/run-mem_region_release_unused_noalloc.c @@ -56,6 +56,8 @@ static inline void __free(void *p, const char *location __attribute__((unused))) #include <assert.h> #include <stdio.h> +enum proc_chip_quirks proc_chip_quirks; + void lock_caller(struct lock *l, const char *caller) { (void)caller; diff --git a/core/test/run-mem_region_reservations.c b/core/test/run-mem_region_reservations.c index b0e48474..6cb13612 100644 --- a/core/test/run-mem_region_reservations.c +++ b/core/test/run-mem_region_reservations.c @@ -53,6 +53,8 @@ static void real_free(void *p) #include <assert.h> #include <stdio.h> +enum proc_chip_quirks proc_chip_quirks; + void lock_caller(struct lock *l, const char *caller) { (void)caller; |