diff options
Diffstat (limited to 'drivers/gpu/drm/vc4/vc4_crtc.c')
| -rw-r--r-- | drivers/gpu/drm/vc4/vc4_crtc.c | 17 | 
1 files changed, 17 insertions, 0 deletions
| diff --git a/drivers/gpu/drm/vc4/vc4_crtc.c b/drivers/gpu/drm/vc4/vc4_crtc.c index 269390bc586e..76657dcdf9b0 100644 --- a/drivers/gpu/drm/vc4/vc4_crtc.c +++ b/drivers/gpu/drm/vc4/vc4_crtc.c @@ -210,6 +210,7 @@ static u32 vc4_get_fifo_full_level(struct vc4_crtc *vc4_crtc, u32 format)  {  	const struct vc4_crtc_data *crtc_data = vc4_crtc_to_vc4_crtc_data(vc4_crtc);  	const struct vc4_pv_data *pv_data = vc4_crtc_to_vc4_pv_data(vc4_crtc); +	struct vc4_dev *vc4 = to_vc4_dev(vc4_crtc->base.dev);  	u32 fifo_len_bytes = pv_data->fifo_depth;  	/* @@ -238,6 +239,22 @@ static u32 vc4_get_fifo_full_level(struct vc4_crtc *vc4_crtc, u32 format)  		if (crtc_data->hvs_output == 5)  			return 32; +		/* +		 * It looks like in some situations, we will overflow +		 * the PixelValve FIFO (with the bit 10 of PV stat being +		 * set) and stall the HVS / PV, eventually resulting in +		 * a page flip timeout. +		 * +		 * Displaying the video overlay during a playback with +		 * Kodi on an RPi3 seems to be a great solution with a +		 * failure rate around 50%. +		 * +		 * Removing 1 from the FIFO full level however +		 * seems to completely remove that issue. +		 */ +		if (!vc4->hvs->hvs5) +			return fifo_len_bytes - 3 * HVS_FIFO_LATENCY_PIX - 1; +  		return fifo_len_bytes - 3 * HVS_FIFO_LATENCY_PIX;  	}  } | 
