diff mbox series

[v2] drm/bridge: ti-sn65dsi86: Check bridge connection failure

Message ID 20250314224202.13128-2-wsa+renesas@sang-engineering.com (mailing list archive)
State New, archived
Headers show
Series [v2] drm/bridge: ti-sn65dsi86: Check bridge connection failure | expand

Commit Message

Wolfram Sang March 14, 2025, 10:39 p.m. UTC
From: Phong Hoang <phong.hoang.wz@renesas.com>

Add a check to the very first register access function when attaching a
bridge device, so we can bail out if I2C communication does not work.

Signed-off-by: Phong Hoang <phong.hoang.wz@renesas.com>
Signed-off-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
---

Build tested only!

Changes since v1:

* rebased to v6.14-rc6
* add Laurent's tag (Thanks!)
* update patch description according to Tomi's suggestions (Thanks!)

 drivers/gpu/drm/bridge/ti-sn65dsi86.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

Comments

Doug Anderson March 14, 2025, 11:48 p.m. UTC | #1
Hi,

On Fri, Mar 14, 2025 at 3:42 PM Wolfram Sang
<wsa+renesas@sang-engineering.com> wrote:
>
> From: Phong Hoang <phong.hoang.wz@renesas.com>
>
> Add a check to the very first register access function when attaching a
> bridge device, so we can bail out if I2C communication does not work.
>
> Signed-off-by: Phong Hoang <phong.hoang.wz@renesas.com>
> Signed-off-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>
> Reviewed-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
> Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
> ---
>
> Build tested only!
>
> Changes since v1:
>
> * rebased to v6.14-rc6
> * add Laurent's tag (Thanks!)
> * update patch description according to Tomi's suggestions (Thanks!)
>
>  drivers/gpu/drm/bridge/ti-sn65dsi86.c | 6 +++++-
>  1 file changed, 5 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/bridge/ti-sn65dsi86.c b/drivers/gpu/drm/bridge/ti-sn65dsi86.c
> index e4d9006b59f1..59508e82a991 100644
> --- a/drivers/gpu/drm/bridge/ti-sn65dsi86.c
> +++ b/drivers/gpu/drm/bridge/ti-sn65dsi86.c
> @@ -696,6 +696,7 @@ static struct ti_sn65dsi86 *bridge_to_ti_sn65dsi86(struct drm_bridge *bridge)
>
>  static int ti_sn_attach_host(struct auxiliary_device *adev, struct ti_sn65dsi86 *pdata)
>  {
> +       int ret;
>         int val;
>         struct mipi_dsi_host *host;
>         struct mipi_dsi_device *dsi;
> @@ -720,8 +721,11 @@ static int ti_sn_attach_host(struct auxiliary_device *adev, struct ti_sn65dsi86
>
>         /* check if continuous dsi clock is required or not */
>         pm_runtime_get_sync(dev);
> -       regmap_read(pdata->regmap, SN_DPPLL_SRC_REG, &val);
> +       ret = regmap_read(pdata->regmap, SN_DPPLL_SRC_REG, &val);
>         pm_runtime_put_autosuspend(dev);
> +       if (ret)
> +               return ret;

Seems reasonable to me. I would probably put an error message in this
case, though? I don't think regmap_read() necessarily prints an error
so it would just be a mysterious failure for why things didn't probe,
right?

This also only solves the problems for one of the 4 devices in this
file. I think the GPIO device, PWM device, and DP-AUX device will
still confusingly stick around. It's probably better to add a bogus
regmap read in ti_sn65dsi86_probe().

-Doug
Wolfram Sang March 15, 2025, 9 a.m. UTC | #2
Hi Doug,

> Seems reasonable to me. I would probably put an error message in this
> case, though? I don't think regmap_read() necessarily prints an error
> so it would just be a mysterious failure for why things didn't probe,
> right?

OK, can do that.

> This also only solves the problems for one of the 4 devices in this
> file. I think the GPIO device, PWM device, and DP-AUX device will
> still confusingly stick around. It's probably better to add a bogus
> regmap read in ti_sn65dsi86_probe().

Could be argued. I just wonder about all the other error cases in
ti_sn_attach_host() plus ti_sn_bridge_probe(). They have the same
problem with the other devices dangling?

Happy hacking,

   Wolfram
Doug Anderson March 17, 2025, 3:41 p.m. UTC | #3
Hi,

On Sat, Mar 15, 2025 at 2:00 AM Wolfram Sang
<wsa+renesas@sang-engineering.com> wrote:
>
> Hi Doug,
>
> > Seems reasonable to me. I would probably put an error message in this
> > case, though? I don't think regmap_read() necessarily prints an error
> > so it would just be a mysterious failure for why things didn't probe,
> > right?
>
> OK, can do that.
>
> > This also only solves the problems for one of the 4 devices in this
> > file. I think the GPIO device, PWM device, and DP-AUX device will
> > still confusingly stick around. It's probably better to add a bogus
> > regmap read in ti_sn65dsi86_probe().
>
> Could be argued. I just wonder about all the other error cases in
> ti_sn_attach_host() plus ti_sn_bridge_probe(). They have the same
> problem with the other devices dangling?

They do, though the other ones don't seem quite the same to me. It
feels like an i2c device not actually showing up on the bus is a
_somewhat_ normal/expected error. It also is an error that would
affect all of the other sub-devices, so making sure they're not
dangling is something that is worth doing. It feels like other errors
that ti_sn_attach_host() plus ti_sn_bridge_probe() are likely to face
are either unexpected (like a small memory allocation failing or an
i2c transfer failing after a previous one succeeded) or are errors
where leaving the dangling devices isn't really a problem. For
instance: if somehow you fail to link up to a MIPI source then it
feels OK that the GPIO / PWM and DP-AUX bus parts of the bridge
continue to dangle. You can still use them, right?

-Doug
Wolfram Sang March 17, 2025, 3:55 p.m. UTC | #4
> where leaving the dangling devices isn't really a problem. For
> instance: if somehow you fail to link up to a MIPI source then it
> feels OK that the GPIO / PWM and DP-AUX bus parts of the bridge
> continue to dangle. You can still use them, right?

Ok, convinced. Thanks for the input. Will send another version.
diff mbox series

Patch

diff --git a/drivers/gpu/drm/bridge/ti-sn65dsi86.c b/drivers/gpu/drm/bridge/ti-sn65dsi86.c
index e4d9006b59f1..59508e82a991 100644
--- a/drivers/gpu/drm/bridge/ti-sn65dsi86.c
+++ b/drivers/gpu/drm/bridge/ti-sn65dsi86.c
@@ -696,6 +696,7 @@  static struct ti_sn65dsi86 *bridge_to_ti_sn65dsi86(struct drm_bridge *bridge)
 
 static int ti_sn_attach_host(struct auxiliary_device *adev, struct ti_sn65dsi86 *pdata)
 {
+	int ret;
 	int val;
 	struct mipi_dsi_host *host;
 	struct mipi_dsi_device *dsi;
@@ -720,8 +721,11 @@  static int ti_sn_attach_host(struct auxiliary_device *adev, struct ti_sn65dsi86
 
 	/* check if continuous dsi clock is required or not */
 	pm_runtime_get_sync(dev);
-	regmap_read(pdata->regmap, SN_DPPLL_SRC_REG, &val);
+	ret = regmap_read(pdata->regmap, SN_DPPLL_SRC_REG, &val);
 	pm_runtime_put_autosuspend(dev);
+	if (ret)
+		return ret;
+
 	if (!(val & DPPLL_CLK_SRC_DSICLK))
 		dsi->mode_flags |= MIPI_DSI_CLOCK_NON_CONTINUOUS;