[1/2] drm/vc4: Skip ULPS latching when we're in that ULPS state already.
diff mbox

Message ID 20171031193258.17373-1-eric@anholt.net
State New
Headers show

Commit Message

Eric Anholt Oct. 31, 2017, 7:32 p.m. UTC
It seems that trying to go from unlatched to unlatched will time out
waiting for STOP, and we can just skip that.

Signed-off-by: Eric Anholt <eric@anholt.net>
---
 drivers/gpu/drm/vc4/vc4_dsi.c | 5 +++++
 1 file changed, 5 insertions(+)

Comments

Boris Brezillon April 30, 2018, 9:03 a.m. UTC | #1
On Tue, 31 Oct 2017 12:32:57 -0700
Eric Anholt <eric@anholt.net> wrote:

> It seems that trying to go from unlatched to unlatched will time out
> waiting for STOP, and we can just skip that.
> 
> Signed-off-by: Eric Anholt <eric@anholt.net>

Reviewed-by: Boris Brezillon <boris.brezillon@bootlin.com>

> ---
>  drivers/gpu/drm/vc4/vc4_dsi.c | 5 +++++
>  1 file changed, 5 insertions(+)
> 
> diff --git a/drivers/gpu/drm/vc4/vc4_dsi.c b/drivers/gpu/drm/vc4/vc4_dsi.c
> index 94085f8bcd68..8aa897835118 100644
> --- a/drivers/gpu/drm/vc4/vc4_dsi.c
> +++ b/drivers/gpu/drm/vc4/vc4_dsi.c
> @@ -753,6 +753,11 @@ static void vc4_dsi_ulps(struct vc4_dsi *dsi, bool ulps)
>  			 (dsi->lanes > 2 ? DSI1_STAT_PHY_D2_STOP : 0) |
>  			 (dsi->lanes > 3 ? DSI1_STAT_PHY_D3_STOP : 0));
>  	int ret;
> +	bool ulps_currently_enabled = (DSI_PORT_READ(PHY_AFEC0) &
> +				       DSI_PORT_BIT(PHY_AFEC0_LATCH_ULPS));
> +
> +	if (ulps == ulps_currently_enabled)
> +		return;
>  
>  	DSI_PORT_WRITE(STAT, stat_ulps);
>  	DSI_PORT_WRITE(PHYC, DSI_PORT_READ(PHYC) | phyc_ulps);

Patch
diff mbox

diff --git a/drivers/gpu/drm/vc4/vc4_dsi.c b/drivers/gpu/drm/vc4/vc4_dsi.c
index 94085f8bcd68..8aa897835118 100644
--- a/drivers/gpu/drm/vc4/vc4_dsi.c
+++ b/drivers/gpu/drm/vc4/vc4_dsi.c
@@ -753,6 +753,11 @@  static void vc4_dsi_ulps(struct vc4_dsi *dsi, bool ulps)
 			 (dsi->lanes > 2 ? DSI1_STAT_PHY_D2_STOP : 0) |
 			 (dsi->lanes > 3 ? DSI1_STAT_PHY_D3_STOP : 0));
 	int ret;
+	bool ulps_currently_enabled = (DSI_PORT_READ(PHY_AFEC0) &
+				       DSI_PORT_BIT(PHY_AFEC0_LATCH_ULPS));
+
+	if (ulps == ulps_currently_enabled)
+		return;
 
 	DSI_PORT_WRITE(STAT, stat_ulps);
 	DSI_PORT_WRITE(PHYC, DSI_PORT_READ(PHYC) | phyc_ulps);