Message ID | 1385945540-20710-1-git-send-email-laurent.pinchart+renesas@ideasonboard.com (mailing list archive) |
---|---|
State | Accepted |
Headers | show |
On Mon, Dec 02, 2013 at 01:52:20AM +0100, Laurent Pinchart wrote: [...] > diff --git a/drivers/gpu/drm/shmobile/shmob_drm_crtc.c b/drivers/gpu/drm/shmobile/shmob_drm_crtc.c [...] > @@ -170,7 +178,9 @@ static void shmob_drm_crtc_start(struct shmob_drm_crtc *scrtc) > return; > > /* Enable clocks before accessing the hardware. */ > - shmob_drm_clk_on(sdev); > + ret = shmob_drm_clk_on(sdev); > + if (ret < 0) > + return; Perhaps this should be printing an error or using WARN_ON()? Otherwise it might be very difficult to diagnose what's going wrong. Thierry
Hi Thierry, On Tuesday 03 December 2013 10:59:24 Thierry Reding wrote: > On Mon, Dec 02, 2013 at 01:52:20AM +0100, Laurent Pinchart wrote: > [...] > > > diff --git a/drivers/gpu/drm/shmobile/shmob_drm_crtc.c > > b/drivers/gpu/drm/shmobile/shmob_drm_crtc.c > [...] > > > @@ -170,7 +178,9 @@ static void shmob_drm_crtc_start(struct shmob_drm_crtc > > *scrtc) > > return; > > > > /* Enable clocks before accessing the hardware. */ > > - shmob_drm_clk_on(sdev); > > + ret = shmob_drm_clk_on(sdev); > > + if (ret < 0) > > + return; > > Perhaps this should be printing an error or using WARN_ON()? Otherwise > it might be very difficult to diagnose what's going wrong. That's a good point. In practice, as the driver always uses a Renesas SoC MSTP clock, the clock code will print a message to the kernel log though, so I'm not sure whether we should duplicate that here. If you think we should I'll submit a new patch.
On Wed, Dec 04, 2013 at 02:38:21AM +0100, Laurent Pinchart wrote: > Hi Thierry, > > On Tuesday 03 December 2013 10:59:24 Thierry Reding wrote: > > On Mon, Dec 02, 2013 at 01:52:20AM +0100, Laurent Pinchart wrote: > > [...] > > > > > diff --git a/drivers/gpu/drm/shmobile/shmob_drm_crtc.c > > > b/drivers/gpu/drm/shmobile/shmob_drm_crtc.c > > [...] > > > > > @@ -170,7 +178,9 @@ static void shmob_drm_crtc_start(struct shmob_drm_crtc > > > *scrtc) > > > return; > > > > > > /* Enable clocks before accessing the hardware. */ > > > - shmob_drm_clk_on(sdev); > > > + ret = shmob_drm_clk_on(sdev); > > > + if (ret < 0) > > > + return; > > > > Perhaps this should be printing an error or using WARN_ON()? Otherwise > > it might be very difficult to diagnose what's going wrong. > > That's a good point. In practice, as the driver always uses a Renesas SoC MSTP > clock, the clock code will print a message to the kernel log though, so I'm > not sure whether we should duplicate that here. If you think we should I'll > submit a new patch. Is that one of the clocks implemented in drivers/sh/clk? There don't seem to be any error messages in the clk_enable() implementation. Thierry
Hi Thierry, On Wednesday 04 December 2013 11:01:07 Thierry Reding wrote: > On Wed, Dec 04, 2013 at 02:38:21AM +0100, Laurent Pinchart wrote: > > On Tuesday 03 December 2013 10:59:24 Thierry Reding wrote: > > > On Mon, Dec 02, 2013 at 01:52:20AM +0100, Laurent Pinchart wrote: > > > [...] > > > > > > > diff --git a/drivers/gpu/drm/shmobile/shmob_drm_crtc.c > > > > b/drivers/gpu/drm/shmobile/shmob_drm_crtc.c > > > > > > [...] > > > > > > > @@ -170,7 +178,9 @@ static void shmob_drm_crtc_start(struct > > > > shmob_drm_crtc > > > > *scrtc) > > > > > > > > return; > > > > > > > > /* Enable clocks before accessing the hardware. */ > > > > > > > > - shmob_drm_clk_on(sdev); > > > > + ret = shmob_drm_clk_on(sdev); > > > > + if (ret < 0) > > > > + return; > > > > > > Perhaps this should be printing an error or using WARN_ON()? Otherwise > > > it might be very difficult to diagnose what's going wrong. > > > > That's a good point. In practice, as the driver always uses a Renesas SoC > > MSTP clock, the clock code will print a message to the kernel log though, > > so I'm not sure whether we should duplicate that here. If you think we > > should I'll submit a new patch. > > Is that one of the clocks implemented in drivers/sh/clk? Correct, and in drivers/clk/shmobile/clk-mstp.c when http://www.spinics.net/lists/devicetree/msg12696.html will be merged. > There don't seem to be any error messages in the clk_enable() > implementation. There will be one when http://www.spinics.net/lists/linux-sh/msg25650.html will get merged :-) Before that enabling the clock never failed, with the patch applied the failure is logged.
On Wed, Dec 04, 2013 at 03:37:48PM +0100, Laurent Pinchart wrote: > Hi Thierry, > > On Wednesday 04 December 2013 11:01:07 Thierry Reding wrote: > > On Wed, Dec 04, 2013 at 02:38:21AM +0100, Laurent Pinchart wrote: > > > On Tuesday 03 December 2013 10:59:24 Thierry Reding wrote: > > > > On Mon, Dec 02, 2013 at 01:52:20AM +0100, Laurent Pinchart wrote: > > > > [...] > > > > > > > > > diff --git a/drivers/gpu/drm/shmobile/shmob_drm_crtc.c > > > > > b/drivers/gpu/drm/shmobile/shmob_drm_crtc.c > > > > > > > > [...] > > > > > > > > > @@ -170,7 +178,9 @@ static void shmob_drm_crtc_start(struct > > > > > shmob_drm_crtc > > > > > *scrtc) > > > > > > > > > > return; > > > > > > > > > > /* Enable clocks before accessing the hardware. */ > > > > > > > > > > - shmob_drm_clk_on(sdev); > > > > > + ret = shmob_drm_clk_on(sdev); > > > > > + if (ret < 0) > > > > > + return; > > > > > > > > Perhaps this should be printing an error or using WARN_ON()? Otherwise > > > > it might be very difficult to diagnose what's going wrong. > > > > > > That's a good point. In practice, as the driver always uses a Renesas SoC > > > MSTP clock, the clock code will print a message to the kernel log though, > > > so I'm not sure whether we should duplicate that here. If you think we > > > should I'll submit a new patch. > > > > Is that one of the clocks implemented in drivers/sh/clk? > > Correct, and in drivers/clk/shmobile/clk-mstp.c when > http://www.spinics.net/lists/devicetree/msg12696.html will be merged. > > > There don't seem to be any error messages in the clk_enable() > > implementation. > > There will be one when http://www.spinics.net/lists/linux-sh/msg25650.html > will get merged :-) Before that enabling the clock never failed, with the > patch applied the failure is logged. Alright, Reviewed-by: Thierry Reding <treding@nvidia.com>
Hello, On Wednesday 04 December 2013 16:59:22 Thierry Reding wrote: > On Wed, Dec 04, 2013 at 03:37:48PM +0100, Laurent Pinchart wrote: > > On Wednesday 04 December 2013 11:01:07 Thierry Reding wrote: > > > On Wed, Dec 04, 2013 at 02:38:21AM +0100, Laurent Pinchart wrote: > > > > On Tuesday 03 December 2013 10:59:24 Thierry Reding wrote: > > > > > On Mon, Dec 02, 2013 at 01:52:20AM +0100, Laurent Pinchart wrote: > > > > > [...] > > > > > > > > > > > diff --git a/drivers/gpu/drm/shmobile/shmob_drm_crtc.c > > > > > > b/drivers/gpu/drm/shmobile/shmob_drm_crtc.c > > > > > > > > > > [...] > > > > > > > > > > > @@ -170,7 +178,9 @@ static void shmob_drm_crtc_start(struct > > > > > > shmob_drm_crtc *scrtc) > > > > > > return; > > > > > > > > > > > > /* Enable clocks before accessing the hardware. */ > > > > > > - shmob_drm_clk_on(sdev); > > > > > > + ret = shmob_drm_clk_on(sdev); > > > > > > + if (ret < 0) > > > > > > + return; > > > > > > > > > > Perhaps this should be printing an error or using WARN_ON()? > > > > > Otherwise it might be very difficult to diagnose what's going wrong. > > > > > > > > That's a good point. In practice, as the driver always uses a Renesas > > > > SoC MSTP clock, the clock code will print a message to the kernel log > > > > though, so I'm not sure whether we should duplicate that here. If you > > > > think we should I'll submit a new patch. > > > > > > Is that one of the clocks implemented in drivers/sh/clk? > > > > Correct, and in drivers/clk/shmobile/clk-mstp.c when > > http://www.spinics.net/lists/devicetree/msg12696.html will be merged. > > > > > There don't seem to be any error messages in the clk_enable() > > > implementation. > > > > There will be one when http://www.spinics.net/lists/linux-sh/msg25650.html > > will get merged :-) Before that enabling the clock never failed, with the > > patch applied the failure is logged. > > Alright, > > Reviewed-by: Thierry Reding <treding@nvidia.com> Thank you. Dave, could you please pick this patch up for v3.14 ?
diff --git a/drivers/gpu/drm/shmobile/shmob_drm_crtc.c b/drivers/gpu/drm/shmobile/shmob_drm_crtc.c index 562f9a4..0428076 100644 --- a/drivers/gpu/drm/shmobile/shmob_drm_crtc.c +++ b/drivers/gpu/drm/shmobile/shmob_drm_crtc.c @@ -37,14 +37,21 @@ * Clock management */ -static void shmob_drm_clk_on(struct shmob_drm_device *sdev) +static int shmob_drm_clk_on(struct shmob_drm_device *sdev) { - if (sdev->clock) - clk_prepare_enable(sdev->clock); + int ret; + + if (sdev->clock) { + ret = clk_prepare_enable(sdev->clock); + if (ret < 0) + return ret; + } #if 0 if (sdev->meram_dev && sdev->meram_dev->pdev) pm_runtime_get_sync(&sdev->meram_dev->pdev->dev); #endif + + return 0; } static void shmob_drm_clk_off(struct shmob_drm_device *sdev) @@ -161,6 +168,7 @@ static void shmob_drm_crtc_start(struct shmob_drm_crtc *scrtc) struct drm_device *dev = sdev->ddev; struct drm_plane *plane; u32 value; + int ret; if (scrtc->started) return; @@ -170,7 +178,9 @@ static void shmob_drm_crtc_start(struct shmob_drm_crtc *scrtc) return; /* Enable clocks before accessing the hardware. */ - shmob_drm_clk_on(sdev); + ret = shmob_drm_clk_on(sdev); + if (ret < 0) + return; /* Reset and enable the LCDC. */ lcdc_write(sdev, LDCNT2R, lcdc_read(sdev, LDCNT2R) | LDCNT2R_BR);
The clk_prepare_enable() call can fail. Check it's return value. We can't propagate it all the way to the user as the KMS operations in which the clock is enabled return a void. Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com> --- drivers/gpu/drm/shmobile/shmob_drm_crtc.c | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-)