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

ctxgf100.h (10979B)


      1/* SPDX-License-Identifier: MIT */
      2#ifndef __NVKM_GRCTX_NVC0_H__
      3#define __NVKM_GRCTX_NVC0_H__
      4#include "gf100.h"
      5
      6struct gf100_grctx {
      7	struct gf100_gr *gr;
      8	struct gf100_gr_data *data;
      9	struct gf100_gr_mmio *mmio;
     10	int buffer_nr;
     11	u64 buffer[4];
     12	u64 addr;
     13};
     14
     15int  gf100_grctx_mmio_data(struct gf100_grctx *, u32 size, u32 align, bool priv);
     16void gf100_grctx_mmio_item(struct gf100_grctx *, u32 addr, u32 data, int s, int);
     17
     18#define mmio_vram(a,b,c,d) gf100_grctx_mmio_data((a), (b), (c), (d))
     19#define mmio_refn(a,b,c,d,e) gf100_grctx_mmio_item((a), (b), (c), (d), (e))
     20#define mmio_skip(a,b,c) mmio_refn((a), (b), (c), -1, -1)
     21#define mmio_wr32(a,b,c) mmio_refn((a), (b), (c),  0, -1)
     22
     23struct gf100_grctx_func {
     24	void (*unkn88c)(struct gf100_gr *, bool on);
     25	/* main context generation function */
     26	void  (*main)(struct gf100_gr *, struct gf100_grctx *);
     27	/* context-specific modify-on-first-load list generation function */
     28	void  (*unkn)(struct gf100_gr *);
     29	/* mmio context data */
     30	const struct gf100_gr_pack *hub;
     31	const struct gf100_gr_pack *gpc_0;
     32	const struct gf100_gr_pack *gpc_1;
     33	const struct gf100_gr_pack *zcull;
     34	const struct gf100_gr_pack *tpc;
     35	const struct gf100_gr_pack *ppc;
     36	/* indirect context data, generated with icmds/mthds */
     37	const struct gf100_gr_pack *icmd;
     38	const struct gf100_gr_pack *mthd;
     39	const struct gf100_gr_pack *sw_veid_bundle_init;
     40	/* bundle circular buffer */
     41	void (*bundle)(struct gf100_grctx *);
     42	u32 bundle_size;
     43	u32 bundle_min_gpm_fifo_depth;
     44	u32 bundle_token_limit;
     45	/* pagepool */
     46	void (*pagepool)(struct gf100_grctx *);
     47	u32 pagepool_size;
     48	/* attribute(/alpha) circular buffer */
     49	void (*attrib)(struct gf100_grctx *);
     50	u32 attrib_nr_max;
     51	u32 attrib_nr;
     52	u32 alpha_nr_max;
     53	u32 alpha_nr;
     54	u32 gfxp_nr;
     55	/* other patch buffer stuff */
     56	void (*patch_ltc)(struct gf100_grctx *);
     57	/* floorsweeping */
     58	void (*sm_id)(struct gf100_gr *, int gpc, int tpc, int sm);
     59	void (*tpc_nr)(struct gf100_gr *, int gpc);
     60	bool skip_pd_num_tpc_per_gpc;
     61	void (*r4060a8)(struct gf100_gr *);
     62	void (*rop_mapping)(struct gf100_gr *);
     63	void (*alpha_beta_tables)(struct gf100_gr *);
     64	void (*max_ways_evict)(struct gf100_gr *);
     65	void (*dist_skip_table)(struct gf100_gr *);
     66	void (*r406500)(struct gf100_gr *);
     67	void (*gpc_tpc_nr)(struct gf100_gr *);
     68	void (*r419f78)(struct gf100_gr *);
     69	void (*tpc_mask)(struct gf100_gr *);
     70	void (*smid_config)(struct gf100_gr *);
     71	/* misc other things */
     72	void (*r400088)(struct gf100_gr *, bool);
     73	void (*r419cb8)(struct gf100_gr *);
     74	void (*r418800)(struct gf100_gr *);
     75	void (*r419eb0)(struct gf100_gr *);
     76	void (*r419e00)(struct gf100_gr *);
     77	void (*r418e94)(struct gf100_gr *);
     78	void (*r419a3c)(struct gf100_gr *);
     79	void (*r408840)(struct gf100_gr *);
     80	void (*r419c0c)(struct gf100_gr *);
     81};
     82
     83extern const struct gf100_grctx_func gf100_grctx;
     84int  gf100_grctx_generate(struct gf100_gr *);
     85void gf100_grctx_generate_main(struct gf100_gr *, struct gf100_grctx *);
     86void gf100_grctx_generate_bundle(struct gf100_grctx *);
     87void gf100_grctx_generate_pagepool(struct gf100_grctx *);
     88void gf100_grctx_generate_attrib(struct gf100_grctx *);
     89void gf100_grctx_generate_unkn(struct gf100_gr *);
     90void gf100_grctx_generate_floorsweep(struct gf100_gr *);
     91void gf100_grctx_generate_sm_id(struct gf100_gr *, int, int, int);
     92void gf100_grctx_generate_tpc_nr(struct gf100_gr *, int);
     93void gf100_grctx_generate_r4060a8(struct gf100_gr *);
     94void gf100_grctx_generate_rop_mapping(struct gf100_gr *);
     95void gf100_grctx_generate_alpha_beta_tables(struct gf100_gr *);
     96void gf100_grctx_generate_max_ways_evict(struct gf100_gr *);
     97void gf100_grctx_generate_r419cb8(struct gf100_gr *);
     98
     99extern const struct gf100_grctx_func gf108_grctx;
    100void gf108_grctx_generate_attrib(struct gf100_grctx *);
    101void gf108_grctx_generate_unkn(struct gf100_gr *);
    102
    103extern const struct gf100_grctx_func gf104_grctx;
    104extern const struct gf100_grctx_func gf110_grctx;
    105
    106extern const struct gf100_grctx_func gf117_grctx;
    107void gf117_grctx_generate_attrib(struct gf100_grctx *);
    108void gf117_grctx_generate_rop_mapping(struct gf100_gr *);
    109void gf117_grctx_generate_dist_skip_table(struct gf100_gr *);
    110
    111extern const struct gf100_grctx_func gf119_grctx;
    112
    113extern const struct gf100_grctx_func gk104_grctx;
    114void gk104_grctx_generate_alpha_beta_tables(struct gf100_gr *);
    115void gk104_grctx_generate_gpc_tpc_nr(struct gf100_gr *);
    116
    117extern const struct gf100_grctx_func gk20a_grctx;
    118void gk104_grctx_generate_bundle(struct gf100_grctx *);
    119void gk104_grctx_generate_pagepool(struct gf100_grctx *);
    120void gk104_grctx_generate_patch_ltc(struct gf100_grctx *);
    121void gk104_grctx_generate_unkn(struct gf100_gr *);
    122void gk104_grctx_generate_r418800(struct gf100_gr *);
    123
    124extern const struct gf100_grctx_func gk110_grctx;
    125void gk110_grctx_generate_r419eb0(struct gf100_gr *);
    126
    127extern const struct gf100_grctx_func gk110b_grctx;
    128extern const struct gf100_grctx_func gk208_grctx;
    129
    130extern const struct gf100_grctx_func gm107_grctx;
    131void gm107_grctx_generate_bundle(struct gf100_grctx *);
    132void gm107_grctx_generate_pagepool(struct gf100_grctx *);
    133void gm107_grctx_generate_attrib(struct gf100_grctx *);
    134void gm107_grctx_generate_sm_id(struct gf100_gr *, int, int, int);
    135
    136extern const struct gf100_grctx_func gm200_grctx;
    137void gm200_grctx_generate_dist_skip_table(struct gf100_gr *);
    138void gm200_grctx_generate_r406500(struct gf100_gr *);
    139void gm200_grctx_generate_tpc_mask(struct gf100_gr *);
    140void gm200_grctx_generate_smid_config(struct gf100_gr *);
    141void gm200_grctx_generate_r419a3c(struct gf100_gr *);
    142
    143extern const struct gf100_grctx_func gm20b_grctx;
    144
    145extern const struct gf100_grctx_func gp100_grctx;
    146void gp100_grctx_generate_pagepool(struct gf100_grctx *);
    147void gp100_grctx_generate_smid_config(struct gf100_gr *);
    148
    149extern const struct gf100_grctx_func gp102_grctx;
    150void gp102_grctx_generate_attrib(struct gf100_grctx *);
    151
    152extern const struct gf100_grctx_func gp104_grctx;
    153
    154extern const struct gf100_grctx_func gp107_grctx;
    155
    156extern const struct gf100_grctx_func gv100_grctx;
    157
    158extern const struct gf100_grctx_func tu102_grctx;
    159void gv100_grctx_unkn88c(struct gf100_gr *, bool);
    160void gv100_grctx_generate_unkn(struct gf100_gr *);
    161extern const struct gf100_gr_init gv100_grctx_init_sw_veid_bundle_init_0[];
    162void gv100_grctx_generate_attrib(struct gf100_grctx *);
    163void gv100_grctx_generate_rop_mapping(struct gf100_gr *);
    164void gv100_grctx_generate_r400088(struct gf100_gr *, bool);
    165
    166/* context init value lists */
    167
    168extern const struct gf100_gr_pack gf100_grctx_pack_icmd[];
    169
    170extern const struct gf100_gr_pack gf100_grctx_pack_mthd[];
    171extern const struct gf100_gr_init gf100_grctx_init_902d_0[];
    172extern const struct gf100_gr_init gf100_grctx_init_9039_0[];
    173extern const struct gf100_gr_init gf100_grctx_init_90c0_0[];
    174
    175extern const struct gf100_gr_pack gf100_grctx_pack_hub[];
    176extern const struct gf100_gr_init gf100_grctx_init_main_0[];
    177extern const struct gf100_gr_init gf100_grctx_init_fe_0[];
    178extern const struct gf100_gr_init gf100_grctx_init_pri_0[];
    179extern const struct gf100_gr_init gf100_grctx_init_memfmt_0[];
    180extern const struct gf100_gr_init gf100_grctx_init_rstr2d_0[];
    181extern const struct gf100_gr_init gf100_grctx_init_scc_0[];
    182
    183extern const struct gf100_gr_pack gf100_grctx_pack_gpc_0[];
    184extern const struct gf100_gr_pack gf100_grctx_pack_gpc_1[];
    185extern const struct gf100_gr_init gf100_grctx_init_gpc_unk_0[];
    186extern const struct gf100_gr_init gf100_grctx_init_prop_0[];
    187extern const struct gf100_gr_init gf100_grctx_init_gpc_unk_1[];
    188extern const struct gf100_gr_init gf100_grctx_init_zcull_0[];
    189extern const struct gf100_gr_init gf100_grctx_init_crstr_0[];
    190extern const struct gf100_gr_init gf100_grctx_init_gpm_0[];
    191extern const struct gf100_gr_init gf100_grctx_init_gcc_0[];
    192
    193extern const struct gf100_gr_pack gf100_grctx_pack_zcull[];
    194
    195extern const struct gf100_gr_pack gf100_grctx_pack_tpc[];
    196extern const struct gf100_gr_init gf100_grctx_init_pe_0[];
    197extern const struct gf100_gr_init gf100_grctx_init_wwdx_0[];
    198extern const struct gf100_gr_init gf100_grctx_init_mpc_0[];
    199extern const struct gf100_gr_init gf100_grctx_init_tpccs_0[];
    200
    201extern const struct gf100_gr_init gf104_grctx_init_tex_0[];
    202extern const struct gf100_gr_init gf104_grctx_init_l1c_0[];
    203extern const struct gf100_gr_init gf104_grctx_init_sm_0[];
    204
    205extern const struct gf100_gr_init gf108_grctx_init_9097_0[];
    206
    207extern const struct gf100_gr_init gf108_grctx_init_gpm_0[];
    208
    209extern const struct gf100_gr_init gf108_grctx_init_pe_0[];
    210extern const struct gf100_gr_init gf108_grctx_init_wwdx_0[];
    211extern const struct gf100_gr_init gf108_grctx_init_tpccs_0[];
    212
    213extern const struct gf100_gr_init gf110_grctx_init_9197_0[];
    214extern const struct gf100_gr_init gf110_grctx_init_9297_0[];
    215
    216extern const struct gf100_gr_pack gf119_grctx_pack_icmd[];
    217
    218extern const struct gf100_gr_pack gf119_grctx_pack_mthd[];
    219
    220extern const struct gf100_gr_init gf119_grctx_init_fe_0[];
    221extern const struct gf100_gr_init gf119_grctx_init_be_0[];
    222
    223extern const struct gf100_gr_init gf119_grctx_init_prop_0[];
    224extern const struct gf100_gr_init gf119_grctx_init_gpc_unk_1[];
    225extern const struct gf100_gr_init gf119_grctx_init_crstr_0[];
    226
    227extern const struct gf100_gr_init gf119_grctx_init_sm_0[];
    228
    229extern const struct gf100_gr_init gf117_grctx_init_pe_0[];
    230
    231extern const struct gf100_gr_init gf117_grctx_init_wwdx_0[];
    232
    233extern const struct gf100_gr_pack gf117_grctx_pack_gpc_1[];
    234
    235extern const struct gf100_gr_init gk104_grctx_init_memfmt_0[];
    236extern const struct gf100_gr_init gk104_grctx_init_ds_0[];
    237extern const struct gf100_gr_init gk104_grctx_init_scc_0[];
    238
    239extern const struct gf100_gr_init gk104_grctx_init_gpm_0[];
    240
    241extern const struct gf100_gr_init gk104_grctx_init_pes_0[];
    242
    243extern const struct gf100_gr_pack gk104_grctx_pack_hub[];
    244extern const struct gf100_gr_pack gk104_grctx_pack_tpc[];
    245extern const struct gf100_gr_pack gk104_grctx_pack_ppc[];
    246extern const struct gf100_gr_pack gk104_grctx_pack_icmd[];
    247extern const struct gf100_gr_init gk104_grctx_init_a097_0[];
    248
    249extern const struct gf100_gr_pack gk110_grctx_pack_icmd[];
    250
    251extern const struct gf100_gr_pack gk110_grctx_pack_mthd[];
    252
    253extern const struct gf100_gr_pack gk110_grctx_pack_hub[];
    254extern const struct gf100_gr_init gk110_grctx_init_pri_0[];
    255extern const struct gf100_gr_init gk110_grctx_init_cwd_0[];
    256
    257extern const struct gf100_gr_pack gk110_grctx_pack_gpc_0[];
    258extern const struct gf100_gr_pack gk110_grctx_pack_gpc_1[];
    259extern const struct gf100_gr_init gk110_grctx_init_gpc_unk_2[];
    260
    261extern const struct gf100_gr_init gk110_grctx_init_tex_0[];
    262extern const struct gf100_gr_init gk110_grctx_init_mpc_0[];
    263extern const struct gf100_gr_init gk110_grctx_init_l1c_0[];
    264
    265extern const struct gf100_gr_pack gk110_grctx_pack_ppc[];
    266
    267extern const struct gf100_gr_init gk208_grctx_init_rstr2d_0[];
    268
    269extern const struct gf100_gr_init gk208_grctx_init_prop_0[];
    270extern const struct gf100_gr_init gk208_grctx_init_crstr_0[];
    271
    272extern const struct gf100_gr_init gm107_grctx_init_gpc_unk_0[];
    273extern const struct gf100_gr_init gm107_grctx_init_wwdx_0[];
    274#endif