xref: /netbsd-src/sys/external/bsd/drm2/dist/drm/nouveau/include/nvfw/acr.h (revision 41ec02673d281bbb3d38e6c78504ce6e30c228c1)
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 
6 struct 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 
22 void wpr_header_dump(struct nvkm_subdev *, const struct wpr_header *);
23 
24 struct 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 
42 void wpr_header_v1_dump(struct nvkm_subdev *, const struct wpr_header_v1 *);
43 
44 struct 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 
52 struct 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 
65 struct 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 
80 struct lsb_header {
81 	struct lsf_signature signature;
82 	struct lsb_header_tail tail;
83 };
84 
85 void lsb_header_dump(struct nvkm_subdev *, struct lsb_header *);
86 
87 struct lsb_header_v1 {
88 	struct lsf_signature_v1 signature;
89 	struct lsb_header_tail tail;
90 };
91 
92 void lsb_header_v1_dump(struct nvkm_subdev *, struct lsb_header_v1 *);
93 
94 struct 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 
123 void flcn_acr_desc_dump(struct nvkm_subdev *, struct flcn_acr_desc *);
124 
125 struct 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 
153 void flcn_acr_desc_v1_dump(struct nvkm_subdev *, struct flcn_acr_desc_v1 *);
154 #endif
155