public inbox for intel-gfx@lists.freedesktop.org
 help / color / mirror / Atom feed
From: Matt Roper <matthew.d.roper@intel.com>
To: Chandra Konduru <chandra.konduru@intel.com>
Cc: daniel.vetter@intel.com, intel-gfx@lists.freedesktop.org,
	ander.conselvan.de.oliveira@intel.com
Subject: Re: [PATCH 04/21] drm/i915: skylake scaler structure definitions
Date: Tue, 17 Mar 2015 09:13:26 -0700	[thread overview]
Message-ID: <20150317161326.GA29959@intel.com> (raw)
In-Reply-To: <1426398946-5900-5-git-send-email-chandra.konduru@intel.com>

On Sat, Mar 14, 2015 at 10:55:29PM -0700, Chandra Konduru wrote:
> skylake scaler structure definitions. scalers live in crtc_state as
> they are pipe resources. They can be used either as plane scaler or
> panel fitter.
> 
> scaler assigned to either plane (for plane scaling) or crtc (for panel
> fitting) is saved in scaler_id in plane_state or crtc_state respectively.
> 
> scaler_id is used instead of scaler pointer in plane or crtc state
> to avoid updating scaler pointer everytime a new crtc_state is created.
> 
> Signed-off-by: Chandra Konduru <chandra.konduru@intel.com>
> ---
>  drivers/gpu/drm/i915/intel_drv.h |   99 ++++++++++++++++++++++++++++++++++++++
>  1 file changed, 99 insertions(+)
> 
> diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
> index 3f7d05e..d9a3b64 100644
> --- a/drivers/gpu/drm/i915/intel_drv.h
> +++ b/drivers/gpu/drm/i915/intel_drv.h
> @@ -256,6 +256,35 @@ struct intel_plane_state {
>  	 * enable/disable the primary plane
>  	 */
>  	bool hides_primary;
> +
> +	/*
> +	 * scaler_id
> +	 *    = -1 : not using a scaler
> +	 *    >=  0 : using a scalers
> +	 *
> +	 * plane requiring a scaler:
> +	 *   - During check_plane, its bit is set in
> +	 *     crtc_state->scaler_state.scaler_users by calling helper function
> +	 *     update_scaler_users.
> +	 *   - scaler_id indicates the scaler it got assigned.
> +	 *
> +	 * plane doesn't require a scaler:
> +	 *   - this can happen when scaling is no more required or plane simply
> +	 *     got disabled.
> +	 *   - During check_plane, corresponding bit is reset in
> +	 *     crtc_state->scaler_state.scaler_users by calling helper function
> +	 *     update_scaler_users.
> +	 *
> +	 *   There are two scenarios:
> +	 *   1. the freed up scaler is assigned to crtc or some other plane
> +	 *      In this case, as part of plane programming scaler_id will be set
> +	 *      to -1 using helper function detach_scalers
> +	 *   2. the freed up scaler is not assigned to anyone
> +	 *      In this case, as part of plane programming scaler registers will
> +	 *      be reset and scaler_id will also be reset to -1 using the same
> +	 *      helper function detach_scalers
> +	 */
> +	int scaler_id;
>  };
>  
>  struct intel_initial_plane_config {
> @@ -265,6 +294,74 @@ struct intel_initial_plane_config {
>  	u32 base;
>  };
>  
> +struct intel_scaler {
> +	int id;
> +	int in_use;
> +	uint32_t mode;
> +	uint32_t filter;
> +
> +	/*
> +	 * Supported scaling ratio is represented as a range in [min max]
> +	 * variables. This range covers both up and downscaling
> +	 * where scaling ratio = (dst * 100)/src.
> +	 * In above range any value:
> +	 *    < 100 represents downscaling coverage
> +	 *    > 100 represents upscaling coverage
> +	 *    = 100 represents no-scaling (i.e., 1:1)
> +	 * e.g., a min value = 50 means -> supports upto 50% of original image
> +	 *       a max value = 200 means -> supports upto 200% of original image
> +	 *
> +	 * if incoming flip requires scaling in the supported [min max] range
> +	 * then requested scaling will be performed.
> +	 */

I've only skimmed a little ahead in the series, so I might have missed
something, but do we really need to track these on a per-scaler basis?
When you use the values here, I think you're always pulling the values
from scaler[0] unconditionally from what I saw so duplicating the values
for each scaler doesn't really help us.

Is it possible to keep just one copy of these min/max values?  On SKL
all of our scalers are homogeneous, so it doesn't feel like there's too
much value to duplicating these values.  If we have a future platform
with heterogeneous scalers, it seems like we can figure out how to
handle that appropriately if/when we get there.

> +	uint32_t min_hsr;
> +	uint32_t max_hsr;
> +	uint32_t min_vsr;
> +	uint32_t max_vsr;
> +	uint32_t min_hvsr;
> +	uint32_t max_hvsr;
> +
> +	uint32_t min_src_w;
> +	uint32_t max_src_w;
> +	uint32_t min_src_h;
> +	uint32_t max_src_h;
> +	uint32_t min_dst_w;
> +	uint32_t max_dst_w;
> +	uint32_t min_dst_h;
> +	uint32_t max_dst_h;
> +};
> +
> +struct intel_crtc_scaler_state {
> +#define INTEL_MAX_SCALERS 2
> +#define SKL_NUM_SCALERS INTEL_MAX_SCALERS
> +	/* scalers available on this crtc */
> +	int num_scalers;

Maybe add .num_scalers to the device_info struct?  I know it doesn't
make much of a difference, but it feels cleaner to have immutable traits
of the hardware in device_info or even the base intel_crtc structure and
leave the state variable for tracking things that can change at runtime.

> +	struct intel_scaler scalers[INTEL_MAX_SCALERS];
> +
> +	/*
> +	 * scaler_users: keeps track of users requesting scalers on this crtc.
> +	 *
> +	 *     If a bit is set, a user is using a scaler.
> +	 *     Here user can be a plane or crtc as defined below:
> +	 *       bits 0-30 - plane (bit position is index from drm_plane_index)
> +	 *       bit 31    - crtc
> +	 *
> +	 * Instead of creating a new index to cover planes and crtc, using
> +	 * existing drm_plane_index for planes which is well less than 31
> +	 * planes and bit 31 for crtc. This should be fine to cover all
> +	 * our platforms.
> +	 *
> +	 * intel_atomic_setup_scalers will setup available scalers to users
> +	 * requesting scalers. It will gracefully fail if request exceeds
> +	 * avilability.
> +	 */
> +#define SKL_CRTC_INDEX 31
> +	unsigned scaler_users;

Might be slightly preferable to use a type with a specific size when
creating a bitmask?  I.e., uint32_t or uint64_t, just to be explicit.

> +
> +	/* scaler used by crtc for panel fitting purpose */
> +	int scaler_id;
> +};
> +
>  struct intel_crtc_state {
>  	struct drm_crtc_state base;
>  
> @@ -391,6 +488,8 @@ struct intel_crtc_state {
>  
>  	bool dp_encoder_is_mst;
>  	int pbn;
> +
> +	struct intel_crtc_scaler_state scaler_state;
>  };
>  
>  struct intel_pipe_wm {
> -- 
> 1.7.9.5
> 

-- 
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:[~2015-03-17 16:13 UTC|newest]

Thread overview: 50+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-03-15  5:55 [PATCH 00/21] skylake display scalers Chandra Konduru
2015-03-15  5:55 ` [PATCH 01/21] drm/i915: Adding drm helper function drm_plane_from_index() Chandra Konduru
2015-03-17 14:05   ` Daniel Vetter
2015-03-17 18:12     ` Konduru, Chandra
2015-03-15  5:55 ` [PATCH 02/21] drm/i915: Register definitions for skylake scalers Chandra Konduru
2015-03-15  5:55 ` [PATCH 03/21] drm/i915: Enable get_colorkey functions for primary plane Chandra Konduru
2015-03-17 14:12   ` Daniel Vetter
2015-03-15  5:55 ` [PATCH 04/21] drm/i915: skylake scaler structure definitions Chandra Konduru
2015-03-17 16:13   ` Matt Roper [this message]
2015-03-17 21:20     ` Konduru, Chandra
2015-03-18  8:00       ` Daniel Vetter
2015-03-18  8:13         ` Daniel Vetter
2015-03-15  5:55 ` [PATCH 05/21] drm/i915: Initialize skylake scalers Chandra Konduru
2015-03-15  5:55 ` [PATCH 06/21] drm/i915: Dump scaler_state too as part of dumping crtc_state Chandra Konduru
2015-03-15  5:55 ` [PATCH 07/21] drm/i915: Helper function to update skylake scaling ratio Chandra Konduru
2015-03-17 16:35   ` Matt Roper
2015-03-17 21:23     ` Konduru, Chandra
2015-03-15  5:55 ` [PATCH 08/21] drm/i915: Add helper function to update scaler_users in crtc_state Chandra Konduru
2015-03-18  8:15   ` Daniel Vetter
2015-03-19 17:43     ` Konduru, Chandra
2015-03-20  9:57       ` Daniel Vetter
2015-03-15  5:55 ` [PATCH 09/21] drm/i915: Add atomic function to setup scalers scalers for a crtc Chandra Konduru
2015-03-15  5:55 ` [PATCH 10/21] drm/i915: Helper function to detach a scaler from a plane or crtc Chandra Konduru
2015-03-15  5:55 ` [PATCH 11/21] drm/i915: Ensure planes begin with no scaler Chandra Konduru
2015-03-15  5:55 ` [PATCH 12/21] drm/i915: Ensure colorkey and scaling aren't enabled at same time Chandra Konduru
2015-03-17 14:16   ` Daniel Vetter
2015-03-17 14:16     ` Chris Wilson
2015-03-17 14:38       ` Daniel Vetter
2015-03-17 15:12         ` Chris Wilson
2015-03-17 18:03           ` Konduru, Chandra
2015-03-15  5:55 ` [PATCH 13/21] drm/i915: Preserve scaler state when clearing crtc_state Chandra Konduru
2015-03-17 14:17   ` Daniel Vetter
2015-03-17 18:11     ` Konduru, Chandra
2015-03-18  6:24       ` Ander Conselvan De Oliveira
2015-03-15  5:55 ` [PATCH 14/21] drm/i915: use current scaler state during readout_hw_state Chandra Konduru
2015-03-17 14:19   ` Daniel Vetter
2015-03-17 18:54     ` Konduru, Chandra
2015-03-18  8:06       ` Daniel Vetter
2015-03-15  5:55 ` [PATCH 15/21] drm/i915: Update scaling ratio as part of crtc_compute_config Chandra Konduru
2015-03-15  5:55 ` [PATCH 16/21] drm/i915: Ensure setting up scalers into staged crtc_state Chandra Konduru
2015-03-15  5:55 ` [PATCH 17/21] drm/i915: copy staged scaler state from drm state to crtc->config Chandra Konduru
2015-03-15  5:55 ` [PATCH 18/21] drm/i915: stage panel fitting scaler request for fixed mode panel Chandra Konduru
2015-03-15  5:55 ` [PATCH 19/21] drm/i915: Enable skylake panel fitting using skylake shared scalers Chandra Konduru
2015-03-17 14:22   ` Daniel Vetter
2015-03-17 20:43     ` Konduru, Chandra
2015-03-18  8:19       ` Daniel Vetter
2015-03-15  5:55 ` [PATCH 20/21] drm/i915: Enable skylake primary plane scaling using " Chandra Konduru
2015-03-15  5:55 ` [PATCH 21/21] drm/i915: Enable skylake sprite " Chandra Konduru
2015-03-17 14:32 ` [PATCH 00/21] skylake display scalers Daniel Vetter
2015-03-17 20:54   ` Konduru, Chandra

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=20150317161326.GA29959@intel.com \
    --to=matthew.d.roper@intel.com \
    --cc=ander.conselvan.de.oliveira@intel.com \
    --cc=chandra.konduru@intel.com \
    --cc=daniel.vetter@intel.com \
    --cc=intel-gfx@lists.freedesktop.org \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox