diff options
Diffstat (limited to 'roms/skiboot/core/test/run-flash-firmware-versions.c')
-rw-r--r-- | roms/skiboot/core/test/run-flash-firmware-versions.c | 154 |
1 files changed, 154 insertions, 0 deletions
diff --git a/roms/skiboot/core/test/run-flash-firmware-versions.c b/roms/skiboot/core/test/run-flash-firmware-versions.c new file mode 100644 index 000000000..9f96f5c19 --- /dev/null +++ b/roms/skiboot/core/test/run-flash-firmware-versions.c @@ -0,0 +1,154 @@ +// SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +/* + * Copyright 2018-2019 IBM Corp. + */ + +#include <stdlib.h> +#include <stdio.h> +#include <stdarg.h> +#include <string.h> +#include <malloc.h> +#include <stdint.h> + + +#include <sys/types.h> +#include <sys/stat.h> +#include <sys/mman.h> +#include <fcntl.h> +#include <assert.h> +#include <stdlib.h> +#include <unistd.h> +#include <stdint.h> + + +#include <interrupts.h> +#include <bitutils.h> + +#include <compiler.h> + +/* + * Skiboot malloc stubs + * + * The actual prototypes for these are defined in mem_region-malloc.h, + * but that file also #defines malloc, and friends so we don't pull that in + * directly. + */ + +#define DEFAULT_ALIGN __alignof__(long) + +void *__memalign(size_t blocksize, size_t bytes, const char *location __unused); +void *__memalign(size_t blocksize, size_t bytes, const char *location __unused) +{ + return memalign(blocksize, bytes); +} + +void *__malloc(size_t bytes, const char *location); +void *__malloc(size_t bytes, const char *location) +{ + return __memalign(DEFAULT_ALIGN, bytes, location); +} + +void __free(void *p, const char *location __unused); +void __free(void *p, const char *location __unused) +{ + free(p); +} + +void *__realloc(void *ptr, size_t size, const char *location __unused); +void *__realloc(void *ptr, size_t size, const char *location __unused) +{ + return realloc(ptr, size); +} + +void *__zalloc(size_t bytes, const char *location); +void *__zalloc(size_t bytes, const char *location) +{ + void *p = __malloc(bytes, location); + + if (p) + memset(p, 0, bytes); + return p; +} + +#include <mem_region-malloc.h> + +#include <opal-api.h> + +#include "../../libfdt/fdt.c" +#include "../../libfdt/fdt_ro.c" +#include "../../libfdt/fdt_sw.c" +#include "../../libfdt/fdt_strerror.c" + +#include "../../core/device.c" + +#include "../../libstb/container-utils.h" +#include "../../libstb/container.h" +#include "../../libstb/container.c" + +#include "../flash-firmware-versions.c" +#include <assert.h> + +char __rodata_start[1], __rodata_end[1]; + +const char version[]="Hello world!"; + +enum proc_gen proc_gen = proc_gen_p8; + +static char *loaded_version_buf; +static size_t loaded_version_buf_size; + +#define min(x,y) ((x) < (y) ? x : y) + +int start_preload_resource(enum resource_id id, uint32_t subid, + void *buf, size_t *len) +{ + (void)id; + (void)subid; + (void)buf; + if (loaded_version_buf) { + *len = min(*len, loaded_version_buf_size); + memcpy(buf, loaded_version_buf, *len); + } else { + *len = 0; + } + + return 0; +} + +int wait_for_resource_loaded(enum resource_id id, uint32_t idx) +{ + (void)id; + (void)idx; + return 0; +} + +int main(int argc, char *argv[]) +{ + int fd; + struct stat ver_st; + int r; + + dt_root = dt_new_root(""); + + if (argc > 1) { + fd = open(argv[1], O_RDONLY); + + assert(fd > 0); + r = fstat(fd, &ver_st); + assert(r == 0); + + loaded_version_buf = mmap(NULL, ver_st.st_size, + PROT_READ, MAP_PRIVATE, fd, 0); + assert(loaded_version_buf != (char*)-1); + loaded_version_buf_size = ver_st.st_size; + } + + flash_fw_version_preload(); + + proc_gen = proc_gen_p9; + flash_fw_version_preload(); + flash_dt_add_fw_version(); + + return 0; +} + |