1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 #ifndef __NVKM_SECURE_BOOT_H__
24 #define __NVKM_SECURE_BOOT_H__
25
26 #include <core/subdev.h>
27
28 enum nvkm_secboot_falcon {
29 NVKM_SECBOOT_FALCON_PMU = 0,
30 NVKM_SECBOOT_FALCON_RESERVED = 1,
31 NVKM_SECBOOT_FALCON_FECS = 2,
32 NVKM_SECBOOT_FALCON_GPCCS = 3,
33 NVKM_SECBOOT_FALCON_SEC2 = 7,
34 NVKM_SECBOOT_FALCON_END = 8,
35 NVKM_SECBOOT_FALCON_INVALID = 0xffffffff,
36 };
37
38 extern const char *nvkm_secboot_falcon_name[];
39
40
41
42
43 struct nvkm_secboot {
44 const struct nvkm_secboot_func *func;
45 struct nvkm_acr *acr;
46 struct nvkm_subdev subdev;
47 struct nvkm_falcon *boot_falcon;
48 struct nvkm_falcon *halt_falcon;
49
50 u64 wpr_addr;
51 u32 wpr_size;
52
53 bool wpr_set;
54 };
55 #define nvkm_secboot(p) container_of((p), struct nvkm_secboot, subdev)
56
57 bool nvkm_secboot_is_managed(struct nvkm_secboot *, enum nvkm_secboot_falcon);
58 int nvkm_secboot_reset(struct nvkm_secboot *, unsigned long);
59
60 int gm200_secboot_new(struct nvkm_device *, int, struct nvkm_secboot **);
61 int gm20b_secboot_new(struct nvkm_device *, int, struct nvkm_secboot **);
62 int gp102_secboot_new(struct nvkm_device *, int, struct nvkm_secboot **);
63 int gp108_secboot_new(struct nvkm_device *, int, struct nvkm_secboot **);
64 int gp10b_secboot_new(struct nvkm_device *, int, struct nvkm_secboot **);
65
66 #endif