[PATCH 09/11] drm/msm/dpu: Cleanup the debugfs functions

Sean Paul sean at poorly.run
Tue Nov 6 15:05:40 UTC 2018


On Mon, Nov 05, 2018 at 04:31:01PM -0700, Jordan Crouse wrote:
> Do some debugfs cleanups from across the DPU driver. The DRM
> destroy functions will do a recursive delete on the entire
> debugfs node so there is no need to store dentry pointers for
> the debugfs files that are persistent for the life of the
> driver. This also means that the destroy functions can go
> away too.
> 
> Also, use standard API functions where applicable instead of
> using hand written code.

There's probably 2 patches in this one, but since it's debug code it's probably
not worth respinning.

Reviewed-by: Sean Paul <sean at poorly.run>


> 
> v2: Add more code; most of the dpu debugfs files should be
> addressed now.
> 
> Signed-off-by: Jordan Crouse <jcrouse at codeaurora.org>
> ---
>  drivers/gpu/drm/msm/disp/dpu1/dpu_core_irq.c  |  30 +----
>  drivers/gpu/drm/msm/disp/dpu1/dpu_core_irq.h  |   9 +-
>  drivers/gpu/drm/msm/disp/dpu1/dpu_core_perf.c | 105 +++++-------------
>  drivers/gpu/drm/msm/disp/dpu1/dpu_core_perf.h |   7 +-
>  drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c      |  30 +----
>  drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c   |  31 +-----
>  drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c       | 104 ++++-------------
>  drivers/gpu/drm/msm/disp/dpu1/dpu_kms.h       |   6 -
>  drivers/gpu/drm/msm/disp/dpu1/dpu_mdss.c      |   3 +-
>  drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c     |  90 +++------------
>  drivers/gpu/drm/msm/disp/dpu1/dpu_vbif.c      |  24 ++--
>  drivers/gpu/drm/msm/disp/dpu1/dpu_vbif.h      |  15 +--
>  12 files changed, 93 insertions(+), 361 deletions(-)
> 
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_core_irq.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_core_irq.c
> index f66070cb2f42..f188c78dd736 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_core_irq.c
> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_core_irq.c
> @@ -307,10 +307,8 @@ static int dpu_debugfs_core_irq_show(struct seq_file *s, void *v)
>  	unsigned long irq_flags;
>  	int i, irq_count, enable_count, cb_count;
>  
> -	if (!irq_obj || !irq_obj->enable_counts || !irq_obj->irq_cb_tbl) {
> -		DPU_ERROR("invalid parameters\n");
> +	if (WARN_ON(!irq_obj->enable_counts || !irq_obj->irq_cb_tbl))
>  		return 0;
> -	}
>  
>  	for (i = 0; i < irq_obj->total_irqs; i++) {
>  		spin_lock_irqsave(&irq_obj->cb_lock, irq_flags);
> @@ -331,31 +329,11 @@ static int dpu_debugfs_core_irq_show(struct seq_file *s, void *v)
>  
>  DEFINE_SHOW_ATTRIBUTE(dpu_debugfs_core_irq);
>  
> -int dpu_debugfs_core_irq_init(struct dpu_kms *dpu_kms,
> -		struct dentry *parent)
> -{
> -	dpu_kms->irq_obj.debugfs_file = debugfs_create_file("core_irq", 0600,
> -			parent, &dpu_kms->irq_obj,
> -			&dpu_debugfs_core_irq_fops);
> -
> -	return 0;
> -}
> -
> -void dpu_debugfs_core_irq_destroy(struct dpu_kms *dpu_kms)
> -{
> -	debugfs_remove(dpu_kms->irq_obj.debugfs_file);
> -	dpu_kms->irq_obj.debugfs_file = NULL;
> -}
> -
> -#else
> -int dpu_debugfs_core_irq_init(struct dpu_kms *dpu_kms,
> +void dpu_debugfs_core_irq_init(struct dpu_kms *dpu_kms,
>  		struct dentry *parent)
>  {
> -	return 0;
> -}
> -
> -void dpu_debugfs_core_irq_destroy(struct dpu_kms *dpu_kms)
> -{
> +	debugfs_create_file("core_irq", 0600, parent, &dpu_kms->irq_obj,
> +		&dpu_debugfs_core_irq_fops);
>  }
>  #endif
>  
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_core_irq.h b/drivers/gpu/drm/msm/disp/dpu1/dpu_core_irq.h
> index 884f77fa3eb6..e9015a2b23fe 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_core_irq.h
> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_core_irq.h
> @@ -132,15 +132,8 @@ int dpu_core_irq_unregister_callback(
>   * dpu_debugfs_core_irq_init - register core irq debugfs
>   * @dpu_kms: pointer to kms
>   * @parent: debugfs directory root
> - * @Return: 0 on success
>   */
> -int dpu_debugfs_core_irq_init(struct dpu_kms *dpu_kms,
> +void dpu_debugfs_core_irq_init(struct dpu_kms *dpu_kms,
>  		struct dentry *parent);
>  
> -/**
> - * dpu_debugfs_core_irq_destroy - deregister core irq debugfs
> - * @dpu_kms: pointer to kms
> - */
> -void dpu_debugfs_core_irq_destroy(struct dpu_kms *dpu_kms);
> -
>  #endif /* __DPU_CORE_IRQ_H__ */
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_core_perf.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_core_perf.c
> index e68ccb7a898a..8a7653a2fc7a 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_core_perf.c
> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_core_perf.c
> @@ -24,8 +24,6 @@
>  #include "dpu_crtc.h"
>  #include "dpu_core_perf.h"
>  
> -#define DPU_PERF_MODE_STRING_SIZE	128
> -
>  /**
>   * enum dpu_perf_mode - performance tuning mode
>   * @DPU_PERF_MODE_NORMAL: performance controlled by user mode client
> @@ -451,24 +449,14 @@ static ssize_t _dpu_core_perf_mode_write(struct file *file,
>  	struct dpu_core_perf *perf = file->private_data;
>  	struct dpu_perf_cfg *cfg = &perf->catalog->perf;
>  	u32 perf_mode = 0;
> -	char buf[10];
> -
> -	if (!perf)
> -		return -ENODEV;
> -
> -	if (count >= sizeof(buf))
> -		return -EFAULT;
> -
> -	if (copy_from_user(buf, user_buf, count))
> -		return -EFAULT;
> -
> -	buf[count] = 0;	/* end of string */
> +	int ret;
>  
> -	if (kstrtouint(buf, 0, &perf_mode))
> -		return -EFAULT;
> +	ret = kstrtouint_from_user(user_buf, count, 0, &perf_mode);
> +	if (ret)
> +		return ret;
>  
>  	if (perf_mode >= DPU_PERF_MODE_MAX)
> -		return -EFAULT;
> +		return -EINVAL;
>  
>  	if (perf_mode == DPU_PERF_MODE_FIXED) {
>  		DRM_INFO("fix performance mode\n");
> @@ -493,29 +481,16 @@ static ssize_t _dpu_core_perf_mode_read(struct file *file,
>  			char __user *buff, size_t count, loff_t *ppos)
>  {
>  	struct dpu_core_perf *perf = file->private_data;
> -	int len = 0;
> -	char buf[DPU_PERF_MODE_STRING_SIZE] = {'\0'};
> +	int len;
> +	char buf[128];
>  
> -	if (!perf)
> -		return -ENODEV;
> -
> -	if (*ppos)
> -		return 0;	/* the end */
> -
> -	len = snprintf(buf, sizeof(buf),
> +	len = scnprintf(buf, sizeof(buf),
>  			"mode %d min_mdp_clk %llu min_bus_vote %llu\n",
>  			perf->perf_tune.mode,
>  			perf->perf_tune.min_core_clk,
>  			perf->perf_tune.min_bus_vote);
> -	if (len < 0 || len >= sizeof(buf))
> -		return 0;
> -
> -	if ((count < sizeof(buf)) || copy_to_user(buff, buf, len))
> -		return -EFAULT;
>  
> -	*ppos += len;   /* increase offset */
> -
> -	return len;
> +	return simple_read_from_buffer(buff, count, ppos, buf, len);
>  }
>  
>  static const struct file_operations dpu_core_perf_mode_fops = {
> @@ -524,70 +499,43 @@ static const struct file_operations dpu_core_perf_mode_fops = {
>  	.write = _dpu_core_perf_mode_write,
>  };
>  
> -static void dpu_core_perf_debugfs_destroy(struct dpu_core_perf *perf)
> -{
> -	debugfs_remove_recursive(perf->debugfs_root);
> -	perf->debugfs_root = NULL;
> -}
> -
> -int dpu_core_perf_debugfs_init(struct dpu_core_perf *perf,
> -		struct dentry *parent)
> +int dpu_core_perf_debugfs_init(struct dpu_kms *dpu_kms, struct dentry *parent)
>  {
> +	struct dpu_core_perf *perf = &dpu_kms->perf;
>  	struct dpu_mdss_cfg *catalog = perf->catalog;
> -	struct msm_drm_private *priv;
> -	struct dpu_kms *dpu_kms;
> -
> -	priv = perf->dev->dev_private;
> -	if (!priv || !priv->kms) {
> -		DPU_ERROR("invalid KMS reference\n");
> -		return -EINVAL;
> -	}
> -
> -	dpu_kms = to_dpu_kms(priv->kms);
> +	struct dentry *entry;
>  
> -	perf->debugfs_root = debugfs_create_dir("core_perf", parent);
> -	if (!perf->debugfs_root) {
> -		DPU_ERROR("failed to create core perf debugfs\n");
> +	entry = debugfs_create_dir("core_perf", parent);
> +	if (IS_ERR_OR_NULL(entry))
>  		return -EINVAL;
> -	}
>  
> -	debugfs_create_u64("max_core_clk_rate", 0600, perf->debugfs_root,
> +	debugfs_create_u64("max_core_clk_rate", 0600, entry,
>  			&perf->max_core_clk_rate);
> -	debugfs_create_u64("core_clk_rate", 0600, perf->debugfs_root,
> +	debugfs_create_u64("core_clk_rate", 0600, entry,
>  			&perf->core_clk_rate);
> -	debugfs_create_u32("enable_bw_release", 0600, perf->debugfs_root,
> +	debugfs_create_u32("enable_bw_release", 0600, entry,
>  			(u32 *)&perf->enable_bw_release);
> -	debugfs_create_u32("threshold_low", 0600, perf->debugfs_root,
> +	debugfs_create_u32("threshold_low", 0600, entry,
>  			(u32 *)&catalog->perf.max_bw_low);
> -	debugfs_create_u32("threshold_high", 0600, perf->debugfs_root,
> +	debugfs_create_u32("threshold_high", 0600, entry,
>  			(u32 *)&catalog->perf.max_bw_high);
> -	debugfs_create_u32("min_core_ib", 0600, perf->debugfs_root,
> +	debugfs_create_u32("min_core_ib", 0600, entry,
>  			(u32 *)&catalog->perf.min_core_ib);
> -	debugfs_create_u32("min_llcc_ib", 0600, perf->debugfs_root,
> +	debugfs_create_u32("min_llcc_ib", 0600, entry,
>  			(u32 *)&catalog->perf.min_llcc_ib);
> -	debugfs_create_u32("min_dram_ib", 0600, perf->debugfs_root,
> +	debugfs_create_u32("min_dram_ib", 0600, entry,
>  			(u32 *)&catalog->perf.min_dram_ib);
> -	debugfs_create_file("perf_mode", 0600, perf->debugfs_root,
> +	debugfs_create_file("perf_mode", 0600, entry,
>  			(u32 *)perf, &dpu_core_perf_mode_fops);
> -	debugfs_create_u64("fix_core_clk_rate", 0600, perf->debugfs_root,
> +	debugfs_create_u64("fix_core_clk_rate", 0600, entry,
>  			&perf->fix_core_clk_rate);
> -	debugfs_create_u64("fix_core_ib_vote", 0600, perf->debugfs_root,
> +	debugfs_create_u64("fix_core_ib_vote", 0600, entry,
>  			&perf->fix_core_ib_vote);
> -	debugfs_create_u64("fix_core_ab_vote", 0600, perf->debugfs_root,
> +	debugfs_create_u64("fix_core_ab_vote", 0600, entry,
>  			&perf->fix_core_ab_vote);
>  
>  	return 0;
>  }
> -#else
> -static void dpu_core_perf_debugfs_destroy(struct dpu_core_perf *perf)
> -{
> -}
> -
> -int dpu_core_perf_debugfs_init(struct dpu_core_perf *perf,
> -		struct dentry *parent)
> -{
> -	return 0;
> -}
>  #endif
>  
>  void dpu_core_perf_destroy(struct dpu_core_perf *perf)
> @@ -597,7 +545,6 @@ void dpu_core_perf_destroy(struct dpu_core_perf *perf)
>  		return;
>  	}
>  
> -	dpu_core_perf_debugfs_destroy(perf);
>  	perf->max_core_clk_rate = 0;
>  	perf->core_clk = NULL;
>  	perf->phandle = NULL;
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_core_perf.h b/drivers/gpu/drm/msm/disp/dpu1/dpu_core_perf.h
> index fbcbe0c7527a..668cac71736b 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_core_perf.h
> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_core_perf.h
> @@ -122,12 +122,13 @@ int dpu_core_perf_init(struct dpu_core_perf *perf,
>  		struct dpu_power_handle *phandle,
>  		struct dss_clk *core_clk);
>  
> +struct dpu_kms;
> +
>  /**
>   * dpu_core_perf_debugfs_init - initialize debugfs for core performance context
> - * @perf: Pointer to core performance context
> + * @dpu_kms: Pointer to the dpu_kms struct
>   * @debugfs_parent: Pointer to parent debugfs
>   */
> -int dpu_core_perf_debugfs_init(struct dpu_core_perf *perf,
> -		struct dentry *parent);
> +int dpu_core_perf_debugfs_init(struct dpu_kms *dpu_kms, struct dentry *parent);
>  
>  #endif /* _DPU_CORE_PERF_H_ */
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c
> index 00b18bee287a..edcc4580d41b 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c
> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c
> @@ -1246,9 +1246,6 @@ static int dpu_crtc_debugfs_status_show(struct seq_file *s, void *data)
>  
>  	int i, out_width;
>  
> -	if (!s || !s->private)
> -		return -EINVAL;
> -
>  	dpu_crtc = s->private;
>  	crtc = &dpu_crtc->base;
>  
> @@ -1378,14 +1375,7 @@ DEFINE_SHOW_ATTRIBUTE(dpu_crtc_debugfs_state);
>  
>  static int _dpu_crtc_init_debugfs(struct drm_crtc *crtc)
>  {
> -	struct dpu_crtc *dpu_crtc;
> -	struct dpu_kms *dpu_kms;
> -
> -	if (!crtc)
> -		return -EINVAL;
> -	dpu_crtc = to_dpu_crtc(crtc);
> -
> -	dpu_kms = _dpu_crtc_get_kms(crtc);
> +	struct dpu_crtc *dpu_crtc = to_dpu_crtc(crtc);
>  
>  	dpu_crtc->debugfs_root = debugfs_create_dir(dpu_crtc->name,
>  			crtc->dev->primary->debugfs_root);
> @@ -1403,25 +1393,11 @@ static int _dpu_crtc_init_debugfs(struct drm_crtc *crtc)
>  
>  	return 0;
>  }
> -
> -static void _dpu_crtc_destroy_debugfs(struct drm_crtc *crtc)
> -{
> -	struct dpu_crtc *dpu_crtc;
> -
> -	if (!crtc)
> -		return;
> -	dpu_crtc = to_dpu_crtc(crtc);
> -	debugfs_remove_recursive(dpu_crtc->debugfs_root);
> -}
>  #else
>  static int _dpu_crtc_init_debugfs(struct drm_crtc *crtc)
>  {
>  	return 0;
>  }
> -
> -static void _dpu_crtc_destroy_debugfs(struct drm_crtc *crtc)
> -{
> -}
>  #endif /* CONFIG_DEBUG_FS */
>  
>  static int dpu_crtc_late_register(struct drm_crtc *crtc)
> @@ -1431,7 +1407,9 @@ static int dpu_crtc_late_register(struct drm_crtc *crtc)
>  
>  static void dpu_crtc_early_unregister(struct drm_crtc *crtc)
>  {
> -	_dpu_crtc_destroy_debugfs(crtc);
> +	struct dpu_crtc *dpu_crtc = to_dpu_crtc(crtc);
> +
> +	debugfs_remove_recursive(dpu_crtc->debugfs_root);
>  }
>  
>  static const struct drm_crtc_funcs dpu_crtc_funcs = {
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c
> index 5559e5d40142..2811860f2688 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c
> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c
> @@ -1838,14 +1838,9 @@ void dpu_encoder_prepare_commit(struct drm_encoder *drm_enc)
>  #ifdef CONFIG_DEBUG_FS
>  static int dpu_encoder_status_show(struct seq_file *s, void *data)
>  {
> -	struct dpu_encoder_virt *dpu_enc;
> +	struct dpu_encoder_virt *dpu_enc = s->private;
>  	int i;
>  
> -	if (!s || !s->private)
> -		return -EINVAL;
> -
> -	dpu_enc = s->private;
> -
>  	mutex_lock(&dpu_enc->enc_lock);
>  	for (i = 0; i < dpu_enc->num_phys_encs; i++) {
>  		struct dpu_encoder_phys *phys = dpu_enc->phys_encs[i];
> @@ -1879,18 +1874,17 @@ DEFINE_SHOW_ATTRIBUTE(dpu_encoder_status);
>  
>  static int _dpu_encoder_init_debugfs(struct drm_encoder *drm_enc)
>  {
> -	struct dpu_encoder_virt *dpu_enc;
> +	struct dpu_encoder_virt *dpu_enc = to_dpu_encoder_virt(drm_enc);
>  	struct msm_drm_private *priv;
>  	struct dpu_kms *dpu_kms;
>  	int i;
>  	char name[DPU_NAME_SIZE];
>  
> -	if (!drm_enc || !drm_enc->dev || !drm_enc->dev->dev_private) {
> +	if (!drm_enc->dev || !drm_enc->dev->dev_private) {
>  		DPU_ERROR("invalid encoder or kms\n");
>  		return -EINVAL;
>  	}
>  
> -	dpu_enc = to_dpu_encoder_virt(drm_enc);
>  	priv = drm_enc->dev->dev_private;
>  	dpu_kms = to_dpu_kms(priv->kms);
>  
> @@ -1915,26 +1909,11 @@ static int _dpu_encoder_init_debugfs(struct drm_encoder *drm_enc)
>  
>  	return 0;
>  }
> -
> -static void _dpu_encoder_destroy_debugfs(struct drm_encoder *drm_enc)
> -{
> -	struct dpu_encoder_virt *dpu_enc;
> -
> -	if (!drm_enc)
> -		return;
> -
> -	dpu_enc = to_dpu_encoder_virt(drm_enc);
> -	debugfs_remove_recursive(dpu_enc->debugfs_root);
> -}
>  #else
>  static int _dpu_encoder_init_debugfs(struct drm_encoder *drm_enc)
>  {
>  	return 0;
>  }
> -
> -static void _dpu_encoder_destroy_debugfs(struct drm_encoder *drm_enc)
> -{
> -}
>  #endif
>  
>  static int dpu_encoder_late_register(struct drm_encoder *encoder)
> @@ -1944,7 +1923,9 @@ static int dpu_encoder_late_register(struct drm_encoder *encoder)
>  
>  static void dpu_encoder_early_unregister(struct drm_encoder *encoder)
>  {
> -	_dpu_encoder_destroy_debugfs(encoder);
> +	struct dpu_encoder_virt *dpu_enc = to_dpu_encoder_virt(encoder);
> +
> +	debugfs_remove_recursive(dpu_enc->debugfs_root);
>  }
>  
>  static int dpu_encoder_virt_add_phys_encs(
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
> index 2a91881048c8..3d0c93c49764 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
> @@ -81,7 +81,7 @@ static int _dpu_danger_signal_status(struct seq_file *s,
>  	struct dpu_danger_safe_status status;
>  	int i;
>  
> -	if (!kms || !kms->dev || !kms->dev->dev_private || !kms->hw_mdp) {
> +	if (!kms->dev || !kms->dev->dev_private || !kms->hw_mdp) {
>  		DPU_ERROR("invalid arg(s)\n");
>  		return 0;
>  	}
> @@ -125,46 +125,29 @@ static int dpu_debugfs_safe_stats_show(struct seq_file *s, void *v)
>  }
>  DEFINE_SHOW_ATTRIBUTE(dpu_debugfs_safe_stats);
>  
> -static void dpu_debugfs_danger_destroy(struct dpu_kms *dpu_kms)
> -{
> -	debugfs_remove_recursive(dpu_kms->debugfs_danger);
> -	dpu_kms->debugfs_danger = NULL;
> -}
> -
> -static int dpu_debugfs_danger_init(struct dpu_kms *dpu_kms,
> +static void dpu_debugfs_danger_init(struct dpu_kms *dpu_kms,
>  		struct dentry *parent)
>  {
> -	dpu_kms->debugfs_danger = debugfs_create_dir("danger",
> -			parent);
> -	if (!dpu_kms->debugfs_danger) {
> -		DPU_ERROR("failed to create danger debugfs\n");
> -		return -EINVAL;
> -	}
> +	struct dentry *entry = debugfs_create_dir("danger", parent);
> +	if (IS_ERR_OR_NULL(entry))
> +		return;
>  
> -	debugfs_create_file("danger_status", 0600, dpu_kms->debugfs_danger,
> +	debugfs_create_file("danger_status", 0600, entry,
>  			dpu_kms, &dpu_debugfs_danger_stats_fops);
> -	debugfs_create_file("safe_status", 0600, dpu_kms->debugfs_danger,
> +	debugfs_create_file("safe_status", 0600, entry,
>  			dpu_kms, &dpu_debugfs_safe_stats_fops);
> -
> -	return 0;
>  }
>  
>  static int dpu_debugfs_regset32_show(struct seq_file *s, void *data)
>  {
> -	struct dpu_debugfs_regset32 *regset;
> -	struct dpu_kms *dpu_kms;
> +	struct dpu_debugfs_regset32 *regset = s->private;
> +	struct dpu_kms *dpu_kms = regset->dpu_kms;
>  	struct drm_device *dev;
>  	struct msm_drm_private *priv;
>  	void __iomem *base;
>  	uint32_t i, addr;
>  
> -	if (!s || !s->private)
> -		return 0;
> -
> -	regset = s->private;
> -
> -	dpu_kms = regset->dpu_kms;
> -	if (!dpu_kms || !dpu_kms->mmio)
> +	if (!dpu_kms->mmio)
>  		return 0;
>  
>  	dev = dpu_kms->dev;
> @@ -226,51 +209,24 @@ void *dpu_debugfs_create_regset32(const char *name, umode_t mode,
>  
>  static int _dpu_debugfs_init(struct dpu_kms *dpu_kms)
>  {
> -	void *p;
> -	int rc;
> -
> -	p = dpu_hw_util_get_log_mask_ptr();
> +	void *p = dpu_hw_util_get_log_mask_ptr();
> +	struct dentry *entry;
>  
> -	if (!dpu_kms || !p)
> +	if (!p)
>  		return -EINVAL;
>  
> -	dpu_kms->debugfs_root = debugfs_create_dir("debug",
> -					   dpu_kms->dev->primary->debugfs_root);
> -	if (IS_ERR_OR_NULL(dpu_kms->debugfs_root)) {
> -		DRM_ERROR("debugfs create_dir failed %ld\n",
> -			  PTR_ERR(dpu_kms->debugfs_root));
> -		return PTR_ERR(dpu_kms->debugfs_root);
> -	}
> +	entry = debugfs_create_dir("debug", dpu_kms->dev->primary->debugfs_root);
> +	if (IS_ERR_OR_NULL(entry))
> +		return -ENODEV;
>  
>  	/* allow root to be NULL */
> -	debugfs_create_x32(DPU_DEBUGFS_HWMASKNAME, 0600, dpu_kms->debugfs_root, p);
> -
> -	(void) dpu_debugfs_danger_init(dpu_kms, dpu_kms->debugfs_root);
> -	(void) dpu_debugfs_vbif_init(dpu_kms, dpu_kms->debugfs_root);
> -	(void) dpu_debugfs_core_irq_init(dpu_kms, dpu_kms->debugfs_root);
> +	debugfs_create_x32(DPU_DEBUGFS_HWMASKNAME, 0600, entry, p);
>  
> -	rc = dpu_core_perf_debugfs_init(&dpu_kms->perf, dpu_kms->debugfs_root);
> -	if (rc) {
> -		DPU_ERROR("failed to init perf %d\n", rc);
> -		return rc;
> -	}
> +	dpu_debugfs_danger_init(dpu_kms, entry);
> +	dpu_debugfs_vbif_init(dpu_kms, entry);
> +	dpu_debugfs_core_irq_init(dpu_kms, entry);
>  
> -	return 0;
> -}
> -
> -static void _dpu_debugfs_destroy(struct dpu_kms *dpu_kms)
> -{
> -	/* don't need to NULL check debugfs_root */
> -	if (dpu_kms) {
> -		dpu_debugfs_vbif_destroy(dpu_kms);
> -		dpu_debugfs_danger_destroy(dpu_kms);
> -		dpu_debugfs_core_irq_destroy(dpu_kms);
> -		debugfs_remove_recursive(dpu_kms->debugfs_root);
> -	}
> -}
> -#else
> -static void _dpu_debugfs_destroy(struct dpu_kms *dpu_kms)
> -{
> +	return dpu_core_perf_debugfs_init(dpu_kms, entry);
>  }
>  #endif
>  
> @@ -583,22 +539,7 @@ static int _dpu_kms_drm_obj_init(struct dpu_kms *dpu_kms)
>  #ifdef CONFIG_DEBUG_FS
>  static int dpu_kms_debugfs_init(struct msm_kms *kms, struct drm_minor *minor)
>  {
> -	struct dpu_kms *dpu_kms = to_dpu_kms(kms);
> -	struct drm_device *dev;
> -	int rc;
> -
> -	if (!dpu_kms || !dpu_kms->dev || !dpu_kms->dev->dev) {
> -		DPU_ERROR("invalid dpu_kms\n");
> -		return -EINVAL;
> -	}
> -
> -	dev = dpu_kms->dev;
> -
> -	rc = _dpu_debugfs_init(dpu_kms);
> -	if (rc)
> -		DPU_ERROR("dpu_debugfs init failed: %d\n", rc);
> -
> -	return rc;
> +	return _dpu_debugfs_init(to_dpu_kms(kms));
>  }
>  #endif
>  
> @@ -626,7 +567,6 @@ static void _dpu_kms_hw_destroy(struct dpu_kms *dpu_kms)
>  				&dpu_kms->phandle, dpu_kms->power_event);
>  
>  	/* safe to call these more than once during shutdown */
> -	_dpu_debugfs_destroy(dpu_kms);
>  	_dpu_kms_mmu_destroy(dpu_kms);
>  
>  	if (dpu_kms->catalog) {
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.h b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.h
> index e7539c9870e4..cb1a685dcfee 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.h
> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.h
> @@ -102,7 +102,6 @@ struct dpu_irq {
>  	atomic_t *enable_counts;
>  	atomic_t *irq_counts;
>  	spinlock_t cb_lock;
> -	struct dentry *debugfs_file;
>  };
>  
>  struct dpu_kms {
> @@ -115,11 +114,6 @@ struct dpu_kms {
>  	struct dpu_power_client *core_client;
>  	struct dpu_power_event *power_event;
>  
> -	/* directory entry for debugfs */
> -	struct dentry *debugfs_root;
> -	struct dentry *debugfs_danger;
> -	struct dentry *debugfs_vbif;
> -
>  	/* io/register spaces: */
>  	void __iomem *mmio, *vbif[VBIF_MAX], *reg_dma;
>  	unsigned long mmio_len, vbif_len[VBIF_MAX], reg_dma_len;
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_mdss.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_mdss.c
> index 19abf719811a..5ecc26fdc328 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_mdss.c
> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_mdss.c
> @@ -120,13 +120,12 @@ static int _dpu_mdss_irq_domain_add(struct dpu_mdss *dpu_mdss)
>  	return 0;
>  }
>  
> -static int _dpu_mdss_irq_domain_fini(struct dpu_mdss *dpu_mdss)
> +static void _dpu_mdss_irq_domain_fini(struct dpu_mdss *dpu_mdss)
>  {
>  	if (dpu_mdss->irq_controller.domain) {
>  		irq_domain_remove(dpu_mdss->irq_controller.domain);
>  		dpu_mdss->irq_controller.domain = NULL;
>  	}
> -	return 0;
>  }
>  static int dpu_mdss_enable(struct msm_mdss *mdss)
>  {
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c
> index 98d8315f625d..bcd8d46ffc38 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c
> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c
> @@ -1264,26 +1264,12 @@ static ssize_t _dpu_plane_danger_read(struct file *file,
>  			char __user *buff, size_t count, loff_t *ppos)
>  {
>  	struct dpu_kms *kms = file->private_data;
> -	struct dpu_mdss_cfg *cfg = kms->catalog;
> -	int len = 0;
> -	char buf[40] = {'\0'};
> +	int len;
> +	char buf[40];
>  
> -	if (!cfg)
> -		return -ENODEV;
> +	len = scnprintf(buf, sizeof(buf), "%d\n", !kms->has_danger_ctrl);
>  
> -	if (*ppos)
> -		return 0; /* the end */
> -
> -	len = snprintf(buf, sizeof(buf), "%d\n", !kms->has_danger_ctrl);
> -	if (len < 0 || len >= sizeof(buf))
> -		return 0;
> -
> -	if ((count < sizeof(buf)) || copy_to_user(buff, buf, len))
> -		return -EFAULT;
> -
> -	*ppos += len;   /* increase offset */
> -
> -	return len;
> +	return simple_read_from_buffer(buff, count, ppos, buf, len);
>  }
>  
>  static void _dpu_plane_set_danger_state(struct dpu_kms *kms, bool enable)
> @@ -1313,23 +1299,12 @@ static ssize_t _dpu_plane_danger_write(struct file *file,
>  		    const char __user *user_buf, size_t count, loff_t *ppos)
>  {
>  	struct dpu_kms *kms = file->private_data;
> -	struct dpu_mdss_cfg *cfg = kms->catalog;
>  	int disable_panic;
> -	char buf[10];
> -
> -	if (!cfg)
> -		return -EFAULT;
> -
> -	if (count >= sizeof(buf))
> -		return -EFAULT;
> -
> -	if (copy_from_user(buf, user_buf, count))
> -		return -EFAULT;
> -
> -	buf[count] = 0;	/* end of string */
> +	int ret;
>  
> -	if (kstrtoint(buf, 0, &disable_panic))
> -		return -EFAULT;
> +	ret = kstrtouint_from_user(user_buf, count, 0, &disable_panic);
> +	if (ret)
> +		return ret;
>  
>  	if (disable_panic) {
>  		/* Disable panic signal for all active pipes */
> @@ -1354,33 +1329,10 @@ static const struct file_operations dpu_plane_danger_enable = {
>  
>  static int _dpu_plane_init_debugfs(struct drm_plane *plane)
>  {
> -	struct dpu_plane *pdpu;
> -	struct dpu_kms *kms;
> -	struct msm_drm_private *priv;
> -	const struct dpu_sspp_sub_blks *sblk = 0;
> -	const struct dpu_sspp_cfg *cfg = 0;
> -
> -	if (!plane || !plane->dev) {
> -		DPU_ERROR("invalid arguments\n");
> -		return -EINVAL;
> -	}
> -
> -	priv = plane->dev->dev_private;
> -	if (!priv || !priv->kms) {
> -		DPU_ERROR("invalid KMS reference\n");
> -		return -EINVAL;
> -	}
> -
> -	kms = to_dpu_kms(priv->kms);
> -	pdpu = to_dpu_plane(plane);
> -
> -	if (pdpu && pdpu->pipe_hw)
> -		cfg = pdpu->pipe_hw->cap;
> -	if (cfg)
> -		sblk = cfg->sblk;
> -
> -	if (!sblk)
> -		return 0;
> +	struct dpu_plane *pdpu = to_dpu_plane(plane);
> +	struct dpu_kms *kms = _dpu_plane_get_kms(plane);
> +	const struct dpu_sspp_cfg *cfg = pdpu->pipe_hw->cap;
> +	const struct dpu_sspp_sub_blks *sblk = cfg->sblk;
>  
>  	/* create overall sub-directory for the pipe */
>  	pdpu->debugfs_root =
> @@ -1451,25 +1403,11 @@ static int _dpu_plane_init_debugfs(struct drm_plane *plane)
>  
>  	return 0;
>  }
> -
> -static void _dpu_plane_destroy_debugfs(struct drm_plane *plane)
> -{
> -	struct dpu_plane *pdpu;
> -
> -	if (!plane)
> -		return;
> -	pdpu = to_dpu_plane(plane);
> -
> -	debugfs_remove_recursive(pdpu->debugfs_root);
> -}
>  #else
>  static int _dpu_plane_init_debugfs(struct drm_plane *plane)
>  {
>  	return 0;
>  }
> -static void _dpu_plane_destroy_debugfs(struct drm_plane *plane)
> -{
> -}
>  #endif
>  
>  static int dpu_plane_late_register(struct drm_plane *plane)
> @@ -1479,7 +1417,9 @@ static int dpu_plane_late_register(struct drm_plane *plane)
>  
>  static void dpu_plane_early_unregister(struct drm_plane *plane)
>  {
> -	_dpu_plane_destroy_debugfs(plane);
> +	struct dpu_plane *pdpu = to_dpu_plane(plane);
> +
> +	debugfs_remove_recursive(pdpu->debugfs_root);
>  }
>  
>  static const struct drm_plane_funcs dpu_plane_funcs = {
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_vbif.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_vbif.c
> index ff5091d2555d..ef753ea9c499 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_vbif.c
> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_vbif.c
> @@ -310,31 +310,25 @@ void dpu_vbif_init_memtypes(struct dpu_kms *dpu_kms)
>  }
>  
>  #ifdef CONFIG_DEBUG_FS
> -void dpu_debugfs_vbif_destroy(struct dpu_kms *dpu_kms)
> -{
> -	debugfs_remove_recursive(dpu_kms->debugfs_vbif);
> -	dpu_kms->debugfs_vbif = NULL;
> -}
>  
> -int dpu_debugfs_vbif_init(struct dpu_kms *dpu_kms, struct dentry *debugfs_root)
> +void dpu_debugfs_vbif_init(struct dpu_kms *dpu_kms, struct dentry *debugfs_root)
>  {
>  	char vbif_name[32];
> -	struct dentry *debugfs_vbif;
> +	struct dentry *entry, *debugfs_vbif;
>  	int i, j;
>  
> -	dpu_kms->debugfs_vbif = debugfs_create_dir("vbif", debugfs_root);
> -	if (!dpu_kms->debugfs_vbif) {
> -		DPU_ERROR("failed to create vbif debugfs\n");
> -		return -EINVAL;
> -	}
> +	entry = debugfs_create_dir("vbif", debugfs_root);
> +	if (IS_ERR_OR_NULL(entry))
> +		return;
>  
>  	for (i = 0; i < dpu_kms->catalog->vbif_count; i++) {
>  		struct dpu_vbif_cfg *vbif = &dpu_kms->catalog->vbif[i];
>  
>  		snprintf(vbif_name, sizeof(vbif_name), "%d", vbif->id);
>  
> -		debugfs_vbif = debugfs_create_dir(vbif_name,
> -				dpu_kms->debugfs_vbif);
> +		debugfs_vbif = debugfs_create_dir(vbif_name, entry);
> +		if (IS_ERR_OR_NULL(debugfs_vbif))
> +			continue;
>  
>  		debugfs_create_u32("features", 0600, debugfs_vbif,
>  			(u32 *)&vbif->features);
> @@ -376,7 +370,5 @@ int dpu_debugfs_vbif_init(struct dpu_kms *dpu_kms, struct dentry *debugfs_root)
>  					(u32 *)&cfg->ot_limit);
>  		}
>  	}
> -
> -	return 0;
>  }
>  #endif
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_vbif.h b/drivers/gpu/drm/msm/disp/dpu1/dpu_vbif.h
> index f17af52dbbd5..6356876d7a66 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_vbif.h
> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_vbif.h
> @@ -78,17 +78,6 @@ void dpu_vbif_clear_errors(struct dpu_kms *dpu_kms);
>   */
>  void dpu_vbif_init_memtypes(struct dpu_kms *dpu_kms);
>  
> -#ifdef CONFIG_DEBUG_FS
> -int dpu_debugfs_vbif_init(struct dpu_kms *dpu_kms, struct dentry *debugfs_root);
> -void dpu_debugfs_vbif_destroy(struct dpu_kms *dpu_kms);
> -#else
> -static inline int dpu_debugfs_vbif_init(struct dpu_kms *dpu_kms,
> -		struct dentry *debugfs_root)
> -{
> -	return 0;
> -}
> -static inline void dpu_debugfs_vbif_destroy(struct dpu_kms *dpu_kms)
> -{
> -}
> -#endif
> +void dpu_debugfs_vbif_init(struct dpu_kms *dpu_kms, struct dentry *debugfs_root);
> +
>  #endif /* __DPU_VBIF_H__ */
> -- 
> 2.18.0
> 

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


More information about the dri-devel mailing list