Merge branch 'topic/revid_steppings' into drm-intel-gt-next
The switch from old old IS_FOO_REVID() macros to the new table-based IS_FOO_{GT,DISP}_STEP() macros is needed on both drm-intel-next (for display-based DMC matching) and drm-intel-gt-next (for workaround guards). To avoid conflicts, we'll apply the patches to a topic branch and merge it to both intel branches to ensure the transition to the new macros is clean. Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
This commit is contained in:
commit
d6e6ac294d
|
@ -5798,7 +5798,7 @@ static void tgl_bw_buddy_init(struct drm_i915_private *dev_priv)
|
|||
int config, i;
|
||||
|
||||
if (IS_ALDERLAKE_S(dev_priv) ||
|
||||
IS_DG1_REVID(dev_priv, DG1_REVID_A0, DG1_REVID_A0) ||
|
||||
IS_DG1_DISPLAY_STEP(dev_priv, STEP_A0, STEP_A0) ||
|
||||
IS_TGL_DISPLAY_STEP(dev_priv, STEP_A0, STEP_B0))
|
||||
/* Wa_1409767108:tgl,dg1,adl-s */
|
||||
table = wa_1409767108_buddy_page_masks;
|
||||
|
|
|
@ -2674,7 +2674,7 @@ static bool
|
|||
ehl_combo_pll_div_frac_wa_needed(struct drm_i915_private *i915)
|
||||
{
|
||||
return ((IS_PLATFORM(i915, INTEL_ELKHARTLAKE) &&
|
||||
IS_JSL_EHL_REVID(i915, EHL_REVID_B0, REVID_FOREVER)) ||
|
||||
IS_JSL_EHL_DISPLAY_STEP(i915, STEP_B0, STEP_FOREVER)) ||
|
||||
IS_TIGERLAKE(i915) || IS_ALDERLAKE_P(i915)) &&
|
||||
i915->dpll.ref_clks.nssc == 38400;
|
||||
}
|
||||
|
|
|
@ -550,7 +550,7 @@ static void hsw_activate_psr2(struct intel_dp *intel_dp)
|
|||
if (intel_dp->psr.psr2_sel_fetch_enabled) {
|
||||
/* WA 1408330847 */
|
||||
if (IS_TGL_DISPLAY_STEP(dev_priv, STEP_A0, STEP_A0) ||
|
||||
IS_RKL_REVID(dev_priv, RKL_REVID_A0, RKL_REVID_A0))
|
||||
IS_RKL_DISPLAY_STEP(dev_priv, STEP_A0, STEP_A0))
|
||||
intel_de_rmw(dev_priv, CHICKEN_PAR1_1,
|
||||
DIS_RAM_BYPASS_PSR2_MAN_TRACK,
|
||||
DIS_RAM_BYPASS_PSR2_MAN_TRACK);
|
||||
|
@ -1221,7 +1221,7 @@ static void intel_psr_disable_locked(struct intel_dp *intel_dp)
|
|||
/* WA 1408330847 */
|
||||
if (intel_dp->psr.psr2_sel_fetch_enabled &&
|
||||
(IS_TGL_DISPLAY_STEP(dev_priv, STEP_A0, STEP_A0) ||
|
||||
IS_RKL_REVID(dev_priv, RKL_REVID_A0, RKL_REVID_A0)))
|
||||
IS_RKL_DISPLAY_STEP(dev_priv, STEP_A0, STEP_A0)))
|
||||
intel_de_rmw(dev_priv, CHICKEN_PAR1_1,
|
||||
DIS_RAM_BYPASS_PSR2_MAN_TRACK, 0);
|
||||
|
||||
|
|
|
@ -157,7 +157,7 @@ intel_gt_setup_fake_lmem(struct intel_gt *gt)
|
|||
static bool get_legacy_lowmem_region(struct intel_uncore *uncore,
|
||||
u64 *start, u32 *size)
|
||||
{
|
||||
if (!IS_DG1_REVID(uncore->i915, DG1_REVID_A0, DG1_REVID_B0))
|
||||
if (!IS_DG1_GT_STEP(uncore->i915, STEP_A0, STEP_B0))
|
||||
return false;
|
||||
|
||||
*start = 0;
|
||||
|
|
|
@ -514,53 +514,15 @@ static void cfl_ctx_workarounds_init(struct intel_engine_cs *engine,
|
|||
GEN7_SBE_SS_CACHE_DISPATCH_PORT_SHARING_DISABLE);
|
||||
}
|
||||
|
||||
static void cnl_ctx_workarounds_init(struct intel_engine_cs *engine,
|
||||
struct i915_wa_list *wal)
|
||||
{
|
||||
/* WaForceContextSaveRestoreNonCoherent:cnl */
|
||||
wa_masked_en(wal, CNL_HDC_CHICKEN0,
|
||||
HDC_FORCE_CONTEXT_SAVE_RESTORE_NON_COHERENT);
|
||||
|
||||
/* WaDisableReplayBufferBankArbitrationOptimization:cnl */
|
||||
wa_masked_en(wal, COMMON_SLICE_CHICKEN2,
|
||||
GEN8_SBE_DISABLE_REPLAY_BUF_OPTIMIZATION);
|
||||
|
||||
/* WaPushConstantDereferenceHoldDisable:cnl */
|
||||
wa_masked_en(wal, GEN7_ROW_CHICKEN2, PUSH_CONSTANT_DEREF_DISABLE);
|
||||
|
||||
/* FtrEnableFastAnisoL1BankingFix:cnl */
|
||||
wa_masked_en(wal, HALF_SLICE_CHICKEN3, CNL_FAST_ANISO_L1_BANKING_FIX);
|
||||
|
||||
/* WaDisable3DMidCmdPreemption:cnl */
|
||||
wa_masked_dis(wal, GEN8_CS_CHICKEN1, GEN9_PREEMPT_3D_OBJECT_LEVEL);
|
||||
|
||||
/* WaDisableGPGPUMidCmdPreemption:cnl */
|
||||
wa_masked_field_set(wal, GEN8_CS_CHICKEN1,
|
||||
GEN9_PREEMPT_GPGPU_LEVEL_MASK,
|
||||
GEN9_PREEMPT_GPGPU_COMMAND_LEVEL);
|
||||
|
||||
/* WaDisableEarlyEOT:cnl */
|
||||
wa_masked_en(wal, GEN8_ROW_CHICKEN, DISABLE_EARLY_EOT);
|
||||
}
|
||||
|
||||
static void icl_ctx_workarounds_init(struct intel_engine_cs *engine,
|
||||
struct i915_wa_list *wal)
|
||||
{
|
||||
struct drm_i915_private *i915 = engine->i915;
|
||||
|
||||
/* WaDisableBankHangMode:icl */
|
||||
wa_write(wal,
|
||||
GEN8_L3CNTLREG,
|
||||
intel_uncore_read(engine->uncore, GEN8_L3CNTLREG) |
|
||||
GEN8_ERRDETBCTRL);
|
||||
|
||||
/* Wa_1604370585:icl (pre-prod)
|
||||
* Formerly known as WaPushConstantDereferenceHoldDisable
|
||||
*/
|
||||
if (IS_ICL_REVID(i915, ICL_REVID_A0, ICL_REVID_B0))
|
||||
wa_masked_en(wal, GEN7_ROW_CHICKEN2,
|
||||
PUSH_CONSTANT_DEREF_DISABLE);
|
||||
|
||||
/* WaForceEnableNonCoherent:icl
|
||||
* This is not the same workaround as in early Gen9 platforms, where
|
||||
* lacking this could cause system hangs, but coherency performance
|
||||
|
@ -570,18 +532,6 @@ static void icl_ctx_workarounds_init(struct intel_engine_cs *engine,
|
|||
*/
|
||||
wa_masked_en(wal, ICL_HDC_MODE, HDC_FORCE_NON_COHERENT);
|
||||
|
||||
/* Wa_2006611047:icl (pre-prod)
|
||||
* Formerly known as WaDisableImprovedTdlClkGating
|
||||
*/
|
||||
if (IS_ICL_REVID(i915, ICL_REVID_A0, ICL_REVID_A0))
|
||||
wa_masked_en(wal, GEN7_ROW_CHICKEN2,
|
||||
GEN11_TDL_CLOCK_GATING_FIX_DISABLE);
|
||||
|
||||
/* Wa_2006665173:icl (pre-prod) */
|
||||
if (IS_ICL_REVID(i915, ICL_REVID_A0, ICL_REVID_A0))
|
||||
wa_masked_en(wal, GEN11_COMMON_SLICE_CHICKEN3,
|
||||
GEN11_BLEND_EMB_FIX_DISABLE_IN_RCC);
|
||||
|
||||
/* WaEnableFloatBlendOptimization:icl */
|
||||
wa_write_clr_set(wal,
|
||||
GEN10_CACHE_MODE_SS,
|
||||
|
@ -711,8 +661,6 @@ __intel_engine_init_ctx_wa(struct intel_engine_cs *engine,
|
|||
gen12_ctx_workarounds_init(engine, wal);
|
||||
else if (GRAPHICS_VER(i915) == 11)
|
||||
icl_ctx_workarounds_init(engine, wal);
|
||||
else if (IS_CANNONLAKE(i915))
|
||||
cnl_ctx_workarounds_init(engine, wal);
|
||||
else if (IS_COFFEELAKE(i915) || IS_COMETLAKE(i915))
|
||||
cfl_ctx_workarounds_init(engine, wal);
|
||||
else if (IS_GEMINILAKE(i915))
|
||||
|
@ -890,7 +838,7 @@ skl_gt_workarounds_init(struct drm_i915_private *i915, struct i915_wa_list *wal)
|
|||
GEN8_EU_GAUNIT_CLOCK_GATE_DISABLE);
|
||||
|
||||
/* WaInPlaceDecompressionHang:skl */
|
||||
if (IS_SKL_REVID(i915, SKL_REVID_H0, REVID_FOREVER))
|
||||
if (IS_SKL_GT_STEP(i915, STEP_H0, STEP_FOREVER))
|
||||
wa_write_or(wal,
|
||||
GEN9_GAMT_ECO_REG_RW_IA,
|
||||
GAMT_ECO_ENABLE_IN_PLACE_DECOMPRESS);
|
||||
|
@ -989,15 +937,6 @@ icl_wa_init_mcr(struct drm_i915_private *i915, struct i915_wa_list *wal)
|
|||
wa_write_clr_set(wal, GEN8_MCR_SELECTOR, mcr_mask, mcr);
|
||||
}
|
||||
|
||||
static void
|
||||
cnl_gt_workarounds_init(struct drm_i915_private *i915, struct i915_wa_list *wal)
|
||||
{
|
||||
/* WaInPlaceDecompressionHang:cnl */
|
||||
wa_write_or(wal,
|
||||
GEN9_GAMT_ECO_REG_RW_IA,
|
||||
GAMT_ECO_ENABLE_IN_PLACE_DECOMPRESS);
|
||||
}
|
||||
|
||||
static void
|
||||
icl_gt_workarounds_init(struct drm_i915_private *i915, struct i915_wa_list *wal)
|
||||
{
|
||||
|
@ -1029,18 +968,6 @@ icl_gt_workarounds_init(struct drm_i915_private *i915, struct i915_wa_list *wal)
|
|||
GEN8_GAMW_ECO_DEV_RW_IA,
|
||||
GAMW_ECO_DEV_CTX_RELOAD_DISABLE);
|
||||
|
||||
/* Wa_1405779004:icl (pre-prod) */
|
||||
if (IS_ICL_REVID(i915, ICL_REVID_A0, ICL_REVID_A0))
|
||||
wa_write_or(wal,
|
||||
SLICE_UNIT_LEVEL_CLKGATE,
|
||||
MSCUNIT_CLKGATE_DIS);
|
||||
|
||||
/* Wa_1406838659:icl (pre-prod) */
|
||||
if (IS_ICL_REVID(i915, ICL_REVID_A0, ICL_REVID_B0))
|
||||
wa_write_or(wal,
|
||||
INF_UNIT_LEVEL_CLKGATE,
|
||||
CGPSF_CLKGATE_DIS);
|
||||
|
||||
/* Wa_1406463099:icl
|
||||
* Formerly known as WaGamTlbPendError
|
||||
*/
|
||||
|
@ -1050,7 +977,7 @@ icl_gt_workarounds_init(struct drm_i915_private *i915, struct i915_wa_list *wal)
|
|||
|
||||
/* Wa_1607087056:icl,ehl,jsl */
|
||||
if (IS_ICELAKE(i915) ||
|
||||
IS_JSL_EHL_REVID(i915, EHL_REVID_A0, EHL_REVID_A0))
|
||||
IS_JSL_EHL_GT_STEP(i915, STEP_A0, STEP_A0))
|
||||
wa_write_or(wal,
|
||||
SLICE_UNIT_LEVEL_CLKGATE,
|
||||
L3_CLKGATE_DIS | L3_CR2X_CLKGATE_DIS);
|
||||
|
@ -1118,7 +1045,7 @@ dg1_gt_workarounds_init(struct drm_i915_private *i915, struct i915_wa_list *wal)
|
|||
gen12_gt_workarounds_init(i915, wal);
|
||||
|
||||
/* Wa_1607087056:dg1 */
|
||||
if (IS_DG1_REVID(i915, DG1_REVID_A0, DG1_REVID_A0))
|
||||
if (IS_DG1_GT_STEP(i915, STEP_A0, STEP_A0))
|
||||
wa_write_or(wal,
|
||||
SLICE_UNIT_LEVEL_CLKGATE,
|
||||
L3_CLKGATE_DIS | L3_CR2X_CLKGATE_DIS);
|
||||
|
@ -1147,8 +1074,6 @@ gt_init_workarounds(struct drm_i915_private *i915, struct i915_wa_list *wal)
|
|||
gen12_gt_workarounds_init(i915, wal);
|
||||
else if (GRAPHICS_VER(i915) == 11)
|
||||
icl_gt_workarounds_init(i915, wal);
|
||||
else if (IS_CANNONLAKE(i915))
|
||||
cnl_gt_workarounds_init(i915, wal);
|
||||
else if (IS_COFFEELAKE(i915) || IS_COMETLAKE(i915))
|
||||
cfl_gt_workarounds_init(i915, wal);
|
||||
else if (IS_GEMINILAKE(i915))
|
||||
|
@ -1425,17 +1350,6 @@ static void cml_whitelist_build(struct intel_engine_cs *engine)
|
|||
cfl_whitelist_build(engine);
|
||||
}
|
||||
|
||||
static void cnl_whitelist_build(struct intel_engine_cs *engine)
|
||||
{
|
||||
struct i915_wa_list *w = &engine->whitelist;
|
||||
|
||||
if (engine->class != RENDER_CLASS)
|
||||
return;
|
||||
|
||||
/* WaEnablePreemptionGranularityControlByUMD:cnl */
|
||||
whitelist_reg(w, GEN8_CS_CHICKEN1);
|
||||
}
|
||||
|
||||
static void icl_whitelist_build(struct intel_engine_cs *engine)
|
||||
{
|
||||
struct i915_wa_list *w = &engine->whitelist;
|
||||
|
@ -1529,7 +1443,7 @@ static void dg1_whitelist_build(struct intel_engine_cs *engine)
|
|||
tgl_whitelist_build(engine);
|
||||
|
||||
/* GEN:BUG:1409280441:dg1 */
|
||||
if (IS_DG1_REVID(engine->i915, DG1_REVID_A0, DG1_REVID_A0) &&
|
||||
if (IS_DG1_GT_STEP(engine->i915, STEP_A0, STEP_A0) &&
|
||||
(engine->class == RENDER_CLASS ||
|
||||
engine->class == COPY_ENGINE_CLASS))
|
||||
whitelist_reg_ext(w, RING_ID(engine->mmio_base),
|
||||
|
@ -1549,8 +1463,6 @@ void intel_engine_init_whitelist(struct intel_engine_cs *engine)
|
|||
tgl_whitelist_build(engine);
|
||||
else if (GRAPHICS_VER(i915) == 11)
|
||||
icl_whitelist_build(engine);
|
||||
else if (IS_CANNONLAKE(i915))
|
||||
cnl_whitelist_build(engine);
|
||||
else if (IS_COMETLAKE(i915))
|
||||
cml_whitelist_build(engine);
|
||||
else if (IS_COFFEELAKE(i915))
|
||||
|
@ -1599,7 +1511,7 @@ rcs_engine_wa_init(struct intel_engine_cs *engine, struct i915_wa_list *wal)
|
|||
{
|
||||
struct drm_i915_private *i915 = engine->i915;
|
||||
|
||||
if (IS_DG1_REVID(i915, DG1_REVID_A0, DG1_REVID_A0) ||
|
||||
if (IS_DG1_GT_STEP(i915, STEP_A0, STEP_A0) ||
|
||||
IS_TGL_UY_GT_STEP(i915, STEP_A0, STEP_A0)) {
|
||||
/*
|
||||
* Wa_1607138336:tgl[a0],dg1[a0]
|
||||
|
@ -1645,7 +1557,7 @@ rcs_engine_wa_init(struct intel_engine_cs *engine, struct i915_wa_list *wal)
|
|||
}
|
||||
|
||||
if (IS_ALDERLAKE_P(i915) || IS_ALDERLAKE_S(i915) ||
|
||||
IS_DG1_REVID(i915, DG1_REVID_A0, DG1_REVID_A0) ||
|
||||
IS_DG1_GT_STEP(i915, STEP_A0, STEP_A0) ||
|
||||
IS_ROCKETLAKE(i915) || IS_TIGERLAKE(i915)) {
|
||||
/* Wa_1409804808:tgl,rkl,dg1[a0],adl-s,adl-p */
|
||||
wa_masked_en(wal, GEN7_ROW_CHICKEN2,
|
||||
|
@ -1659,7 +1571,7 @@ rcs_engine_wa_init(struct intel_engine_cs *engine, struct i915_wa_list *wal)
|
|||
}
|
||||
|
||||
|
||||
if (IS_DG1_REVID(i915, DG1_REVID_A0, DG1_REVID_A0) ||
|
||||
if (IS_DG1_GT_STEP(i915, STEP_A0, STEP_A0) ||
|
||||
IS_ROCKETLAKE(i915) || IS_TIGERLAKE(i915)) {
|
||||
/*
|
||||
* Wa_1607030317:tgl
|
||||
|
@ -1732,12 +1644,6 @@ rcs_engine_wa_init(struct intel_engine_cs *engine, struct i915_wa_list *wal)
|
|||
PMFLUSH_GAPL3UNBLOCK |
|
||||
PMFLUSHDONE_LNEBLK);
|
||||
|
||||
/* Wa_1406609255:icl (pre-prod) */
|
||||
if (IS_ICL_REVID(i915, ICL_REVID_A0, ICL_REVID_B0))
|
||||
wa_write_or(wal,
|
||||
GEN7_SARCHKMD,
|
||||
GEN7_DISABLE_DEMAND_PREFETCH);
|
||||
|
||||
/* Wa_1606682166:icl */
|
||||
wa_write_or(wal,
|
||||
GEN7_SARCHKMD,
|
||||
|
|
|
@ -271,10 +271,11 @@ static void intel_detect_preproduction_hw(struct drm_i915_private *dev_priv)
|
|||
bool pre = false;
|
||||
|
||||
pre |= IS_HSW_EARLY_SDV(dev_priv);
|
||||
pre |= IS_SKL_REVID(dev_priv, 0, SKL_REVID_F0);
|
||||
pre |= IS_BXT_REVID(dev_priv, 0, BXT_REVID_B_LAST);
|
||||
pre |= IS_KBL_GT_STEP(dev_priv, 0, STEP_A0);
|
||||
pre |= IS_GLK_REVID(dev_priv, 0, GLK_REVID_A2);
|
||||
pre |= IS_SKYLAKE(dev_priv) && INTEL_REVID(dev_priv) < 0x6;
|
||||
pre |= IS_BROXTON(dev_priv) && INTEL_REVID(dev_priv) < 0xA;
|
||||
pre |= IS_KABYLAKE(dev_priv) && INTEL_REVID(dev_priv) < 0x1;
|
||||
pre |= IS_GEMINILAKE(dev_priv) && INTEL_REVID(dev_priv) < 0x3;
|
||||
pre |= IS_ICELAKE(dev_priv) && INTEL_REVID(dev_priv) < 0x7;
|
||||
|
||||
if (pre) {
|
||||
drm_err(&dev_priv->drm, "This is a pre-production stepping. "
|
||||
|
|
|
@ -1326,19 +1326,10 @@ static inline struct drm_i915_private *pdev_to_i915(struct pci_dev *pdev)
|
|||
#define IS_DISPLAY_VER(i915, from, until) \
|
||||
(DISPLAY_VER(i915) >= (from) && DISPLAY_VER(i915) <= (until))
|
||||
|
||||
#define REVID_FOREVER 0xff
|
||||
#define INTEL_REVID(dev_priv) (to_pci_dev((dev_priv)->drm.dev)->revision)
|
||||
|
||||
#define HAS_DSB(dev_priv) (INTEL_INFO(dev_priv)->display.has_dsb)
|
||||
|
||||
/*
|
||||
* Return true if revision is in range [since,until] inclusive.
|
||||
*
|
||||
* Use 0 for open-ended since, and REVID_FOREVER for open-ended until.
|
||||
*/
|
||||
#define IS_REVID(p, since, until) \
|
||||
(INTEL_REVID(p) >= (since) && INTEL_REVID(p) <= (until))
|
||||
|
||||
#define INTEL_DISPLAY_STEP(__i915) (RUNTIME_INFO(__i915)->step.display_step)
|
||||
#define INTEL_GT_STEP(__i915) (RUNTIME_INFO(__i915)->step.gt_step)
|
||||
|
||||
|
@ -1518,60 +1509,17 @@ IS_SUBPLATFORM(const struct drm_i915_private *i915,
|
|||
#define IS_TGL_Y(dev_priv) \
|
||||
IS_SUBPLATFORM(dev_priv, INTEL_TIGERLAKE, INTEL_SUBPLATFORM_ULX)
|
||||
|
||||
#define SKL_REVID_A0 0x0
|
||||
#define SKL_REVID_B0 0x1
|
||||
#define SKL_REVID_C0 0x2
|
||||
#define SKL_REVID_D0 0x3
|
||||
#define SKL_REVID_E0 0x4
|
||||
#define SKL_REVID_F0 0x5
|
||||
#define SKL_REVID_G0 0x6
|
||||
#define SKL_REVID_H0 0x7
|
||||
|
||||
#define IS_SKL_REVID(p, since, until) (IS_SKYLAKE(p) && IS_REVID(p, since, until))
|
||||
|
||||
#define BXT_REVID_A0 0x0
|
||||
#define BXT_REVID_A1 0x1
|
||||
#define BXT_REVID_B0 0x3
|
||||
#define BXT_REVID_B_LAST 0x8
|
||||
#define BXT_REVID_C0 0x9
|
||||
|
||||
#define IS_BXT_REVID(dev_priv, since, until) \
|
||||
(IS_BROXTON(dev_priv) && IS_REVID(dev_priv, since, until))
|
||||
#define IS_SKL_GT_STEP(p, since, until) (IS_SKYLAKE(p) && IS_GT_STEP(p, since, until))
|
||||
|
||||
#define IS_KBL_GT_STEP(dev_priv, since, until) \
|
||||
(IS_KABYLAKE(dev_priv) && IS_GT_STEP(dev_priv, since, until))
|
||||
#define IS_KBL_DISPLAY_STEP(dev_priv, since, until) \
|
||||
(IS_KABYLAKE(dev_priv) && IS_DISPLAY_STEP(dev_priv, since, until))
|
||||
|
||||
#define GLK_REVID_A0 0x0
|
||||
#define GLK_REVID_A1 0x1
|
||||
#define GLK_REVID_A2 0x2
|
||||
#define GLK_REVID_B0 0x3
|
||||
|
||||
#define IS_GLK_REVID(dev_priv, since, until) \
|
||||
(IS_GEMINILAKE(dev_priv) && IS_REVID(dev_priv, since, until))
|
||||
|
||||
#define CNL_REVID_A0 0x0
|
||||
#define CNL_REVID_B0 0x1
|
||||
#define CNL_REVID_C0 0x2
|
||||
|
||||
#define IS_CNL_REVID(p, since, until) \
|
||||
(IS_CANNONLAKE(p) && IS_REVID(p, since, until))
|
||||
|
||||
#define ICL_REVID_A0 0x0
|
||||
#define ICL_REVID_A2 0x1
|
||||
#define ICL_REVID_B0 0x3
|
||||
#define ICL_REVID_B2 0x4
|
||||
#define ICL_REVID_C0 0x5
|
||||
|
||||
#define IS_ICL_REVID(p, since, until) \
|
||||
(IS_ICELAKE(p) && IS_REVID(p, since, until))
|
||||
|
||||
#define EHL_REVID_A0 0x0
|
||||
#define EHL_REVID_B0 0x1
|
||||
|
||||
#define IS_JSL_EHL_REVID(p, since, until) \
|
||||
(IS_JSL_EHL(p) && IS_REVID(p, since, until))
|
||||
#define IS_JSL_EHL_GT_STEP(p, since, until) \
|
||||
(IS_JSL_EHL(p) && IS_GT_STEP(p, since, until))
|
||||
#define IS_JSL_EHL_DISPLAY_STEP(p, since, until) \
|
||||
(IS_JSL_EHL(p) && IS_DISPLAY_STEP(p, since, until))
|
||||
|
||||
#define IS_TGL_DISPLAY_STEP(__i915, since, until) \
|
||||
(IS_TIGERLAKE(__i915) && \
|
||||
|
@ -1585,18 +1533,13 @@ IS_SUBPLATFORM(const struct drm_i915_private *i915,
|
|||
(IS_TIGERLAKE(__i915) && !(IS_TGL_U(__i915) || IS_TGL_Y(__i915)) && \
|
||||
IS_GT_STEP(__i915, since, until))
|
||||
|
||||
#define RKL_REVID_A0 0x0
|
||||
#define RKL_REVID_B0 0x1
|
||||
#define RKL_REVID_C0 0x4
|
||||
#define IS_RKL_DISPLAY_STEP(p, since, until) \
|
||||
(IS_ROCKETLAKE(p) && IS_DISPLAY_STEP(p, since, until))
|
||||
|
||||
#define IS_RKL_REVID(p, since, until) \
|
||||
(IS_ROCKETLAKE(p) && IS_REVID(p, since, until))
|
||||
|
||||
#define DG1_REVID_A0 0x0
|
||||
#define DG1_REVID_B0 0x1
|
||||
|
||||
#define IS_DG1_REVID(p, since, until) \
|
||||
(IS_DG1(p) && IS_REVID(p, since, until))
|
||||
#define IS_DG1_GT_STEP(p, since, until) \
|
||||
(IS_DG1(p) && IS_GT_STEP(p, since, until))
|
||||
#define IS_DG1_DISPLAY_STEP(p, since, until) \
|
||||
(IS_DG1(p) && IS_DISPLAY_STEP(p, since, until))
|
||||
|
||||
#define IS_ADLS_DISPLAY_STEP(__i915, since, until) \
|
||||
(IS_ALDERLAKE_S(__i915) && \
|
||||
|
|
|
@ -7385,7 +7385,7 @@ static void dg1_init_clock_gating(struct drm_i915_private *dev_priv)
|
|||
gen12lp_init_clock_gating(dev_priv);
|
||||
|
||||
/* Wa_1409836686:dg1[a0] */
|
||||
if (IS_DG1_REVID(dev_priv, DG1_REVID_A0, DG1_REVID_A0))
|
||||
if (IS_DG1_GT_STEP(dev_priv, STEP_A0, STEP_A0))
|
||||
intel_uncore_write(&dev_priv->uncore, GEN9_CLKGATE_DIS_3, intel_uncore_read(&dev_priv->uncore, GEN9_CLKGATE_DIS_3) |
|
||||
DPT_GATING_DIS);
|
||||
}
|
||||
|
|
|
@ -7,16 +7,32 @@
|
|||
#include "intel_step.h"
|
||||
|
||||
/*
|
||||
* KBL revision ID ordering is bizarre; higher revision ID's map to lower
|
||||
* steppings in some cases. So rather than test against the revision ID
|
||||
* directly, let's map that into our own range of increasing ID's that we
|
||||
* can test against in a regular manner.
|
||||
* Some platforms have unusual ways of mapping PCI revision ID to GT/display
|
||||
* steppings. E.g., in some cases a higher PCI revision may translate to a
|
||||
* lower stepping of the GT and/or display IP. This file provides lookup
|
||||
* tables to map the PCI revision into a standard set of stepping values that
|
||||
* can be compared numerically.
|
||||
*
|
||||
* Also note that some revisions/steppings may have been set aside as
|
||||
* placeholders but never materialized in real hardware; in those cases there
|
||||
* may be jumps in the revision IDs or stepping values in the tables below.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Some platforms always have the same stepping value for GT and display;
|
||||
* use a macro to define these to make it easier to identify the platforms
|
||||
* where the two steppings can deviate.
|
||||
*/
|
||||
#define COMMON_STEP(x) .gt_step = STEP_##x, .display_step = STEP_##x
|
||||
|
||||
static const struct intel_step_info skl_revids[] = {
|
||||
[0x6] = { COMMON_STEP(G0) },
|
||||
[0x7] = { COMMON_STEP(H0) },
|
||||
[0x9] = { COMMON_STEP(J0) },
|
||||
[0xA] = { COMMON_STEP(I1) },
|
||||
};
|
||||
|
||||
/* FIXME: what about REVID_E0 */
|
||||
static const struct intel_step_info kbl_revids[] = {
|
||||
[0] = { .gt_step = STEP_A0, .display_step = STEP_A0 },
|
||||
[1] = { .gt_step = STEP_B0, .display_step = STEP_B0 },
|
||||
[2] = { .gt_step = STEP_C0, .display_step = STEP_B0 },
|
||||
[3] = { .gt_step = STEP_D0, .display_step = STEP_B0 },
|
||||
|
@ -26,7 +42,27 @@ static const struct intel_step_info kbl_revids[] = {
|
|||
[7] = { .gt_step = STEP_G0, .display_step = STEP_C0 },
|
||||
};
|
||||
|
||||
static const struct intel_step_info tgl_uy_revid_step_tbl[] = {
|
||||
static const struct intel_step_info bxt_revids[] = {
|
||||
[0xA] = { COMMON_STEP(C0) },
|
||||
[0xB] = { COMMON_STEP(C0) },
|
||||
[0xC] = { COMMON_STEP(D0) },
|
||||
[0xD] = { COMMON_STEP(E0) },
|
||||
};
|
||||
|
||||
static const struct intel_step_info glk_revids[] = {
|
||||
[3] = { COMMON_STEP(B0) },
|
||||
};
|
||||
|
||||
static const struct intel_step_info icl_revids[] = {
|
||||
[7] = { COMMON_STEP(D0) },
|
||||
};
|
||||
|
||||
static const struct intel_step_info jsl_ehl_revids[] = {
|
||||
[0] = { COMMON_STEP(A0) },
|
||||
[1] = { COMMON_STEP(B0) },
|
||||
};
|
||||
|
||||
static const struct intel_step_info tgl_uy_revids[] = {
|
||||
[0] = { .gt_step = STEP_A0, .display_step = STEP_A0 },
|
||||
[1] = { .gt_step = STEP_B0, .display_step = STEP_C0 },
|
||||
[2] = { .gt_step = STEP_B1, .display_step = STEP_C0 },
|
||||
|
@ -34,12 +70,23 @@ static const struct intel_step_info tgl_uy_revid_step_tbl[] = {
|
|||
};
|
||||
|
||||
/* Same GT stepping between tgl_uy_revids and tgl_revids don't mean the same HW */
|
||||
static const struct intel_step_info tgl_revid_step_tbl[] = {
|
||||
static const struct intel_step_info tgl_revids[] = {
|
||||
[0] = { .gt_step = STEP_A0, .display_step = STEP_B0 },
|
||||
[1] = { .gt_step = STEP_B0, .display_step = STEP_D0 },
|
||||
};
|
||||
|
||||
static const struct intel_step_info adls_revid_step_tbl[] = {
|
||||
static const struct intel_step_info rkl_revids[] = {
|
||||
[0] = { COMMON_STEP(A0) },
|
||||
[1] = { COMMON_STEP(B0) },
|
||||
[4] = { COMMON_STEP(C0) },
|
||||
};
|
||||
|
||||
static const struct intel_step_info dg1_revids[] = {
|
||||
[0] = { COMMON_STEP(A0) },
|
||||
[1] = { COMMON_STEP(B0) },
|
||||
};
|
||||
|
||||
static const struct intel_step_info adls_revids[] = {
|
||||
[0x0] = { .gt_step = STEP_A0, .display_step = STEP_A0 },
|
||||
[0x1] = { .gt_step = STEP_A0, .display_step = STEP_A2 },
|
||||
[0x4] = { .gt_step = STEP_B0, .display_step = STEP_B0 },
|
||||
|
@ -47,7 +94,7 @@ static const struct intel_step_info adls_revid_step_tbl[] = {
|
|||
[0xC] = { .gt_step = STEP_D0, .display_step = STEP_C0 },
|
||||
};
|
||||
|
||||
static const struct intel_step_info adlp_revid_step_tbl[] = {
|
||||
static const struct intel_step_info adlp_revids[] = {
|
||||
[0x0] = { .gt_step = STEP_A0, .display_step = STEP_A0 },
|
||||
[0x4] = { .gt_step = STEP_B0, .display_step = STEP_B0 },
|
||||
[0x8] = { .gt_step = STEP_C0, .display_step = STEP_C0 },
|
||||
|
@ -62,20 +109,41 @@ void intel_step_init(struct drm_i915_private *i915)
|
|||
struct intel_step_info step = {};
|
||||
|
||||
if (IS_ALDERLAKE_P(i915)) {
|
||||
revids = adlp_revid_step_tbl;
|
||||
size = ARRAY_SIZE(adlp_revid_step_tbl);
|
||||
revids = adlp_revids;
|
||||
size = ARRAY_SIZE(adlp_revids);
|
||||
} else if (IS_ALDERLAKE_S(i915)) {
|
||||
revids = adls_revid_step_tbl;
|
||||
size = ARRAY_SIZE(adls_revid_step_tbl);
|
||||
revids = adls_revids;
|
||||
size = ARRAY_SIZE(adls_revids);
|
||||
} else if (IS_DG1(i915)) {
|
||||
revids = dg1_revids;
|
||||
size = ARRAY_SIZE(dg1_revids);
|
||||
} else if (IS_ROCKETLAKE(i915)) {
|
||||
revids = rkl_revids;
|
||||
size = ARRAY_SIZE(rkl_revids);
|
||||
} else if (IS_TGL_U(i915) || IS_TGL_Y(i915)) {
|
||||
revids = tgl_uy_revid_step_tbl;
|
||||
size = ARRAY_SIZE(tgl_uy_revid_step_tbl);
|
||||
revids = tgl_uy_revids;
|
||||
size = ARRAY_SIZE(tgl_uy_revids);
|
||||
} else if (IS_TIGERLAKE(i915)) {
|
||||
revids = tgl_revid_step_tbl;
|
||||
size = ARRAY_SIZE(tgl_revid_step_tbl);
|
||||
revids = tgl_revids;
|
||||
size = ARRAY_SIZE(tgl_revids);
|
||||
} else if (IS_JSL_EHL(i915)) {
|
||||
revids = jsl_ehl_revids;
|
||||
size = ARRAY_SIZE(jsl_ehl_revids);
|
||||
} else if (IS_ICELAKE(i915)) {
|
||||
revids = icl_revids;
|
||||
size = ARRAY_SIZE(icl_revids);
|
||||
} else if (IS_GEMINILAKE(i915)) {
|
||||
revids = glk_revids;
|
||||
size = ARRAY_SIZE(glk_revids);
|
||||
} else if (IS_BROXTON(i915)) {
|
||||
revids = bxt_revids;
|
||||
size = ARRAY_SIZE(bxt_revids);
|
||||
} else if (IS_KABYLAKE(i915)) {
|
||||
revids = kbl_revids;
|
||||
size = ARRAY_SIZE(kbl_revids);
|
||||
} else if (IS_SKYLAKE(i915)) {
|
||||
revids = skl_revids;
|
||||
size = ARRAY_SIZE(skl_revids);
|
||||
}
|
||||
|
||||
/* Not using the stepping scheme for the platform yet. */
|
||||
|
|
|
@ -31,6 +31,10 @@ enum intel_step {
|
|||
STEP_E0,
|
||||
STEP_F0,
|
||||
STEP_G0,
|
||||
STEP_H0,
|
||||
STEP_I0,
|
||||
STEP_I1,
|
||||
STEP_J0,
|
||||
STEP_FUTURE,
|
||||
STEP_FOREVER,
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue