From c2d178577ae7d9272d7aff35895a36aefe626eca Mon Sep 17 00:00:00 2001 From: Alejandro Soto Date: Thu, 23 May 2024 20:24:51 -0600 Subject: platform/wavelet3d/host_sw: implement firmware loading --- platform/wavelet3d/host_sw/init.c | 46 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 platform/wavelet3d/host_sw/init.c (limited to 'platform/wavelet3d/host_sw/init.c') diff --git a/platform/wavelet3d/host_sw/init.c b/platform/wavelet3d/host_sw/init.c new file mode 100644 index 0000000..3acc8f3 --- /dev/null +++ b/platform/wavelet3d/host_sw/init.c @@ -0,0 +1,46 @@ +#define MOD_NAME "init" + +#include + +#include "gfx.h" +#include "init.h" +#include "log.h" + +extern const unsigned char _binary_gfx_fw_bin_start[]; +extern const unsigned char _binary_gfx_fw_bin_end; +extern const unsigned char _binary_gfx_fw_bin_size; + +static void __attribute__((noreturn)) init_gfx_failed(void) +{ + log("fatal: probe of gfx device failed"); + abort(); +} + +static void init_gfx(int bootrom) +{ + switch (gfx_probe()) { + case GFX_PROBE_FAILED: + init_gfx_failed(); + break; + + case GFX_PROBE_BOOTROM: + if (bootrom) + log("gfx bootloader didn't handover to firmware"); + + size_t fw_size = (size_t)&_binary_gfx_fw_bin_size; + if (bootrom || gfx_fw_load(_binary_gfx_fw_bin_start, fw_size) < 0) + init_gfx_failed(); + + init_gfx(1); + break; + + case GFX_PROBE_FIRMWARE: + break; + } +} + +void init(void) +{ + log("host cpu is up"); + init_gfx(0); +} -- cgit v1.2.3