[Freedreno] [PATCH v1 7/8] drm/msm/dpu: simplify DPU's regset32 code
Abhinav Kumar
quic_abhinavk at quicinc.com
Thu Dec 9 22:02:12 UTC 2021
On 12/1/2021 2:26 PM, Dmitry Baryshkov wrote:
> Squash dpu_debugfs_setup_regset32() into dpu_debugfs_create_regset32().
> it makes little sense to have separate function to just setup the
> structure.
>
> Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov at linaro.org>
Reviewed-by: Abhinav Kumar <quic_abhinavk at quicinc.com>
> ---
> drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c | 32 ++++++++++++-------
> drivers/gpu/drm/msm/disp/dpu1/dpu_kms.h | 38 +++--------------------
> drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c | 27 +++++-----------
> 3 files changed, 33 insertions(+), 64 deletions(-)
>
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
> index 4c04982c71b2..7e7a619769a8 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
> @@ -182,6 +182,15 @@ static void dpu_debugfs_danger_init(struct dpu_kms *dpu_kms,
>
> }
>
> +/*
> + * Companion structure for dpu_debugfs_create_regset32.
> + */
> +struct dpu_debugfs_regset32 {
> + uint32_t offset;
> + uint32_t blk_len;
> + struct dpu_kms *dpu_kms;
> +};
> +
> static int _dpu_debugfs_show_regset32(struct seq_file *s, void *data)
> {
> struct dpu_debugfs_regset32 *regset = s->private;
> @@ -229,24 +238,23 @@ static const struct file_operations dpu_fops_regset32 = {
> .release = single_release,
> };
>
> -void dpu_debugfs_setup_regset32(struct dpu_debugfs_regset32 *regset,
> +void dpu_debugfs_create_regset32(const char *name, umode_t mode,
> + void *parent,
> uint32_t offset, uint32_t length, struct dpu_kms *dpu_kms)
> {
> - if (regset) {
> - regset->offset = offset;
> - regset->blk_len = length;
> - regset->dpu_kms = dpu_kms;
> - }
> -}
> + struct dpu_debugfs_regset32 *regset;
>
> -void dpu_debugfs_create_regset32(const char *name, umode_t mode,
> - void *parent, struct dpu_debugfs_regset32 *regset)
> -{
> - if (!name || !regset || !regset->dpu_kms || !regset->blk_len)
> + if (WARN_ON(!name || !dpu_kms || !length))
> + return;
> +
> + regset = devm_kzalloc(&dpu_kms->pdev->dev, sizeof(*regset), GFP_KERNEL);
> + if (!regset)
> return;
>
> /* make sure offset is a multiple of 4 */
> - regset->offset = round_down(regset->offset, 4);
> + regset->offset = round_down(offset, 4);
> + regset->blk_len = length;
> + regset->dpu_kms = dpu_kms;
>
> debugfs_create_file(name, mode, parent, regset, &dpu_fops_regset32);
> }
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.h b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.h
> index 775bcbda860f..b53cdeb1b5c4 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.h
> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.h
> @@ -160,33 +160,9 @@ struct dpu_global_state
> *
> * Documentation/filesystems/debugfs.rst
> *
> - * @dpu_debugfs_setup_regset32: Initialize data for dpu_debugfs_create_regset32
> * @dpu_debugfs_create_regset32: Create 32-bit register dump file
> - * @dpu_debugfs_get_root: Get root dentry for DPU_KMS's debugfs node
> */
>
> -/**
> - * Companion structure for dpu_debugfs_create_regset32. Do not initialize the
> - * members of this structure explicitly; use dpu_debugfs_setup_regset32 instead.
> - */
> -struct dpu_debugfs_regset32 {
> - uint32_t offset;
> - uint32_t blk_len;
> - struct dpu_kms *dpu_kms;
> -};
> -
> -/**
> - * dpu_debugfs_setup_regset32 - Initialize register block definition for debugfs
> - * This function is meant to initialize dpu_debugfs_regset32 structures for use
> - * with dpu_debugfs_create_regset32.
> - * @regset: opaque register definition structure
> - * @offset: sub-block offset
> - * @length: sub-block length, in bytes
> - * @dpu_kms: pointer to dpu kms structure
> - */
> -void dpu_debugfs_setup_regset32(struct dpu_debugfs_regset32 *regset,
> - uint32_t offset, uint32_t length, struct dpu_kms *dpu_kms);
> -
> /**
> * dpu_debugfs_create_regset32 - Create register read back file for debugfs
> *
> @@ -195,20 +171,16 @@ void dpu_debugfs_setup_regset32(struct dpu_debugfs_regset32 *regset,
> * names/offsets do not need to be provided. The 'read' function simply outputs
> * sequential register values over a specified range.
> *
> - * Similar to the related debugfs_create_regset32 API, the structure pointed to
> - * by regset needs to persist for the lifetime of the created file. The calling
> - * code is responsible for initialization/management of this structure.
> - *
> - * The structure pointed to by regset is meant to be opaque. Please use
> - * dpu_debugfs_setup_regset32 to initialize it.
> - *
> * @name: File name within debugfs
> * @mode: File mode within debugfs
> * @parent: Parent directory entry within debugfs, can be NULL
> - * @regset: Pointer to persistent register block definition
> + * @offset: sub-block offset
> + * @length: sub-block length, in bytes
> + * @dpu_kms: pointer to dpu kms structure
> */
> void dpu_debugfs_create_regset32(const char *name, umode_t mode,
> - void *parent, struct dpu_debugfs_regset32 *regset);
> + void *parent,
> + uint32_t offset, uint32_t length, struct dpu_kms *dpu_kms);
>
> /**
> * dpu_debugfs_get_root - Return root directory entry for KMS's debugfs
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c
> index d3176f58708e..ef66af696a40 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c
> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c
> @@ -108,11 +108,6 @@ struct dpu_plane {
> bool is_virtual;
> struct list_head mplane_list;
> struct dpu_mdss_cfg *catalog;
> -
> - /* debugfs related stuff */
> - struct dpu_debugfs_regset32 debugfs_src;
> - struct dpu_debugfs_regset32 debugfs_scaler;
> - struct dpu_debugfs_regset32 debugfs_csc;
> };
>
> static const uint64_t supported_format_modifiers[] = {
> @@ -1379,35 +1374,29 @@ static int _dpu_plane_init_debugfs(struct drm_plane *plane)
> debugfs_root, (unsigned long *)&pdpu->pipe_hw->cap->features);
>
> /* add register dump support */
> - dpu_debugfs_setup_regset32(&pdpu->debugfs_src,
> + dpu_debugfs_create_regset32("src_blk", 0400,
> + debugfs_root,
> sblk->src_blk.base + cfg->base,
> sblk->src_blk.len,
> kms);
> - dpu_debugfs_create_regset32("src_blk", 0400,
> - debugfs_root, &pdpu->debugfs_src);
>
> if (cfg->features & BIT(DPU_SSPP_SCALER_QSEED3) ||
> cfg->features & BIT(DPU_SSPP_SCALER_QSEED3LITE) ||
> cfg->features & BIT(DPU_SSPP_SCALER_QSEED2) ||
> - cfg->features & BIT(DPU_SSPP_SCALER_QSEED4)) {
> - dpu_debugfs_setup_regset32(&pdpu->debugfs_scaler,
> + cfg->features & BIT(DPU_SSPP_SCALER_QSEED4))
> + dpu_debugfs_create_regset32("scaler_blk", 0400,
> + debugfs_root,
> sblk->scaler_blk.base + cfg->base,
> sblk->scaler_blk.len,
> kms);
> - dpu_debugfs_create_regset32("scaler_blk", 0400,
> - debugfs_root,
> - &pdpu->debugfs_scaler);
> - }
>
> if (cfg->features & BIT(DPU_SSPP_CSC) ||
> - cfg->features & BIT(DPU_SSPP_CSC_10BIT)) {
> - dpu_debugfs_setup_regset32(&pdpu->debugfs_csc,
> + cfg->features & BIT(DPU_SSPP_CSC_10BIT))
> + dpu_debugfs_create_regset32("csc_blk", 0400,
> + debugfs_root,
> sblk->csc_blk.base + cfg->base,
> sblk->csc_blk.len,
> kms);
> - dpu_debugfs_create_regset32("csc_blk", 0400,
> - debugfs_root, &pdpu->debugfs_csc);
> - }
>
> debugfs_create_u32("xin_id",
> 0400,
>
More information about the Freedreno
mailing list