<p dir="ltr"><br>
On Jan 31, 2015 5:37 PM, "Heiko Stübner" <<a href="mailto:heiko@sntech.de">heiko@sntech.de</a>> wrote:<br>
><br>
> Am Samstag, 31. Januar 2015, 13:43:23 schrieb Daniel Kurtz:<br>
> > Hi Heiko,<br>
> ><br>
> > On Sat, Jan 31, 2015 at 3:28 AM, Heiko Stübner <<a href="mailto:heiko@sntech.de">heiko@sntech.de</a>> wrote:<br>
> > > The function disables the dclk at the beginning, so don't simply return<br>
> > > when an error happens, but instead enable the clock again, so that<br>
> > > enable and disable calls are balanced.<br>
> ><br>
> > This function is a bit of a disaster, and needs fixing some day.<br>
> > AFAICT, the dclk_rst is actually ignored if dclk is disabled, so that<br>
> > part doesn't even work.<br>
> ><br>
> > > ret_clk is introduced to hold the clk_enable result and not mangle the<br>
> > > original error code.<br>
> > ><br>
> > > Signed-off-by: Heiko Stuebner <<a href="mailto:heiko@sntech.de">heiko@sntech.de</a>><br>
> > ><br>
> > > ---<br>
> > ><br>
> > >  drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 18 ++++++++++--------<br>
> > >  1 file changed, 10 insertions(+), 8 deletions(-)<br>
> > ><br>
> > > diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c<br>
> > > b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c index 04b619a..c0387f7<br>
> > > 100644<br>
> > > --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c<br>
> > > +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c<br>
> > > @@ -852,7 +852,7 @@ static int vop_crtc_mode_set(struct drm_crtc *crtc,<br>
> > ><br>
> > >         u16 vsync_len = adjusted_mode->vsync_end -<br>
> > >         adjusted_mode->vsync_start;<br>
> > >         u16 vact_st = adjusted_mode->vtotal - adjusted_mode->vsync_start;<br>
> > >         u16 vact_end = vact_st + vdisplay;<br>
> > ><br>
> > > -       int ret;<br>
> > > +       int ret, ret_clk;<br>
> > ><br>
> > >         uint32_t val;<br>
> > ><br>
> > >         /*<br>
> > ><br>
> > > @@ -874,7 +874,8 @@ static int vop_crtc_mode_set(struct drm_crtc *crtc,<br>
> > ><br>
> > >         default:<br>
> > >                 DRM_ERROR("unsupport connector_type[%d]\n",<br>
> > ><br>
> > >                           vop->connector_type);<br>
> > ><br>
> > > -               return -EINVAL;<br>
> > > +               ret = -EINVAL;<br>
> > > +               goto out;<br>
> > ><br>
> > >         };<br>
> > >         VOP_CTRL_SET(vop, out_mode, vop->connector_out_mode);<br>
> > ><br>
> > > @@ -897,7 +898,7 @@ static int vop_crtc_mode_set(struct drm_crtc *crtc,<br>
> > ><br>
> > >         ret = vop_crtc_mode_set_base(crtc, x, y, fb);<br>
> > >         if (ret)<br>
> > ><br>
> > > -               return ret;<br>
> > > +               goto out;<br>
> > ><br>
> > >         /*<br>
> > ><br>
> > >          * reset dclk, take all mode config affect, so the clk would run<br>
> > >          in<br>
> > ><br>
> > > @@ -908,13 +909,14 @@ static int vop_crtc_mode_set(struct drm_crtc *crtc,<br>
> > ><br>
> > >         reset_control_deassert(vop->dclk_rst);<br>
> > ><br>
> > >         clk_set_rate(vop->dclk, adjusted_mode->clock * 1000);<br>
> > ><br>
> > > -       ret = clk_enable(vop->dclk);<br>
> > > -       if (ret < 0) {<br>
> > > -               dev_err(vop->dev, "failed to enable dclk - %d\n", ret);<br>
> > > -               return ret;<br>
> > > +out:<br>
> > > +       ret_clk = clk_enable(vop->dclk);<br>
> > > +       if (ret_clk < 0) {<br>
> > > +               dev_err(vop->dev, "failed to enable dclk - %d\n",<br>
> > > ret_clk);<br>
> > > +               return ret_clk;<br>
> ><br>
> > Doesn't this swallow ret ?  I thought the point was to still return<br>
> > the original error?<br>
><br>
> I think if even the reenabling of the clock fails, there must be something<br>
> _really_ wrong with the system [enabled before and all] - so if this also<br>
> returns an error after the core functionality failed already, it doesn't<br>
> really matter anymore which error we return :-) .<br>
><br>
> The original point was to not overwrite the actual error (in ret) in the case<br>
> where clk_enable simply returns 0 .</p>
<p dir="ltr">Yeah, that makes more sense :-).</p>
<p dir="ltr">Reviewed-by: Daniel Kurtz <<a href="mailto:djkurtz@chromium.org">djkurtz@chromium.org</a>></p>
<p dir="ltr">><br>
><br>
> Heiko<br>
</p>