Re: [PATCH 12/14] drm/msm/dpu: remove topology name
On Tue, Sep 04, 2018 at 04:03:25PM -0700, Jeykumar Sankaran wrote: > On 2018-08-31 09:08, Sean Paul wrote: > > On Tue, Aug 28, 2018 at 05:40:01PM -0700, Jeykumar Sankaran wrote: > > > Strip down the support for topology enums. It > > > can be replaced with simple hw count checks. > > > > > > > Changes in v4: > > ... > > > > > Signed-off-by: Jeykumar Sankaran > > > --- > > > drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c| 3 -- > > > drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.h| 1 - > > > drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys.h | 9 -- > > > .../gpu/drm/msm/disp/dpu1/dpu_encoder_phys_vid.c | 7 +++-- > > > drivers/gpu/drm/msm/disp/dpu1/dpu_rm.c | 36 > > ++ > > > drivers/gpu/drm/msm/disp/dpu1/dpu_rm.h | 24 > > > --- > > > 6 files changed, 19 insertions(+), 61 deletions(-) > > > > > > diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c > > b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c > > > index dbf669e..56ef349 100644 > > > --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c > > > +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c > > > @@ -1013,7 +1013,6 @@ static void dpu_encoder_virt_mode_set(struct > > drm_encoder *drm_enc, > > > struct drm_connector *conn = NULL, *conn_iter; > > > struct dpu_rm_hw_iter pp_iter, ctl_iter; > > > struct msm_display_topology topology; > > > - enum dpu_rm_topology_name topology_name; > > > struct dpu_hw_ctl *hw_ctl[MAX_CHANNELS_PER_ENC] = { NULL }; > > > int i = 0, ret; > > > > > > @@ -1069,7 +1068,6 @@ static void dpu_encoder_virt_mode_set(struct > > drm_encoder *drm_enc, > > > hw_ctl[i] = (struct dpu_hw_ctl *)ctl_iter.hw; > > > } > > > > > > - topology_name = dpu_rm_get_topology_name(topology); > > > for (i = 0; i < dpu_enc->num_phys_encs; i++) { > > > struct dpu_encoder_phys *phys = dpu_enc->phys_encs[i]; > > > > > > @@ -1089,7 +1087,6 @@ static void dpu_encoder_virt_mode_set(struct > > drm_encoder *drm_enc, > > > phys->hw_ctl = hw_ctl[i]; > > > > > > phys->connector = conn->state->connector; > > > - phys->topology_name = topology_name; > > > if (phys->ops.mode_set) > > > phys->ops.mode_set(phys, mode, adj_mode); > > > } > > > diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.h > > b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.h > > > index 60f809f..c5600e6 100644 > > > --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.h > > > +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.h > > > @@ -35,7 +35,6 @@ > > > * @needs_cdm: Encoder requests a CDM based on pixel format > > conversion needs > > > * @display_num_of_h_tiles: Number of horizontal tiles in case of > > > split > > > * interface > > > - * @topology: Topology of the display > > > */ > > > struct dpu_encoder_hw_resources { > > > enum dpu_intf_mode intfs[INTF_MAX]; > > > 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 b3917e0..b5fc65c 100644 > > > --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys.h > > > +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys.h > > > @@ -24,6 +24,7 @@ > > > #include "dpu_hw_top.h" > > > #include "dpu_hw_cdm.h" > > > #include "dpu_encoder.h" > > > +#include "dpu_crtc.h" > > > > > > #define DPU_ENCODER_NAME_MAX 16 > > > > > > @@ -213,7 +214,6 @@ struct dpu_encoder_irq { > > > * @split_role: Role to play in a split-panel > > configuration > > > * @intf_mode: Interface mode > > > * @intf_idx:Interface index on dpu hardware > > > - * @topology_name: topology selected for the display > > > * @enc_spinlock:Virtual-Encoder-Wide Spin Lock for IRQ purposes > > > * @enable_state:Enable state tracking > > > * @vblank_refcount: Reference count of vblank request > > > @@ -243,7 +243,6 @@ struct dpu_encoder_phys { > > > enum dpu_enc_split_role split_role; > > > enum dpu_intf_mode intf_mode; > > > enum dpu_intf intf_idx; > > > - enum dpu_rm_topology_name topology_name; > > > spinlock_t *enc_spinlock; > > > enum dpu_enc_enable_state enable_state; > > > atomic_t vblank_refcount; > > > @@ -361,11 +360,15 @@ struct dpu_encoder_phys > > *dpu_encoder_phys_cmd_init( > > > static inline enum dpu_3d_blend_mode > > dpu_encoder_helper_get_3d_blend_mode( > > > struct dpu_encoder_phys *phys_enc) > > > { > > > + struct dpu_crtc_state *dpu_cstate; > > > + > > > if (!phys_enc || phys_enc->enable_state == DPU_ENC_DISABLING) > > > return BLEND_3D_NONE; > > > > > > + dpu_cstate = to_dpu_crtc_state(phys_enc->parent->crtc->state); > > > + > > > if (phys_enc->split_role == ENC_ROLE_SOLO && > > > - phys_enc->topology_name == DPU_RM_TOPOLOGY_DUALPIPE_3DMERGE) > > > + (dpu_cstate->num_mixers == 2)) > > > > I guess this should be CRTC_DUAL_MIXE
Re: [PATCH 12/14] drm/msm/dpu: remove topology name
On 2018-08-31 09:08, Sean Paul wrote: On Tue, Aug 28, 2018 at 05:40:01PM -0700, Jeykumar Sankaran wrote: Strip down the support for topology enums. It can be replaced with simple hw count checks. Changes in v4: ... Signed-off-by: Jeykumar Sankaran --- drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c| 3 -- drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.h| 1 - drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys.h | 9 -- .../gpu/drm/msm/disp/dpu1/dpu_encoder_phys_vid.c | 7 +++-- drivers/gpu/drm/msm/disp/dpu1/dpu_rm.c | 36 ++ drivers/gpu/drm/msm/disp/dpu1/dpu_rm.h | 24 --- 6 files changed, 19 insertions(+), 61 deletions(-) diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c index dbf669e..56ef349 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c @@ -1013,7 +1013,6 @@ static void dpu_encoder_virt_mode_set(struct drm_encoder *drm_enc, struct drm_connector *conn = NULL, *conn_iter; struct dpu_rm_hw_iter pp_iter, ctl_iter; struct msm_display_topology topology; - enum dpu_rm_topology_name topology_name; struct dpu_hw_ctl *hw_ctl[MAX_CHANNELS_PER_ENC] = { NULL }; int i = 0, ret; @@ -1069,7 +1068,6 @@ static void dpu_encoder_virt_mode_set(struct drm_encoder *drm_enc, hw_ctl[i] = (struct dpu_hw_ctl *)ctl_iter.hw; } - topology_name = dpu_rm_get_topology_name(topology); for (i = 0; i < dpu_enc->num_phys_encs; i++) { struct dpu_encoder_phys *phys = dpu_enc->phys_encs[i]; @@ -1089,7 +1087,6 @@ static void dpu_encoder_virt_mode_set(struct drm_encoder *drm_enc, phys->hw_ctl = hw_ctl[i]; phys->connector = conn->state->connector; - phys->topology_name = topology_name; if (phys->ops.mode_set) phys->ops.mode_set(phys, mode, adj_mode); } diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.h b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.h index 60f809f..c5600e6 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.h +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.h @@ -35,7 +35,6 @@ * @needs_cdm: Encoder requests a CDM based on pixel format conversion needs * @display_num_of_h_tiles: Number of horizontal tiles in case of split * interface - * @topology: Topology of the display */ struct dpu_encoder_hw_resources { enum dpu_intf_mode intfs[INTF_MAX]; 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 b3917e0..b5fc65c 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys.h +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys.h @@ -24,6 +24,7 @@ #include "dpu_hw_top.h" #include "dpu_hw_cdm.h" #include "dpu_encoder.h" +#include "dpu_crtc.h" #define DPU_ENCODER_NAME_MAX 16 @@ -213,7 +214,6 @@ struct dpu_encoder_irq { * @split_role:Role to play in a split-panel configuration * @intf_mode: Interface mode * @intf_idx: Interface index on dpu hardware - * @topology_name: topology selected for the display * @enc_spinlock: Virtual-Encoder-Wide Spin Lock for IRQ purposes * @enable_state: Enable state tracking * @vblank_refcount: Reference count of vblank request @@ -243,7 +243,6 @@ struct dpu_encoder_phys { enum dpu_enc_split_role split_role; enum dpu_intf_mode intf_mode; enum dpu_intf intf_idx; - enum dpu_rm_topology_name topology_name; spinlock_t *enc_spinlock; enum dpu_enc_enable_state enable_state; atomic_t vblank_refcount; @@ -361,11 +360,15 @@ struct dpu_encoder_phys *dpu_encoder_phys_cmd_init( static inline enum dpu_3d_blend_mode dpu_encoder_helper_get_3d_blend_mode( struct dpu_encoder_phys *phys_enc) { + struct dpu_crtc_state *dpu_cstate; + if (!phys_enc || phys_enc->enable_state == DPU_ENC_DISABLING) return BLEND_3D_NONE; + dpu_cstate = to_dpu_crtc_state(phys_enc->parent->crtc->state); + if (phys_enc->split_role == ENC_ROLE_SOLO && - phys_enc->topology_name == DPU_RM_TOPOLOGY_DUALPIPE_3DMERGE) + (dpu_cstate->num_mixers == 2)) I guess this should be CRTC_DUAL_MIXERS? Perhaps you should add a helper called dpu_crtc_state_is_stereo() instead of littering these checks everywhere. return BLEND_3D_H_ROW_INT; return BLEND_3D_NONE; diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys_vid.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys_vid.c index 6de13f4..1643e2f 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys_vid.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys_vid.c @@ -355,13 +355,14 @@ static void dpu
Re: [PATCH 12/14] drm/msm/dpu: remove topology name
On Tue, Aug 28, 2018 at 05:40:01PM -0700, Jeykumar Sankaran wrote: > Strip down the support for topology enums. It > can be replaced with simple hw count checks. > Changes in v4: ... > Signed-off-by: Jeykumar Sankaran > --- > drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c| 3 -- > drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.h| 1 - > drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys.h | 9 -- > .../gpu/drm/msm/disp/dpu1/dpu_encoder_phys_vid.c | 7 +++-- > drivers/gpu/drm/msm/disp/dpu1/dpu_rm.c | 36 > ++ > drivers/gpu/drm/msm/disp/dpu1/dpu_rm.h | 24 --- > 6 files changed, 19 insertions(+), 61 deletions(-) > > diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c > b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c > index dbf669e..56ef349 100644 > --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c > +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c > @@ -1013,7 +1013,6 @@ static void dpu_encoder_virt_mode_set(struct > drm_encoder *drm_enc, > struct drm_connector *conn = NULL, *conn_iter; > struct dpu_rm_hw_iter pp_iter, ctl_iter; > struct msm_display_topology topology; > - enum dpu_rm_topology_name topology_name; > struct dpu_hw_ctl *hw_ctl[MAX_CHANNELS_PER_ENC] = { NULL }; > int i = 0, ret; > > @@ -1069,7 +1068,6 @@ static void dpu_encoder_virt_mode_set(struct > drm_encoder *drm_enc, > hw_ctl[i] = (struct dpu_hw_ctl *)ctl_iter.hw; > } > > - topology_name = dpu_rm_get_topology_name(topology); > for (i = 0; i < dpu_enc->num_phys_encs; i++) { > struct dpu_encoder_phys *phys = dpu_enc->phys_encs[i]; > > @@ -1089,7 +1087,6 @@ static void dpu_encoder_virt_mode_set(struct > drm_encoder *drm_enc, > phys->hw_ctl = hw_ctl[i]; > > phys->connector = conn->state->connector; > - phys->topology_name = topology_name; > if (phys->ops.mode_set) > phys->ops.mode_set(phys, mode, adj_mode); > } > diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.h > b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.h > index 60f809f..c5600e6 100644 > --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.h > +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.h > @@ -35,7 +35,6 @@ > * @needs_cdm: Encoder requests a CDM based on pixel format conversion > needs > * @display_num_of_h_tiles: Number of horizontal tiles in case of split > * interface > - * @topology: Topology of the display > */ > struct dpu_encoder_hw_resources { > enum dpu_intf_mode intfs[INTF_MAX]; > 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 b3917e0..b5fc65c 100644 > --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys.h > +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys.h > @@ -24,6 +24,7 @@ > #include "dpu_hw_top.h" > #include "dpu_hw_cdm.h" > #include "dpu_encoder.h" > +#include "dpu_crtc.h" > > #define DPU_ENCODER_NAME_MAX 16 > > @@ -213,7 +214,6 @@ struct dpu_encoder_irq { > * @split_role: Role to play in a split-panel configuration > * @intf_mode: Interface mode > * @intf_idx:Interface index on dpu hardware > - * @topology_name: topology selected for the display > * @enc_spinlock:Virtual-Encoder-Wide Spin Lock for IRQ purposes > * @enable_state:Enable state tracking > * @vblank_refcount: Reference count of vblank request > @@ -243,7 +243,6 @@ struct dpu_encoder_phys { > enum dpu_enc_split_role split_role; > enum dpu_intf_mode intf_mode; > enum dpu_intf intf_idx; > - enum dpu_rm_topology_name topology_name; > spinlock_t *enc_spinlock; > enum dpu_enc_enable_state enable_state; > atomic_t vblank_refcount; > @@ -361,11 +360,15 @@ struct dpu_encoder_phys *dpu_encoder_phys_cmd_init( > static inline enum dpu_3d_blend_mode dpu_encoder_helper_get_3d_blend_mode( > struct dpu_encoder_phys *phys_enc) > { > + struct dpu_crtc_state *dpu_cstate; > + > if (!phys_enc || phys_enc->enable_state == DPU_ENC_DISABLING) > return BLEND_3D_NONE; > > + dpu_cstate = to_dpu_crtc_state(phys_enc->parent->crtc->state); > + > if (phys_enc->split_role == ENC_ROLE_SOLO && > - phys_enc->topology_name == DPU_RM_TOPOLOGY_DUALPIPE_3DMERGE) > + (dpu_cstate->num_mixers == 2)) I guess this should be CRTC_DUAL_MIXERS? Perhaps you should add a helper called dpu_crtc_state_is_stereo() instead of littering these checks everywhere. > return BLEND_3D_H_ROW_INT; > > return BLEND_3D_NONE; > diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys_vid.c > b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys_vid.c > index 6de13f4..1643e2f 100644 > --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys_vid.c
[PATCH 12/14] drm/msm/dpu: remove topology name
Strip down the support for topology enums. It can be replaced with simple hw count checks. Signed-off-by: Jeykumar Sankaran --- drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c| 3 -- drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.h| 1 - drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys.h | 9 -- .../gpu/drm/msm/disp/dpu1/dpu_encoder_phys_vid.c | 7 +++-- drivers/gpu/drm/msm/disp/dpu1/dpu_rm.c | 36 ++ drivers/gpu/drm/msm/disp/dpu1/dpu_rm.h | 24 --- 6 files changed, 19 insertions(+), 61 deletions(-) diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c index dbf669e..56ef349 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c @@ -1013,7 +1013,6 @@ static void dpu_encoder_virt_mode_set(struct drm_encoder *drm_enc, struct drm_connector *conn = NULL, *conn_iter; struct dpu_rm_hw_iter pp_iter, ctl_iter; struct msm_display_topology topology; - enum dpu_rm_topology_name topology_name; struct dpu_hw_ctl *hw_ctl[MAX_CHANNELS_PER_ENC] = { NULL }; int i = 0, ret; @@ -1069,7 +1068,6 @@ static void dpu_encoder_virt_mode_set(struct drm_encoder *drm_enc, hw_ctl[i] = (struct dpu_hw_ctl *)ctl_iter.hw; } - topology_name = dpu_rm_get_topology_name(topology); for (i = 0; i < dpu_enc->num_phys_encs; i++) { struct dpu_encoder_phys *phys = dpu_enc->phys_encs[i]; @@ -1089,7 +1087,6 @@ static void dpu_encoder_virt_mode_set(struct drm_encoder *drm_enc, phys->hw_ctl = hw_ctl[i]; phys->connector = conn->state->connector; - phys->topology_name = topology_name; if (phys->ops.mode_set) phys->ops.mode_set(phys, mode, adj_mode); } diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.h b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.h index 60f809f..c5600e6 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.h +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.h @@ -35,7 +35,6 @@ * @needs_cdm: Encoder requests a CDM based on pixel format conversion needs * @display_num_of_h_tiles: Number of horizontal tiles in case of split * interface - * @topology: Topology of the display */ struct dpu_encoder_hw_resources { enum dpu_intf_mode intfs[INTF_MAX]; 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 b3917e0..b5fc65c 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys.h +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys.h @@ -24,6 +24,7 @@ #include "dpu_hw_top.h" #include "dpu_hw_cdm.h" #include "dpu_encoder.h" +#include "dpu_crtc.h" #define DPU_ENCODER_NAME_MAX 16 @@ -213,7 +214,6 @@ struct dpu_encoder_irq { * @split_role:Role to play in a split-panel configuration * @intf_mode: Interface mode * @intf_idx: Interface index on dpu hardware - * @topology_name: topology selected for the display * @enc_spinlock: Virtual-Encoder-Wide Spin Lock for IRQ purposes * @enable_state: Enable state tracking * @vblank_refcount: Reference count of vblank request @@ -243,7 +243,6 @@ struct dpu_encoder_phys { enum dpu_enc_split_role split_role; enum dpu_intf_mode intf_mode; enum dpu_intf intf_idx; - enum dpu_rm_topology_name topology_name; spinlock_t *enc_spinlock; enum dpu_enc_enable_state enable_state; atomic_t vblank_refcount; @@ -361,11 +360,15 @@ struct dpu_encoder_phys *dpu_encoder_phys_cmd_init( static inline enum dpu_3d_blend_mode dpu_encoder_helper_get_3d_blend_mode( struct dpu_encoder_phys *phys_enc) { + struct dpu_crtc_state *dpu_cstate; + if (!phys_enc || phys_enc->enable_state == DPU_ENC_DISABLING) return BLEND_3D_NONE; + dpu_cstate = to_dpu_crtc_state(phys_enc->parent->crtc->state); + if (phys_enc->split_role == ENC_ROLE_SOLO && - phys_enc->topology_name == DPU_RM_TOPOLOGY_DUALPIPE_3DMERGE) + (dpu_cstate->num_mixers == 2)) return BLEND_3D_H_ROW_INT; return BLEND_3D_NONE; diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys_vid.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys_vid.c index 6de13f4..1643e2f 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys_vid.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys_vid.c @@ -355,13 +355,14 @@ static void dpu_encoder_phys_vid_underrun_irq(void *arg, int irq_idx) static bool _dpu_encoder_phys_is_dual_ctl(struct dpu_encoder_phys *phys_enc) { + struct dpu_crtc_state *dpu_cstate; + if (!phys_enc) return false; - if (phys_enc->topology_name == DPU_RM_TOPOLOGY_DUALPIPE)