On 2/3/2022 12:26 AM, Dmitry Baryshkov wrote:
All physical encoders used by virtual encoder share the same connector,
so pull the connector field from dpu_encoder_phys into dpu_encoder_virt
structure.

Signed-off-by: Dmitry Baryshkov <dmitry.barysh...@linaro.org>
Reviewed-by: Abhinav Kumar <quic_abhin...@quicinc.com>
---
  drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c      | 11 ++++++-----
  drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys.h |  2 --
  2 files changed, 6 insertions(+), 7 deletions(-)

diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c 
b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c
index 1462c426c14c..afafdaf48aea 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c
@@ -143,6 +143,7 @@ enum dpu_enc_rc_states {
   *                    link between encoder/crtc. However in this case we need
   *                    to track crtc in the disable() hook which is called
   *                    _after_ encoder_mask is cleared.
+ * @connector:         If a mode is set, cached pointer to the active connector
   * @crtc_kickoff_cb:          Callback into CRTC that will flush & start
   *                            all CTL paths
   * @crtc_kickoff_cb_data:     Opaque user data given to crtc_kickoff_cb
@@ -183,6 +184,7 @@ struct dpu_encoder_virt {
        bool intfs_swapped;
struct drm_crtc *crtc;
+       struct drm_connector *connector;
struct dentry *debugfs_root;
        struct mutex enc_lock;
@@ -993,6 +995,8 @@ static void dpu_encoder_virt_atomic_mode_set(struct 
drm_encoder *drm_enc,
cstate->num_mixers = num_lm; + dpu_enc->connector = conn_state->connector;
+
        for (i = 0; i < dpu_enc->num_phys_encs; i++) {
                int num_blk;
                struct dpu_hw_blk *hw_blk[MAX_CHANNELS_PER_ENC];
@@ -1030,7 +1034,6 @@ static void dpu_encoder_virt_atomic_mode_set(struct 
drm_encoder *drm_enc,
                        return;
                }
- phys->connector = conn_state->connector;
                phys->cached_mode = crtc_state->adjusted_mode;
                if (phys->ops.atomic_mode_set)
                        phys->ops.atomic_mode_set(phys, crtc_state, conn_state);
@@ -1064,7 +1067,7 @@ static void _dpu_encoder_virt_enable_helper(struct 
drm_encoder *drm_enc)
if (dpu_enc->disp_info.intf_type == INTF_DSI &&
                        !WARN_ON(dpu_enc->num_phys_encs == 0)) {
-               unsigned bpc = 
dpu_enc->phys_encs[0]->connector->display_info.bpc;
+               unsigned bpc = dpu_enc->connector->display_info.bpc;
                for (i = 0; i < MAX_CHANNELS_PER_ENC; i++) {
                        if (!dpu_enc->hw_pp[i])
                                continue;
@@ -1168,9 +1171,7 @@ static void dpu_encoder_virt_disable(struct drm_encoder 
*drm_enc)
dpu_encoder_resource_control(drm_enc, DPU_ENC_RC_EVENT_STOP); - for (i = 0; i < dpu_enc->num_phys_encs; i++) {
-               dpu_enc->phys_encs[i]->connector = NULL;
-       }
+       dpu_enc->connector = NULL;
DPU_DEBUG_ENC(dpu_enc, "encoder disabled\n"); diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys.h b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys.h
index 6e80321b13c5..5093810f6663 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys.h
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys.h
@@ -174,7 +174,6 @@ struct dpu_encoder_irq {
   *    tied to a specific panel / sub-panel. Abstract type, sub-classed by
   *    phys_vid or phys_cmd for video mode or command mode encs respectively.
   * @parent:           Pointer to the containing virtual encoder
- * @connector:         If a mode is set, cached pointer to the active connector
   * @ops:              Operations exposed to the virtual encoder
   * @parent_ops:               Callbacks exposed by the parent to the phys_enc
   * @hw_mdptop:                Hardware interface to the top registers
@@ -203,7 +202,6 @@ struct dpu_encoder_irq {
   */
  struct dpu_encoder_phys {
        struct drm_encoder *parent;
-       struct drm_connector *connector;
        struct dpu_encoder_phys_ops ops;
        const struct dpu_encoder_virt_ops *parent_ops;
        struct dpu_hw_mdp *hw_mdptop;

Reply via email to