Home | History | Annotate | Line # | Download | only in nvfw
      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