#include "i915_drv.h"
#include "i915_reg.h"
#include "intel_context.h"
#include "intel_engine_pm.h"
#include "intel_engine_regs.h"
#include "intel_gpu_commands.h"
#include "intel_gt.h"
#include "intel_gt_ccs_mode.h"
#include "intel_gt_mcr.h"
#include "intel_gt_print.h"
#include "intel_gt_regs.h"
#include "intel_ring.h"
#include "intel_workarounds.h"
#include "display/intel_fbc_regs.h"
static void wa_init_start(struct i915_wa_list *wal, struct intel_gt *gt,
const char *name, const char *engine_name)
{ … }
#define WA_LIST_CHUNK …
static void wa_init_finish(struct i915_wa_list *wal)
{ … }
static enum forcewake_domains
wal_get_fw_for_rmw(struct intel_uncore *uncore, const struct i915_wa_list *wal)
{ … }
static void _wa_add(struct i915_wa_list *wal, const struct i915_wa *wa)
{ … }
static void wa_add(struct i915_wa_list *wal, i915_reg_t reg,
u32 clear, u32 set, u32 read_mask, bool masked_reg)
{ … }
static void wa_mcr_add(struct i915_wa_list *wal, i915_mcr_reg_t reg,
u32 clear, u32 set, u32 read_mask, bool masked_reg)
{ … }
static void
wa_write_clr_set(struct i915_wa_list *wal, i915_reg_t reg, u32 clear, u32 set)
{ … }
static void
wa_mcr_write_clr_set(struct i915_wa_list *wal, i915_mcr_reg_t reg, u32 clear, u32 set)
{ … }
static void
wa_write(struct i915_wa_list *wal, i915_reg_t reg, u32 set)
{ … }
static void
wa_write_or(struct i915_wa_list *wal, i915_reg_t reg, u32 set)
{ … }
static void
wa_mcr_write_or(struct i915_wa_list *wal, i915_mcr_reg_t reg, u32 set)
{ … }
static void
wa_write_clr(struct i915_wa_list *wal, i915_reg_t reg, u32 clr)
{ … }
static void
wa_mcr_write_clr(struct i915_wa_list *wal, i915_mcr_reg_t reg, u32 clr)
{ … }
static void
wa_masked_en(struct i915_wa_list *wal, i915_reg_t reg, u32 val)
{ … }
static void
wa_mcr_masked_en(struct i915_wa_list *wal, i915_mcr_reg_t reg, u32 val)
{ … }
static void
wa_masked_dis(struct i915_wa_list *wal, i915_reg_t reg, u32 val)
{ … }
static void
wa_mcr_masked_dis(struct i915_wa_list *wal, i915_mcr_reg_t reg, u32 val)
{ … }
static void
wa_masked_field_set(struct i915_wa_list *wal, i915_reg_t reg,
u32 mask, u32 val)
{ … }
static void
wa_mcr_masked_field_set(struct i915_wa_list *wal, i915_mcr_reg_t reg,
u32 mask, u32 val)
{ … }
static void gen6_ctx_workarounds_init(struct intel_engine_cs *engine,
struct i915_wa_list *wal)
{ … }
static void gen7_ctx_workarounds_init(struct intel_engine_cs *engine,
struct i915_wa_list *wal)
{ … }
static void gen8_ctx_workarounds_init(struct intel_engine_cs *engine,
struct i915_wa_list *wal)
{ … }
static void bdw_ctx_workarounds_init(struct intel_engine_cs *engine,
struct i915_wa_list *wal)
{ … }
static void chv_ctx_workarounds_init(struct intel_engine_cs *engine,
struct i915_wa_list *wal)
{ … }
static void gen9_ctx_workarounds_init(struct intel_engine_cs *engine,
struct i915_wa_list *wal)
{ … }
static void skl_tune_iz_hashing(struct intel_engine_cs *engine,
struct i915_wa_list *wal)
{ … }
static void skl_ctx_workarounds_init(struct intel_engine_cs *engine,
struct i915_wa_list *wal)
{ … }
static void bxt_ctx_workarounds_init(struct intel_engine_cs *engine,
struct i915_wa_list *wal)
{ … }
static void kbl_ctx_workarounds_init(struct intel_engine_cs *engine,
struct i915_wa_list *wal)
{ … }
static void glk_ctx_workarounds_init(struct intel_engine_cs *engine,
struct i915_wa_list *wal)
{ … }
static void cfl_ctx_workarounds_init(struct intel_engine_cs *engine,
struct i915_wa_list *wal)
{ … }
static void icl_ctx_workarounds_init(struct intel_engine_cs *engine,
struct i915_wa_list *wal)
{ … }
static void dg2_ctx_gt_tuning_init(struct intel_engine_cs *engine,
struct i915_wa_list *wal)
{ … }
static void gen12_ctx_workarounds_init(struct intel_engine_cs *engine,
struct i915_wa_list *wal)
{ … }
static void dg1_ctx_workarounds_init(struct intel_engine_cs *engine,
struct i915_wa_list *wal)
{ … }
static void dg2_ctx_workarounds_init(struct intel_engine_cs *engine,
struct i915_wa_list *wal)
{ … }
static void xelpg_ctx_gt_tuning_init(struct intel_engine_cs *engine,
struct i915_wa_list *wal)
{ … }
static void xelpg_ctx_workarounds_init(struct intel_engine_cs *engine,
struct i915_wa_list *wal)
{ … }
static void fakewa_disable_nestedbb_mode(struct intel_engine_cs *engine,
struct i915_wa_list *wal)
{ … }
static void gen12_ctx_gt_mocs_init(struct intel_engine_cs *engine,
struct i915_wa_list *wal)
{ … }
static void
gen12_ctx_gt_fake_wa_init(struct intel_engine_cs *engine,
struct i915_wa_list *wal)
{ … }
static void
__intel_engine_init_ctx_wa(struct intel_engine_cs *engine,
struct i915_wa_list *wal,
const char *name)
{ … }
void intel_engine_init_ctx_wa(struct intel_engine_cs *engine)
{ … }
int intel_engine_emit_ctx_wa(struct i915_request *rq)
{ … }
static void
gen4_gt_workarounds_init(struct intel_gt *gt,
struct i915_wa_list *wal)
{ … }
static void
g4x_gt_workarounds_init(struct intel_gt *gt, struct i915_wa_list *wal)
{ … }
static void
ilk_gt_workarounds_init(struct intel_gt *gt, struct i915_wa_list *wal)
{ … }
static void
snb_gt_workarounds_init(struct intel_gt *gt, struct i915_wa_list *wal)
{ … }
static void
ivb_gt_workarounds_init(struct intel_gt *gt, struct i915_wa_list *wal)
{ … }
static void
vlv_gt_workarounds_init(struct intel_gt *gt, struct i915_wa_list *wal)
{ … }
static void
hsw_gt_workarounds_init(struct intel_gt *gt, struct i915_wa_list *wal)
{ … }
static void
gen9_wa_init_mcr(struct drm_i915_private *i915, struct i915_wa_list *wal)
{ … }
static void
gen9_gt_workarounds_init(struct intel_gt *gt, struct i915_wa_list *wal)
{ … }
static void
skl_gt_workarounds_init(struct intel_gt *gt, struct i915_wa_list *wal)
{ … }
static void
kbl_gt_workarounds_init(struct intel_gt *gt, struct i915_wa_list *wal)
{ … }
static void
glk_gt_workarounds_init(struct intel_gt *gt, struct i915_wa_list *wal)
{ … }
static void
cfl_gt_workarounds_init(struct intel_gt *gt, struct i915_wa_list *wal)
{ … }
static void __set_mcr_steering(struct i915_wa_list *wal,
i915_reg_t steering_reg,
unsigned int slice, unsigned int subslice)
{ … }
static void debug_dump_steering(struct intel_gt *gt)
{ … }
static void __add_mcr_wa(struct intel_gt *gt, struct i915_wa_list *wal,
unsigned int slice, unsigned int subslice)
{ … }
static void
icl_wa_init_mcr(struct intel_gt *gt, struct i915_wa_list *wal)
{ … }
static void
xehp_init_mcr(struct intel_gt *gt, struct i915_wa_list *wal)
{ … }
static void
icl_gt_workarounds_init(struct intel_gt *gt, struct i915_wa_list *wal)
{ … }
static void
wa_14011060649(struct intel_gt *gt, struct i915_wa_list *wal)
{ … }
static void
gen12_gt_workarounds_init(struct intel_gt *gt, struct i915_wa_list *wal)
{ … }
static void
dg1_gt_workarounds_init(struct intel_gt *gt, struct i915_wa_list *wal)
{ … }
static void
dg2_gt_workarounds_init(struct intel_gt *gt, struct i915_wa_list *wal)
{ … }
static void
xelpg_gt_workarounds_init(struct intel_gt *gt, struct i915_wa_list *wal)
{ … }
static void
wa_16021867713(struct intel_gt *gt, struct i915_wa_list *wal)
{ … }
static void
xelpmp_gt_workarounds_init(struct intel_gt *gt, struct i915_wa_list *wal)
{ … }
static void gt_tuning_settings(struct intel_gt *gt, struct i915_wa_list *wal)
{ … }
static void
gt_init_workarounds(struct intel_gt *gt, struct i915_wa_list *wal)
{ … }
void intel_gt_init_workarounds(struct intel_gt *gt)
{ … }
static bool
wa_verify(struct intel_gt *gt, const struct i915_wa *wa, u32 cur,
const char *name, const char *from)
{ … }
static void wa_list_apply(const struct i915_wa_list *wal)
{ … }
void intel_gt_apply_workarounds(struct intel_gt *gt)
{ … }
static bool wa_list_verify(struct intel_gt *gt,
const struct i915_wa_list *wal,
const char *from)
{ … }
bool intel_gt_verify_workarounds(struct intel_gt *gt, const char *from)
{ … }
__maybe_unused
static bool is_nonpriv_flags_valid(u32 flags)
{ … }
static void
whitelist_reg_ext(struct i915_wa_list *wal, i915_reg_t reg, u32 flags)
{ … }
static void
whitelist_mcr_reg_ext(struct i915_wa_list *wal, i915_mcr_reg_t reg, u32 flags)
{ … }
static void
whitelist_reg(struct i915_wa_list *wal, i915_reg_t reg)
{ … }
static void
whitelist_mcr_reg(struct i915_wa_list *wal, i915_mcr_reg_t reg)
{ … }
static void gen9_whitelist_build(struct i915_wa_list *w)
{ … }
static void skl_whitelist_build(struct intel_engine_cs *engine)
{ … }
static void bxt_whitelist_build(struct intel_engine_cs *engine)
{ … }
static void kbl_whitelist_build(struct intel_engine_cs *engine)
{ … }
static void glk_whitelist_build(struct intel_engine_cs *engine)
{ … }
static void cfl_whitelist_build(struct intel_engine_cs *engine)
{ … }
static void allow_read_ctx_timestamp(struct intel_engine_cs *engine)
{ … }
static void cml_whitelist_build(struct intel_engine_cs *engine)
{ … }
static void icl_whitelist_build(struct intel_engine_cs *engine)
{ … }
static void tgl_whitelist_build(struct intel_engine_cs *engine)
{ … }
static void dg2_whitelist_build(struct intel_engine_cs *engine)
{ … }
static void xelpg_whitelist_build(struct intel_engine_cs *engine)
{ … }
void intel_engine_init_whitelist(struct intel_engine_cs *engine)
{ … }
void intel_engine_apply_whitelist(struct intel_engine_cs *engine)
{ … }
static void
engine_fake_wa_init(struct intel_engine_cs *engine, struct i915_wa_list *wal)
{ … }
static void
rcs_engine_wa_init(struct intel_engine_cs *engine, struct i915_wa_list *wal)
{ … }
static void
xcs_engine_wa_init(struct intel_engine_cs *engine, struct i915_wa_list *wal)
{ … }
static void
ccs_engine_wa_init(struct intel_engine_cs *engine, struct i915_wa_list *wal)
{ … }
static void
add_render_compute_tuning_settings(struct intel_gt *gt,
struct i915_wa_list *wal)
{ … }
static void ccs_engine_wa_mode(struct intel_engine_cs *engine, struct i915_wa_list *wal)
{ … }
static void
general_render_compute_wa_init(struct intel_engine_cs *engine, struct i915_wa_list *wal)
{ … }
static void
engine_init_workarounds(struct intel_engine_cs *engine, struct i915_wa_list *wal)
{ … }
void intel_engine_init_workarounds(struct intel_engine_cs *engine)
{ … }
void intel_engine_apply_workarounds(struct intel_engine_cs *engine)
{ … }
static const struct i915_range mcr_ranges_gen8[] = …;
static const struct i915_range mcr_ranges_gen12[] = …;
static const struct i915_range mcr_ranges_xehp[] = …;
static bool mcr_range(struct drm_i915_private *i915, u32 offset)
{ … }
static int
wa_list_srm(struct i915_request *rq,
const struct i915_wa_list *wal,
struct i915_vma *vma)
{ … }
static int engine_wa_list_verify(struct intel_context *ce,
const struct i915_wa_list * const wal,
const char *from)
{ … }
int intel_engine_verify_workarounds(struct intel_engine_cs *engine,
const char *from)
{ … }
#if IS_ENABLED(CONFIG_DRM_I915_SELFTEST)
#include "selftest_workarounds.c"
#endif