blob: 3acc8f3b50b1e420897180d0ede91c8172a2577e (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
#define MOD_NAME "init"
#include <stdlib.h>
#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);
}
|