diff mbox

drm/sun4i: tcon: Unconditionally reset the TCON

Message ID 20170908041545.14198-1-wens@csie.org (mailing list archive)
State New, archived
Headers show

Commit Message

Chen-Yu Tsai Sept. 8, 2017, 4:15 a.m. UTC
When binding the TCON, we were checking the reset control status and
asserting reset if it wasn't in reset. The check failed to account for
the reset control API returning error codes if the status callback was
not implemented.

Since we want the TCON to be reset in all cases, and re-asserting the
reset control does no harm, just assert the reset unconditionally.

Fixes: 9026e0d122ac ("drm: Add Allwinner A10 Display Engine support")
Signed-off-by: Chen-Yu Tsai <wens@csie.org>
---
 drivers/gpu/drm/sun4i/sun4i_tcon.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

Comments

Maxime Ripard Sept. 8, 2017, 6:42 a.m. UTC | #1
Hi,

On Fri, Sep 08, 2017 at 12:15:45PM +0800, Chen-Yu Tsai wrote:
> When binding the TCON, we were checking the reset control status and
> asserting reset if it wasn't in reset. The check failed to account for
> the reset control API returning error codes if the status callback was
> not implemented.
> 
> Since we want the TCON to be reset in all cases, and re-asserting the
> reset control does no harm, just assert the reset unconditionally.
> 
> Fixes: 9026e0d122ac ("drm: Add Allwinner A10 Display Engine support")
> Signed-off-by: Chen-Yu Tsai <wens@csie.org>
> ---
>  drivers/gpu/drm/sun4i/sun4i_tcon.c | 3 +--
>  1 file changed, 1 insertion(+), 2 deletions(-)
> 
> diff --git a/drivers/gpu/drm/sun4i/sun4i_tcon.c b/drivers/gpu/drm/sun4i/sun4i_tcon.c
> index d9791292553e..eb32676d5b01 100644
> --- a/drivers/gpu/drm/sun4i/sun4i_tcon.c
> +++ b/drivers/gpu/drm/sun4i/sun4i_tcon.c
> @@ -530,8 +530,7 @@ static int sun4i_tcon_bind(struct device *dev, struct device *master,
>  	}
>  
>  	/* Make sure our TCON is reset */
> -	if (!reset_control_status(tcon->lcd_rst))
> -		reset_control_assert(tcon->lcd_rst);
> +	reset_control_assert(tcon->lcd_rst);

That doesn't really reset it if it was already de-asserted. In that
case, the TCON will not be reset, unlike what your commit log says.

Maybe you wanted to use reset_control_reset?

Maxime
Chen-Yu Tsai Sept. 8, 2017, 6:49 a.m. UTC | #2
On Fri, Sep 8, 2017 at 2:42 PM, Maxime Ripard
<maxime.ripard@free-electrons.com> wrote:
> Hi,
>
> On Fri, Sep 08, 2017 at 12:15:45PM +0800, Chen-Yu Tsai wrote:
>> When binding the TCON, we were checking the reset control status and
>> asserting reset if it wasn't in reset. The check failed to account for
>> the reset control API returning error codes if the status callback was
>> not implemented.
>>
>> Since we want the TCON to be reset in all cases, and re-asserting the
>> reset control does no harm, just assert the reset unconditionally.
>>
>> Fixes: 9026e0d122ac ("drm: Add Allwinner A10 Display Engine support")
>> Signed-off-by: Chen-Yu Tsai <wens@csie.org>
>> ---
>>  drivers/gpu/drm/sun4i/sun4i_tcon.c | 3 +--
>>  1 file changed, 1 insertion(+), 2 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/sun4i/sun4i_tcon.c b/drivers/gpu/drm/sun4i/sun4i_tcon.c
>> index d9791292553e..eb32676d5b01 100644
>> --- a/drivers/gpu/drm/sun4i/sun4i_tcon.c
>> +++ b/drivers/gpu/drm/sun4i/sun4i_tcon.c
>> @@ -530,8 +530,7 @@ static int sun4i_tcon_bind(struct device *dev, struct device *master,
>>       }
>>
>>       /* Make sure our TCON is reset */
>> -     if (!reset_control_status(tcon->lcd_rst))
>> -             reset_control_assert(tcon->lcd_rst);
>> +     reset_control_assert(tcon->lcd_rst);
>
> That doesn't really reset it if it was already de-asserted. In that
> case, the TCON will not be reset, unlike what your commit log says.

Why not? It is now asserting the reset control, regardless of the status.

> Maybe you wanted to use reset_control_reset?

If you prefer it, sure. When I did this patch we didn't support the
.reset callback, so this is an explicit assert followed by the existing
deassert.

ChenYu
Maxime Ripard Sept. 8, 2017, 7:47 a.m. UTC | #3
On Fri, Sep 08, 2017 at 02:49:52PM +0800, Chen-Yu Tsai wrote:
> On Fri, Sep 8, 2017 at 2:42 PM, Maxime Ripard
> <maxime.ripard@free-electrons.com> wrote:
> > Hi,
> >
> > On Fri, Sep 08, 2017 at 12:15:45PM +0800, Chen-Yu Tsai wrote:
> >> When binding the TCON, we were checking the reset control status and
> >> asserting reset if it wasn't in reset. The check failed to account for
> >> the reset control API returning error codes if the status callback was
> >> not implemented.
> >>
> >> Since we want the TCON to be reset in all cases, and re-asserting the
> >> reset control does no harm, just assert the reset unconditionally.
> >>
> >> Fixes: 9026e0d122ac ("drm: Add Allwinner A10 Display Engine support")
> >> Signed-off-by: Chen-Yu Tsai <wens@csie.org>
> >> ---
> >>  drivers/gpu/drm/sun4i/sun4i_tcon.c | 3 +--
> >>  1 file changed, 1 insertion(+), 2 deletions(-)
> >>
> >> diff --git a/drivers/gpu/drm/sun4i/sun4i_tcon.c b/drivers/gpu/drm/sun4i/sun4i_tcon.c
> >> index d9791292553e..eb32676d5b01 100644
> >> --- a/drivers/gpu/drm/sun4i/sun4i_tcon.c
> >> +++ b/drivers/gpu/drm/sun4i/sun4i_tcon.c
> >> @@ -530,8 +530,7 @@ static int sun4i_tcon_bind(struct device *dev, struct device *master,
> >>       }
> >>
> >>       /* Make sure our TCON is reset */
> >> -     if (!reset_control_status(tcon->lcd_rst))
> >> -             reset_control_assert(tcon->lcd_rst);
> >> +     reset_control_assert(tcon->lcd_rst);
> >
> > That doesn't really reset it if it was already de-asserted. In that
> > case, the TCON will not be reset, unlike what your commit log says.
> 
> Why not? It is now asserting the reset control, regardless of the
> status.

Oh, right, sorry.

> > Maybe you wanted to use reset_control_reset?
> 
> If you prefer it, sure. When I did this patch we didn't support the
> .reset callback, so this is an explicit assert followed by the existing
> deassert.

Still, if we rework that part, I guess that just using reset
unconditonally would make it more obvious.

Maxime
diff mbox

Patch

diff --git a/drivers/gpu/drm/sun4i/sun4i_tcon.c b/drivers/gpu/drm/sun4i/sun4i_tcon.c
index d9791292553e..eb32676d5b01 100644
--- a/drivers/gpu/drm/sun4i/sun4i_tcon.c
+++ b/drivers/gpu/drm/sun4i/sun4i_tcon.c
@@ -530,8 +530,7 @@  static int sun4i_tcon_bind(struct device *dev, struct device *master,
 	}
 
 	/* Make sure our TCON is reset */
-	if (!reset_control_status(tcon->lcd_rst))
-		reset_control_assert(tcon->lcd_rst);
+	reset_control_assert(tcon->lcd_rst);
 
 	ret = reset_control_deassert(tcon->lcd_rst);
 	if (ret) {