[Freedreno] [DPU PATCH 1/6] drm/msm: remove display stream compression(DSC) support for SM845
Sean Paul
seanpaul at chromium.org
Tue Apr 17 20:41:32 UTC 2018
On Mon, Apr 16, 2018 at 11:22:16AM -0700, Jeykumar Sankaran wrote:
> Upstream DSI driver doesn't support DSC panels yet. Remove
> the support for compression from DPU for now.
>
> Signed-off-by: Jeykumar Sankaran <jsanka at codeaurora.org>
> ---
> drivers/gpu/drm/msm/Makefile | 1 -
> drivers/gpu/drm/msm/disp/dpu1/dpu_connector.c | 4 -
> drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.h | 2 +-
> drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c | 476 +--------------------
> drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.h | 14 -
> drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys.h | 7 +-
> .../gpu/drm/msm/disp/dpu1/dpu_encoder_phys_cmd.c | 1 -
> .../gpu/drm/msm/disp/dpu1/dpu_encoder_phys_vid.c | 7 +-
> drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c | 25 --
> drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h | 16 -
> drivers/gpu/drm/msm/disp/dpu1/dpu_hw_dsc.c | 252 -----------
> drivers/gpu/drm/msm/disp/dpu1/dpu_hw_dsc.h | 100 -----
> drivers/gpu/drm/msm/disp/dpu1/dpu_hw_mdss.h | 17 +-
> drivers/gpu/drm/msm/disp/dpu1/dpu_hw_pingpong.c | 48 ---
> drivers/gpu/drm/msm/disp/dpu1/dpu_hw_pingpong.h | 22 -
> drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.c | 13 -
> drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.h | 7 -
> drivers/gpu/drm/msm/disp/dpu1/dpu_rm.c | 55 ---
> drivers/gpu/drm/msm/disp/dpu1/dpu_rm.h | 8 -
> drivers/gpu/drm/msm/msm_drv.h | 16 -
> 20 files changed, 7 insertions(+), 1084 deletions(-)
> delete mode 100644 drivers/gpu/drm/msm/disp/dpu1/dpu_hw_dsc.c
> delete mode 100644 drivers/gpu/drm/msm/disp/dpu1/dpu_hw_dsc.h
>
> diff --git a/drivers/gpu/drm/msm/Makefile b/drivers/gpu/drm/msm/Makefile
> index 9c27991..b23a001 100644
> --- a/drivers/gpu/drm/msm/Makefile
> +++ b/drivers/gpu/drm/msm/Makefile
> @@ -64,7 +64,6 @@ msm-y := \
> disp/dpu1/dpu_hw_color_processing_v1_7.o \
> disp/dpu1/dpu_hw_ctl.o \
> disp/dpu1/dpu_hw_ds.o \
> - disp/dpu1/dpu_hw_dsc.o \
> disp/dpu1/dpu_hw_dspp.o \
> disp/dpu1/dpu_hw_interrupts.o \
> disp/dpu1/dpu_hw_intf.o \
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_connector.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_connector.c
> index 36607e3..1237efc 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_connector.c
> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_connector.c
> @@ -39,12 +39,8 @@
> static const struct drm_prop_enum_list e_topology_name[] = {
> {DPU_RM_TOPOLOGY_NONE, "dpu_none"},
> {DPU_RM_TOPOLOGY_SINGLEPIPE, "dpu_singlepipe"},
> - {DPU_RM_TOPOLOGY_SINGLEPIPE_DSC, "dpu_singlepipe_dsc"},
> {DPU_RM_TOPOLOGY_DUALPIPE, "dpu_dualpipe"},
> - {DPU_RM_TOPOLOGY_DUALPIPE_DSC, "dpu_dualpipe_dsc"},
> {DPU_RM_TOPOLOGY_DUALPIPE_3DMERGE, "dpu_dualpipemerge"},
> - {DPU_RM_TOPOLOGY_DUALPIPE_3DMERGE_DSC, "dpu_dualpipemerge_dsc"},
> - {DPU_RM_TOPOLOGY_DUALPIPE_DSCMERGE, "dpu_dualpipe_dscmerge"},
> {DPU_RM_TOPOLOGY_PPSPLIT, "dpu_ppsplit"},
> };
> static const struct drm_prop_enum_list e_topology_control[] = {
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.h b/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.h
> index 8756b2b..fade658 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.h
> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.h
> @@ -147,7 +147,7 @@ struct dpu_crtc_event {
> * @num_ctls : Number of ctl paths in use
> * @num_mixers : Number of mixers in use
> * @mixers_swapped: Whether the mixers have been swapped for left/right update
> - * especially in the case of DSC Merge.
> + especially in the case of DSC Merge.
> * @mixers : List of active mixers
> * @event : Pointer to last received drm vblank event. If there is a
> * pending vblank event, this will be non-null.
Unrelated change
<snip />
> static void _dpu_encoder_update_vsync_source(struct dpu_encoder_virt *dpu_enc,
> struct msm_display_info *disp_info)
> {
> @@ -1109,102 +761,8 @@ static void _dpu_encoder_update_vsync_source(struct dpu_encoder_virt *dpu_enc,
>
> hw_mdptop->ops.setup_vsync_source(hw_mdptop, &vsync_cfg);
> }
> -}
> -
> -static int _dpu_encoder_dsc_disable(struct dpu_encoder_virt *dpu_enc)
> -{
> - enum dpu_rm_topology_name topology;
> - struct drm_connector *drm_conn;
> - int i, ret = 0;
> - struct dpu_hw_pingpong *hw_pp[MAX_CHANNELS_PER_ENC];
> - struct dpu_hw_dsc *hw_dsc[MAX_CHANNELS_PER_ENC] = {NULL};
> - int pp_count = 0;
> - int dsc_count = 0;
> -
> - if (!dpu_enc || !dpu_enc->phys_encs[0] ||
> - !dpu_enc->phys_encs[0]->connector) {
> - DPU_ERROR("invalid params %d %d\n",
> - !dpu_enc, dpu_enc ? !dpu_enc->phys_encs[0] : -1);
> - return -EINVAL;
> - }
> -
> - drm_conn = dpu_enc->phys_encs[0]->connector;
> -
> - topology = dpu_connector_get_topology_name(drm_conn);
> - if (topology == DPU_RM_TOPOLOGY_NONE) {
> - DPU_ERROR_ENC(dpu_enc, "topology not set yet\n");
> - return -EINVAL;
> - }
> -
> - switch (topology) {
> - case DPU_RM_TOPOLOGY_SINGLEPIPE:
> - case DPU_RM_TOPOLOGY_SINGLEPIPE_DSC:
> - /* single PP */
> - hw_pp[0] = dpu_enc->hw_pp[0];
> - hw_dsc[0] = dpu_enc->hw_dsc[0];
> - pp_count = 1;
> - dsc_count = 1;
> - break;
> - case DPU_RM_TOPOLOGY_DUALPIPE_DSC:
> - case DPU_RM_TOPOLOGY_DUALPIPE_3DMERGE_DSC:
> - case DPU_RM_TOPOLOGY_DUALPIPE_DSCMERGE:
> - /* dual dsc */
> - for (i = 0; i < MAX_CHANNELS_PER_ENC; i++) {
> - hw_dsc[i] = dpu_enc->hw_dsc[i];
> - if (hw_dsc[i])
> - dsc_count++;
> - }
> - /* fall through */
> - case DPU_RM_TOPOLOGY_DUALPIPE:
> - case DPU_RM_TOPOLOGY_DUALPIPE_3DMERGE:
> - /* dual pp */
> - for (i = 0; i < MAX_CHANNELS_PER_ENC; i++) {
> - hw_pp[i] = dpu_enc->hw_pp[i];
> - if (hw_pp[i])
> - pp_count++;
> - }
> - break;
> - default:
> - DPU_DEBUG_ENC(dpu_enc, "Unexpected topology:%d\n", topology);
> - return -EINVAL;
> - };
> -
> - DPU_EVT32(DRMID(&dpu_enc->base), topology, pp_count, dsc_count);
> -
> - if (pp_count > MAX_CHANNELS_PER_ENC ||
> - dsc_count > MAX_CHANNELS_PER_ENC) {
> - DPU_ERROR_ENC(dpu_enc, "Wrong count pp:%d dsc:%d top:%d\n",
> - pp_count, dsc_count, topology);
> - return -EINVAL;
> - }
> -
> - /* Disable DSC for all the pp's present in this topology */
> - for (i = 0; i < pp_count; i++) {
> -
> - if (!hw_pp[i]) {
> - DPU_ERROR_ENC(dpu_enc, "null pp:%d top:%d cnt:%d\n",
> - i, topology, pp_count);
> - return -EINVAL;
> - }
> -
> - if (hw_pp[i]->ops.disable_dsc)
> - hw_pp[i]->ops.disable_dsc(hw_pp[i]);
> - }
> -
> - /* Disable DSC HW */
> - for (i = 0; i < dsc_count; i++) {
> -
> - if (!hw_dsc[i]) {
> - DPU_ERROR_ENC(dpu_enc, "null dsc:%d top:%d cnt:%d\n",
> - i, topology, dsc_count);
> - return -EINVAL;
> - }
> -
> - if (hw_dsc[i]->ops.dsc_disable)
> - hw_dsc[i]->ops.dsc_disable(hw_dsc[i]);
> - }
>
> - return ret;
> + return;
Unnecessary return
<snip />
> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys.h
> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys.h
> @@ -232,7 +232,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
> - * @comp_type: Type of compression supported
> * @enc_spinlock: Virtual-Encoder-Wide Spin Lock for IRQ purposes
> * @enable_state: Enable state tracking
> * @vblank_refcount: Reference count of vblank request
> @@ -262,7 +261,6 @@ struct dpu_encoder_phys {
> enum dpu_enc_split_role split_role;
> enum dpu_intf_mode intf_mode;
> enum dpu_intf intf_idx;
> - enum msm_display_compression_type comp_type;
> spinlock_t *enc_spinlock;
> enum dpu_enc_enable_state enable_state;
> atomic_t vblank_refcount;
> @@ -384,7 +382,6 @@ struct dpu_encoder_phys_wb {
> * @split_role: Role to play in a split-panel configuration
> * @intf_idx: Interface index this phys_enc will control
> * @wb_idx: Writeback index this phys_enc will control
> - * @comp_type: Type of compression supported
> * @enc_spinlock: Virtual-Encoder-Wide Spin Lock for IRQ purposes
> */
> struct dpu_enc_phys_init_params {
> @@ -394,7 +391,6 @@ struct dpu_enc_phys_init_params {
> enum dpu_enc_split_role split_role;
> enum dpu_intf intf_idx;
> enum dpu_wb wb_idx;
> - enum msm_display_compression_type comp_type;
> spinlock_t *enc_spinlock;
> };
>
> @@ -479,8 +475,7 @@ static inline enum dpu_3d_blend_mode dpu_encoder_helper_get_3d_blend_mode(
>
> topology = dpu_connector_get_topology_name(phys_enc->connector);
> if (phys_enc->split_role == ENC_ROLE_SOLO &&
> - (topology == DPU_RM_TOPOLOGY_DUALPIPE_3DMERGE ||
> - topology == DPU_RM_TOPOLOGY_DUALPIPE_3DMERGE_DSC))
> + topology == DPU_RM_TOPOLOGY_DUALPIPE_3DMERGE)
nit: the alignment is still off, it should line up with the previous condition, ie:
if (phys_enc->split_role == ENC_ROLE_SOLO &&
topology == DPU_RM_TOPOLOGY_DUALPIPE_3DMERGE)
> return BLEND_3D_H_ROW_INT;
>
> return BLEND_3D_NONE;
<snip />
Once the nits are fixed, please add my
Reviewed-by: Sean Paul <seanpaul at chromium.org>
Thanks,
Sean
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-arm-msm" in
> the body of a message to majordomo at vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
--
Sean Paul, Software Engineer, Google / Chromium OS
More information about the Freedreno
mailing list