122dcda45SBen Skeggs #ifndef __NVFW_ACR_H__ 222dcda45SBen Skeggs #define __NVFW_ACR_H__ 322dcda45SBen Skeggs 422dcda45SBen Skeggs struct wpr_header { 522dcda45SBen Skeggs #define WPR_HEADER_V0_FALCON_ID_INVALID 0xffffffff 622dcda45SBen Skeggs u32 falcon_id; 722dcda45SBen Skeggs u32 lsb_offset; 822dcda45SBen Skeggs u32 bootstrap_owner; 922dcda45SBen Skeggs u32 lazy_bootstrap; 1022dcda45SBen Skeggs #define WPR_HEADER_V0_STATUS_NONE 0 1122dcda45SBen Skeggs #define WPR_HEADER_V0_STATUS_COPY 1 1222dcda45SBen Skeggs #define WPR_HEADER_V0_STATUS_VALIDATION_CODE_FAILED 2 1322dcda45SBen Skeggs #define WPR_HEADER_V0_STATUS_VALIDATION_DATA_FAILED 3 1422dcda45SBen Skeggs #define WPR_HEADER_V0_STATUS_VALIDATION_DONE 4 1522dcda45SBen Skeggs #define WPR_HEADER_V0_STATUS_VALIDATION_SKIPPED 5 1622dcda45SBen Skeggs #define WPR_HEADER_V0_STATUS_BOOTSTRAP_READY 6 1722dcda45SBen Skeggs u32 status; 1822dcda45SBen Skeggs }; 1922dcda45SBen Skeggs 2022dcda45SBen Skeggs void wpr_header_dump(struct nvkm_subdev *, const struct wpr_header *); 2122dcda45SBen Skeggs 2222dcda45SBen Skeggs struct wpr_header_v1 { 2322dcda45SBen Skeggs #define WPR_HEADER_V1_FALCON_ID_INVALID 0xffffffff 2422dcda45SBen Skeggs u32 falcon_id; 2522dcda45SBen Skeggs u32 lsb_offset; 2622dcda45SBen Skeggs u32 bootstrap_owner; 2722dcda45SBen Skeggs u32 lazy_bootstrap; 2822dcda45SBen Skeggs u32 bin_version; 2922dcda45SBen Skeggs #define WPR_HEADER_V1_STATUS_NONE 0 3022dcda45SBen Skeggs #define WPR_HEADER_V1_STATUS_COPY 1 3122dcda45SBen Skeggs #define WPR_HEADER_V1_STATUS_VALIDATION_CODE_FAILED 2 3222dcda45SBen Skeggs #define WPR_HEADER_V1_STATUS_VALIDATION_DATA_FAILED 3 3322dcda45SBen Skeggs #define WPR_HEADER_V1_STATUS_VALIDATION_DONE 4 3422dcda45SBen Skeggs #define WPR_HEADER_V1_STATUS_VALIDATION_SKIPPED 5 3522dcda45SBen Skeggs #define WPR_HEADER_V1_STATUS_BOOTSTRAP_READY 6 3622dcda45SBen Skeggs #define WPR_HEADER_V1_STATUS_REVOCATION_CHECK_FAILED 7 3722dcda45SBen Skeggs u32 status; 3822dcda45SBen Skeggs }; 3922dcda45SBen Skeggs 4022dcda45SBen Skeggs void wpr_header_v1_dump(struct nvkm_subdev *, const struct wpr_header_v1 *); 4122dcda45SBen Skeggs 42*4b569dedSBen Skeggs struct wpr_generic_header { 43*4b569dedSBen Skeggs #define WPR_GENERIC_HEADER_ID_LSF_UCODE_DESC 1 44*4b569dedSBen Skeggs #define WPR_GENERIC_HEADER_ID_LSF_WPR_HEADER 2 45*4b569dedSBen Skeggs #define WPR_GENERIC_HEADER_ID_LSF_SHARED_SUB_WPR 3 46*4b569dedSBen Skeggs #define WPR_GENERIC_HEADER_ID_LSF_LSB_HEADER 4 47*4b569dedSBen Skeggs u16 identifier; 48*4b569dedSBen Skeggs u16 version; 49*4b569dedSBen Skeggs u32 size; 50*4b569dedSBen Skeggs }; 51*4b569dedSBen Skeggs 52*4b569dedSBen Skeggs struct wpr_header_v2 { 53*4b569dedSBen Skeggs struct wpr_generic_header hdr; 54*4b569dedSBen Skeggs struct wpr_header_v1 wpr; 55*4b569dedSBen Skeggs }; 56*4b569dedSBen Skeggs 57*4b569dedSBen Skeggs void wpr_header_v2_dump(struct nvkm_subdev *, const struct wpr_header_v2 *); 58*4b569dedSBen Skeggs 5922dcda45SBen Skeggs struct lsf_signature { 6022dcda45SBen Skeggs u8 prd_keys[2][16]; 6122dcda45SBen Skeggs u8 dbg_keys[2][16]; 6222dcda45SBen Skeggs u32 b_prd_present; 6322dcda45SBen Skeggs u32 b_dbg_present; 6422dcda45SBen Skeggs u32 falcon_id; 6522dcda45SBen Skeggs }; 6622dcda45SBen Skeggs 6722dcda45SBen Skeggs struct lsf_signature_v1 { 6822dcda45SBen Skeggs u8 prd_keys[2][16]; 6922dcda45SBen Skeggs u8 dbg_keys[2][16]; 7022dcda45SBen Skeggs u32 b_prd_present; 7122dcda45SBen Skeggs u32 b_dbg_present; 7222dcda45SBen Skeggs u32 falcon_id; 7322dcda45SBen Skeggs u32 supports_versioning; 7422dcda45SBen Skeggs u32 version; 7522dcda45SBen Skeggs u32 depmap_count; 7622dcda45SBen Skeggs u8 depmap[11/*LSF_LSB_DEPMAP_SIZE*/ * 2 * 4]; 7722dcda45SBen Skeggs u8 kdf[16]; 7822dcda45SBen Skeggs }; 7922dcda45SBen Skeggs 8022dcda45SBen Skeggs struct lsb_header_tail { 8122dcda45SBen Skeggs u32 ucode_off; 8222dcda45SBen Skeggs u32 ucode_size; 8322dcda45SBen Skeggs u32 data_size; 8422dcda45SBen Skeggs u32 bl_code_size; 8522dcda45SBen Skeggs u32 bl_imem_off; 8622dcda45SBen Skeggs u32 bl_data_off; 8722dcda45SBen Skeggs u32 bl_data_size; 8822dcda45SBen Skeggs u32 app_code_off; 8922dcda45SBen Skeggs u32 app_code_size; 9022dcda45SBen Skeggs u32 app_data_off; 9122dcda45SBen Skeggs u32 app_data_size; 9222dcda45SBen Skeggs u32 flags; 9322dcda45SBen Skeggs }; 9422dcda45SBen Skeggs 9522dcda45SBen Skeggs struct lsb_header { 9622dcda45SBen Skeggs struct lsf_signature signature; 9722dcda45SBen Skeggs struct lsb_header_tail tail; 9822dcda45SBen Skeggs }; 9922dcda45SBen Skeggs 10022dcda45SBen Skeggs void lsb_header_dump(struct nvkm_subdev *, struct lsb_header *); 10122dcda45SBen Skeggs 10222dcda45SBen Skeggs struct lsb_header_v1 { 10322dcda45SBen Skeggs struct lsf_signature_v1 signature; 10422dcda45SBen Skeggs struct lsb_header_tail tail; 10522dcda45SBen Skeggs }; 10622dcda45SBen Skeggs 10722dcda45SBen Skeggs void lsb_header_v1_dump(struct nvkm_subdev *, struct lsb_header_v1 *); 10822dcda45SBen Skeggs 109*4b569dedSBen Skeggs struct lsb_header_v2 { 110*4b569dedSBen Skeggs struct wpr_generic_header hdr; 111*4b569dedSBen Skeggs struct lsf_signature_v2 { 112*4b569dedSBen Skeggs struct wpr_generic_header hdr; 113*4b569dedSBen Skeggs u32 falcon_id; 114*4b569dedSBen Skeggs u8 prd_present; 115*4b569dedSBen Skeggs u8 dbg_present; 116*4b569dedSBen Skeggs u16 reserved; 117*4b569dedSBen Skeggs u32 sig_size; 118*4b569dedSBen Skeggs u8 prod_sig[2][384 + 128]; 119*4b569dedSBen Skeggs u8 debug_sig[2][384 + 128]; 120*4b569dedSBen Skeggs u16 sig_algo_ver; 121*4b569dedSBen Skeggs u16 sig_algo; 122*4b569dedSBen Skeggs u16 hash_algo_ver; 123*4b569dedSBen Skeggs u16 hash_algo; 124*4b569dedSBen Skeggs u32 sig_algo_padding_type; 125*4b569dedSBen Skeggs u8 depmap[11 * 2 * 4]; 126*4b569dedSBen Skeggs u32 depmap_count; 127*4b569dedSBen Skeggs u8 supports_versioning; 128*4b569dedSBen Skeggs u8 pad[3]; 129*4b569dedSBen Skeggs u32 ls_ucode_version; 130*4b569dedSBen Skeggs u32 ls_ucode_id; 131*4b569dedSBen Skeggs u32 ucode_ls_encrypted; 132*4b569dedSBen Skeggs u32 ls_eng_algo_type; 133*4b569dedSBen Skeggs u32 ls_eng_algo_ver; 134*4b569dedSBen Skeggs u8 ls_enc_iv[16]; 135*4b569dedSBen Skeggs u8 rsvd[36]; 136*4b569dedSBen Skeggs } signature; 137*4b569dedSBen Skeggs u32 ucode_off; 138*4b569dedSBen Skeggs u32 ucode_size; 139*4b569dedSBen Skeggs u32 data_size; 140*4b569dedSBen Skeggs u32 bl_code_size; 141*4b569dedSBen Skeggs u32 bl_imem_off; 142*4b569dedSBen Skeggs u32 bl_data_off; 143*4b569dedSBen Skeggs u32 bl_data_size; 144*4b569dedSBen Skeggs u32 rsvd0; 145*4b569dedSBen Skeggs u32 app_code_off; 146*4b569dedSBen Skeggs u32 app_code_size; 147*4b569dedSBen Skeggs u32 app_data_off; 148*4b569dedSBen Skeggs u32 app_data_size; 149*4b569dedSBen Skeggs u32 app_imem_offset; 150*4b569dedSBen Skeggs u32 app_dmem_offset; 151*4b569dedSBen Skeggs u32 flags; 152*4b569dedSBen Skeggs u32 monitor_code_offset; 153*4b569dedSBen Skeggs u32 monitor_data_offset; 154*4b569dedSBen Skeggs u32 manifest_offset; 155*4b569dedSBen Skeggs struct hs_fmc_params { 156*4b569dedSBen Skeggs u8 hs_fmc; 157*4b569dedSBen Skeggs u8 padding[3]; 158*4b569dedSBen Skeggs u16 pkc_algo; 159*4b569dedSBen Skeggs u16 pkc_algo_version; 160*4b569dedSBen Skeggs u32 engid_mask; 161*4b569dedSBen Skeggs u32 ucode_id; 162*4b569dedSBen Skeggs u32 fuse_ver; 163*4b569dedSBen Skeggs u8 pkc_signature[384 + 128]; 164*4b569dedSBen Skeggs u8 pkc_key[2048]; 165*4b569dedSBen Skeggs u8 rsvd[4]; 166*4b569dedSBen Skeggs } hs_fmc_params; 167*4b569dedSBen Skeggs struct hs_ovl_sig_blob_params { 168*4b569dedSBen Skeggs u8 hs_ovl_sig_blob_present; 169*4b569dedSBen Skeggs u32 hs_ovl_sig_blob_offset; 170*4b569dedSBen Skeggs u32 hs_ovl_sig_blob_size; 171*4b569dedSBen Skeggs } hs_ovl_sig_blob_params; 172*4b569dedSBen Skeggs u8 rsvd[20]; 173*4b569dedSBen Skeggs }; 174*4b569dedSBen Skeggs 175*4b569dedSBen Skeggs void lsb_header_v2_dump(struct nvkm_subdev *, struct lsb_header_v2 *); 176*4b569dedSBen Skeggs 17722dcda45SBen Skeggs struct flcn_acr_desc { 17822dcda45SBen Skeggs union { 17922dcda45SBen Skeggs u8 reserved_dmem[0x200]; 18022dcda45SBen Skeggs u32 signatures[4]; 18122dcda45SBen Skeggs } ucode_reserved_space; 18222dcda45SBen Skeggs u32 wpr_region_id; 18322dcda45SBen Skeggs u32 wpr_offset; 18422dcda45SBen Skeggs u32 mmu_mem_range; 18522dcda45SBen Skeggs struct { 18622dcda45SBen Skeggs u32 no_regions; 18722dcda45SBen Skeggs struct { 18822dcda45SBen Skeggs u32 start_addr; 18922dcda45SBen Skeggs u32 end_addr; 19022dcda45SBen Skeggs u32 region_id; 19122dcda45SBen Skeggs u32 read_mask; 19222dcda45SBen Skeggs u32 write_mask; 19322dcda45SBen Skeggs u32 client_mask; 19422dcda45SBen Skeggs } region_props[2]; 19522dcda45SBen Skeggs } regions; 19622dcda45SBen Skeggs u32 ucode_blob_size; 19722dcda45SBen Skeggs u64 ucode_blob_base __aligned(8); 19822dcda45SBen Skeggs struct { 19922dcda45SBen Skeggs u32 vpr_enabled; 20022dcda45SBen Skeggs u32 vpr_start; 20122dcda45SBen Skeggs u32 vpr_end; 20222dcda45SBen Skeggs u32 hdcp_policies; 20322dcda45SBen Skeggs } vpr_desc; 20422dcda45SBen Skeggs }; 20522dcda45SBen Skeggs 20622dcda45SBen Skeggs void flcn_acr_desc_dump(struct nvkm_subdev *, struct flcn_acr_desc *); 20722dcda45SBen Skeggs 20822dcda45SBen Skeggs struct flcn_acr_desc_v1 { 20922dcda45SBen Skeggs u8 reserved_dmem[0x200]; 21022dcda45SBen Skeggs u32 signatures[4]; 21122dcda45SBen Skeggs u32 wpr_region_id; 21222dcda45SBen Skeggs u32 wpr_offset; 21322dcda45SBen Skeggs u32 mmu_memory_range; 21422dcda45SBen Skeggs struct { 21522dcda45SBen Skeggs u32 no_regions; 21622dcda45SBen Skeggs struct { 21722dcda45SBen Skeggs u32 start_addr; 21822dcda45SBen Skeggs u32 end_addr; 21922dcda45SBen Skeggs u32 region_id; 22022dcda45SBen Skeggs u32 read_mask; 22122dcda45SBen Skeggs u32 write_mask; 22222dcda45SBen Skeggs u32 client_mask; 22322dcda45SBen Skeggs u32 shadow_mem_start_addr; 22422dcda45SBen Skeggs } region_props[2]; 22522dcda45SBen Skeggs } regions; 22622dcda45SBen Skeggs u32 ucode_blob_size; 22722dcda45SBen Skeggs u64 ucode_blob_base __aligned(8); 22822dcda45SBen Skeggs struct { 22922dcda45SBen Skeggs u32 vpr_enabled; 23022dcda45SBen Skeggs u32 vpr_start; 23122dcda45SBen Skeggs u32 vpr_end; 23222dcda45SBen Skeggs u32 hdcp_policies; 23322dcda45SBen Skeggs } vpr_desc; 23422dcda45SBen Skeggs }; 23522dcda45SBen Skeggs 23622dcda45SBen Skeggs void flcn_acr_desc_v1_dump(struct nvkm_subdev *, struct flcn_acr_desc_v1 *); 23722dcda45SBen Skeggs #endif 238