238 lines · c
1#ifndef __NVFW_ACR_H__2#define __NVFW_ACR_H__3 4struct wpr_header {5#define WPR_HEADER_V0_FALCON_ID_INVALID 0xffffffff6 u32 falcon_id;7 u32 lsb_offset;8 u32 bootstrap_owner;9 u32 lazy_bootstrap;10#define WPR_HEADER_V0_STATUS_NONE 011#define WPR_HEADER_V0_STATUS_COPY 112#define WPR_HEADER_V0_STATUS_VALIDATION_CODE_FAILED 213#define WPR_HEADER_V0_STATUS_VALIDATION_DATA_FAILED 314#define WPR_HEADER_V0_STATUS_VALIDATION_DONE 415#define WPR_HEADER_V0_STATUS_VALIDATION_SKIPPED 516#define WPR_HEADER_V0_STATUS_BOOTSTRAP_READY 617 u32 status;18};19 20void wpr_header_dump(struct nvkm_subdev *, const struct wpr_header *);21 22struct wpr_header_v1 {23#define WPR_HEADER_V1_FALCON_ID_INVALID 0xffffffff24 u32 falcon_id;25 u32 lsb_offset;26 u32 bootstrap_owner;27 u32 lazy_bootstrap;28 u32 bin_version;29#define WPR_HEADER_V1_STATUS_NONE 030#define WPR_HEADER_V1_STATUS_COPY 131#define WPR_HEADER_V1_STATUS_VALIDATION_CODE_FAILED 232#define WPR_HEADER_V1_STATUS_VALIDATION_DATA_FAILED 333#define WPR_HEADER_V1_STATUS_VALIDATION_DONE 434#define WPR_HEADER_V1_STATUS_VALIDATION_SKIPPED 535#define WPR_HEADER_V1_STATUS_BOOTSTRAP_READY 636#define WPR_HEADER_V1_STATUS_REVOCATION_CHECK_FAILED 737 u32 status;38};39 40void wpr_header_v1_dump(struct nvkm_subdev *, const struct wpr_header_v1 *);41 42struct wpr_generic_header {43#define WPR_GENERIC_HEADER_ID_LSF_UCODE_DESC 144#define WPR_GENERIC_HEADER_ID_LSF_WPR_HEADER 245#define WPR_GENERIC_HEADER_ID_LSF_SHARED_SUB_WPR 346#define WPR_GENERIC_HEADER_ID_LSF_LSB_HEADER 447 u16 identifier;48 u16 version;49 u32 size;50};51 52struct wpr_header_v2 {53 struct wpr_generic_header hdr;54 struct wpr_header_v1 wpr;55};56 57void wpr_header_v2_dump(struct nvkm_subdev *, const struct wpr_header_v2 *);58 59struct lsf_signature {60 u8 prd_keys[2][16];61 u8 dbg_keys[2][16];62 u32 b_prd_present;63 u32 b_dbg_present;64 u32 falcon_id;65};66 67struct lsf_signature_v1 {68 u8 prd_keys[2][16];69 u8 dbg_keys[2][16];70 u32 b_prd_present;71 u32 b_dbg_present;72 u32 falcon_id;73 u32 supports_versioning;74 u32 version;75 u32 depmap_count;76 u8 depmap[11/*LSF_LSB_DEPMAP_SIZE*/ * 2 * 4];77 u8 kdf[16];78};79 80struct lsb_header_tail {81 u32 ucode_off;82 u32 ucode_size;83 u32 data_size;84 u32 bl_code_size;85 u32 bl_imem_off;86 u32 bl_data_off;87 u32 bl_data_size;88 u32 app_code_off;89 u32 app_code_size;90 u32 app_data_off;91 u32 app_data_size;92 u32 flags;93};94 95struct lsb_header {96 struct lsf_signature signature;97 struct lsb_header_tail tail;98};99 100void lsb_header_dump(struct nvkm_subdev *, struct lsb_header *);101 102struct lsb_header_v1 {103 struct lsf_signature_v1 signature;104 struct lsb_header_tail tail;105};106 107void lsb_header_v1_dump(struct nvkm_subdev *, struct lsb_header_v1 *);108 109struct lsb_header_v2 {110 struct wpr_generic_header hdr;111 struct lsf_signature_v2 {112 struct wpr_generic_header hdr;113 u32 falcon_id;114 u8 prd_present;115 u8 dbg_present;116 u16 reserved;117 u32 sig_size;118 u8 prod_sig[2][384 + 128];119 u8 debug_sig[2][384 + 128];120 u16 sig_algo_ver;121 u16 sig_algo;122 u16 hash_algo_ver;123 u16 hash_algo;124 u32 sig_algo_padding_type;125 u8 depmap[11 * 2 * 4];126 u32 depmap_count;127 u8 supports_versioning;128 u8 pad[3];129 u32 ls_ucode_version;130 u32 ls_ucode_id;131 u32 ucode_ls_encrypted;132 u32 ls_eng_algo_type;133 u32 ls_eng_algo_ver;134 u8 ls_enc_iv[16];135 u8 rsvd[36];136 } signature;137 u32 ucode_off;138 u32 ucode_size;139 u32 data_size;140 u32 bl_code_size;141 u32 bl_imem_off;142 u32 bl_data_off;143 u32 bl_data_size;144 u32 rsvd0;145 u32 app_code_off;146 u32 app_code_size;147 u32 app_data_off;148 u32 app_data_size;149 u32 app_imem_offset;150 u32 app_dmem_offset;151 u32 flags;152 u32 monitor_code_offset;153 u32 monitor_data_offset;154 u32 manifest_offset;155 struct hs_fmc_params {156 u8 hs_fmc;157 u8 padding[3];158 u16 pkc_algo;159 u16 pkc_algo_version;160 u32 engid_mask;161 u32 ucode_id;162 u32 fuse_ver;163 u8 pkc_signature[384 + 128];164 u8 pkc_key[2048];165 u8 rsvd[4];166 } hs_fmc_params;167 struct hs_ovl_sig_blob_params {168 u8 hs_ovl_sig_blob_present;169 u32 hs_ovl_sig_blob_offset;170 u32 hs_ovl_sig_blob_size;171 } hs_ovl_sig_blob_params;172 u8 rsvd[20];173};174 175void lsb_header_v2_dump(struct nvkm_subdev *, struct lsb_header_v2 *);176 177struct flcn_acr_desc {178 union {179 u8 reserved_dmem[0x200];180 u32 signatures[4];181 } ucode_reserved_space;182 u32 wpr_region_id;183 u32 wpr_offset;184 u32 mmu_mem_range;185 struct {186 u32 no_regions;187 struct {188 u32 start_addr;189 u32 end_addr;190 u32 region_id;191 u32 read_mask;192 u32 write_mask;193 u32 client_mask;194 } region_props[2];195 } regions;196 u32 ucode_blob_size;197 u64 ucode_blob_base __aligned(8);198 struct {199 u32 vpr_enabled;200 u32 vpr_start;201 u32 vpr_end;202 u32 hdcp_policies;203 } vpr_desc;204};205 206void flcn_acr_desc_dump(struct nvkm_subdev *, struct flcn_acr_desc *);207 208struct flcn_acr_desc_v1 {209 u8 reserved_dmem[0x200];210 u32 signatures[4];211 u32 wpr_region_id;212 u32 wpr_offset;213 u32 mmu_memory_range;214 struct {215 u32 no_regions;216 struct {217 u32 start_addr;218 u32 end_addr;219 u32 region_id;220 u32 read_mask;221 u32 write_mask;222 u32 client_mask;223 u32 shadow_mem_start_addr;224 } region_props[2];225 } regions;226 u32 ucode_blob_size;227 u64 ucode_blob_base __aligned(8);228 struct {229 u32 vpr_enabled;230 u32 vpr_start;231 u32 vpr_end;232 u32 hdcp_policies;233 } vpr_desc;234};235 236void flcn_acr_desc_v1_dump(struct nvkm_subdev *, struct flcn_acr_desc_v1 *);237#endif238