All of lore.kernel.org
 help / color / mirror / Atom feed
From: Matt Roper <matthew.d.roper@intel.com>
To: Shobhit Kumar <shobhit.kumar@intel.com>
Cc: intel-gfx@lists.freedesktop.org
Subject: Re: [v2 2/6] drm/i915/skl+: calculate ddb minimum allocation
Date: Fri, 5 Feb 2016 06:29:48 -0800	[thread overview]
Message-ID: <20160205142948.GV20935@intel.com> (raw)
In-Reply-To: <1453911003-9856-2-git-send-email-shobhit.kumar@intel.com>

On Wed, Jan 27, 2016 at 09:39:59PM +0530, Shobhit Kumar wrote:
> From: "Kumar, Mahesh" <mahesh1.kumar@intel.com>
> 
> don't always use 8 ddb as minimum, instead calculate using proper
> algorithm.
> 
> v2: optimizations as per Matt's comments.
> 
> Cc: matthew.d.roper@intel.com
> Signed-off-by: Kumar, Mahesh <mahesh1.kumar@intel.com>
> ---
>  drivers/gpu/drm/i915/intel_pm.c | 50 ++++++++++++++++++++++++++++++++++++++---
>  1 file changed, 47 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c
> index d55e5d0..708f329 100644
> --- a/drivers/gpu/drm/i915/intel_pm.c
> +++ b/drivers/gpu/drm/i915/intel_pm.c
> @@ -2928,6 +2928,51 @@ skl_get_total_relative_data_rate(const struct intel_crtc_state *cstate)
>  	return total_data_rate;
>  }
>  
> +static uint16_t
> +skl_ddb_min_alloc(const struct intel_crtc *crtc,
> +		const struct drm_plane *plane, int y)
> +{
> +	struct drm_framebuffer *fb = plane->state->fb;
> +	struct intel_plane_state *pstate = to_intel_plane_state(plane->state);
> +	uint32_t src_w, src_h;
> +	uint32_t min_scanlines = 8;
> +	uint8_t bytes_per_pixel;
> +
> +	/* For packed formats, no y-plane, return 0 */
> +	if (y && !fb && !(fb->pixel_format == DRM_FORMAT_NV12))

I think you meant

        if (!fb || (y && fb->pixel_format != DRM_FORMAT_NV12))

right?

> +		return 0;
> +
> +	/* For Non Y-tile return 8-blocks */
> +	if (!(fb->modifier[0] == I915_FORMAT_MOD_Y_TILED) &&
> +	    !(fb->modifier[0] == I915_FORMAT_MOD_Yf_TILED))
> +		return 8;

Minor nitpick, but it might be more readable to use != instead of
pulling the ! outside of the comparison.  On my first quick read I
missed the inversions.


Matt

> +
> +	src_w = drm_rect_width(&pstate->src) >> 16;
> +	src_h = drm_rect_height(&pstate->src) >> 16;
> +
> +	if (intel_rotation_90_or_270(plane->state->rotation))
> +		swap(src_w, src_h);
> +
> +	bytes_per_pixel = y ? drm_format_plane_cpp(fb->pixel_format, 0) :
> +		drm_format_plane_cpp(fb->pixel_format, 1);
> +
> +	if (intel_rotation_90_or_270(plane->state->rotation)) {
> +		switch (bytes_per_pixel) {
> +		case 1:
> +			min_scanlines = 32;
> +			break;
> +		case 2:
> +			min_scanlines = 16;
> +			break;
> +		case 8:
> +			WARN(1, "Unsupported pixel depth for rotation");
> +		}
> +	}
> +
> +	return DIV_ROUND_UP((4 * src_w / (y ? 1 : 2) * bytes_per_pixel), 512) *
> +							min_scanlines/4 + 3;
> +}
> +
>  static void
>  skl_allocate_pipe_ddb(struct intel_crtc_state *cstate,
>  		      struct skl_ddb_allocation *ddb /* out */)
> @@ -2964,7 +3009,6 @@ skl_allocate_pipe_ddb(struct intel_crtc_state *cstate,
>  	/* 1. Allocate the mininum required blocks for each active plane */
>  	for_each_intel_plane_on_crtc(dev, intel_crtc, intel_plane) {
>  		struct drm_plane *plane = &intel_plane->base;
> -		struct drm_framebuffer *fb = plane->state->fb;
>  		int id = skl_wm_plane_id(intel_plane);
>  
>  		if (!to_intel_plane_state(plane->state)->visible)
> @@ -2973,9 +3017,9 @@ skl_allocate_pipe_ddb(struct intel_crtc_state *cstate,
>  		if (plane->type == DRM_PLANE_TYPE_CURSOR)
>  			continue;
>  
> -		minimum[id] = 8;
> +		minimum[id] = skl_ddb_min_alloc(intel_crtc, plane, 0);
>  		alloc_size -= minimum[id];
> -		y_minimum[id] = (fb->pixel_format == DRM_FORMAT_NV12) ? 8 : 0;
> +		y_minimum[id] = skl_ddb_min_alloc(intel_crtc, plane, 1);
>  		alloc_size -= y_minimum[id];
>  	}
>  
> -- 
> 2.5.0
> 

-- 
Matt Roper
Graphics Software Engineer
IoTG Platform Enabling & Development
Intel Corporation
(916) 356-2795
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

  reply	other threads:[~2016-02-05 14:29 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-01-27 16:09 [v2 1/6] drm/i915/skl+: Use plane size for relative data rate calculation Shobhit Kumar
2016-01-27 16:09 ` [v2 2/6] drm/i915/skl+: calculate ddb minimum allocation Shobhit Kumar
2016-02-05 14:29   ` Matt Roper [this message]
2016-02-09  4:51     ` Kumar, Shobhit
2016-01-27 16:10 ` [v2 3/6] drm/i915/skl+: calculate plane pixel rate Shobhit Kumar
2016-02-10 18:53   ` Matt Roper
2016-01-27 16:10 ` [v2 4/6] drm/i915/skl+: Use scaling amount for plane data rate calculation Shobhit Kumar
2016-02-10 19:39   ` Matt Roper
2016-02-11  8:43     ` Daniel Vetter
2016-01-27 16:10 ` [v2 5/6] drm/i915: Add support to parse DMI table and get platform memory info Shobhit Kumar
2016-02-10 22:29   ` Matt Roper
2016-01-27 16:10 ` [v2 6/6] drm/i915/skl: WA for watermark calculation based on Arbitrated Display BW Shobhit Kumar
2016-02-02 13:47 ` [v2 1/6] drm/i915/skl+: Use plane size for relative data rate calculation Kumar, Shobhit
2016-02-05 14:29 ` Matt Roper

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20160205142948.GV20935@intel.com \
    --to=matthew.d.roper@intel.com \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=shobhit.kumar@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.