linux/drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgf100.h
<<
>>
Prefs
   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
 275