aboutsummaryrefslogtreecommitdiffstats
path: root/roms/skiboot/core/test/run-flash-firmware-versions.c
diff options
context:
space:
mode:
Diffstat (limited to 'roms/skiboot/core/test/run-flash-firmware-versions.c')
-rw-r--r--roms/skiboot/core/test/run-flash-firmware-versions.c154
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;
+}
+