18c2ecf20Sopenharmony_ci#ifndef __NVFW_ACR_H__
28c2ecf20Sopenharmony_ci#define __NVFW_ACR_H__
38c2ecf20Sopenharmony_ci
48c2ecf20Sopenharmony_cistruct wpr_header {
58c2ecf20Sopenharmony_ci#define WPR_HEADER_V0_FALCON_ID_INVALID                              0xffffffff
68c2ecf20Sopenharmony_ci	u32 falcon_id;
78c2ecf20Sopenharmony_ci	u32 lsb_offset;
88c2ecf20Sopenharmony_ci	u32 bootstrap_owner;
98c2ecf20Sopenharmony_ci	u32 lazy_bootstrap;
108c2ecf20Sopenharmony_ci#define WPR_HEADER_V0_STATUS_NONE                                             0
118c2ecf20Sopenharmony_ci#define WPR_HEADER_V0_STATUS_COPY                                             1
128c2ecf20Sopenharmony_ci#define WPR_HEADER_V0_STATUS_VALIDATION_CODE_FAILED                           2
138c2ecf20Sopenharmony_ci#define WPR_HEADER_V0_STATUS_VALIDATION_DATA_FAILED                           3
148c2ecf20Sopenharmony_ci#define WPR_HEADER_V0_STATUS_VALIDATION_DONE                                  4
158c2ecf20Sopenharmony_ci#define WPR_HEADER_V0_STATUS_VALIDATION_SKIPPED                               5
168c2ecf20Sopenharmony_ci#define WPR_HEADER_V0_STATUS_BOOTSTRAP_READY                                  6
178c2ecf20Sopenharmony_ci	u32 status;
188c2ecf20Sopenharmony_ci};
198c2ecf20Sopenharmony_ci
208c2ecf20Sopenharmony_civoid wpr_header_dump(struct nvkm_subdev *, const struct wpr_header *);
218c2ecf20Sopenharmony_ci
228c2ecf20Sopenharmony_cistruct wpr_header_v1 {
238c2ecf20Sopenharmony_ci#define WPR_HEADER_V1_FALCON_ID_INVALID                              0xffffffff
248c2ecf20Sopenharmony_ci	u32 falcon_id;
258c2ecf20Sopenharmony_ci	u32 lsb_offset;
268c2ecf20Sopenharmony_ci	u32 bootstrap_owner;
278c2ecf20Sopenharmony_ci	u32 lazy_bootstrap;
288c2ecf20Sopenharmony_ci	u32 bin_version;
298c2ecf20Sopenharmony_ci#define WPR_HEADER_V1_STATUS_NONE                                             0
308c2ecf20Sopenharmony_ci#define WPR_HEADER_V1_STATUS_COPY                                             1
318c2ecf20Sopenharmony_ci#define WPR_HEADER_V1_STATUS_VALIDATION_CODE_FAILED                           2
328c2ecf20Sopenharmony_ci#define WPR_HEADER_V1_STATUS_VALIDATION_DATA_FAILED                           3
338c2ecf20Sopenharmony_ci#define WPR_HEADER_V1_STATUS_VALIDATION_DONE                                  4
348c2ecf20Sopenharmony_ci#define WPR_HEADER_V1_STATUS_VALIDATION_SKIPPED                               5
358c2ecf20Sopenharmony_ci#define WPR_HEADER_V1_STATUS_BOOTSTRAP_READY                                  6
368c2ecf20Sopenharmony_ci#define WPR_HEADER_V1_STATUS_REVOCATION_CHECK_FAILED                          7
378c2ecf20Sopenharmony_ci	u32 status;
388c2ecf20Sopenharmony_ci};
398c2ecf20Sopenharmony_ci
408c2ecf20Sopenharmony_civoid wpr_header_v1_dump(struct nvkm_subdev *, const struct wpr_header_v1 *);
418c2ecf20Sopenharmony_ci
428c2ecf20Sopenharmony_cistruct lsf_signature {
438c2ecf20Sopenharmony_ci	u8 prd_keys[2][16];
448c2ecf20Sopenharmony_ci	u8 dbg_keys[2][16];
458c2ecf20Sopenharmony_ci	u32 b_prd_present;
468c2ecf20Sopenharmony_ci	u32 b_dbg_present;
478c2ecf20Sopenharmony_ci	u32 falcon_id;
488c2ecf20Sopenharmony_ci};
498c2ecf20Sopenharmony_ci
508c2ecf20Sopenharmony_cistruct lsf_signature_v1 {
518c2ecf20Sopenharmony_ci	u8 prd_keys[2][16];
528c2ecf20Sopenharmony_ci	u8 dbg_keys[2][16];
538c2ecf20Sopenharmony_ci	u32 b_prd_present;
548c2ecf20Sopenharmony_ci	u32 b_dbg_present;
558c2ecf20Sopenharmony_ci	u32 falcon_id;
568c2ecf20Sopenharmony_ci	u32 supports_versioning;
578c2ecf20Sopenharmony_ci	u32 version;
588c2ecf20Sopenharmony_ci	u32 depmap_count;
598c2ecf20Sopenharmony_ci	u8 depmap[11/*LSF_LSB_DEPMAP_SIZE*/ * 2 * 4];
608c2ecf20Sopenharmony_ci	u8 kdf[16];
618c2ecf20Sopenharmony_ci};
628c2ecf20Sopenharmony_ci
638c2ecf20Sopenharmony_cistruct lsb_header_tail {
648c2ecf20Sopenharmony_ci	u32 ucode_off;
658c2ecf20Sopenharmony_ci	u32 ucode_size;
668c2ecf20Sopenharmony_ci	u32 data_size;
678c2ecf20Sopenharmony_ci	u32 bl_code_size;
688c2ecf20Sopenharmony_ci	u32 bl_imem_off;
698c2ecf20Sopenharmony_ci	u32 bl_data_off;
708c2ecf20Sopenharmony_ci	u32 bl_data_size;
718c2ecf20Sopenharmony_ci	u32 app_code_off;
728c2ecf20Sopenharmony_ci	u32 app_code_size;
738c2ecf20Sopenharmony_ci	u32 app_data_off;
748c2ecf20Sopenharmony_ci	u32 app_data_size;
758c2ecf20Sopenharmony_ci	u32 flags;
768c2ecf20Sopenharmony_ci};
778c2ecf20Sopenharmony_ci
788c2ecf20Sopenharmony_cistruct lsb_header {
798c2ecf20Sopenharmony_ci	struct lsf_signature signature;
808c2ecf20Sopenharmony_ci	struct lsb_header_tail tail;
818c2ecf20Sopenharmony_ci};
828c2ecf20Sopenharmony_ci
838c2ecf20Sopenharmony_civoid lsb_header_dump(struct nvkm_subdev *, struct lsb_header *);
848c2ecf20Sopenharmony_ci
858c2ecf20Sopenharmony_cistruct lsb_header_v1 {
868c2ecf20Sopenharmony_ci	struct lsf_signature_v1 signature;
878c2ecf20Sopenharmony_ci	struct lsb_header_tail tail;
888c2ecf20Sopenharmony_ci};
898c2ecf20Sopenharmony_ci
908c2ecf20Sopenharmony_civoid lsb_header_v1_dump(struct nvkm_subdev *, struct lsb_header_v1 *);
918c2ecf20Sopenharmony_ci
928c2ecf20Sopenharmony_cistruct flcn_acr_desc {
938c2ecf20Sopenharmony_ci	union {
948c2ecf20Sopenharmony_ci		u8 reserved_dmem[0x200];
958c2ecf20Sopenharmony_ci		u32 signatures[4];
968c2ecf20Sopenharmony_ci	} ucode_reserved_space;
978c2ecf20Sopenharmony_ci	u32 wpr_region_id;
988c2ecf20Sopenharmony_ci	u32 wpr_offset;
998c2ecf20Sopenharmony_ci	u32 mmu_mem_range;
1008c2ecf20Sopenharmony_ci	struct {
1018c2ecf20Sopenharmony_ci		u32 no_regions;
1028c2ecf20Sopenharmony_ci		struct {
1038c2ecf20Sopenharmony_ci			u32 start_addr;
1048c2ecf20Sopenharmony_ci			u32 end_addr;
1058c2ecf20Sopenharmony_ci			u32 region_id;
1068c2ecf20Sopenharmony_ci			u32 read_mask;
1078c2ecf20Sopenharmony_ci			u32 write_mask;
1088c2ecf20Sopenharmony_ci			u32 client_mask;
1098c2ecf20Sopenharmony_ci		} region_props[2];
1108c2ecf20Sopenharmony_ci	} regions;
1118c2ecf20Sopenharmony_ci	u32 ucode_blob_size;
1128c2ecf20Sopenharmony_ci	u64 ucode_blob_base __aligned(8);
1138c2ecf20Sopenharmony_ci	struct {
1148c2ecf20Sopenharmony_ci		u32 vpr_enabled;
1158c2ecf20Sopenharmony_ci		u32 vpr_start;
1168c2ecf20Sopenharmony_ci		u32 vpr_end;
1178c2ecf20Sopenharmony_ci		u32 hdcp_policies;
1188c2ecf20Sopenharmony_ci	} vpr_desc;
1198c2ecf20Sopenharmony_ci};
1208c2ecf20Sopenharmony_ci
1218c2ecf20Sopenharmony_civoid flcn_acr_desc_dump(struct nvkm_subdev *, struct flcn_acr_desc *);
1228c2ecf20Sopenharmony_ci
1238c2ecf20Sopenharmony_cistruct flcn_acr_desc_v1 {
1248c2ecf20Sopenharmony_ci	u8 reserved_dmem[0x200];
1258c2ecf20Sopenharmony_ci	u32 signatures[4];
1268c2ecf20Sopenharmony_ci	u32 wpr_region_id;
1278c2ecf20Sopenharmony_ci	u32 wpr_offset;
1288c2ecf20Sopenharmony_ci	u32 mmu_memory_range;
1298c2ecf20Sopenharmony_ci	struct {
1308c2ecf20Sopenharmony_ci		u32 no_regions;
1318c2ecf20Sopenharmony_ci		struct {
1328c2ecf20Sopenharmony_ci			u32 start_addr;
1338c2ecf20Sopenharmony_ci			u32 end_addr;
1348c2ecf20Sopenharmony_ci			u32 region_id;
1358c2ecf20Sopenharmony_ci			u32 read_mask;
1368c2ecf20Sopenharmony_ci			u32 write_mask;
1378c2ecf20Sopenharmony_ci			u32 client_mask;
1388c2ecf20Sopenharmony_ci			u32 shadow_mem_start_addr;
1398c2ecf20Sopenharmony_ci		} region_props[2];
1408c2ecf20Sopenharmony_ci	} regions;
1418c2ecf20Sopenharmony_ci	u32 ucode_blob_size;
1428c2ecf20Sopenharmony_ci	u64 ucode_blob_base __aligned(8);
1438c2ecf20Sopenharmony_ci	struct {
1448c2ecf20Sopenharmony_ci		u32 vpr_enabled;
1458c2ecf20Sopenharmony_ci		u32 vpr_start;
1468c2ecf20Sopenharmony_ci		u32 vpr_end;
1478c2ecf20Sopenharmony_ci		u32 hdcp_policies;
1488c2ecf20Sopenharmony_ci	} vpr_desc;
1498c2ecf20Sopenharmony_ci};
1508c2ecf20Sopenharmony_ci
1518c2ecf20Sopenharmony_civoid flcn_acr_desc_v1_dump(struct nvkm_subdev *, struct flcn_acr_desc_v1 *);
1528c2ecf20Sopenharmony_ci#endif
153