[Freedreno] [PATCH 14/14] drm/msm/dpu: remove cdm block support from resource manager

Sean Paul sean at poorly.run
Fri Aug 31 16:12:32 UTC 2018


On Tue, Aug 28, 2018 at 05:40:03PM -0700, Jeykumar Sankaran wrote:
> Support for CDM block is not present in DPU. Remove CDM
> handlers from resource manager.

I think there's some leftovers that can be cleaned up...

$ ack -i cdm
disp/dpu1/dpu_hw_mdss.h
103:    DPU_HW_BLK_CDM,
192:enum dpu_cdm {
193:    CDM_0 = 1,
194:    CDM_1,
195:    CDM_MAX
454:#define DPU_DBG_MASK_CDM      (1 << 1)

disp/dpu1/dpu_hw_catalog.h
533: * struct dpu_cdm_cfg - information of chroma down blocks
537: * @intf_connect       Bitmask of INTF IDs this CDM can connect to
539:struct dpu_cdm_cfg   {
737:    u32 cdm_count;
738:    struct dpu_cdm_cfg *cdm;
776:#define BLK_CDM(s) ((s)->cdm)

disp/dpu1/dpu_hw_catalog.c
324: * CDM sub blocks config
326:static struct dpu_cdm_cfg sdm845_cdm[] = {
328:    .name = "cdm_0", .id = CDM_0,
461:            .cdm_count = ARRAY_SIZE(sdm845_cdm),
462:            .cdm = sdm845_cdm,



> 
> Signed-off-by: Jeykumar Sankaran <jsanka at codeaurora.org>
> ---
>  drivers/gpu/drm/msm/Makefile                     |   1 -
>  drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.h      |   2 -
>  drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys.h |   5 -
>  drivers/gpu/drm/msm/disp/dpu1/dpu_hw_cdm.c       | 323 -----------------------
>  drivers/gpu/drm/msm/disp/dpu1/dpu_hw_cdm.h       | 139 ----------
>  drivers/gpu/drm/msm/disp/dpu1/dpu_hw_ctl.c       |  14 -
>  drivers/gpu/drm/msm/disp/dpu1/dpu_hw_ctl.h       |   4 -
>  drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.c       |  18 --
>  drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.h       |  17 --
>  drivers/gpu/drm/msm/disp/dpu1/dpu_rm.c           |  68 +----
>  drivers/gpu/drm/msm/disp/dpu1/dpu_trace.h        |   4 -
>  11 files changed, 2 insertions(+), 593 deletions(-)
>  delete mode 100644 drivers/gpu/drm/msm/disp/dpu1/dpu_hw_cdm.c
>  delete mode 100644 drivers/gpu/drm/msm/disp/dpu1/dpu_hw_cdm.h
> 
> diff --git a/drivers/gpu/drm/msm/Makefile b/drivers/gpu/drm/msm/Makefile
> index 261fa79..19ab521 100644
> --- a/drivers/gpu/drm/msm/Makefile
> +++ b/drivers/gpu/drm/msm/Makefile
> @@ -58,7 +58,6 @@ msm-y := \
>  	disp/dpu1/dpu_formats.o \
>  	disp/dpu1/dpu_hw_blk.o \
>  	disp/dpu1/dpu_hw_catalog.o \
> -	disp/dpu1/dpu_hw_cdm.o \
>  	disp/dpu1/dpu_hw_ctl.o \
>  	disp/dpu1/dpu_hw_interrupts.o \
>  	disp/dpu1/dpu_hw_intf.o \
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.h b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.h
> index e453271..e844afa 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.h
> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.h
> @@ -32,11 +32,9 @@
>  /**
>   * Encoder functions and data types
>   * @intfs:	Interfaces this encoder is using, INTF_MODE_NONE if unused
> - * @needs_cdm:	Encoder requests a CDM based on pixel format conversion needs
>   */
>  struct dpu_encoder_hw_resources {
>  	enum dpu_intf_mode intfs[INTF_MAX];
> -	bool needs_cdm;
>  };
>  
>  /**
> 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 b5fc65c..f796683 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys.h
> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys.h
> @@ -22,7 +22,6 @@
>  #include "dpu_hw_pingpong.h"
>  #include "dpu_hw_ctl.h"
>  #include "dpu_hw_top.h"
> -#include "dpu_hw_cdm.h"
>  #include "dpu_encoder.h"
>  #include "dpu_crtc.h"
>  
> @@ -205,8 +204,6 @@ struct dpu_encoder_irq {
>   * @parent_ops:		Callbacks exposed by the parent to the phys_enc
>   * @hw_mdptop:		Hardware interface to the top registers
>   * @hw_ctl:		Hardware interface to the ctl registers
> - * @hw_cdm:		Hardware interface to the cdm registers
> - * @cdm_cfg:		Chroma-down hardware configuration
>   * @hw_pp:		Hardware interface to the ping pong registers
>   * @dpu_kms:		Pointer to the dpu_kms top level
>   * @cached_mode:	DRM mode cached at mode_set time, acted on in enable
> @@ -235,8 +232,6 @@ struct dpu_encoder_phys {
>  	const struct dpu_encoder_virt_ops *parent_ops;
>  	struct dpu_hw_mdp *hw_mdptop;
>  	struct dpu_hw_ctl *hw_ctl;
> -	struct dpu_hw_cdm *hw_cdm;
> -	struct dpu_hw_cdm_cfg cdm_cfg;
>  	struct dpu_hw_pingpong *hw_pp;
>  	struct dpu_kms *dpu_kms;
>  	struct drm_display_mode cached_mode;
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_cdm.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_cdm.c
> deleted file mode 100644
> index 554874b..0000000
> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_cdm.c
> +++ /dev/null
> @@ -1,323 +0,0 @@
> -/* Copyright (c) 2015-2018, The Linux Foundation. All rights reserved.
> - *
> - * This program is free software; you can redistribute it and/or modify
> - * it under the terms of the GNU General Public License version 2 and
> - * only version 2 as published by the Free Software Foundation.
> - *
> - * This program is distributed in the hope that it will be useful,
> - * but WITHOUT ANY WARRANTY; without even the implied warranty of
> - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> - * GNU General Public License for more details.
> - */
> -
> -#include "dpu_hw_mdss.h"
> -#include "dpu_hwio.h"
> -#include "dpu_hw_catalog.h"
> -#include "dpu_hw_cdm.h"
> -#include "dpu_dbg.h"
> -#include "dpu_kms.h"
> -
> -#define CDM_CSC_10_OPMODE                  0x000
> -#define CDM_CSC_10_BASE                    0x004
> -
> -#define CDM_CDWN2_OP_MODE                  0x100
> -#define CDM_CDWN2_CLAMP_OUT                0x104
> -#define CDM_CDWN2_PARAMS_3D_0              0x108
> -#define CDM_CDWN2_PARAMS_3D_1              0x10C
> -#define CDM_CDWN2_COEFF_COSITE_H_0         0x110
> -#define CDM_CDWN2_COEFF_COSITE_H_1         0x114
> -#define CDM_CDWN2_COEFF_COSITE_H_2         0x118
> -#define CDM_CDWN2_COEFF_OFFSITE_H_0        0x11C
> -#define CDM_CDWN2_COEFF_OFFSITE_H_1        0x120
> -#define CDM_CDWN2_COEFF_OFFSITE_H_2        0x124
> -#define CDM_CDWN2_COEFF_COSITE_V           0x128
> -#define CDM_CDWN2_COEFF_OFFSITE_V          0x12C
> -#define CDM_CDWN2_OUT_SIZE                 0x130
> -
> -#define CDM_HDMI_PACK_OP_MODE              0x200
> -#define CDM_CSC_10_MATRIX_COEFF_0          0x004
> -
> -/**
> - * Horizontal coefficients for cosite chroma downscale
> - * s13 representation of coefficients
> - */
> -static u32 cosite_h_coeff[] = {0x00000016, 0x000001cc, 0x0100009e};
> -
> -/**
> - * Horizontal coefficients for offsite chroma downscale
> - */
> -static u32 offsite_h_coeff[] = {0x000b0005, 0x01db01eb, 0x00e40046};
> -
> -/**
> - * Vertical coefficients for cosite chroma downscale
> - */
> -static u32 cosite_v_coeff[] = {0x00080004};
> -/**
> - * Vertical coefficients for offsite chroma downscale
> - */
> -static u32 offsite_v_coeff[] = {0x00060002};
> -
> -/* Limited Range rgb2yuv coeff with clamp and bias values for CSC 10 module */
> -static struct dpu_csc_cfg rgb2yuv_cfg = {
> -	{
> -		0x0083, 0x0102, 0x0032,
> -		0x1fb5, 0x1f6c, 0x00e1,
> -		0x00e1, 0x1f45, 0x1fdc
> -	},
> -	{ 0x00, 0x00, 0x00 },
> -	{ 0x0040, 0x0200, 0x0200 },
> -	{ 0x000, 0x3ff, 0x000, 0x3ff, 0x000, 0x3ff },
> -	{ 0x040, 0x3ac, 0x040, 0x3c0, 0x040, 0x3c0 },
> -};
> -
> -static struct dpu_cdm_cfg *_cdm_offset(enum dpu_cdm cdm,
> -		struct dpu_mdss_cfg *m,
> -		void __iomem *addr,
> -		struct dpu_hw_blk_reg_map *b)
> -{
> -	int i;
> -
> -	for (i = 0; i < m->cdm_count; i++) {
> -		if (cdm == m->cdm[i].id) {
> -			b->base_off = addr;
> -			b->blk_off = m->cdm[i].base;
> -			b->length = m->cdm[i].len;
> -			b->hwversion = m->hwversion;
> -			b->log_mask = DPU_DBG_MASK_CDM;
> -			return &m->cdm[i];
> -		}
> -	}
> -
> -	return ERR_PTR(-EINVAL);
> -}
> -
> -static int dpu_hw_cdm_setup_csc_10bit(struct dpu_hw_cdm *ctx,
> -		struct dpu_csc_cfg *data)
> -{
> -	dpu_hw_csc_setup(&ctx->hw, CDM_CSC_10_MATRIX_COEFF_0, data, true);
> -
> -	return 0;
> -}
> -
> -static int dpu_hw_cdm_setup_cdwn(struct dpu_hw_cdm *ctx,
> -		struct dpu_hw_cdm_cfg *cfg)
> -{
> -	struct dpu_hw_blk_reg_map *c = &ctx->hw;
> -	u32 opmode = 0;
> -	u32 out_size = 0;
> -
> -	if (cfg->output_bit_depth == CDM_CDWN_OUTPUT_10BIT)
> -		opmode &= ~BIT(7);
> -	else
> -		opmode |= BIT(7);
> -
> -	/* ENABLE DWNS_H bit */
> -	opmode |= BIT(1);
> -
> -	switch (cfg->h_cdwn_type) {
> -	case CDM_CDWN_DISABLE:
> -		/* CLEAR METHOD_H field */
> -		opmode &= ~(0x18);
> -		/* CLEAR DWNS_H bit */
> -		opmode &= ~BIT(1);
> -		break;
> -	case CDM_CDWN_PIXEL_DROP:
> -		/* Clear METHOD_H field (pixel drop is 0) */
> -		opmode &= ~(0x18);
> -		break;
> -	case CDM_CDWN_AVG:
> -		/* Clear METHOD_H field (Average is 0x1) */
> -		opmode &= ~(0x18);
> -		opmode |= (0x1 << 0x3);
> -		break;
> -	case CDM_CDWN_COSITE:
> -		/* Clear METHOD_H field (Average is 0x2) */
> -		opmode &= ~(0x18);
> -		opmode |= (0x2 << 0x3);
> -		/* Co-site horizontal coefficients */
> -		DPU_REG_WRITE(c, CDM_CDWN2_COEFF_COSITE_H_0,
> -				cosite_h_coeff[0]);
> -		DPU_REG_WRITE(c, CDM_CDWN2_COEFF_COSITE_H_1,
> -				cosite_h_coeff[1]);
> -		DPU_REG_WRITE(c, CDM_CDWN2_COEFF_COSITE_H_2,
> -				cosite_h_coeff[2]);
> -		break;
> -	case CDM_CDWN_OFFSITE:
> -		/* Clear METHOD_H field (Average is 0x3) */
> -		opmode &= ~(0x18);
> -		opmode |= (0x3 << 0x3);
> -
> -		/* Off-site horizontal coefficients */
> -		DPU_REG_WRITE(c, CDM_CDWN2_COEFF_OFFSITE_H_0,
> -				offsite_h_coeff[0]);
> -		DPU_REG_WRITE(c, CDM_CDWN2_COEFF_OFFSITE_H_1,
> -				offsite_h_coeff[1]);
> -		DPU_REG_WRITE(c, CDM_CDWN2_COEFF_OFFSITE_H_2,
> -				offsite_h_coeff[2]);
> -		break;
> -	default:
> -		pr_err("%s invalid horz down sampling type\n", __func__);
> -		return -EINVAL;
> -	}
> -
> -	/* ENABLE DWNS_V bit */
> -	opmode |= BIT(2);
> -
> -	switch (cfg->v_cdwn_type) {
> -	case CDM_CDWN_DISABLE:
> -		/* CLEAR METHOD_V field */
> -		opmode &= ~(0x60);
> -		/* CLEAR DWNS_V bit */
> -		opmode &= ~BIT(2);
> -		break;
> -	case CDM_CDWN_PIXEL_DROP:
> -		/* Clear METHOD_V field (pixel drop is 0) */
> -		opmode &= ~(0x60);
> -		break;
> -	case CDM_CDWN_AVG:
> -		/* Clear METHOD_V field (Average is 0x1) */
> -		opmode &= ~(0x60);
> -		opmode |= (0x1 << 0x5);
> -		break;
> -	case CDM_CDWN_COSITE:
> -		/* Clear METHOD_V field (Average is 0x2) */
> -		opmode &= ~(0x60);
> -		opmode |= (0x2 << 0x5);
> -		/* Co-site vertical coefficients */
> -		DPU_REG_WRITE(c,
> -				CDM_CDWN2_COEFF_COSITE_V,
> -				cosite_v_coeff[0]);
> -		break;
> -	case CDM_CDWN_OFFSITE:
> -		/* Clear METHOD_V field (Average is 0x3) */
> -		opmode &= ~(0x60);
> -		opmode |= (0x3 << 0x5);
> -
> -		/* Off-site vertical coefficients */
> -		DPU_REG_WRITE(c,
> -				CDM_CDWN2_COEFF_OFFSITE_V,
> -				offsite_v_coeff[0]);
> -		break;
> -	default:
> -		return -EINVAL;
> -	}
> -
> -	if (cfg->v_cdwn_type || cfg->h_cdwn_type)
> -		opmode |= BIT(0); /* EN CDWN module */
> -	else
> -		opmode &= ~BIT(0);
> -
> -	out_size = (cfg->output_width & 0xFFFF) |
> -		((cfg->output_height & 0xFFFF) << 16);
> -	DPU_REG_WRITE(c, CDM_CDWN2_OUT_SIZE, out_size);
> -	DPU_REG_WRITE(c, CDM_CDWN2_OP_MODE, opmode);
> -	DPU_REG_WRITE(c, CDM_CDWN2_CLAMP_OUT,
> -			((0x3FF << 16) | 0x0));
> -
> -	return 0;
> -}
> -
> -static int dpu_hw_cdm_enable(struct dpu_hw_cdm *ctx,
> -		struct dpu_hw_cdm_cfg *cdm)
> -{
> -	struct dpu_hw_blk_reg_map *c = &ctx->hw;
> -	const struct dpu_format *fmt = cdm->output_fmt;
> -	struct cdm_output_cfg cdm_cfg = { 0 };
> -	u32 opmode = 0;
> -	u32 csc = 0;
> -
> -	if (!DPU_FORMAT_IS_YUV(fmt))
> -		return -EINVAL;
> -
> -	if (cdm->output_type == CDM_CDWN_OUTPUT_HDMI) {
> -		if (fmt->chroma_sample != DPU_CHROMA_H1V2)
> -			return -EINVAL; /*unsupported format */
> -		opmode = BIT(0);
> -		opmode |= (fmt->chroma_sample << 1);
> -		cdm_cfg.intf_en = true;
> -	}
> -
> -	csc |= BIT(2);
> -	csc &= ~BIT(1);
> -	csc |= BIT(0);
> -
> -	if (ctx->hw_mdp && ctx->hw_mdp->ops.setup_cdm_output)
> -		ctx->hw_mdp->ops.setup_cdm_output(ctx->hw_mdp, &cdm_cfg);
> -
> -	DPU_REG_WRITE(c, CDM_CSC_10_OPMODE, csc);
> -	DPU_REG_WRITE(c, CDM_HDMI_PACK_OP_MODE, opmode);
> -	return 0;
> -}
> -
> -static void dpu_hw_cdm_disable(struct dpu_hw_cdm *ctx)
> -{
> -	struct cdm_output_cfg cdm_cfg = { 0 };
> -
> -	if (ctx->hw_mdp && ctx->hw_mdp->ops.setup_cdm_output)
> -		ctx->hw_mdp->ops.setup_cdm_output(ctx->hw_mdp, &cdm_cfg);
> -}
> -
> -static void _setup_cdm_ops(struct dpu_hw_cdm_ops *ops,
> -	unsigned long features)
> -{
> -	ops->setup_csc_data = dpu_hw_cdm_setup_csc_10bit;
> -	ops->setup_cdwn = dpu_hw_cdm_setup_cdwn;
> -	ops->enable = dpu_hw_cdm_enable;
> -	ops->disable = dpu_hw_cdm_disable;
> -}
> -
> -static struct dpu_hw_blk_ops dpu_hw_ops = {
> -	.start = NULL,
> -	.stop = NULL,
> -};
> -
> -struct dpu_hw_cdm *dpu_hw_cdm_init(enum dpu_cdm idx,
> -		void __iomem *addr,
> -		struct dpu_mdss_cfg *m,
> -		struct dpu_hw_mdp *hw_mdp)
> -{
> -	struct dpu_hw_cdm *c;
> -	struct dpu_cdm_cfg *cfg;
> -	int rc;
> -
> -	c = kzalloc(sizeof(*c), GFP_KERNEL);
> -	if (!c)
> -		return ERR_PTR(-ENOMEM);
> -
> -	cfg = _cdm_offset(idx, m, addr, &c->hw);
> -	if (IS_ERR_OR_NULL(cfg)) {
> -		kfree(c);
> -		return ERR_PTR(-EINVAL);
> -	}
> -
> -	c->idx = idx;
> -	c->caps = cfg;
> -	_setup_cdm_ops(&c->ops, c->caps->features);
> -	c->hw_mdp = hw_mdp;
> -
> -	rc = dpu_hw_blk_init(&c->base, DPU_HW_BLK_CDM, idx, &dpu_hw_ops);
> -	if (rc) {
> -		DPU_ERROR("failed to init hw blk %d\n", rc);
> -		goto blk_init_error;
> -	}
> -
> -	/*
> -	 * Perform any default initialization for the chroma down module
> -	 * @setup default csc coefficients
> -	 */
> -	dpu_hw_cdm_setup_csc_10bit(c, &rgb2yuv_cfg);
> -
> -	return c;
> -
> -blk_init_error:
> -	kzfree(c);
> -
> -	return ERR_PTR(rc);
> -}
> -
> -void dpu_hw_cdm_destroy(struct dpu_hw_cdm *cdm)
> -{
> -	if (cdm)
> -		dpu_hw_blk_destroy(&cdm->base);
> -	kfree(cdm);
> -}
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_cdm.h b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_cdm.h
> deleted file mode 100644
> index 5cceb1e..0000000
> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_cdm.h
> +++ /dev/null
> @@ -1,139 +0,0 @@
> -/* Copyright (c) 2015-2018, The Linux Foundation. All rights reserved.
> - *
> - * This program is free software; you can redistribute it and/or modify
> - * it under the terms of the GNU General Public License version 2 and
> - * only version 2 as published by the Free Software Foundation.
> - *
> - * This program is distributed in the hope that it will be useful,
> - * but WITHOUT ANY WARRANTY; without even the implied warranty of
> - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> - * GNU General Public License for more details.
> - */
> -
> -#ifndef _DPU_HW_CDM_H
> -#define _DPU_HW_CDM_H
> -
> -#include "dpu_hw_mdss.h"
> -#include "dpu_hw_top.h"
> -#include "dpu_hw_blk.h"
> -
> -struct dpu_hw_cdm;
> -
> -struct dpu_hw_cdm_cfg {
> -	u32 output_width;
> -	u32 output_height;
> -	u32 output_bit_depth;
> -	u32 h_cdwn_type;
> -	u32 v_cdwn_type;
> -	const struct dpu_format *output_fmt;
> -	u32 output_type;
> -	int flags;
> -};
> -
> -enum dpu_hw_cdwn_type {
> -	CDM_CDWN_DISABLE,
> -	CDM_CDWN_PIXEL_DROP,
> -	CDM_CDWN_AVG,
> -	CDM_CDWN_COSITE,
> -	CDM_CDWN_OFFSITE,
> -};
> -
> -enum dpu_hw_cdwn_output_type {
> -	CDM_CDWN_OUTPUT_HDMI,
> -	CDM_CDWN_OUTPUT_WB,
> -};
> -
> -enum dpu_hw_cdwn_output_bit_depth {
> -	CDM_CDWN_OUTPUT_8BIT,
> -	CDM_CDWN_OUTPUT_10BIT,
> -};
> -
> -/**
> - * struct dpu_hw_cdm_ops : Interface to the chroma down Hw driver functions
> - *                         Assumption is these functions will be called after
> - *                         clocks are enabled
> - *  @setup_csc:            Programs the csc matrix
> - *  @setup_cdwn:           Sets up the chroma down sub module
> - *  @enable:               Enables the output to interface and programs the
> - *                         output packer
> - *  @disable:              Puts the cdm in bypass mode
> - */
> -struct dpu_hw_cdm_ops {
> -	/**
> -	 * Programs the CSC matrix for conversion from RGB space to YUV space,
> -	 * it is optional to call this function as this matrix is automatically
> -	 * set during initialization, user should call this if it wants
> -	 * to program a different matrix than default matrix.
> -	 * @cdm:          Pointer to the chroma down context structure
> -	 * @data          Pointer to CSC configuration data
> -	 * return:        0 if success; error code otherwise
> -	 */
> -	int (*setup_csc_data)(struct dpu_hw_cdm *cdm,
> -			struct dpu_csc_cfg *data);
> -
> -	/**
> -	 * Programs the Chroma downsample part.
> -	 * @cdm         Pointer to chroma down context
> -	 */
> -	int (*setup_cdwn)(struct dpu_hw_cdm *cdm,
> -	struct dpu_hw_cdm_cfg *cfg);
> -
> -	/**
> -	 * Enable the CDM module
> -	 * @cdm         Pointer to chroma down context
> -	 */
> -	int (*enable)(struct dpu_hw_cdm *cdm,
> -	struct dpu_hw_cdm_cfg *cfg);
> -
> -	/**
> -	 * Disable the CDM module
> -	 * @cdm         Pointer to chroma down context
> -	 */
> -	void (*disable)(struct dpu_hw_cdm *cdm);
> -};
> -
> -struct dpu_hw_cdm {
> -	struct dpu_hw_blk base;
> -	struct dpu_hw_blk_reg_map hw;
> -
> -	/* chroma down */
> -	const struct dpu_cdm_cfg *caps;
> -	enum  dpu_cdm  idx;
> -
> -	/* mdp top hw driver */
> -	struct dpu_hw_mdp *hw_mdp;
> -
> -	/* ops */
> -	struct dpu_hw_cdm_ops ops;
> -};
> -
> -/**
> - * dpu_hw_cdm - convert base object dpu_hw_base to container
> - * @hw: Pointer to base hardware block
> - * return: Pointer to hardware block container
> - */
> -static inline struct dpu_hw_cdm *to_dpu_hw_cdm(struct dpu_hw_blk *hw)
> -{
> -	return container_of(hw, struct dpu_hw_cdm, base);
> -}
> -
> -/**
> - * dpu_hw_cdm_init - initializes the cdm hw driver object.
> - * should be called once before accessing every cdm.
> - * @idx:  cdm index for which driver object is required
> - * @addr: mapped register io address of MDP
> - * @m :   pointer to mdss catalog data
> - * @hw_mdp:  pointer to mdp top hw driver object
> - */
> -struct dpu_hw_cdm *dpu_hw_cdm_init(enum dpu_cdm idx,
> -		void __iomem *addr,
> -		struct dpu_mdss_cfg *m,
> -		struct dpu_hw_mdp *hw_mdp);
> -
> -/**
> - * dpu_hw_cdm_destroy - destroys CDM driver context
> - * @cdm:   pointer to CDM driver context
> - */
> -void dpu_hw_cdm_destroy(struct dpu_hw_cdm *cdm);
> -
> -#endif /*_DPU_HW_CDM_H */
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_ctl.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_ctl.c
> index 06be7cf..b394a18 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_ctl.c
> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_ctl.c
> @@ -224,19 +224,6 @@ static inline int dpu_hw_ctl_get_bitmask_intf(struct dpu_hw_ctl *ctx,
>  	return 0;
>  }
>  
> -static inline int dpu_hw_ctl_get_bitmask_cdm(struct dpu_hw_ctl *ctx,
> -		u32 *flushbits, enum dpu_cdm cdm)
> -{
> -	switch (cdm) {
> -	case CDM_0:
> -		*flushbits |= BIT(26);
> -		break;
> -	default:
> -		return -EINVAL;
> -	}
> -	return 0;
> -}
> -
>  static u32 dpu_hw_ctl_poll_reset_status(struct dpu_hw_ctl *ctx, u32 timeout_us)
>  {
>  	struct dpu_hw_blk_reg_map *c = &ctx->hw;
> @@ -485,7 +472,6 @@ static void _setup_ctl_ops(struct dpu_hw_ctl_ops *ops,
>  	ops->get_bitmask_sspp = dpu_hw_ctl_get_bitmask_sspp;
>  	ops->get_bitmask_mixer = dpu_hw_ctl_get_bitmask_mixer;
>  	ops->get_bitmask_intf = dpu_hw_ctl_get_bitmask_intf;
> -	ops->get_bitmask_cdm = dpu_hw_ctl_get_bitmask_cdm;
>  };
>  
>  static struct dpu_hw_blk_ops dpu_hw_ops = {
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_ctl.h b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_ctl.h
> index c66a71f..6f313fa 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_ctl.h
> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_ctl.h
> @@ -142,10 +142,6 @@ struct dpu_hw_ctl_ops {
>  		u32 *flushbits,
>  		enum dpu_intf blk);
>  
> -	int (*get_bitmask_cdm)(struct dpu_hw_ctl *ctx,
> -		u32 *flushbits,
> -		enum dpu_cdm blk);
> -
>  	/**
>  	 * Set all blend stages to disabled
>  	 * @ctx       : ctl path ctx pointer
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.c
> index db2798e..b878125 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.c
> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.c
> @@ -98,23 +98,6 @@ static void dpu_hw_setup_split_pipe(struct dpu_hw_mdp *mdp,
>  	DPU_REG_WRITE(c, SPLIT_DISPLAY_EN, cfg->en & 0x1);
>  }
>  
> -static void dpu_hw_setup_cdm_output(struct dpu_hw_mdp *mdp,
> -		struct cdm_output_cfg *cfg)
> -{
> -	struct dpu_hw_blk_reg_map *c;
> -	u32 out_ctl = 0;
> -
> -	if (!mdp || !cfg)
> -		return;
> -
> -	c = &mdp->hw;
> -
> -	if (cfg->intf_en)
> -		out_ctl |= BIT(19);
> -
> -	DPU_REG_WRITE(c, MDP_OUT_CTL_0, out_ctl);
> -}
> -
>  static bool dpu_hw_setup_clk_force_ctrl(struct dpu_hw_mdp *mdp,
>  		enum dpu_clk_ctrl_type clk_ctrl, bool enable)
>  {
> @@ -307,7 +290,6 @@ static void _setup_mdp_ops(struct dpu_hw_mdp_ops *ops,
>  		unsigned long cap)
>  {
>  	ops->setup_split_pipe = dpu_hw_setup_split_pipe;
> -	ops->setup_cdm_output = dpu_hw_setup_cdm_output;
>  	ops->setup_clk_force_ctrl = dpu_hw_setup_clk_force_ctrl;
>  	ops->get_danger_status = dpu_hw_get_danger_status;
>  	ops->setup_vsync_source = dpu_hw_setup_vsync_source;
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.h b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.h
> index 899925a..192e338 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.h
> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.h
> @@ -52,14 +52,6 @@ struct split_pipe_cfg {
>  };
>  
>  /**
> - * struct cdm_output_cfg: output configuration for cdm
> - * @intf_en   : enable/disable interface output
> - */
> -struct cdm_output_cfg {
> -	bool intf_en;
> -};
> -
> -/**
>   * struct dpu_danger_safe_status: danger and safe status signals
>   * @mdp: top level status
>   * @sspp: source pipe status
> @@ -89,7 +81,6 @@ struct dpu_vsync_source_cfg {
>   * Assumption is these functions will be called after clocks are enabled.
>   * @setup_split_pipe : Programs the pipe control registers
>   * @setup_pp_split : Programs the pp split control registers
> - * @setup_cdm_output : programs cdm control
>   * @setup_traffic_shaper : programs traffic shaper control
>   */
>  struct dpu_hw_mdp_ops {
> @@ -102,14 +93,6 @@ struct dpu_hw_mdp_ops {
>  			struct split_pipe_cfg *p);
>  
>  	/**
> -	 * setup_cdm_output() : Setup selection control of the cdm data path
> -	 * @mdp  : mdp top context driver
> -	 * @cfg  : cdm output configuration
> -	 */
> -	void (*setup_cdm_output)(struct dpu_hw_mdp *mdp,
> -			struct cdm_output_cfg *cfg);
> -
> -	/**
>  	 * setup_traffic_shaper() : Setup traffic shaper control
>  	 * @mdp  : mdp top context driver
>  	 * @cfg  : traffic shaper configuration
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_rm.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_rm.c
> index 388ae65..e08b3bd 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_rm.c
> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_rm.c
> @@ -16,7 +16,6 @@
>  #include "dpu_kms.h"
>  #include "dpu_hw_lm.h"
>  #include "dpu_hw_ctl.h"
> -#include "dpu_hw_cdm.h"
>  #include "dpu_hw_pingpong.h"
>  #include "dpu_hw_intf.h"
>  #include "dpu_encoder.h"
> @@ -214,9 +213,6 @@ static void _dpu_rm_hw_destroy(enum dpu_hw_blk_type type, void *hw)
>  	case DPU_HW_BLK_CTL:
>  		dpu_hw_ctl_destroy(hw);
>  		break;
> -	case DPU_HW_BLK_CDM:
> -		dpu_hw_cdm_destroy(hw);
> -		break;
>  	case DPU_HW_BLK_PINGPONG:
>  		dpu_hw_pingpong_destroy(hw);
>  		break;
> @@ -290,9 +286,6 @@ static int _dpu_rm_hw_blk_create(
>  	case DPU_HW_BLK_CTL:
>  		hw = dpu_hw_ctl_init(id, mmio, cat);
>  		break;
> -	case DPU_HW_BLK_CDM:
> -		hw = dpu_hw_cdm_init(id, mmio, cat, hw_mdp);
> -		break;
>  	case DPU_HW_BLK_PINGPONG:
>  		hw = dpu_hw_pingpong_init(id, mmio, cat);
>  		break;
> @@ -423,15 +416,6 @@ int dpu_rm_init(struct dpu_rm *rm,
>  		}
>  	}
>  
> -	for (i = 0; i < cat->cdm_count; i++) {
> -		rc = _dpu_rm_hw_blk_create(rm, cat, mmio, DPU_HW_BLK_CDM,
> -				cat->cdm[i].id, &cat->cdm[i]);
> -		if (rc) {
> -			DPU_ERROR("failed: cdm hw not available\n");
> -			goto fail;
> -		}
> -	}
> -
>  	return 0;
>  
>  fail:
> @@ -628,55 +612,11 @@ static int _dpu_rm_reserve_ctls(
>  	return 0;
>  }
>  
> -static int _dpu_rm_reserve_cdm(
> -		struct dpu_rm *rm,
> -		struct dpu_rm_rsvp *rsvp,
> -		uint32_t id,
> -		enum dpu_hw_blk_type type)
> -{
> -	struct dpu_rm_hw_iter iter;
> -
> -	DRM_DEBUG_KMS("type %d id %d\n", type, id);
> -
> -	dpu_rm_init_hw_iter(&iter, 0, DPU_HW_BLK_CDM);
> -	while (_dpu_rm_get_hw_locked(rm, &iter)) {
> -		const struct dpu_hw_cdm *cdm = to_dpu_hw_cdm(iter.blk->hw);
> -		const struct dpu_cdm_cfg *caps = cdm->caps;
> -		bool match = false;
> -
> -		if (RESERVED_BY_OTHER(iter.blk, rsvp))
> -			continue;
> -
> -		if (type == DPU_HW_BLK_INTF && id != INTF_MAX)
> -			match = test_bit(id, &caps->intf_connect);
> -
> -		DRM_DEBUG_KMS("iter: type:%d id:%d enc:%d cdm:%lu match:%d\n",
> -			      iter.blk->type, iter.blk->id, rsvp->enc_id,
> -			      caps->intf_connect, match);
> -
> -		if (!match)
> -			continue;
> -
> -		trace_dpu_rm_reserve_cdm(iter.blk->id, iter.blk->type,
> -					 rsvp->enc_id);
> -		iter.blk->rsvp_nxt = rsvp;
> -		break;
> -	}
> -
> -	if (!iter.hw) {
> -		DPU_ERROR("couldn't reserve cdm for type %d id %d\n", type, id);
> -		return -ENAVAIL;
> -	}
> -
> -	return 0;
> -}
> -
>  static int _dpu_rm_reserve_intf(
>  		struct dpu_rm *rm,
>  		struct dpu_rm_rsvp *rsvp,
>  		uint32_t id,
> -		enum dpu_hw_blk_type type,
> -		bool needs_cdm)
> +		enum dpu_hw_blk_type type)
>  {
>  	struct dpu_rm_hw_iter iter;
>  	int ret = 0;
> @@ -704,9 +644,6 @@ static int _dpu_rm_reserve_intf(
>  		return -EINVAL;
>  	}
>  
> -	if (needs_cdm)
> -		ret = _dpu_rm_reserve_cdm(rm, rsvp, id, type);
> -
>  	return ret;
>  }
>  
> @@ -723,7 +660,7 @@ static int _dpu_rm_reserve_intf_related_hw(
>  			continue;
>  		id = i + INTF_0;
>  		ret = _dpu_rm_reserve_intf(rm, rsvp, id,
> -				DPU_HW_BLK_INTF, hw_res->needs_cdm);
> +				DPU_HW_BLK_INTF);
>  		if (ret)
>  			return ret;
>  	}
> @@ -769,7 +706,6 @@ static int _dpu_rm_make_next_rsvp(
>  		return ret;
>  	}
>  
> -	/* Assign INTFs and blks whose usage is tied to them: CTL & CDM */
>  	ret = _dpu_rm_reserve_intf_related_hw(rm, rsvp, &reqs->hw_res);
>  	if (ret)
>  		return ret;
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_trace.h b/drivers/gpu/drm/msm/disp/dpu1/dpu_trace.h
> index ae0ca50..0be51db 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_trace.h
> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_trace.h
> @@ -868,10 +868,6 @@
>  	TP_printk("id:%d type:%d enc_id:%u", __entry->id, __entry->type,
>  		  __entry->enc_id)
>  );
> -DEFINE_EVENT(dpu_rm_iter_template, dpu_rm_reserve_cdm,
> -	TP_PROTO(uint32_t id, enum dpu_hw_blk_type type, uint32_t enc_id),
> -	TP_ARGS(id, type, enc_id)
> -);
>  DEFINE_EVENT(dpu_rm_iter_template, dpu_rm_reserve_intf,
>  	TP_PROTO(uint32_t id, enum dpu_hw_blk_type type, uint32_t enc_id),
>  	TP_ARGS(id, type, enc_id)
> -- 
> The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
> a Linux Foundation Collaborative Project
> 

-- 
Sean Paul, Software Engineer, Google / Chromium OS


More information about the Freedreno mailing list