Commit f2ede40e authored by Maíra Canal's avatar Maíra Canal Committed by Maíra Canal

drm/vc4: use new debugfs device-centered functions

Currently, vc4 has its own debugfs infrastructure that adds the debugfs
files on drm_dev_register(). With the introduction of the new debugfs,
functions, replace the vc4 debugfs structure with the DRM debugfs
device-centered function, drm_debugfs_add_file().

Moreover, remove the explicit error handling of debugfs related functions,
considering that the only failure mode is -ENOMEM and also that error
handling is not recommended for debugfs functions, as pointed out in [1].

[1] https://lore.kernel.org/all/YWAmZdRwnAt6wh9B@kroah.com/Signed-off-by: default avatarMaíra Canal <mcanal@igalia.com>
Reviewed-by: default avatarMaxime Ripard <maxime@cerno.tech>
Reviewed-by: default avatarMelissa Wen <mwen@igalia.com>
Acked-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
Signed-off-by: default avatarMaíra Canal <mairacanal@riseup.net>
Link: https://patchwork.freedesktop.org/patch/msgid/20221219120621.15086-5-mcanal@igalia.com
parent dbb23cf5
...@@ -69,8 +69,8 @@ static void vc4_bo_stats_print(struct drm_printer *p, struct vc4_dev *vc4) ...@@ -69,8 +69,8 @@ static void vc4_bo_stats_print(struct drm_printer *p, struct vc4_dev *vc4)
static int vc4_bo_stats_debugfs(struct seq_file *m, void *unused) static int vc4_bo_stats_debugfs(struct seq_file *m, void *unused)
{ {
struct drm_info_node *node = (struct drm_info_node *)m->private; struct drm_debugfs_entry *entry = m->private;
struct drm_device *dev = node->minor->dev; struct drm_device *dev = entry->dev;
struct vc4_dev *vc4 = to_vc4_dev(dev); struct vc4_dev *vc4 = to_vc4_dev(dev);
struct drm_printer p = drm_seq_file_printer(m); struct drm_printer p = drm_seq_file_printer(m);
...@@ -993,15 +993,11 @@ int vc4_bo_debugfs_init(struct drm_minor *minor) ...@@ -993,15 +993,11 @@ int vc4_bo_debugfs_init(struct drm_minor *minor)
{ {
struct drm_device *drm = minor->dev; struct drm_device *drm = minor->dev;
struct vc4_dev *vc4 = to_vc4_dev(drm); struct vc4_dev *vc4 = to_vc4_dev(drm);
int ret;
if (!vc4->v3d) if (!vc4->v3d)
return -ENODEV; return -ENODEV;
ret = vc4_debugfs_add_file(minor, "bo_stats", drm_debugfs_add_file(drm, "bo_stats", vc4_bo_stats_debugfs, NULL);
vc4_bo_stats_debugfs, NULL);
if (ret)
return ret;
return 0; return 0;
} }
......
...@@ -1090,12 +1090,9 @@ int vc4_crtc_late_register(struct drm_crtc *crtc) ...@@ -1090,12 +1090,9 @@ int vc4_crtc_late_register(struct drm_crtc *crtc)
struct drm_device *drm = crtc->dev; struct drm_device *drm = crtc->dev;
struct vc4_crtc *vc4_crtc = to_vc4_crtc(crtc); struct vc4_crtc *vc4_crtc = to_vc4_crtc(crtc);
const struct vc4_crtc_data *crtc_data = vc4_crtc_to_vc4_crtc_data(vc4_crtc); const struct vc4_crtc_data *crtc_data = vc4_crtc_to_vc4_crtc_data(vc4_crtc);
int ret;
ret = vc4_debugfs_add_regset32(drm->primary, crtc_data->debugfs_name, vc4_debugfs_add_regset32(drm, crtc_data->debugfs_name,
&vc4_crtc->regset); &vc4_crtc->regset);
if (ret)
return ret;
return 0; return 0;
} }
......
...@@ -34,9 +34,9 @@ vc4_debugfs_init(struct drm_minor *minor) ...@@ -34,9 +34,9 @@ vc4_debugfs_init(struct drm_minor *minor)
static int vc4_debugfs_regset32(struct seq_file *m, void *unused) static int vc4_debugfs_regset32(struct seq_file *m, void *unused)
{ {
struct drm_info_node *node = (struct drm_info_node *)m->private; struct drm_debugfs_entry *entry = m->private;
struct drm_device *drm = node->minor->dev; struct drm_device *drm = entry->dev;
struct debugfs_regset32 *regset = node->info_ent->data; struct debugfs_regset32 *regset = entry->file.data;
struct drm_printer p = drm_seq_file_printer(m); struct drm_printer p = drm_seq_file_printer(m);
int idx; int idx;
...@@ -50,31 +50,9 @@ static int vc4_debugfs_regset32(struct seq_file *m, void *unused) ...@@ -50,31 +50,9 @@ static int vc4_debugfs_regset32(struct seq_file *m, void *unused)
return 0; return 0;
} }
int vc4_debugfs_add_file(struct drm_minor *minor, void vc4_debugfs_add_regset32(struct drm_device *drm,
const char *name,
int (*show)(struct seq_file*, void*),
void *data)
{
struct drm_device *dev = minor->dev;
struct dentry *root = minor->debugfs_root;
struct drm_info_list *file;
file = drmm_kzalloc(dev, sizeof(*file), GFP_KERNEL);
if (!file)
return -ENOMEM;
file->name = name;
file->show = show;
file->data = data;
drm_debugfs_create_files(file, 1, root, minor);
return 0;
}
int vc4_debugfs_add_regset32(struct drm_minor *minor,
const char *name, const char *name,
struct debugfs_regset32 *regset) struct debugfs_regset32 *regset)
{ {
return vc4_debugfs_add_file(minor, name, vc4_debugfs_regset32, regset); drm_debugfs_add_file(drm, name, vc4_debugfs_regset32, regset);
} }
...@@ -267,11 +267,8 @@ static int vc4_dpi_late_register(struct drm_encoder *encoder) ...@@ -267,11 +267,8 @@ static int vc4_dpi_late_register(struct drm_encoder *encoder)
{ {
struct drm_device *drm = encoder->dev; struct drm_device *drm = encoder->dev;
struct vc4_dpi *dpi = to_vc4_dpi(encoder); struct vc4_dpi *dpi = to_vc4_dpi(encoder);
int ret;
ret = vc4_debugfs_add_regset32(drm->primary, "dpi_regs", &dpi->regset); vc4_debugfs_add_regset32(drm, "dpi_regs", &dpi->regset);
if (ret)
return ret;
return 0; return 0;
} }
......
...@@ -320,7 +320,6 @@ static int vc4_drm_bind(struct device *dev) ...@@ -320,7 +320,6 @@ static int vc4_drm_bind(struct device *dev)
drm = &vc4->base; drm = &vc4->base;
platform_set_drvdata(pdev, drm); platform_set_drvdata(pdev, drm);
INIT_LIST_HEAD(&vc4->debugfs_list);
if (!is_vc5) { if (!is_vc5) {
ret = drmm_mutex_init(drm, &vc4->bin_bo_lock); ret = drmm_mutex_init(drm, &vc4->bin_bo_lock);
......
...@@ -226,11 +226,6 @@ struct vc4_dev { ...@@ -226,11 +226,6 @@ struct vc4_dev {
struct drm_private_obj hvs_channels; struct drm_private_obj hvs_channels;
struct drm_private_obj load_tracker; struct drm_private_obj load_tracker;
/* List of vc4_debugfs_info_entry for adding to debugfs once
* the minor is available (after drm_dev_register()).
*/
struct list_head debugfs_list;
/* Mutex for binner bo allocation. */ /* Mutex for binner bo allocation. */
struct mutex bin_bo_lock; struct mutex bin_bo_lock;
/* Reference count for our binner bo. */ /* Reference count for our binner bo. */
...@@ -971,28 +966,15 @@ void vc4_crtc_get_margins(struct drm_crtc_state *state, ...@@ -971,28 +966,15 @@ void vc4_crtc_get_margins(struct drm_crtc_state *state,
/* vc4_debugfs.c */ /* vc4_debugfs.c */
void vc4_debugfs_init(struct drm_minor *minor); void vc4_debugfs_init(struct drm_minor *minor);
#ifdef CONFIG_DEBUG_FS #ifdef CONFIG_DEBUG_FS
int vc4_debugfs_add_file(struct drm_minor *minor, void vc4_debugfs_add_regset32(struct drm_device *drm,
const char *filename,
int (*show)(struct seq_file*, void*),
void *data);
int vc4_debugfs_add_regset32(struct drm_minor *minor,
const char *filename, const char *filename,
struct debugfs_regset32 *regset); struct debugfs_regset32 *regset);
#else #else
static inline int vc4_debugfs_add_file(struct drm_minor *minor,
const char *filename,
int (*show)(struct seq_file*, void*),
void *data)
{
return 0;
}
static inline int vc4_debugfs_add_regset32(struct drm_minor *minor, static inline void vc4_debugfs_add_regset32(struct drm_device *drm,
const char *filename, const char *filename,
struct debugfs_regset32 *regset) struct debugfs_regset32 *regset)
{ {}
return 0;
}
#endif #endif
/* vc4_drv.c */ /* vc4_drv.c */
......
...@@ -1427,12 +1427,8 @@ static int vc4_dsi_late_register(struct drm_encoder *encoder) ...@@ -1427,12 +1427,8 @@ static int vc4_dsi_late_register(struct drm_encoder *encoder)
{ {
struct drm_device *drm = encoder->dev; struct drm_device *drm = encoder->dev;
struct vc4_dsi *dsi = to_vc4_dsi(encoder); struct vc4_dsi *dsi = to_vc4_dsi(encoder);
int ret;
ret = vc4_debugfs_add_regset32(drm->primary, dsi->variant->debugfs_name, vc4_debugfs_add_regset32(drm, dsi->variant->debugfs_name, &dsi->regset);
&dsi->regset);
if (ret)
return ret;
return 0; return 0;
} }
......
...@@ -160,8 +160,8 @@ static bool vc4_hdmi_is_full_range_rgb(struct vc4_hdmi *vc4_hdmi, ...@@ -160,8 +160,8 @@ static bool vc4_hdmi_is_full_range_rgb(struct vc4_hdmi *vc4_hdmi,
static int vc4_hdmi_debugfs_regs(struct seq_file *m, void *unused) static int vc4_hdmi_debugfs_regs(struct seq_file *m, void *unused)
{ {
struct drm_info_node *node = (struct drm_info_node *)m->private; struct drm_debugfs_entry *entry = m->private;
struct vc4_hdmi *vc4_hdmi = node->info_ent->data; struct vc4_hdmi *vc4_hdmi = entry->file.data;
struct drm_device *drm = vc4_hdmi->connector.dev; struct drm_device *drm = vc4_hdmi->connector.dev;
struct drm_printer p = drm_seq_file_printer(m); struct drm_printer p = drm_seq_file_printer(m);
int idx; int idx;
...@@ -1995,13 +1995,9 @@ static int vc4_hdmi_late_register(struct drm_encoder *encoder) ...@@ -1995,13 +1995,9 @@ static int vc4_hdmi_late_register(struct drm_encoder *encoder)
struct drm_device *drm = encoder->dev; struct drm_device *drm = encoder->dev;
struct vc4_hdmi *vc4_hdmi = encoder_to_vc4_hdmi(encoder); struct vc4_hdmi *vc4_hdmi = encoder_to_vc4_hdmi(encoder);
const struct vc4_hdmi_variant *variant = vc4_hdmi->variant; const struct vc4_hdmi_variant *variant = vc4_hdmi->variant;
int ret;
ret = vc4_debugfs_add_file(drm->primary, variant->debugfs_name, drm_debugfs_add_file(drm, variant->debugfs_name,
vc4_hdmi_debugfs_regs, vc4_hdmi_debugfs_regs, vc4_hdmi);
vc4_hdmi);
if (ret)
return ret;
return 0; return 0;
} }
......
...@@ -93,8 +93,8 @@ void vc4_hvs_dump_state(struct vc4_hvs *hvs) ...@@ -93,8 +93,8 @@ void vc4_hvs_dump_state(struct vc4_hvs *hvs)
static int vc4_hvs_debugfs_underrun(struct seq_file *m, void *data) static int vc4_hvs_debugfs_underrun(struct seq_file *m, void *data)
{ {
struct drm_info_node *node = m->private; struct drm_debugfs_entry *entry = m->private;
struct drm_device *dev = node->minor->dev; struct drm_device *dev = entry->dev;
struct vc4_dev *vc4 = to_vc4_dev(dev); struct vc4_dev *vc4 = to_vc4_dev(dev);
struct drm_printer p = drm_seq_file_printer(m); struct drm_printer p = drm_seq_file_printer(m);
...@@ -105,8 +105,8 @@ static int vc4_hvs_debugfs_underrun(struct seq_file *m, void *data) ...@@ -105,8 +105,8 @@ static int vc4_hvs_debugfs_underrun(struct seq_file *m, void *data)
static int vc4_hvs_debugfs_dlist(struct seq_file *m, void *data) static int vc4_hvs_debugfs_dlist(struct seq_file *m, void *data)
{ {
struct drm_info_node *node = m->private; struct drm_debugfs_entry *entry = m->private;
struct drm_device *dev = node->minor->dev; struct drm_device *dev = entry->dev;
struct vc4_dev *vc4 = to_vc4_dev(dev); struct vc4_dev *vc4 = to_vc4_dev(dev);
struct vc4_hvs *hvs = vc4->hvs; struct vc4_hvs *hvs = vc4->hvs;
struct drm_printer p = drm_seq_file_printer(m); struct drm_printer p = drm_seq_file_printer(m);
...@@ -740,7 +740,6 @@ int vc4_hvs_debugfs_init(struct drm_minor *minor) ...@@ -740,7 +740,6 @@ int vc4_hvs_debugfs_init(struct drm_minor *minor)
struct drm_device *drm = minor->dev; struct drm_device *drm = minor->dev;
struct vc4_dev *vc4 = to_vc4_dev(drm); struct vc4_dev *vc4 = to_vc4_dev(drm);
struct vc4_hvs *hvs = vc4->hvs; struct vc4_hvs *hvs = vc4->hvs;
int ret;
if (!vc4->hvs) if (!vc4->hvs)
return -ENODEV; return -ENODEV;
...@@ -750,20 +749,11 @@ int vc4_hvs_debugfs_init(struct drm_minor *minor) ...@@ -750,20 +749,11 @@ int vc4_hvs_debugfs_init(struct drm_minor *minor)
minor->debugfs_root, minor->debugfs_root,
&vc4->load_tracker_enabled); &vc4->load_tracker_enabled);
ret = vc4_debugfs_add_file(minor, "hvs_dlists", drm_debugfs_add_file(drm, "hvs_dlists", vc4_hvs_debugfs_dlist, NULL);
vc4_hvs_debugfs_dlist, NULL);
if (ret)
return ret;
ret = vc4_debugfs_add_file(minor, "hvs_underrun", drm_debugfs_add_file(drm, "hvs_underrun", vc4_hvs_debugfs_underrun, NULL);
vc4_hvs_debugfs_underrun, NULL);
if (ret)
return ret;
ret = vc4_debugfs_add_regset32(minor, "hvs_regs", vc4_debugfs_add_regset32(drm, "hvs_regs", &hvs->regset);
&hvs->regset);
if (ret)
return ret;
return 0; return 0;
} }
......
...@@ -96,8 +96,8 @@ static const struct debugfs_reg32 v3d_regs[] = { ...@@ -96,8 +96,8 @@ static const struct debugfs_reg32 v3d_regs[] = {
static int vc4_v3d_debugfs_ident(struct seq_file *m, void *unused) static int vc4_v3d_debugfs_ident(struct seq_file *m, void *unused)
{ {
struct drm_info_node *node = (struct drm_info_node *)m->private; struct drm_debugfs_entry *entry = m->private;
struct drm_device *dev = node->minor->dev; struct drm_device *dev = entry->dev;
struct vc4_dev *vc4 = to_vc4_dev(dev); struct vc4_dev *vc4 = to_vc4_dev(dev);
int ret = vc4_v3d_pm_get(vc4); int ret = vc4_v3d_pm_get(vc4);
...@@ -404,19 +404,13 @@ int vc4_v3d_debugfs_init(struct drm_minor *minor) ...@@ -404,19 +404,13 @@ int vc4_v3d_debugfs_init(struct drm_minor *minor)
struct drm_device *drm = minor->dev; struct drm_device *drm = minor->dev;
struct vc4_dev *vc4 = to_vc4_dev(drm); struct vc4_dev *vc4 = to_vc4_dev(drm);
struct vc4_v3d *v3d = vc4->v3d; struct vc4_v3d *v3d = vc4->v3d;
int ret;
if (!vc4->v3d) if (!vc4->v3d)
return -ENODEV; return -ENODEV;
ret = vc4_debugfs_add_file(minor, "v3d_ident", drm_debugfs_add_file(drm, "v3d_ident", vc4_v3d_debugfs_ident, NULL);
vc4_v3d_debugfs_ident, NULL);
if (ret)
return ret;
ret = vc4_debugfs_add_regset32(minor, "v3d_regs", &v3d->regset); vc4_debugfs_add_regset32(drm, "v3d_regs", &v3d->regset);
if (ret)
return ret;
return 0; return 0;
} }
......
...@@ -716,12 +716,8 @@ static int vc4_vec_late_register(struct drm_encoder *encoder) ...@@ -716,12 +716,8 @@ static int vc4_vec_late_register(struct drm_encoder *encoder)
{ {
struct drm_device *drm = encoder->dev; struct drm_device *drm = encoder->dev;
struct vc4_vec *vec = encoder_to_vc4_vec(encoder); struct vc4_vec *vec = encoder_to_vc4_vec(encoder);
int ret;
ret = vc4_debugfs_add_regset32(drm->primary, "vec_regs", vc4_debugfs_add_regset32(drm, "vec_regs", &vec->regset);
&vec->regset);
if (ret)
return ret;
return 0; return 0;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment