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