Skip to content

Commit 5d86923

Browse files
mthierrylucasdemarchi
authored andcommitted
drm/i915/tgl: Enable VD HCP/MFX sub-pipe power gating
HCP/MFX power gating is disabled by default, turn it on for the vd units available. User space will also issue a MI_FORCE_WAKEUP properly to wake up proper subwell. During driver load, init_clock_gating happens after device_info_init_mmio read the vdbox disable fuse register, so only present vd units will have these enabled. BSpec: 14214 HSDES: 1209977827 Signed-off-by: Michel Thierry <michel.thierry@intel.com> Reviewed-by: Lucas De Marchi <lucas.demarchi@intel.com> Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com> Reviewed-by: Tony Ye <tony.ye@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20190823082055.5992-3-lucas.demarchi@intel.com
1 parent b3c0692 commit 5d86923

File tree

2 files changed

+21
-1
lines changed

2 files changed

+21
-1
lines changed

drivers/gpu/drm/i915/i915_reg.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8615,6 +8615,10 @@ enum {
86158615
#define GEN9_PWRGT_MEDIA_STATUS_MASK (1 << 0)
86168616
#define GEN9_PWRGT_RENDER_STATUS_MASK (1 << 1)
86178617

8618+
#define POWERGATE_ENABLE _MMIO(0xa210)
8619+
#define VDN_HCP_POWERGATE_ENABLE(n) BIT(((n) * 2) + 3)
8620+
#define VDN_MFX_POWERGATE_ENABLE(n) BIT(((n) * 2) + 4)
8621+
86188622
#define GTFIFODBG _MMIO(0x120000)
86198623
#define GT_FIFO_SBDEDICATE_FREE_ENTRY_CHV (0x1f << 20)
86208624
#define GT_FIFO_FREE_ENTRIES_CHV (0x7f << 13)

drivers/gpu/drm/i915/intel_pm.c

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9078,6 +9078,22 @@ static void icl_init_clock_gating(struct drm_i915_private *dev_priv)
90789078
_MASKED_BIT_ENABLE(GEN11_ENABLE_32_PLANE_MODE));
90799079
}
90809080

9081+
static void tgl_init_clock_gating(struct drm_i915_private *dev_priv)
9082+
{
9083+
u32 vd_pg_enable = 0;
9084+
unsigned int i;
9085+
9086+
/* This is not a WA. Enable VD HCP & MFX_ENC powergate */
9087+
for (i = 0; i < I915_MAX_VCS; i++) {
9088+
if (HAS_ENGINE(dev_priv, _VCS(i)))
9089+
vd_pg_enable |= VDN_HCP_POWERGATE_ENABLE(i) |
9090+
VDN_MFX_POWERGATE_ENABLE(i);
9091+
}
9092+
9093+
I915_WRITE(POWERGATE_ENABLE,
9094+
I915_READ(POWERGATE_ENABLE) | vd_pg_enable);
9095+
}
9096+
90819097
static void cnp_init_clock_gating(struct drm_i915_private *dev_priv)
90829098
{
90839099
if (!HAS_PCH_CNP(dev_priv))
@@ -9598,7 +9614,7 @@ static void nop_init_clock_gating(struct drm_i915_private *dev_priv)
95989614
void intel_init_clock_gating_hooks(struct drm_i915_private *dev_priv)
95999615
{
96009616
if (IS_GEN(dev_priv, 12))
9601-
dev_priv->display.init_clock_gating = nop_init_clock_gating;
9617+
dev_priv->display.init_clock_gating = tgl_init_clock_gating;
96029618
else if (IS_GEN(dev_priv, 11))
96039619
dev_priv->display.init_clock_gating = icl_init_clock_gating;
96049620
else if (IS_CANNONLAKE(dev_priv))

0 commit comments

Comments
 (0)