1/*	$NetBSD: acr.h,v 1.2 2021/12/18 23:45:32 riastradh Exp $	*/
2
3#ifndef __NVFW_ACR_H__
4#define __NVFW_ACR_H__
5
6struct wpr_header {
7#define WPR_HEADER_V0_FALCON_ID_INVALID                              0xffffffff
8	u32 falcon_id;
9	u32 lsb_offset;
10	u32 bootstrap_owner;
11	u32 lazy_bootstrap;
12#define WPR_HEADER_V0_STATUS_NONE                                             0
13#define WPR_HEADER_V0_STATUS_COPY                                             1
14#define WPR_HEADER_V0_STATUS_VALIDATION_CODE_FAILED                           2
15#define WPR_HEADER_V0_STATUS_VALIDATION_DATA_FAILED                           3
16#define WPR_HEADER_V0_STATUS_VALIDATION_DONE                                  4
17#define WPR_HEADER_V0_STATUS_VALIDATION_SKIPPED                               5
18#define WPR_HEADER_V0_STATUS_BOOTSTRAP_READY                                  6
19	u32 status;
20};
21
22void wpr_header_dump(struct nvkm_subdev *, const struct wpr_header *);
23
24struct wpr_header_v1 {
25#define WPR_HEADER_V1_FALCON_ID_INVALID                              0xffffffff
26	u32 falcon_id;
27	u32 lsb_offset;
28	u32 bootstrap_owner;
29	u32 lazy_bootstrap;
30	u32 bin_version;
31#define WPR_HEADER_V1_STATUS_NONE                                             0
32#define WPR_HEADER_V1_STATUS_COPY                                             1
33#define WPR_HEADER_V1_STATUS_VALIDATION_CODE_FAILED                           2
34#define WPR_HEADER_V1_STATUS_VALIDATION_DATA_FAILED                           3
35#define WPR_HEADER_V1_STATUS_VALIDATION_DONE                                  4
36#define WPR_HEADER_V1_STATUS_VALIDATION_SKIPPED                               5
37#define WPR_HEADER_V1_STATUS_BOOTSTRAP_READY                                  6
38#define WPR_HEADER_V1_STATUS_REVOCATION_CHECK_FAILED                          7
39	u32 status;
40};
41
42void wpr_header_v1_dump(struct nvkm_subdev *, const struct wpr_header_v1 *);
43
44struct lsf_signature {
45	u8 prd_keys[2][16];
46	u8 dbg_keys[2][16];
47	u32 b_prd_present;
48	u32 b_dbg_present;
49	u32 falcon_id;
50};
51
52struct lsf_signature_v1 {
53	u8 prd_keys[2][16];
54	u8 dbg_keys[2][16];
55	u32 b_prd_present;
56	u32 b_dbg_present;
57	u32 falcon_id;
58	u32 supports_versioning;
59	u32 version;
60	u32 depmap_count;
61	u8 depmap[11/*LSF_LSB_DEPMAP_SIZE*/ * 2 * 4];
62	u8 kdf[16];
63};
64
65struct lsb_header_tail {
66	u32 ucode_off;
67	u32 ucode_size;
68	u32 data_size;
69	u32 bl_code_size;
70	u32 bl_imem_off;
71	u32 bl_data_off;
72	u32 bl_data_size;
73	u32 app_code_off;
74	u32 app_code_size;
75	u32 app_data_off;
76	u32 app_data_size;
77	u32 flags;
78};
79
80struct lsb_header {
81	struct lsf_signature signature;
82	struct lsb_header_tail tail;
83};
84
85void lsb_header_dump(struct nvkm_subdev *, struct lsb_header *);
86
87struct lsb_header_v1 {
88	struct lsf_signature_v1 signature;
89	struct lsb_header_tail tail;
90};
91
92void lsb_header_v1_dump(struct nvkm_subdev *, struct lsb_header_v1 *);
93
94struct flcn_acr_desc {
95	union {
96		u8 reserved_dmem[0x200];
97		u32 signatures[4];
98	} ucode_reserved_space;
99	u32 wpr_region_id;
100	u32 wpr_offset;
101	u32 mmu_mem_range;
102	struct {
103		u32 no_regions;
104		struct {
105			u32 start_addr;
106			u32 end_addr;
107			u32 region_id;
108			u32 read_mask;
109			u32 write_mask;
110			u32 client_mask;
111		} region_props[2];
112	} regions;
113	u32 ucode_blob_size;
114	u64 ucode_blob_base __aligned(8);
115	struct {
116		u32 vpr_enabled;
117		u32 vpr_start;
118		u32 vpr_end;
119		u32 hdcp_policies;
120	} vpr_desc;
121};
122
123void flcn_acr_desc_dump(struct nvkm_subdev *, struct flcn_acr_desc *);
124
125struct flcn_acr_desc_v1 {
126	u8 reserved_dmem[0x200];
127	u32 signatures[4];
128	u32 wpr_region_id;
129	u32 wpr_offset;
130	u32 mmu_memory_range;
131	struct {
132		u32 no_regions;
133		struct {
134			u32 start_addr;
135			u32 end_addr;
136			u32 region_id;
137			u32 read_mask;
138			u32 write_mask;
139			u32 client_mask;
140			u32 shadow_mem_start_addr;
141		} region_props[2];
142	} regions;
143	u32 ucode_blob_size;
144	u64 ucode_blob_base __aligned(8);
145	struct {
146		u32 vpr_enabled;
147		u32 vpr_start;
148		u32 vpr_end;
149		u32 hdcp_policies;
150	} vpr_desc;
151};
152
153void flcn_acr_desc_v1_dump(struct nvkm_subdev *, struct flcn_acr_desc_v1 *);
154#endif
155