[Intel-gfx] [PATCH v2 23/23] drm/i915/dp: Disable DSC in source by disabling DSS CTL bits
Srivatsa, Anusha
anusha.srivatsa at intel.com
Fri Aug 31 21:42:20 UTC 2018
>-----Original Message-----
>From: Navare, Manasi D
>Sent: Tuesday, July 31, 2018 2:07 PM
>To: intel-gfx at lists.freedesktop.org
>Cc: Singh, Gaurav K <gaurav.k.singh at intel.com>; Jani Nikula
><jani.nikula at linux.intel.com>; Ville Syrjala <ville.syrjala at linux.intel.com>;
>Srivatsa, Anusha <anusha.srivatsa at intel.com>; Navare, Manasi D
><manasi.d.navare at intel.com>
>Subject: [PATCH v2 23/23] drm/i915/dp: Disable DSC in source by disabling DSS
>CTL bits
>
>From: Gaurav K Singh <gaurav.k.singh at intel.com>
>
>1. Disable Left/right VDSC branch in DSS Ctrl reg
> depending on the number of VDSC engines being used 2. Disable joiner in DSS
>Ctrl reg
>
>v5 (From Manasi):
>* Add Disable PG2 for VDSC on eDP
>v4: (From Manasi)
>* Rebase on top of revised patches
>v3 (From Manasi):
>* Use old_crtc_state to find dsc params
>* Add a condition to disable only if
>dsc state compression is enabled
>* Use correct DSS CTL regs
>v2 (From Manasi):
>* Fix tons of compilation errors like undefined variables, incorrect use of macros
>and all dirty laundry
>
>Cc: Jani Nikula <jani.nikula at linux.intel.com>
>Cc: Ville Syrjala <ville.syrjala at linux.intel.com>
>Cc: Anusha Srivatsa <anusha.srivatsa at intel.com>
>Signed-off-by: Manasi Navare <manasi.d.navare at intel.com>
>Signed-off-by: Gaurav K Singh <gaurav.k.singh at intel.com>
Reviewed-by: Anusha Srivatsa <anusha.srivatsa at intel.com>
>---
> drivers/gpu/drm/i915/i915_drv.h | 2 ++
> drivers/gpu/drm/i915/intel_display.c | 13 ++++++++++++
> drivers/gpu/drm/i915/intel_vdsc.c | 38
>++++++++++++++++++++++++++++++++++++
> 3 files changed, 53 insertions(+)
>
>diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
>index 0ffc9a7..cb6a80a 100644
>--- a/drivers/gpu/drm/i915/i915_drv.h
>+++ b/drivers/gpu/drm/i915/i915_drv.h
>@@ -3427,6 +3427,8 @@ extern bool intel_set_memory_cxsr(struct
>drm_i915_private *dev_priv,
> bool enable);
> extern void intel_dsc_enable(struct intel_encoder *encoder,
> struct intel_crtc_state *crtc_state);
>+extern void intel_dsc_disable(struct intel_encoder *encoder,
>+ struct intel_crtc_state *crtc_state);
>
> int i915_reg_read_ioctl(struct drm_device *dev, void *data,
> struct drm_file *file);
>diff --git a/drivers/gpu/drm/i915/intel_display.c
>b/drivers/gpu/drm/i915/intel_display.c
>index 6b1d151..2b0be6f 100644
>--- a/drivers/gpu/drm/i915/intel_display.c
>+++ b/drivers/gpu/drm/i915/intel_display.c
>@@ -5829,6 +5829,9 @@ static void haswell_crtc_disable(struct intel_crtc_state
>*old_crtc_state,
> struct drm_i915_private *dev_priv = to_i915(crtc->dev);
> struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
> enum transcoder cpu_transcoder = old_crtc_state->cpu_transcoder;
>+ struct drm_connector_state *conn_state;
>+ struct drm_connector *conn;
>+ int i;
>
> intel_encoders_disable(crtc, old_crtc_state, old_state);
>
>@@ -5845,6 +5848,16 @@ static void haswell_crtc_disable(struct
>intel_crtc_state *old_crtc_state,
> if (!transcoder_is_dsi(cpu_transcoder))
> intel_ddi_disable_transcoder_func(old_crtc_state);
>
>+ for_each_new_connector_in_state(old_state, conn, conn_state, i) {
>+ struct intel_encoder *encoder =
>+ to_intel_encoder(conn_state->best_encoder);
>+
>+ if (conn_state->crtc != crtc)
>+ continue;
>+
>+ intel_dsc_disable(encoder, old_crtc_state);
>+ }
>+
> if (INTEL_GEN(dev_priv) >= 9)
> skylake_scaler_disable(intel_crtc);
> else
>diff --git a/drivers/gpu/drm/i915/intel_vdsc.c
>b/drivers/gpu/drm/i915/intel_vdsc.c
>index 32da285..96f6f94 100644
>--- a/drivers/gpu/drm/i915/intel_vdsc.c
>+++ b/drivers/gpu/drm/i915/intel_vdsc.c
>@@ -1048,3 +1048,41 @@ void intel_dsc_enable(struct intel_encoder *encoder,
>
> return;
> }
>+
>+void intel_dsc_disable(struct intel_encoder *encoder,
>+ struct intel_crtc_state *old_crtc_state) {
>+ struct intel_dp *intel_dp = enc_to_intel_dp(&encoder->base);
>+ struct intel_crtc *crtc = to_intel_crtc(old_crtc_state->base.crtc);
>+ struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
>+ enum pipe pipe = crtc->pipe;
>+ i915_reg_t dss_ctl1_reg, dss_ctl2_reg;
>+ u32 dss_ctl1_val = 0, dss_ctl2_val = 0;
>+
>+ if (!old_crtc_state->dsc_params.compression_enable)
>+ return;
>+
>+ if (encoder->type == INTEL_OUTPUT_EDP) {
>+ dss_ctl1_reg = DSS_CTL1;
>+ dss_ctl2_reg = DSS_CTL2;
>+ } else {
>+ dss_ctl1_reg = ICL_PIPE_DSS_CTL1(pipe);
>+ dss_ctl2_reg = ICL_PIPE_DSS_CTL2(pipe);
>+ }
>+ dss_ctl1_val = I915_READ(dss_ctl1_reg);
>+ if (dss_ctl1_val & JOINER_ENABLE)
>+ dss_ctl1_val &= ~JOINER_ENABLE;
>+ I915_WRITE(dss_ctl1_reg, dss_ctl1_val);
>+
>+ dss_ctl2_val = I915_READ(dss_ctl2_reg);
>+ if (dss_ctl2_val & LEFT_BRANCH_VDSC_ENABLE ||
>+ dss_ctl2_val & RIGHT_BRANCH_VDSC_ENABLE)
>+ dss_ctl2_val &= ~(LEFT_BRANCH_VDSC_ENABLE |
>+ RIGHT_BRANCH_VDSC_ENABLE);
>+ I915_WRITE(dss_ctl2_reg, dss_ctl2_val);
>+
>+ /* Put the PG2 power well for VDSC on eDP */
>+ /* FIXME: Use VDSC power domain when its added */
>+ if (intel_dp_is_edp(intel_dp))
>+ intel_display_power_put(dev_priv, POWER_DOMAIN_INIT); }
>--
>2.7.4
More information about the Intel-gfx
mailing list