cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

acr.h (3894B)


      1#ifndef __NVFW_ACR_H__
      2#define __NVFW_ACR_H__
      3
      4struct wpr_header {
      5#define WPR_HEADER_V0_FALCON_ID_INVALID                              0xffffffff
      6	u32 falcon_id;
      7	u32 lsb_offset;
      8	u32 bootstrap_owner;
      9	u32 lazy_bootstrap;
     10#define WPR_HEADER_V0_STATUS_NONE                                             0
     11#define WPR_HEADER_V0_STATUS_COPY                                             1
     12#define WPR_HEADER_V0_STATUS_VALIDATION_CODE_FAILED                           2
     13#define WPR_HEADER_V0_STATUS_VALIDATION_DATA_FAILED                           3
     14#define WPR_HEADER_V0_STATUS_VALIDATION_DONE                                  4
     15#define WPR_HEADER_V0_STATUS_VALIDATION_SKIPPED                               5
     16#define WPR_HEADER_V0_STATUS_BOOTSTRAP_READY                                  6
     17	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                              0xffffffff
     24	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                                             0
     30#define WPR_HEADER_V1_STATUS_COPY                                             1
     31#define WPR_HEADER_V1_STATUS_VALIDATION_CODE_FAILED                           2
     32#define WPR_HEADER_V1_STATUS_VALIDATION_DATA_FAILED                           3
     33#define WPR_HEADER_V1_STATUS_VALIDATION_DONE                                  4
     34#define WPR_HEADER_V1_STATUS_VALIDATION_SKIPPED                               5
     35#define WPR_HEADER_V1_STATUS_BOOTSTRAP_READY                                  6
     36#define WPR_HEADER_V1_STATUS_REVOCATION_CHECK_FAILED                          7
     37	u32 status;
     38};
     39
     40void wpr_header_v1_dump(struct nvkm_subdev *, const struct wpr_header_v1 *);
     41
     42struct lsf_signature {
     43	u8 prd_keys[2][16];
     44	u8 dbg_keys[2][16];
     45	u32 b_prd_present;
     46	u32 b_dbg_present;
     47	u32 falcon_id;
     48};
     49
     50struct lsf_signature_v1 {
     51	u8 prd_keys[2][16];
     52	u8 dbg_keys[2][16];
     53	u32 b_prd_present;
     54	u32 b_dbg_present;
     55	u32 falcon_id;
     56	u32 supports_versioning;
     57	u32 version;
     58	u32 depmap_count;
     59	u8 depmap[11/*LSF_LSB_DEPMAP_SIZE*/ * 2 * 4];
     60	u8 kdf[16];
     61};
     62
     63struct lsb_header_tail {
     64	u32 ucode_off;
     65	u32 ucode_size;
     66	u32 data_size;
     67	u32 bl_code_size;
     68	u32 bl_imem_off;
     69	u32 bl_data_off;
     70	u32 bl_data_size;
     71	u32 app_code_off;
     72	u32 app_code_size;
     73	u32 app_data_off;
     74	u32 app_data_size;
     75	u32 flags;
     76};
     77
     78struct lsb_header {
     79	struct lsf_signature signature;
     80	struct lsb_header_tail tail;
     81};
     82
     83void lsb_header_dump(struct nvkm_subdev *, struct lsb_header *);
     84
     85struct lsb_header_v1 {
     86	struct lsf_signature_v1 signature;
     87	struct lsb_header_tail tail;
     88};
     89
     90void lsb_header_v1_dump(struct nvkm_subdev *, struct lsb_header_v1 *);
     91
     92struct flcn_acr_desc {
     93	union {
     94		u8 reserved_dmem[0x200];
     95		u32 signatures[4];
     96	} ucode_reserved_space;
     97	u32 wpr_region_id;
     98	u32 wpr_offset;
     99	u32 mmu_mem_range;
    100	struct {
    101		u32 no_regions;
    102		struct {
    103			u32 start_addr;
    104			u32 end_addr;
    105			u32 region_id;
    106			u32 read_mask;
    107			u32 write_mask;
    108			u32 client_mask;
    109		} region_props[2];
    110	} regions;
    111	u32 ucode_blob_size;
    112	u64 ucode_blob_base __aligned(8);
    113	struct {
    114		u32 vpr_enabled;
    115		u32 vpr_start;
    116		u32 vpr_end;
    117		u32 hdcp_policies;
    118	} vpr_desc;
    119};
    120
    121void flcn_acr_desc_dump(struct nvkm_subdev *, struct flcn_acr_desc *);
    122
    123struct flcn_acr_desc_v1 {
    124	u8 reserved_dmem[0x200];
    125	u32 signatures[4];
    126	u32 wpr_region_id;
    127	u32 wpr_offset;
    128	u32 mmu_memory_range;
    129	struct {
    130		u32 no_regions;
    131		struct {
    132			u32 start_addr;
    133			u32 end_addr;
    134			u32 region_id;
    135			u32 read_mask;
    136			u32 write_mask;
    137			u32 client_mask;
    138			u32 shadow_mem_start_addr;
    139		} region_props[2];
    140	} regions;
    141	u32 ucode_blob_size;
    142	u64 ucode_blob_base __aligned(8);
    143	struct {
    144		u32 vpr_enabled;
    145		u32 vpr_start;
    146		u32 vpr_end;
    147		u32 hdcp_policies;
    148	} vpr_desc;
    149};
    150
    151void flcn_acr_desc_v1_dump(struct nvkm_subdev *, struct flcn_acr_desc_v1 *);
    152#endif