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