153 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			153 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
#ifndef __NVFW_ACR_H__
 | 
						|
#define __NVFW_ACR_H__
 | 
						|
 | 
						|
struct wpr_header {
 | 
						|
#define WPR_HEADER_V0_FALCON_ID_INVALID                              0xffffffff
 | 
						|
	u32 falcon_id;
 | 
						|
	u32 lsb_offset;
 | 
						|
	u32 bootstrap_owner;
 | 
						|
	u32 lazy_bootstrap;
 | 
						|
#define WPR_HEADER_V0_STATUS_NONE                                             0
 | 
						|
#define WPR_HEADER_V0_STATUS_COPY                                             1
 | 
						|
#define WPR_HEADER_V0_STATUS_VALIDATION_CODE_FAILED                           2
 | 
						|
#define WPR_HEADER_V0_STATUS_VALIDATION_DATA_FAILED                           3
 | 
						|
#define WPR_HEADER_V0_STATUS_VALIDATION_DONE                                  4
 | 
						|
#define WPR_HEADER_V0_STATUS_VALIDATION_SKIPPED                               5
 | 
						|
#define WPR_HEADER_V0_STATUS_BOOTSTRAP_READY                                  6
 | 
						|
	u32 status;
 | 
						|
};
 | 
						|
 | 
						|
void wpr_header_dump(struct nvkm_subdev *, const struct wpr_header *);
 | 
						|
 | 
						|
struct wpr_header_v1 {
 | 
						|
#define WPR_HEADER_V1_FALCON_ID_INVALID                              0xffffffff
 | 
						|
	u32 falcon_id;
 | 
						|
	u32 lsb_offset;
 | 
						|
	u32 bootstrap_owner;
 | 
						|
	u32 lazy_bootstrap;
 | 
						|
	u32 bin_version;
 | 
						|
#define WPR_HEADER_V1_STATUS_NONE                                             0
 | 
						|
#define WPR_HEADER_V1_STATUS_COPY                                             1
 | 
						|
#define WPR_HEADER_V1_STATUS_VALIDATION_CODE_FAILED                           2
 | 
						|
#define WPR_HEADER_V1_STATUS_VALIDATION_DATA_FAILED                           3
 | 
						|
#define WPR_HEADER_V1_STATUS_VALIDATION_DONE                                  4
 | 
						|
#define WPR_HEADER_V1_STATUS_VALIDATION_SKIPPED                               5
 | 
						|
#define WPR_HEADER_V1_STATUS_BOOTSTRAP_READY                                  6
 | 
						|
#define WPR_HEADER_V1_STATUS_REVOCATION_CHECK_FAILED                          7
 | 
						|
	u32 status;
 | 
						|
};
 | 
						|
 | 
						|
void wpr_header_v1_dump(struct nvkm_subdev *, const struct wpr_header_v1 *);
 | 
						|
 | 
						|
struct lsf_signature {
 | 
						|
	u8 prd_keys[2][16];
 | 
						|
	u8 dbg_keys[2][16];
 | 
						|
	u32 b_prd_present;
 | 
						|
	u32 b_dbg_present;
 | 
						|
	u32 falcon_id;
 | 
						|
};
 | 
						|
 | 
						|
struct lsf_signature_v1 {
 | 
						|
	u8 prd_keys[2][16];
 | 
						|
	u8 dbg_keys[2][16];
 | 
						|
	u32 b_prd_present;
 | 
						|
	u32 b_dbg_present;
 | 
						|
	u32 falcon_id;
 | 
						|
	u32 supports_versioning;
 | 
						|
	u32 version;
 | 
						|
	u32 depmap_count;
 | 
						|
	u8 depmap[11/*LSF_LSB_DEPMAP_SIZE*/ * 2 * 4];
 | 
						|
	u8 kdf[16];
 | 
						|
};
 | 
						|
 | 
						|
struct lsb_header_tail {
 | 
						|
	u32 ucode_off;
 | 
						|
	u32 ucode_size;
 | 
						|
	u32 data_size;
 | 
						|
	u32 bl_code_size;
 | 
						|
	u32 bl_imem_off;
 | 
						|
	u32 bl_data_off;
 | 
						|
	u32 bl_data_size;
 | 
						|
	u32 app_code_off;
 | 
						|
	u32 app_code_size;
 | 
						|
	u32 app_data_off;
 | 
						|
	u32 app_data_size;
 | 
						|
	u32 flags;
 | 
						|
};
 | 
						|
 | 
						|
struct lsb_header {
 | 
						|
	struct lsf_signature signature;
 | 
						|
	struct lsb_header_tail tail;
 | 
						|
};
 | 
						|
 | 
						|
void lsb_header_dump(struct nvkm_subdev *, struct lsb_header *);
 | 
						|
 | 
						|
struct lsb_header_v1 {
 | 
						|
	struct lsf_signature_v1 signature;
 | 
						|
	struct lsb_header_tail tail;
 | 
						|
};
 | 
						|
 | 
						|
void lsb_header_v1_dump(struct nvkm_subdev *, struct lsb_header_v1 *);
 | 
						|
 | 
						|
struct flcn_acr_desc {
 | 
						|
	union {
 | 
						|
		u8 reserved_dmem[0x200];
 | 
						|
		u32 signatures[4];
 | 
						|
	} ucode_reserved_space;
 | 
						|
	u32 wpr_region_id;
 | 
						|
	u32 wpr_offset;
 | 
						|
	u32 mmu_mem_range;
 | 
						|
	struct {
 | 
						|
		u32 no_regions;
 | 
						|
		struct {
 | 
						|
			u32 start_addr;
 | 
						|
			u32 end_addr;
 | 
						|
			u32 region_id;
 | 
						|
			u32 read_mask;
 | 
						|
			u32 write_mask;
 | 
						|
			u32 client_mask;
 | 
						|
		} region_props[2];
 | 
						|
	} regions;
 | 
						|
	u32 ucode_blob_size;
 | 
						|
	u64 ucode_blob_base __aligned(8);
 | 
						|
	struct {
 | 
						|
		u32 vpr_enabled;
 | 
						|
		u32 vpr_start;
 | 
						|
		u32 vpr_end;
 | 
						|
		u32 hdcp_policies;
 | 
						|
	} vpr_desc;
 | 
						|
};
 | 
						|
 | 
						|
void flcn_acr_desc_dump(struct nvkm_subdev *, struct flcn_acr_desc *);
 | 
						|
 | 
						|
struct flcn_acr_desc_v1 {
 | 
						|
	u8 reserved_dmem[0x200];
 | 
						|
	u32 signatures[4];
 | 
						|
	u32 wpr_region_id;
 | 
						|
	u32 wpr_offset;
 | 
						|
	u32 mmu_memory_range;
 | 
						|
	struct {
 | 
						|
		u32 no_regions;
 | 
						|
		struct {
 | 
						|
			u32 start_addr;
 | 
						|
			u32 end_addr;
 | 
						|
			u32 region_id;
 | 
						|
			u32 read_mask;
 | 
						|
			u32 write_mask;
 | 
						|
			u32 client_mask;
 | 
						|
			u32 shadow_mem_start_addr;
 | 
						|
		} region_props[2];
 | 
						|
	} regions;
 | 
						|
	u32 ucode_blob_size;
 | 
						|
	u64 ucode_blob_base __aligned(8);
 | 
						|
	struct {
 | 
						|
		u32 vpr_enabled;
 | 
						|
		u32 vpr_start;
 | 
						|
		u32 vpr_end;
 | 
						|
		u32 hdcp_policies;
 | 
						|
	} vpr_desc;
 | 
						|
};
 | 
						|
 | 
						|
void flcn_acr_desc_v1_dump(struct nvkm_subdev *, struct flcn_acr_desc_v1 *);
 | 
						|
#endif
 |