From: Boris Brezillon <boris.brezillon@bootlin.com>
To: Eric Anholt <eric@anholt.net>
Cc: linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org
Subject: Re: [PATCH] drm/vc4: Fix oops dereferencing DPI's connector since panel_bridge.
Date: Wed, 2 May 2018 22:29:21 +0200 [thread overview]
Message-ID: <20180502222921.4399847a@bbrezillon> (raw)
In-Reply-To: <20180309233256.1667-1-eric@anholt.net>
On Fri, 9 Mar 2018 15:32:56 -0800
Eric Anholt <eric@anholt.net> wrote:
> In the cleanup, I didn't notice that we needed to dereference the
> connector for the bus_format. Fix the regression by looking up the
> first (and only) connector attached to us, and assume that its
> bus_format is what we want. Some day it would be good to have that
> part of display_info attached to the bridge, instead.
>
> Signed-off-by: Eric Anholt <eric@anholt.net>
> Fixes: 7b1298e05310 ("drm/vc4: Switch DPI to using the panel-bridge helper.")
> Cc: Boris Brezillon <boris.brezillon@bootlin.com>
Reviewed-by: Boris Brezillon <boris.brezillon@bootlin.com>
> ---
> drivers/gpu/drm/vc4/vc4_dpi.c | 27 +++++++++++++++++++++++----
> 1 file changed, 23 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/gpu/drm/vc4/vc4_dpi.c b/drivers/gpu/drm/vc4/vc4_dpi.c
> index 72c9dbd81d7f..88783e143cc2 100644
> --- a/drivers/gpu/drm/vc4/vc4_dpi.c
> +++ b/drivers/gpu/drm/vc4/vc4_dpi.c
> @@ -96,7 +96,6 @@ struct vc4_dpi {
> struct platform_device *pdev;
>
> struct drm_encoder *encoder;
> - struct drm_connector *connector;
>
> void __iomem *regs;
>
> @@ -164,14 +163,31 @@ static void vc4_dpi_encoder_disable(struct drm_encoder *encoder)
>
> static void vc4_dpi_encoder_enable(struct drm_encoder *encoder)
> {
> + struct drm_device *dev = encoder->dev;
> struct drm_display_mode *mode = &encoder->crtc->mode;
> struct vc4_dpi_encoder *vc4_encoder = to_vc4_dpi_encoder(encoder);
> struct vc4_dpi *dpi = vc4_encoder->dpi;
> + struct drm_connector_list_iter conn_iter;
> + struct drm_connector *connector = NULL, *connector_scan;
> u32 dpi_c = DPI_ENABLE | DPI_OUTPUT_ENABLE_MODE;
> int ret;
>
> - if (dpi->connector->display_info.num_bus_formats) {
> - u32 bus_format = dpi->connector->display_info.bus_formats[0];
> + /* Look up the connector attached to DPI so we can get the
> + * bus_format. Ideally the bridge would tell us the
> + * bus_format we want, but it doesn't yet, so assume that it's
> + * uniform throughout the bridge chain.
> + */
> + drm_connector_list_iter_begin(dev, &conn_iter);
> + drm_for_each_connector_iter(connector_scan, &conn_iter) {
> + if (connector_scan->encoder == encoder) {
> + connector = connector_scan;
> + break;
> + }
> + }
> + drm_connector_list_iter_end(&conn_iter);
> +
> + if (connector && connector->display_info.num_bus_formats) {
> + u32 bus_format = connector->display_info.bus_formats[0];
>
> switch (bus_format) {
> case MEDIA_BUS_FMT_RGB888_1X24:
> @@ -199,6 +215,9 @@ static void vc4_dpi_encoder_enable(struct drm_encoder *encoder)
> DRM_ERROR("Unknown media bus format %d\n", bus_format);
> break;
> }
> + } else {
> + /* Default to 24bit if no connector found. */
> + dpi_c |= VC4_SET_FIELD(DPI_FORMAT_24BIT_888_RGB, DPI_FORMAT);
> }
>
> if (mode->flags & DRM_MODE_FLAG_NHSYNC)
> @@ -264,7 +283,7 @@ static int vc4_dpi_init_bridge(struct vc4_dpi *dpi)
> return ret;
> }
>
> - if (panel)
> + if (panel)
> bridge = drm_panel_bridge_add(panel, DRM_MODE_CONNECTOR_DPI);
>
> return drm_bridge_attach(dpi->encoder, bridge, NULL);
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
WARNING: multiple messages have this Message-ID (diff)
From: Boris Brezillon <boris.brezillon@bootlin.com>
To: Eric Anholt <eric@anholt.net>
Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] drm/vc4: Fix oops dereferencing DPI's connector since panel_bridge.
Date: Wed, 2 May 2018 22:29:21 +0200 [thread overview]
Message-ID: <20180502222921.4399847a@bbrezillon> (raw)
In-Reply-To: <20180309233256.1667-1-eric@anholt.net>
On Fri, 9 Mar 2018 15:32:56 -0800
Eric Anholt <eric@anholt.net> wrote:
> In the cleanup, I didn't notice that we needed to dereference the
> connector for the bus_format. Fix the regression by looking up the
> first (and only) connector attached to us, and assume that its
> bus_format is what we want. Some day it would be good to have that
> part of display_info attached to the bridge, instead.
>
> Signed-off-by: Eric Anholt <eric@anholt.net>
> Fixes: 7b1298e05310 ("drm/vc4: Switch DPI to using the panel-bridge helper.")
> Cc: Boris Brezillon <boris.brezillon@bootlin.com>
Reviewed-by: Boris Brezillon <boris.brezillon@bootlin.com>
> ---
> drivers/gpu/drm/vc4/vc4_dpi.c | 27 +++++++++++++++++++++++----
> 1 file changed, 23 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/gpu/drm/vc4/vc4_dpi.c b/drivers/gpu/drm/vc4/vc4_dpi.c
> index 72c9dbd81d7f..88783e143cc2 100644
> --- a/drivers/gpu/drm/vc4/vc4_dpi.c
> +++ b/drivers/gpu/drm/vc4/vc4_dpi.c
> @@ -96,7 +96,6 @@ struct vc4_dpi {
> struct platform_device *pdev;
>
> struct drm_encoder *encoder;
> - struct drm_connector *connector;
>
> void __iomem *regs;
>
> @@ -164,14 +163,31 @@ static void vc4_dpi_encoder_disable(struct drm_encoder *encoder)
>
> static void vc4_dpi_encoder_enable(struct drm_encoder *encoder)
> {
> + struct drm_device *dev = encoder->dev;
> struct drm_display_mode *mode = &encoder->crtc->mode;
> struct vc4_dpi_encoder *vc4_encoder = to_vc4_dpi_encoder(encoder);
> struct vc4_dpi *dpi = vc4_encoder->dpi;
> + struct drm_connector_list_iter conn_iter;
> + struct drm_connector *connector = NULL, *connector_scan;
> u32 dpi_c = DPI_ENABLE | DPI_OUTPUT_ENABLE_MODE;
> int ret;
>
> - if (dpi->connector->display_info.num_bus_formats) {
> - u32 bus_format = dpi->connector->display_info.bus_formats[0];
> + /* Look up the connector attached to DPI so we can get the
> + * bus_format. Ideally the bridge would tell us the
> + * bus_format we want, but it doesn't yet, so assume that it's
> + * uniform throughout the bridge chain.
> + */
> + drm_connector_list_iter_begin(dev, &conn_iter);
> + drm_for_each_connector_iter(connector_scan, &conn_iter) {
> + if (connector_scan->encoder == encoder) {
> + connector = connector_scan;
> + break;
> + }
> + }
> + drm_connector_list_iter_end(&conn_iter);
> +
> + if (connector && connector->display_info.num_bus_formats) {
> + u32 bus_format = connector->display_info.bus_formats[0];
>
> switch (bus_format) {
> case MEDIA_BUS_FMT_RGB888_1X24:
> @@ -199,6 +215,9 @@ static void vc4_dpi_encoder_enable(struct drm_encoder *encoder)
> DRM_ERROR("Unknown media bus format %d\n", bus_format);
> break;
> }
> + } else {
> + /* Default to 24bit if no connector found. */
> + dpi_c |= VC4_SET_FIELD(DPI_FORMAT_24BIT_888_RGB, DPI_FORMAT);
> }
>
> if (mode->flags & DRM_MODE_FLAG_NHSYNC)
> @@ -264,7 +283,7 @@ static int vc4_dpi_init_bridge(struct vc4_dpi *dpi)
> return ret;
> }
>
> - if (panel)
> + if (panel)
> bridge = drm_panel_bridge_add(panel, DRM_MODE_CONNECTOR_DPI);
>
> return drm_bridge_attach(dpi->encoder, bridge, NULL);
next prev parent reply other threads:[~2018-05-02 20:29 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-03-09 23:32 [PATCH] drm/vc4: Fix oops dereferencing DPI's connector since panel_bridge Eric Anholt
2018-03-09 23:32 ` Eric Anholt
2018-05-02 17:01 ` Eric Anholt
2018-05-02 17:01 ` Eric Anholt
2018-05-02 20:03 ` Sean Paul
2018-05-02 20:03 ` Sean Paul
2018-05-02 20:29 ` Boris Brezillon [this message]
2018-05-02 20:29 ` Boris Brezillon
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=20180502222921.4399847a@bbrezillon \
--to=boris.brezillon@bootlin.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=eric@anholt.net \
--cc=linux-kernel@vger.kernel.org \
/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.