diff mbox series

drm/i915: Fix skl plane scaling for planner YUV buffers

Message ID 20190508120437.12339-1-shashank.sharma@intel.com (mailing list archive)
State New, archived
Headers show
Series drm/i915: Fix skl plane scaling for planner YUV buffers | expand

Commit Message

Sharma, Shashank May 8, 2019, 12:04 p.m. UTC
From: Lukas Rusak <lorusak@gmail.com>

Plane scaling for YUV planar formats should be max 2 times.

Cc: Maarten Lankhorst <maarten.lankhorst@intel.com>
Cc: Juha-pekka Heikkila <juha-pekka.heikkila@intel.com>
Cc: Shashank Sharma <shashank.sharma@intel.com>

Signed-off-by: Lukas Rusak <lorusak@gmail.com>
---
 drivers/gpu/drm/i915/intel_display.c | 13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)

Comments

Ville Syrjala May 8, 2019, 1:56 p.m. UTC | #1
On Wed, May 08, 2019 at 05:34:37PM +0530, Shashank Sharma wrote:
> From: Lukas Rusak <lorusak@gmail.com>
> 
> Plane scaling for YUV planar formats should be max 2 times.

Nope. Spec says it should be < 2.0 on pre-glk, and < 3.0 on glk+.

> 
> Cc: Maarten Lankhorst <maarten.lankhorst@intel.com>
> Cc: Juha-pekka Heikkila <juha-pekka.heikkila@intel.com>
> Cc: Shashank Sharma <shashank.sharma@intel.com>
> 
> Signed-off-by: Lukas Rusak <lorusak@gmail.com>
> ---
>  drivers/gpu/drm/i915/intel_display.c | 13 ++++++++-----
>  1 file changed, 8 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
> index a351c8e219ba..2ac0a55a9c9f 100644
> --- a/drivers/gpu/drm/i915/intel_display.c
> +++ b/drivers/gpu/drm/i915/intel_display.c
> @@ -13897,7 +13897,7 @@ skl_max_scale(const struct intel_crtc_state *crtc_state,
>  {
>  	struct intel_crtc *crtc = to_intel_crtc(crtc_state->base.crtc);
>  	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
> -	int max_scale, mult;
> +	int max_scale, mult, remainder;
>  	int crtc_clock, max_dotclk, tmpclk1, tmpclk2;
>  
>  	if (!crtc_state->base.enable)
> @@ -13914,12 +13914,15 @@ skl_max_scale(const struct intel_crtc_state *crtc_state,
>  
>  	/*
>  	 * skl max scale is lower of:
> -	 *    close to 3 but not 3, -1 is for that purpose
> -	 *            or
> -	 *    cdclk/crtc_clock
> +	 * for planar YUV formats: 2
> +	 *	or
> +	 * for other formats: close to 3 but not 3, -1 is for that purpose
> +	 *	or
> +	 * cdclk/crtc_clock
>  	 */
>  	mult = is_planar_yuv_format(pixel_format) ? 2 : 3;
> -	tmpclk1 = (1 << 16) * mult - 1;
> +	remainder = is_planar_yuv_format(pixel_format) ? 0 : 1;
> +	tmpclk1 = (1 << 16) * mult - remainder;
>  	tmpclk2 = (1 << 8) * ((max_dotclk << 8) / crtc_clock);
>  	max_scale = min(tmpclk1, tmpclk2);
>  
> -- 
> 2.17.1
> 
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
diff mbox series

Patch

diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index a351c8e219ba..2ac0a55a9c9f 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -13897,7 +13897,7 @@  skl_max_scale(const struct intel_crtc_state *crtc_state,
 {
 	struct intel_crtc *crtc = to_intel_crtc(crtc_state->base.crtc);
 	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
-	int max_scale, mult;
+	int max_scale, mult, remainder;
 	int crtc_clock, max_dotclk, tmpclk1, tmpclk2;
 
 	if (!crtc_state->base.enable)
@@ -13914,12 +13914,15 @@  skl_max_scale(const struct intel_crtc_state *crtc_state,
 
 	/*
 	 * skl max scale is lower of:
-	 *    close to 3 but not 3, -1 is for that purpose
-	 *            or
-	 *    cdclk/crtc_clock
+	 * for planar YUV formats: 2
+	 *	or
+	 * for other formats: close to 3 but not 3, -1 is for that purpose
+	 *	or
+	 * cdclk/crtc_clock
 	 */
 	mult = is_planar_yuv_format(pixel_format) ? 2 : 3;
-	tmpclk1 = (1 << 16) * mult - 1;
+	remainder = is_planar_yuv_format(pixel_format) ? 0 : 1;
+	tmpclk1 = (1 << 16) * mult - remainder;
 	tmpclk2 = (1 << 8) * ((max_dotclk << 8) / crtc_clock);
 	max_scale = min(tmpclk1, tmpclk2);