mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-06 10:58:48 +09:00
drm/i915/dsi: fix DSS CTL register offsets for TGL+
commit6b8446859cupstream. On TGL+ the DSS control registers are at different offsets, and there's one per pipe. Fix the offsets to fix dual link DSI for TGL+. There would be helpers for this in the DSC code, but just do the quick fix now for DSI. Long term, we should probably move all the DSS handling into intel_vdsc.c, so exporting the helpers seems counter-productive. Closes: https://gitlab.freedesktop.org/drm/intel/-/issues/8232 Cc: Ville Syrjala <ville.syrjala@linux.intel.com> Cc: stable@vger.kernel.org Signed-off-by: Jani Nikula <jani.nikula@intel.com> Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20230301151409.1581574-1-jani.nikula@intel.com (cherry picked from commit1a62dd9895) Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
1bb4a52c3c
commit
0004a50c53
@@ -307,9 +307,21 @@ static void configure_dual_link_mode(struct intel_encoder *encoder,
|
||||
{
|
||||
struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
|
||||
struct intel_dsi *intel_dsi = enc_to_intel_dsi(encoder);
|
||||
i915_reg_t dss_ctl1_reg, dss_ctl2_reg;
|
||||
u32 dss_ctl1;
|
||||
|
||||
dss_ctl1 = intel_de_read(dev_priv, DSS_CTL1);
|
||||
/* FIXME: Move all DSS handling to intel_vdsc.c */
|
||||
if (DISPLAY_VER(dev_priv) >= 12) {
|
||||
struct intel_crtc *crtc = to_intel_crtc(pipe_config->uapi.crtc);
|
||||
|
||||
dss_ctl1_reg = ICL_PIPE_DSS_CTL1(crtc->pipe);
|
||||
dss_ctl2_reg = ICL_PIPE_DSS_CTL2(crtc->pipe);
|
||||
} else {
|
||||
dss_ctl1_reg = DSS_CTL1;
|
||||
dss_ctl2_reg = DSS_CTL2;
|
||||
}
|
||||
|
||||
dss_ctl1 = intel_de_read(dev_priv, dss_ctl1_reg);
|
||||
dss_ctl1 |= SPLITTER_ENABLE;
|
||||
dss_ctl1 &= ~OVERLAP_PIXELS_MASK;
|
||||
dss_ctl1 |= OVERLAP_PIXELS(intel_dsi->pixel_overlap);
|
||||
@@ -330,16 +342,16 @@ static void configure_dual_link_mode(struct intel_encoder *encoder,
|
||||
|
||||
dss_ctl1 &= ~LEFT_DL_BUF_TARGET_DEPTH_MASK;
|
||||
dss_ctl1 |= LEFT_DL_BUF_TARGET_DEPTH(dl_buffer_depth);
|
||||
dss_ctl2 = intel_de_read(dev_priv, DSS_CTL2);
|
||||
dss_ctl2 = intel_de_read(dev_priv, dss_ctl2_reg);
|
||||
dss_ctl2 &= ~RIGHT_DL_BUF_TARGET_DEPTH_MASK;
|
||||
dss_ctl2 |= RIGHT_DL_BUF_TARGET_DEPTH(dl_buffer_depth);
|
||||
intel_de_write(dev_priv, DSS_CTL2, dss_ctl2);
|
||||
intel_de_write(dev_priv, dss_ctl2_reg, dss_ctl2);
|
||||
} else {
|
||||
/* Interleave */
|
||||
dss_ctl1 |= DUAL_LINK_MODE_INTERLEAVE;
|
||||
}
|
||||
|
||||
intel_de_write(dev_priv, DSS_CTL1, dss_ctl1);
|
||||
intel_de_write(dev_priv, dss_ctl1_reg, dss_ctl1);
|
||||
}
|
||||
|
||||
/* aka DSI 8X clock */
|
||||
|
||||
Reference in New Issue
Block a user