diff mbox

[13/23] drm: omapdrm: crtc: update plane fifos on lcd config change

Message ID 1457455195-1938-14-git-send-email-sre@kernel.org (mailing list archive)
State New, archived
Headers show

Commit Message

Sebastian Reichel March 8, 2016, 4:39 p.m. UTC
Due to a hardware bug, FIFOs thresholds must be
configured very carefully for manually updated
displays.

Signed-off-by: Sebastian Reichel <sre@kernel.org>
---
 drivers/gpu/drm/omapdrm/omap_crtc.c | 4 ++++
 1 file changed, 4 insertions(+)

Comments

Laurent Pinchart March 26, 2016, 5 p.m. UTC | #1
Hi Sebastian,

Thank you for the patch.

On Tuesday 08 Mar 2016 17:39:45 Sebastian Reichel wrote:
> Due to a hardware bug, FIFOs thresholds must be
> configured very carefully for manually updated
> displays.

Could you please provide more information about the bug and how the code 
handles it ?

> Signed-off-by: Sebastian Reichel <sre@kernel.org>
> ---
>  drivers/gpu/drm/omapdrm/omap_crtc.c | 4 ++++
>  1 file changed, 4 insertions(+)
> 
> diff --git a/drivers/gpu/drm/omapdrm/omap_crtc.c
> b/drivers/gpu/drm/omapdrm/omap_crtc.c index 8967013c1fb5..094e89a2fa94
> 100644
> --- a/drivers/gpu/drm/omapdrm/omap_crtc.c
> +++ b/drivers/gpu/drm/omapdrm/omap_crtc.c
> @@ -253,6 +253,10 @@ static void omap_crtc_dss_set_lcd_config(struct
> omap_overlay_manager *mgr, omap_crtc->manually_updated =
> dss_lcd_mgr_config_get_stallmode(config);
> 
>  	dispc_mgr_set_lcd_config(omap_crtc->channel, config);
> +
> +	drm_for_each_plane(plane, dev) {
> +		omap_plane_update_fifo(plane);
> +	}

This seems fishy :-/ To start with you shouldn't touch planes that don't 
belong to this CRTC. Then, updating the FIFO thresholds here in addition to 
omap_plane_atomic_update() makes me wonder if both are needed, and if so, why.

>  }
> 
>  static int omap_crtc_dss_register_framedone(
diff mbox

Patch

diff --git a/drivers/gpu/drm/omapdrm/omap_crtc.c b/drivers/gpu/drm/omapdrm/omap_crtc.c
index 8967013c1fb5..094e89a2fa94 100644
--- a/drivers/gpu/drm/omapdrm/omap_crtc.c
+++ b/drivers/gpu/drm/omapdrm/omap_crtc.c
@@ -253,6 +253,10 @@  static void omap_crtc_dss_set_lcd_config(struct omap_overlay_manager *mgr,
 	omap_crtc->manually_updated = dss_lcd_mgr_config_get_stallmode(config);
 
 	dispc_mgr_set_lcd_config(omap_crtc->channel, config);
+
+	drm_for_each_plane(plane, dev) {
+		omap_plane_update_fifo(plane);
+	}
 }
 
 static int omap_crtc_dss_register_framedone(