From: Jani Nikula <jani.nikula@linux.intel.com>
To: Luca Ceresoli <luca.ceresoli@bootlin.com>,
Andrzej Hajda <andrzej.hajda@intel.com>,
Neil Armstrong <neil.armstrong@linaro.org>,
Robert Foss <rfoss@kernel.org>,
Laurent Pinchart <Laurent.pinchart@ideasonboard.com>,
Jonas Karlman <jonas@kwiboo.se>,
Jernej Skrabec <jernej.skrabec@gmail.com>,
Maarten Lankhorst <maarten.lankhorst@linux.intel.com>,
Maxime Ripard <mripard@kernel.org>,
Thomas Zimmermann <tzimmermann@suse.de>,
David Airlie <airlied@gmail.com>, Simona Vetter <simona@ffwll.ch>
Cc: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>,
Thomas Petazzoni <thomas.petazzoni@bootlin.com>,
dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org,
Luca Ceresoli <luca.ceresoli@bootlin.com>
Subject: Re: [PATCH v8 1/2] drm/bridge: move bridges_show logic from drm_debugfs.c
Date: Thu, 27 Feb 2025 10:56:09 +0200 [thread overview]
Message-ID: <87a5a74vh2.fsf@intel.com> (raw)
In-Reply-To: <20250226-drm-debugfs-show-all-bridges-v8-1-bb511cc49d83@bootlin.com>
On Wed, 26 Feb 2025, Luca Ceresoli <luca.ceresoli@bootlin.com> wrote:
> In preparation to expose more info about bridges in debugfs, which will
> require more insight into drm_bridge data structures, move the bridges_show
> code to drm_bridge.c.
>
> Suggested-by: Jani Nikula <jani.nikula@linux.intel.com>
> Suggested-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
> Signed-off-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
>
> ---
>
> Changed in v8:
> - add the file in drm_bridge.c, which avois the added #if CONFIG_DEBUG_FS
>
> This patch was added in v7.
> ---
> drivers/gpu/drm/drm_bridge.c | 42 ++++++++++++++++++++++++++++++++++++++++++
> drivers/gpu/drm/drm_debugfs.c | 38 +-------------------------------------
> include/drm/drm_bridge.h | 2 ++
> 3 files changed, 45 insertions(+), 37 deletions(-)
>
> diff --git a/drivers/gpu/drm/drm_bridge.c b/drivers/gpu/drm/drm_bridge.c
> index 241a384ebce39b4a3db58c208af27960904fc662..a6bf1a565e3c3a8d24de60448972849f6d86ba72 100644
> --- a/drivers/gpu/drm/drm_bridge.c
> +++ b/drivers/gpu/drm/drm_bridge.c
> @@ -21,6 +21,7 @@
> * DEALINGS IN THE SOFTWARE.
> */
>
> +#include <linux/debugfs.h>
> #include <linux/err.h>
> #include <linux/media-bus-format.h>
> #include <linux/module.h>
> @@ -1335,6 +1336,47 @@ struct drm_bridge *of_drm_find_bridge(struct device_node *np)
> EXPORT_SYMBOL(of_drm_find_bridge);
> #endif
>
> +static int encoder_bridges_show(struct seq_file *m, void *data)
> +{
> + struct drm_encoder *encoder = m->private;
> + struct drm_printer p = drm_seq_file_printer(m);
> + struct drm_bridge *bridge;
> + unsigned int idx = 0;
> +
> + drm_for_each_bridge_in_chain(encoder, bridge) {
> + drm_printf(&p, "bridge[%u]: %ps\n", idx++, bridge->funcs);
> + drm_printf(&p, "\ttype: [%d] %s\n",
> + bridge->type,
> + drm_get_connector_type_name(bridge->type));
> +
> + if (bridge->of_node)
> + drm_printf(&p, "\tOF: %pOFfc\n", bridge->of_node);
> +
> + drm_printf(&p, "\tops: [0x%x]", bridge->ops);
> + if (bridge->ops & DRM_BRIDGE_OP_DETECT)
> + drm_puts(&p, " detect");
> + if (bridge->ops & DRM_BRIDGE_OP_EDID)
> + drm_puts(&p, " edid");
> + if (bridge->ops & DRM_BRIDGE_OP_HPD)
> + drm_puts(&p, " hpd");
> + if (bridge->ops & DRM_BRIDGE_OP_MODES)
> + drm_puts(&p, " modes");
> + if (bridge->ops & DRM_BRIDGE_OP_HDMI)
> + drm_puts(&p, " hdmi");
> + drm_puts(&p, "\n");
> + }
> +
> + return 0;
> +}
> +DEFINE_SHOW_ATTRIBUTE(encoder_bridges);
> +
> +void drm_bridge_debugfs_encoder_params(struct dentry *root,
> + struct drm_encoder *encoder)
> +{
> + /* bridges list */
> + debugfs_create_file("bridges", 0444, root, encoder, &encoder_bridges_fops);
The function could look at encoder->debugfs_entry instead of requiring
the root parameter, but that's neither here nor there.
Reviewed-by: Jani Nikula <jani.nikula@intel.com>
> +}
> +
> MODULE_AUTHOR("Ajay Kumar <ajaykumar.rs@samsung.com>");
> MODULE_DESCRIPTION("DRM bridge infrastructure");
> MODULE_LICENSE("GPL and additional rights");
> diff --git a/drivers/gpu/drm/drm_debugfs.c b/drivers/gpu/drm/drm_debugfs.c
> index 6b2178864c7ee12db9aa1f562e106b2f604439f8..3dfd8b34dceb7a5b8f11e3072a1eaef430869722 100644
> --- a/drivers/gpu/drm/drm_debugfs.c
> +++ b/drivers/gpu/drm/drm_debugfs.c
> @@ -740,40 +740,6 @@ void drm_debugfs_crtc_remove(struct drm_crtc *crtc)
> crtc->debugfs_entry = NULL;
> }
>
> -static int bridges_show(struct seq_file *m, void *data)
> -{
> - struct drm_encoder *encoder = m->private;
> - struct drm_printer p = drm_seq_file_printer(m);
> - struct drm_bridge *bridge;
> - unsigned int idx = 0;
> -
> - drm_for_each_bridge_in_chain(encoder, bridge) {
> - drm_printf(&p, "bridge[%u]: %ps\n", idx++, bridge->funcs);
> - drm_printf(&p, "\ttype: [%d] %s\n",
> - bridge->type,
> - drm_get_connector_type_name(bridge->type));
> -
> - if (bridge->of_node)
> - drm_printf(&p, "\tOF: %pOFfc\n", bridge->of_node);
> -
> - drm_printf(&p, "\tops: [0x%x]", bridge->ops);
> - if (bridge->ops & DRM_BRIDGE_OP_DETECT)
> - drm_puts(&p, " detect");
> - if (bridge->ops & DRM_BRIDGE_OP_EDID)
> - drm_puts(&p, " edid");
> - if (bridge->ops & DRM_BRIDGE_OP_HPD)
> - drm_puts(&p, " hpd");
> - if (bridge->ops & DRM_BRIDGE_OP_MODES)
> - drm_puts(&p, " modes");
> - if (bridge->ops & DRM_BRIDGE_OP_HDMI)
> - drm_puts(&p, " hdmi");
> - drm_puts(&p, "\n");
> - }
> -
> - return 0;
> -}
> -DEFINE_SHOW_ATTRIBUTE(bridges);
> -
> void drm_debugfs_encoder_add(struct drm_encoder *encoder)
> {
> struct drm_minor *minor = encoder->dev->primary;
> @@ -789,9 +755,7 @@ void drm_debugfs_encoder_add(struct drm_encoder *encoder)
>
> encoder->debugfs_entry = root;
>
> - /* bridges list */
> - debugfs_create_file("bridges", 0444, root, encoder,
> - &bridges_fops);
> + drm_bridge_debugfs_encoder_params(root, encoder);
>
> if (encoder->funcs && encoder->funcs->debugfs_init)
> encoder->funcs->debugfs_init(encoder, root);
> diff --git a/include/drm/drm_bridge.h b/include/drm/drm_bridge.h
> index 496dbbd2ad7edff7f091adfbe62de1e33ef0cf07..0890acfe04b99b1ccbbff10b507cb8c2b2705e06 100644
> --- a/include/drm/drm_bridge.h
> +++ b/include/drm/drm_bridge.h
> @@ -1108,4 +1108,6 @@ static inline struct drm_bridge *drmm_of_get_bridge(struct drm_device *drm,
> }
> #endif
>
> +void drm_bridge_debugfs_encoder_params(struct dentry *root, struct drm_encoder *encoder);
> +
> #endif
--
Jani Nikula, Intel
next prev parent reply other threads:[~2025-02-27 8:56 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-02-26 21:23 [PATCH v8 0/2] drm: show "all" bridges in debugfs Luca Ceresoli
2025-02-26 21:23 ` [PATCH v8 1/2] drm/bridge: move bridges_show logic from drm_debugfs.c Luca Ceresoli
2025-02-27 8:56 ` Jani Nikula [this message]
2025-02-26 21:23 ` [PATCH v8 2/2] drm/debugfs: add top-level 'bridges' file showing all added bridges Luca Ceresoli
2025-02-27 8:59 ` Jani Nikula
2025-03-12 9:59 ` [PATCH v8 0/2] drm: show "all" bridges in debugfs Louis Chauvet
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87a5a74vh2.fsf@intel.com \
--to=jani.nikula@linux.intel.com \
--cc=Laurent.pinchart@ideasonboard.com \
--cc=airlied@gmail.com \
--cc=andrzej.hajda@intel.com \
--cc=dmitry.baryshkov@linaro.org \
--cc=dri-devel@lists.freedesktop.org \
--cc=jernej.skrabec@gmail.com \
--cc=jonas@kwiboo.se \
--cc=linux-kernel@vger.kernel.org \
--cc=luca.ceresoli@bootlin.com \
--cc=maarten.lankhorst@linux.intel.com \
--cc=mripard@kernel.org \
--cc=neil.armstrong@linaro.org \
--cc=rfoss@kernel.org \
--cc=simona@ffwll.ch \
--cc=thomas.petazzoni@bootlin.com \
--cc=tzimmermann@suse.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.