public inbox for intel-gfx@lists.freedesktop.org
 help / color / mirror / Atom feed
From: "Ville Syrjälä" <ville.syrjala@linux.intel.com>
To: Damien Lespiau <damien.lespiau@intel.com>
Cc: intel-gfx@lists.freedesktop.org, Pradeep Bhat <pradeep.bhat@intel.com>
Subject: Re: [PATCH 47/89 v11] drm/i915/skl: SKL Watermark Computation
Date: Wed, 29 Oct 2014 19:07:58 +0200	[thread overview]
Message-ID: <20141029170758.GC10649@intel.com> (raw)
In-Reply-To: <1411470830-3758-1-git-send-email-damien.lespiau@intel.com>

On Tue, Sep 23, 2014 at 12:13:50PM +0100, Damien Lespiau wrote:
> From: Pradeep Bhat <pradeep.bhat@intel.com>
> 
> This patch implements the watermark algorithm and its necessary
> functions. Two function pointers skl_update_wm and
> skl_update_sprite_wm are provided. The skl_update_wm will update
> the watermarks for the crtc provided as an argument and then
> checks for change in DDB allocation for other active pipes and
> recomputes the watermarks for those Pipes and planes as well.
> Finally it does the register programming for all dirty pipes.
> The trigger of the Watermark double buffer registers will have
> to be once the plane configurations are done by the caller.
> 
> v2: fixed the divide-by-0 error in the results computation func.
>     Also reworked the PLANE_WM register values computation func to
>     make it more compact. Incorporated all other review comments
>     from Damien.
> 
> v3: Changed the skl_compute_plane_wm function to now return success
>     or failure. Also the result blocks and lines are computed here
>     instead of in skl_compute_wm_results function.
> 
> v4: Adjust skl_ddb_alloc_changed() to the new planes/cursor split
>     (Damien)
> 
> v5: Reworked the affected functions to implement new plane/cursor
>     split.
> 
> v6: Rework the logic that triggers the DDB allocation and WM computation
>     of skl_update_other_pipe_wm() to not depend on non-computed DDB
>     values.
>     Always give a valid cursor_width (at boot it's 0) to keep the
>     invariant that we consider the cursor plane always enabled.
>     Otherwise we end up dividing by 0 in skl_compute_plane_wm()
>     (Damien Lespiau)
> 
> v7: Spell out allocation
>     skl_ddb_ functions should have the ddb as first argument
>     Make the skl_ddb_alloc_changed() parameters const
>     (Damien)
> 
> v8: Rebase on top of the crtc->primary changes
> 
> v9: Split the staging results structure to not exceed the 1Kb stack
>     allocation in skl_update_wm()
> 
> v10: Make skl_pipe_pixel_rate() take a pointer to the pipe config
>      Add a comment about overflow considerations for skl_wm_method1()
>      Various additions of const
>      Various use of sizeof(variable) instead of sizeof(type)
>      Various move of variable definitons to a narrower scope
>      Zero initialize some stack allocated structures to make sure we
>      don't have garbage in case we don't write all the values
>      (Ville)
> 
> v11: Remove non-necessary default number of blocks/lines when the plane
>      is disabled (Ville)
> 
> Signed-off-by: Pradeep Bhat <pradeep.bhat@intel.com>
> Signed-off-by: Damien Lespiau <damien.lespiau@intel.com>

Looks OK. The fixup to move the validity check still seems to need a
bit of tweaking but otherwise I think it's sane enough.

I seem to recall that I went through all of the little details the
first time around, so I decided to not do that this time. Hopefully
my memory is correct ;)

Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>

> ---
>  drivers/gpu/drm/i915/i915_drv.h |  12 +-
>  drivers/gpu/drm/i915/intel_pm.c | 422 ++++++++++++++++++++++++++++++++++++++++
>  2 files changed, 433 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
> index 0301a91..cde5136 100644
> --- a/drivers/gpu/drm/i915/i915_drv.h
> +++ b/drivers/gpu/drm/i915/i915_drv.h
> @@ -1722,8 +1722,18 @@ struct drm_i915_private {
>  		 */
>  		uint16_t skl_latency[8];
>  
> +		/*
> +		 * The skl_wm_values structure is a bit too big for stack
> +		 * allocation, so we keep the staging struct where we store
> +		 * intermediate results here instead.
> +		 */
> +		struct skl_wm_values skl_results;
> +
>  		/* current hardware state */
> -		struct ilk_wm_values hw;
> +		union {
> +			struct ilk_wm_values hw;
> +			struct skl_wm_values skl_hw;
> +		};
>  	} wm;
>  
>  	struct i915_runtime_pm pm;
> diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c
> index 768890e..e69a833 100644
> --- a/drivers/gpu/drm/i915/intel_pm.c
> +++ b/drivers/gpu/drm/i915/intel_pm.c
> @@ -2957,6 +2957,426 @@ static bool ilk_disable_lp_wm(struct drm_device *dev)
>  	return _ilk_disable_lp_wm(dev_priv, WM_DIRTY_LP_ALL);
>  }
>  
> +static uint32_t skl_pipe_pixel_rate(const struct intel_crtc_config *config)
> +{
> +	/* TODO: Take into account the scalers once we support them */
> +	return config->adjusted_mode.crtc_clock;
> +}
> +
> +/*
> + * The max latency should be 257 (max the punit can code is 255 and we add 2us
> + * for the read latency) and bytes_per_pixel should always be <= 8, so that
> + * should allow pixel_rate up to ~2 GHz which seems sufficient since max
> + * 2xcdclk is 1350 MHz and the pixel rate should never exceed that.
> +*/
> +static uint32_t skl_wm_method1(uint32_t pixel_rate, uint8_t bytes_per_pixel,
> +			       uint32_t latency)
> +{
> +	uint32_t wm_intermediate_val, ret;
> +
> +	if (latency == 0)
> +		return UINT_MAX;
> +
> +	wm_intermediate_val = latency * pixel_rate * bytes_per_pixel;
> +	ret = DIV_ROUND_UP(wm_intermediate_val, 1000);
> +
> +	return ret;
> +}
> +
> +static uint32_t skl_wm_method2(uint32_t pixel_rate, uint32_t pipe_htotal,
> +			       uint32_t horiz_pixels, uint8_t bytes_per_pixel,
> +			       uint32_t latency)
> +{
> +	uint32_t ret, plane_bytes_per_line, wm_intermediate_val;
> +
> +	if (latency == 0)
> +		return UINT_MAX;
> +
> +	plane_bytes_per_line = horiz_pixels * bytes_per_pixel;
> +	wm_intermediate_val = latency * pixel_rate;
> +	ret = DIV_ROUND_UP(wm_intermediate_val, pipe_htotal * 1000) *
> +				plane_bytes_per_line;
> +
> +	return ret;
> +}
> +
> +static void skl_compute_transition_wm(struct drm_crtc *crtc,
> +				  struct skl_pipe_wm_parameters *params,
> +				  struct skl_pipe_wm *pipe_wm)
> +{
> +	/*
> +	 * For now it is suggested to use the LP0 wm val of corresponding
> +	 * plane as transition wm val. This is done while computing results.
> +	 */
> +	if (!params->active)
> +		return;
> +}
> +
> +static uint32_t
> +skl_compute_linetime_wm(struct drm_crtc *crtc, struct skl_pipe_wm_parameters *p)
> +{
> +	if (!intel_crtc_active(crtc))
> +		return 0;
> +
> +	return DIV_ROUND_UP(8 * p->pipe_htotal * 1000, p->pixel_rate);
> +
> +}
> +
> +static bool skl_ddb_allocation_changed(const struct skl_ddb_allocation *new_ddb,
> +				       const struct intel_crtc *intel_crtc)
> +{
> +	struct drm_device *dev = intel_crtc->base.dev;
> +	struct drm_i915_private *dev_priv = dev->dev_private;
> +	const struct skl_ddb_allocation *cur_ddb = &dev_priv->wm.skl_hw.ddb;
> +	enum pipe pipe = intel_crtc->pipe;
> +
> +	if (memcmp(new_ddb->plane[pipe], cur_ddb->plane[pipe],
> +		   sizeof(new_ddb->plane[pipe])))
> +		return true;
> +
> +	if (memcmp(&new_ddb->cursor[pipe], &cur_ddb->cursor[pipe],
> +		    sizeof(new_ddb->cursor[pipe])))
> +		return true;
> +
> +	return false;
> +}
> +
> +static void skl_compute_wm_global_parameters(struct drm_device *dev,
> +					     struct intel_wm_config *config)
> +{
> +	struct drm_crtc *crtc;
> +	struct drm_plane *plane;
> +
> +	list_for_each_entry(crtc, &dev->mode_config.crtc_list, head)
> +		config->num_pipes_active += intel_crtc_active(crtc);
> +
> +	/* FIXME: I don't think we need those two global parameters on SKL */
> +	list_for_each_entry(plane, &dev->mode_config.plane_list, head) {
> +		struct intel_plane *intel_plane = to_intel_plane(plane);
> +
> +		config->sprites_enabled |= intel_plane->wm.enabled;
> +		config->sprites_scaled |= intel_plane->wm.scaled;
> +	}
> +}
> +
> +static void skl_compute_wm_pipe_parameters(struct drm_crtc *crtc,
> +					   struct skl_pipe_wm_parameters *p)
> +{
> +	struct drm_device *dev = crtc->dev;
> +	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
> +	enum pipe pipe = intel_crtc->pipe;
> +	struct drm_plane *plane;
> +	int i = 1; /* Index for sprite planes start */
> +
> +	p->active = intel_crtc_active(crtc);
> +	if (p->active) {
> +		p->pipe_htotal = intel_crtc->config.adjusted_mode.crtc_htotal;
> +		p->pixel_rate = skl_pipe_pixel_rate(&intel_crtc->config);
> +
> +		/*
> +		 * For now, assume primary and cursor planes are always enabled.
> +		 */
> +		p->plane[0].enabled = true;
> +		p->plane[0].bytes_per_pixel =
> +			crtc->primary->fb->bits_per_pixel / 8;
> +		p->plane[0].horiz_pixels = intel_crtc->config.pipe_src_w;
> +		p->plane[0].vert_pixels = intel_crtc->config.pipe_src_h;
> +
> +		p->cursor.enabled = true;
> +		p->cursor.bytes_per_pixel = 4;
> +		p->cursor.horiz_pixels = intel_crtc->cursor_width ?
> +					 intel_crtc->cursor_width : 64;
> +	}
> +
> +	list_for_each_entry(plane, &dev->mode_config.plane_list, head) {
> +		struct intel_plane *intel_plane = to_intel_plane(plane);
> +
> +		if (intel_plane->pipe == pipe)
> +			p->plane[i++] = intel_plane->wm;
> +	}
> +}
> +
> +static bool skl_compute_plane_wm(struct skl_pipe_wm_parameters *p,
> +				   struct intel_plane_wm_parameters *p_params,
> +				   uint16_t max_page_buff_alloc,
> +				   uint32_t mem_value,
> +				   uint16_t *res_blocks, /* out */
> +				   uint8_t *res_lines /* out */)
> +{
> +	uint32_t method1, method2, plane_bytes_per_line;
> +	uint32_t result_bytes;
> +
> +	if (!p->active || !p_params->enabled)
> +		return false;
> +
> +	method1 = skl_wm_method1(p->pixel_rate,
> +				 p_params->bytes_per_pixel,
> +				 mem_value);
> +	method2 = skl_wm_method2(p->pixel_rate,
> +				 p->pipe_htotal,
> +				 p_params->horiz_pixels,
> +				 p_params->bytes_per_pixel,
> +				 mem_value);
> +
> +	plane_bytes_per_line = p_params->horiz_pixels *
> +					p_params->bytes_per_pixel;
> +
> +	/* For now xtile and linear */
> +	if (((max_page_buff_alloc * 512) / plane_bytes_per_line) >= 1)
> +		result_bytes = min(method1, method2);
> +	else
> +		result_bytes = method1;
> +
> +	*res_blocks = DIV_ROUND_UP(result_bytes, 512) + 1;
> +	*res_lines = DIV_ROUND_UP(result_bytes, plane_bytes_per_line);
> +
> +	return true;
> +}
> +
> +static void skl_compute_wm_level(const struct drm_i915_private *dev_priv,
> +				 struct skl_ddb_allocation *ddb,
> +				 struct skl_pipe_wm_parameters *p,
> +				 enum pipe pipe,
> +				 int level,
> +				 int num_planes,
> +				 struct skl_wm_level *result)
> +{
> +	uint16_t latency = dev_priv->wm.skl_latency[level];
> +	uint16_t ddb_blocks;
> +	int i;
> +
> +	for (i = 0; i < num_planes; i++) {
> +		ddb_blocks = skl_ddb_entry_size(&ddb->plane[pipe][i]);
> +
> +		result->plane_en[i] = skl_compute_plane_wm(p, &p->plane[i],
> +						ddb_blocks,
> +						latency,
> +						&result->plane_res_b[i],
> +						&result->plane_res_l[i]);
> +	}
> +
> +	ddb_blocks = skl_ddb_entry_size(&ddb->cursor[pipe]);
> +	result->cursor_en = skl_compute_plane_wm(p, &p->cursor, ddb_blocks,
> +						 latency, &result->cursor_res_b,
> +						 &result->cursor_res_l);
> +}
> +
> +static void skl_compute_pipe_wm(struct drm_crtc *crtc,
> +				struct skl_ddb_allocation *ddb,
> +				struct skl_pipe_wm_parameters *params,
> +				struct skl_pipe_wm *pipe_wm)
> +{
> +	struct drm_device *dev = crtc->dev;
> +	const struct drm_i915_private *dev_priv = dev->dev_private;
> +	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
> +	int level, max_level = ilk_wm_max_level(dev);
> +
> +	for (level = 0; level <= max_level; level++) {
> +		skl_compute_wm_level(dev_priv, ddb, params, intel_crtc->pipe,
> +				     level, intel_num_planes(intel_crtc),
> +				     &pipe_wm->wm[level]);
> +	}
> +	pipe_wm->linetime = skl_compute_linetime_wm(crtc, params);
> +
> +	skl_compute_transition_wm(crtc, params, pipe_wm);
> +}
> +
> +static void skl_compute_wm_results(struct drm_device *dev,
> +				   struct skl_pipe_wm_parameters *p,
> +				   struct skl_pipe_wm *p_wm,
> +				   struct skl_wm_values *r,
> +				   struct intel_crtc *intel_crtc)
> +{
> +	int level, max_level = ilk_wm_max_level(dev);
> +	enum pipe pipe = intel_crtc->pipe;
> +
> +	for (level = 0; level <= max_level; level++) {
> +		uint16_t ddb_blocks;
> +		uint32_t temp;
> +		int i;
> +
> +		for (i = 0; i < intel_num_planes(intel_crtc); i++) {
> +			temp = 0;
> +			ddb_blocks = skl_ddb_entry_size(&r->ddb.plane[pipe][i]);
> +
> +			if ((p_wm->wm[level].plane_res_b[i] > ddb_blocks) ||
> +				(p_wm->wm[level].plane_res_l[i] > 31))
> +				p_wm->wm[level].plane_en[i] = false;
> +
> +			temp |= p_wm->wm[level].plane_res_l[i] <<
> +					PLANE_WM_LINES_SHIFT;
> +			temp |= p_wm->wm[level].plane_res_b[i];
> +			if (p_wm->wm[level].plane_en[i])
> +				temp |= PLANE_WM_EN;
> +
> +			r->plane[pipe][i][level] = temp;
> +			/* Use the LP0 WM value for transition WM for now. */
> +			if (level == 0)
> +				r->plane_trans[pipe][i] = temp;
> +		}
> +
> +		temp = 0;
> +		ddb_blocks = skl_ddb_entry_size(&r->ddb.cursor[pipe]);
> +
> +		if ((p_wm->wm[level].cursor_res_b > ddb_blocks) ||
> +			(p_wm->wm[level].cursor_res_l > 31))
> +			p_wm->wm[level].cursor_en = false;
> +
> +		temp |= p_wm->wm[level].cursor_res_l << PLANE_WM_LINES_SHIFT;
> +		temp |= p_wm->wm[level].cursor_res_b;
> +
> +		if (p_wm->wm[level].cursor_en)
> +			temp |= PLANE_WM_EN;
> +
> +		r->cursor[pipe][level] = temp;
> +		/* Use the LP0 WM value for transition WM for now. */
> +		if (level == 0)
> +			r->cursor_trans[pipe] = temp;
> +
> +	}
> +
> +	r->wm_linetime[pipe] = p_wm->linetime;
> +}
> +
> +static void skl_write_wm_values(struct drm_i915_private *dev_priv,
> +				const struct skl_wm_values *new)
> +{
> +	struct drm_device *dev = dev_priv->dev;
> +	struct intel_crtc *crtc;
> +
> +	list_for_each_entry(crtc, &dev->mode_config.crtc_list, base.head) {
> +		int i, level, max_level = ilk_wm_max_level(dev);
> +		enum pipe pipe = crtc->pipe;
> +
> +		if (new->dirty[pipe]) {
> +			I915_WRITE(PIPE_WM_LINETIME(pipe),
> +					new->wm_linetime[pipe]);
> +
> +			for (level = 0; level <= max_level; level++) {
> +				for (i = 0; i < intel_num_planes(crtc); i++)
> +					I915_WRITE(PLANE_WM(pipe, i, level),
> +						new->plane[pipe][i][level]);
> +				I915_WRITE(CUR_WM(pipe, level),
> +					new->cursor[pipe][level]);
> +			}
> +			for (i = 0; i < intel_num_planes(crtc); i++)
> +				I915_WRITE(PLANE_WM_TRANS(pipe, i),
> +						new->plane_trans[pipe][i]);
> +			I915_WRITE(CUR_WM_TRANS(pipe), new->cursor_trans[pipe]);
> +		}
> +	}
> +
> +	dev_priv->wm.skl_hw = *new;
> +}
> +
> +static bool skl_update_pipe_wm(struct drm_crtc *crtc,
> +			       struct skl_pipe_wm_parameters *params,
> +			       struct intel_wm_config *config,
> +			       struct skl_ddb_allocation *ddb, /* out */
> +			       struct skl_pipe_wm *pipe_wm /* out */)
> +{
> +	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
> +
> +	skl_compute_wm_pipe_parameters(crtc, params);
> +	skl_compute_pipe_wm(crtc, ddb, params, pipe_wm);
> +
> +	if (!memcmp(&intel_crtc->wm.skl_active, pipe_wm, sizeof(*pipe_wm)))
> +		return false;
> +
> +	intel_crtc->wm.skl_active = *pipe_wm;
> +	return true;
> +}
> +
> +static void skl_update_other_pipe_wm(struct drm_device *dev,
> +				     struct drm_crtc *crtc,
> +				     struct intel_wm_config *config,
> +				     struct skl_wm_values *r)
> +{
> +	struct intel_crtc *intel_crtc;
> +	struct intel_crtc *this_crtc = to_intel_crtc(crtc);
> +
> +	/*
> +	 * If the WM update hasn't changed the allocation for this_crtc (the
> +	 * crtc we are currently computing the new WM values for), other
> +	 * enabled crtcs will keep the same allocation and we don't need to
> +	 * recompute anything for them.
> +	 */
> +	if (!skl_ddb_allocation_changed(&r->ddb, this_crtc))
> +		return;
> +
> +	/*
> +	 * Otherwise, because of this_crtc being freshly enabled/disabled, the
> +	 * other active pipes need new DDB allocation and WM values.
> +	 */
> +	list_for_each_entry(intel_crtc, &dev->mode_config.crtc_list,
> +				base.head) {
> +		struct skl_pipe_wm_parameters params = {};
> +		struct skl_pipe_wm pipe_wm = {};
> +		bool wm_changed;
> +
> +		if (this_crtc->pipe == intel_crtc->pipe)
> +			continue;
> +
> +		if (!intel_crtc->active)
> +			continue;
> +
> +		wm_changed = skl_update_pipe_wm(&intel_crtc->base,
> +						&params, config,
> +						&r->ddb, &pipe_wm);
> +
> +		/*
> +		 * If we end up re-computing the other pipe WM values, it's
> +		 * because it was really needed, so we expect the WM values to
> +		 * be different.
> +		 */
> +		WARN_ON(!wm_changed);
> +
> +		skl_compute_wm_results(dev, &params, &pipe_wm, r, intel_crtc);
> +		r->dirty[intel_crtc->pipe] = true;
> +	}
> +}
> +
> +static void skl_update_wm(struct drm_crtc *crtc)
> +{
> +	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
> +	struct drm_device *dev = crtc->dev;
> +	struct drm_i915_private *dev_priv = dev->dev_private;
> +	struct skl_pipe_wm_parameters params = {};
> +	struct skl_wm_values *results = &dev_priv->wm.skl_results;
> +	struct skl_pipe_wm pipe_wm = {};
> +	struct intel_wm_config config = {};
> +
> +	memset(results, 0, sizeof(*results));
> +
> +	skl_compute_wm_global_parameters(dev, &config);
> +
> +	if (!skl_update_pipe_wm(crtc, &params, &config,
> +				&results->ddb, &pipe_wm))
> +		return;
> +
> +	skl_compute_wm_results(dev, &params, &pipe_wm, results, intel_crtc);
> +	results->dirty[intel_crtc->pipe] = true;
> +
> +	skl_update_other_pipe_wm(dev, crtc, &config, results);
> +	skl_write_wm_values(dev_priv, results);
> +}
> +
> +static void
> +skl_update_sprite_wm(struct drm_plane *plane, struct drm_crtc *crtc,
> +		     uint32_t sprite_width, uint32_t sprite_height,
> +		     int pixel_size, bool enabled, bool scaled)
> +{
> +	struct intel_plane *intel_plane = to_intel_plane(plane);
> +
> +	intel_plane->wm.enabled = enabled;
> +	intel_plane->wm.scaled = scaled;
> +	intel_plane->wm.horiz_pixels = sprite_width;
> +	intel_plane->wm.vert_pixels = sprite_height;
> +	intel_plane->wm.bytes_per_pixel = pixel_size;
> +
> +	skl_update_wm(crtc);
> +}
> +
>  static void ilk_update_wm(struct drm_crtc *crtc)
>  {
>  	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
> @@ -7486,6 +7906,8 @@ void intel_init_pm(struct drm_device *dev)
>  		skl_setup_wm_latency(dev);
>  
>  		dev_priv->display.init_clock_gating = gen9_init_clock_gating;
> +		dev_priv->display.update_wm = skl_update_wm;
> +		dev_priv->display.update_sprite_wm = skl_update_sprite_wm;
>  	} else if (HAS_PCH_SPLIT(dev)) {
>  		ilk_setup_wm_latency(dev);
>  
> -- 
> 1.8.3.1

-- 
Ville Syrjälä
Intel OTC
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

  reply	other threads:[~2014-10-29 17:09 UTC|newest]

Thread overview: 286+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-09-04 11:26 [PATCH 00/89] Basic Skylake enabling Damien Lespiau
2014-09-04 11:26 ` [PATCH 01/89] drm/i915/skl: Add the Skylake PCI ids Damien Lespiau
2014-09-04 11:26 ` [PATCH 02/89] drm/i915/skl: Add an IS_GEN9() define Damien Lespiau
2014-09-04 11:26 ` [PATCH 03/89] drm/i915/skl: Add an IS_SKYLAKE macro Damien Lespiau
2014-09-04 11:26 ` [PATCH 04/89] drm/i915/skl: SKL FBC enablement Damien Lespiau
2014-09-04 11:26 ` [PATCH 05/89] drm/i915/skl: i915_swizzle_info gen9 fix Damien Lespiau
2014-09-04 13:14   ` Daniel Vetter
2014-09-04 15:26     ` Damien Lespiau
2014-09-04 11:26 ` [PATCH 06/89] drm/i915/skl: Fence registers on SKL are the same as SNB Damien Lespiau
2014-09-04 11:26 ` [PATCH 07/89] drm/i915/skl: Provide a placeholder for init_clock_gating() Damien Lespiau
2014-09-04 11:26 ` [PATCH 08/89] drm/i915/skl: Use gen8_ring_dispatch_execbuffer() on GEN9 Damien Lespiau
2014-09-16 14:53   ` Thomas Wood
2014-09-19 11:09     ` Damien Lespiau
2014-09-04 11:26 ` [PATCH 09/89] drm/i915/skl: Skylake shares the interrupt logic with Broadwell Damien Lespiau
2014-09-04 11:26 ` [PATCH 10/89] drm/i915/skl: don't set the AsyncFlip performance mode for Gen9+ Damien Lespiau
2014-09-04 11:26 ` [PATCH 11/89] drm/i915/skl: Framebuffers need to be aligned to 256Kb on Skylake Damien Lespiau
2014-09-16 14:54   ` Thomas Wood
2014-09-19 11:26     ` [PATCH 11/89 v2] drm/i915/skl: Framebuffers need to be aligned to 256KB " Damien Lespiau
2014-09-19 13:46       ` Thomas Wood
2014-09-04 11:26 ` [PATCH 12/89] drm/i915/skl: Implement thew new update_plane() for primary planes Damien Lespiau
2014-09-17  0:49   ` Rodrigo Vivi
2014-09-22 11:18     ` [PATCH 12/89 v8] drm/i915/skl: Implement the " Damien Lespiau
2014-09-04 11:26 ` [PATCH 13/89] drm/i915/skl: Don't create a VGA connector on Skylake Damien Lespiau
2014-09-04 11:26 ` [PATCH 14/89] drm/i915/skl: Don't try to read out the PCH transcoder state if not present Damien Lespiau
2014-09-04 11:26 ` [PATCH 15/89] drm/i915/skl: Program the DDI buffer translation tables Damien Lespiau
2014-09-04 18:58   ` [PATCH 15/89 v7] " Damien Lespiau
2014-09-04 11:26 ` [PATCH 16/89] drm/i915/skl: Add support for DP voltage swings and pre-emphasis Damien Lespiau
2014-09-04 11:26 ` [PATCH 17/89] drm/i915/skl: Skylake doesn't need the DP AUX clock divider programmed Damien Lespiau
2014-09-04 11:26 ` [PATCH 18/89] drm/i915/skl: Skylake moves AUX_CTL from PCH to CPU Damien Lespiau
2014-09-04 11:26 ` [PATCH 19/89] drm/i915/skl: Add the additional graphics stolen sizes Damien Lespiau
2014-09-04 11:26 ` [PATCH 20/89] drm/i915/skl: gen9 uses the same bind_vma() vfuncs as gen6+ Damien Lespiau
2014-09-04 11:26 ` [PATCH 21/89] drm/i915/skl: Implement the get_aux_clock_divider() DP vfunc Damien Lespiau
2014-09-17  1:12   ` Rodrigo Vivi
2014-09-22 13:21     ` Damien Lespiau
2014-09-22 19:33       ` Rodrigo Vivi
2014-09-04 11:26 ` [PATCH 22/89] drm/i915/skl: Provide a get_aux_send_ctl() vfunc for skylake Damien Lespiau
2014-09-17  1:16   ` Rodrigo Vivi
2014-09-04 11:26 ` [PATCH 23/89] drm/i915/skl: Initialize PPGTT like gen8 Damien Lespiau
2014-09-17  1:17   ` Rodrigo Vivi
2014-09-04 11:26 ` [PATCH 24/89] drm/i915/skl: Allow the reg_read ioctl to return RCS_TIMESTAMP Damien Lespiau
2014-09-17  1:27   ` Rodrigo Vivi
2014-09-22 13:27     ` Damien Lespiau
2014-09-04 11:26 ` [PATCH 25/89] drm/i915/skl: report the same INSTDONE registers as gen8 Damien Lespiau
2014-09-17  1:28   ` Rodrigo Vivi
2014-09-04 11:26 ` [PATCH 26/89] drm/i915/skl: Report the PDP regs as in gen8 Damien Lespiau
2014-09-17  1:33   ` Rodrigo Vivi
2014-09-04 11:26 ` [PATCH 27/89] drm/i915/skl: SKL shares the same underrun interrupt as BDW Damien Lespiau
2014-09-17  1:39   ` Rodrigo Vivi
2014-09-04 11:26 ` [PATCH 28/89] drm/i915/skl: SKL pipe misc programming Damien Lespiau
2014-09-17  1:43   ` Rodrigo Vivi
2014-09-04 11:26 ` [PATCH 29/89] drm/i915/skl: vfuncs for skl eld and global resource Damien Lespiau
2014-09-17  1:50   ` Rodrigo Vivi
2014-09-22 13:32     ` Damien Lespiau
2014-09-04 11:26 ` [PATCH 30/89] drm/i915/skl: SKL backlight enabling Damien Lespiau
2014-09-17  1:56   ` Rodrigo Vivi
2014-09-17  9:09     ` Jani Nikula
2014-09-17 13:46       ` Rodrigo Vivi
2014-09-17 14:56         ` Rodrigo Vivi
2014-09-04 11:26 ` [PATCH 31/89] drm/i915/skl: Restore pipe B/C interrupts Damien Lespiau
2014-09-04 11:26 ` [PATCH 32/89] drm/i915/skl: Adjust the display engine interrupts Damien Lespiau
2014-09-04 13:19   ` Daniel Vetter
2014-09-17 18:41     ` Rodrigo Vivi
2014-09-22 13:38       ` Damien Lespiau
2014-09-04 11:26 ` [PATCH 33/89] drm/i915/skl: Sunrise Point PCH detection Damien Lespiau
2014-09-17 22:18   ` Rodrigo Vivi
2014-09-22 13:42     ` Damien Lespiau
2014-09-22 19:34       ` Rodrigo Vivi
2014-09-04 11:27 ` [PATCH 34/89] drm/i915/skl: Implement WaDisableSDEUnitClockGating:skl Damien Lespiau
2014-09-17 18:48   ` Rodrigo Vivi
2014-09-04 11:27 ` [PATCH 35/89] drm/i915/skl: Implement Wa4x4STCOptimizationDisable:skl Damien Lespiau
2014-09-17 19:00   ` Rodrigo Vivi
2014-09-17 19:00     ` Rodrigo Vivi
2014-09-22 13:49       ` Damien Lespiau
2014-09-04 11:27 ` [PATCH 36/89] drm/i915/skl: Implement WaDisableDgMirrorFixInHalfSliceChicken5:skl Damien Lespiau
2014-09-17 21:22   ` Rodrigo Vivi
2014-09-04 11:27 ` [PATCH 37/89] drm/i915/skl: Skylake has 2 "sprite" planes per pipe Damien Lespiau
2014-09-17 21:25   ` Rodrigo Vivi
2014-09-04 11:27 ` [PATCH 38/89] drm/i915/skl: Implement drm_plane vfuncs Damien Lespiau
2014-09-04 13:21   ` Daniel Vetter
2014-09-16 13:20     ` Damien Lespiau
2014-09-17 22:08   ` Rodrigo Vivi
2014-09-04 11:27 ` [PATCH 39/89] drm/i915/skl: Adjust assert_sprites_disabled() Damien Lespiau
2014-09-17 22:10   ` Rodrigo Vivi
2014-09-04 11:27 ` [PATCH 40/89] drm/i915/skl: Introduce a I915_MAX_PLANES macro Damien Lespiau
2014-09-17 22:12   ` Rodrigo Vivi
2014-09-04 11:27 ` [PATCH 41/89] drm/i915/skl: Introduce intel_num_planes() Damien Lespiau
2014-09-17 22:13   ` Rodrigo Vivi
2014-09-04 11:27 ` [PATCH 42/89] drm/i915/skl: Move gen9 pm initialization into its own branch Damien Lespiau
2014-09-17 22:16   ` Rodrigo Vivi
2014-09-04 11:27 ` [PATCH 43/89] drm/i915/skl: Read the Memory Latency Values for WM computation Damien Lespiau
2014-09-04 18:49   ` [PATCH 43/89 v6] " Damien Lespiau
2014-09-10 17:37     ` Ville Syrjälä
2014-09-05  8:25   ` [PATCH 43/89] " Ville Syrjälä
2014-09-05  8:29     ` Damien Lespiau
2014-09-05  8:42       ` Ville Syrjälä
2014-09-05 12:56         ` Damien Lespiau
2014-09-04 11:27 ` [PATCH 44/89] drm/i915/skl: Register definitions and macros for SKL Watermark regs Damien Lespiau
2014-09-10 18:04   ` Ville Syrjälä
2014-09-16 14:11     ` Damien Lespiau
2014-09-17 13:40     ` [PATCH 44/89 v4] " Damien Lespiau
2014-09-23 11:17   ` [PATCH 44/89 v5] " Damien Lespiau
2014-09-04 11:27 ` [PATCH 45/89] drm/i915/skl: Definition of SKL WM param structs for pipe/plane Damien Lespiau
2014-09-10 18:39   ` Ville Syrjälä
2014-09-17 13:59     ` Damien Lespiau
2014-09-17 15:59       ` Daniel Vetter
2014-09-22 14:00         ` Damien Lespiau
2014-09-22 14:06   ` Ville Syrjälä
2014-09-22 14:21     ` Damien Lespiau
2014-09-23  8:16       ` Daniel Vetter
2014-09-23 15:10         ` [PATCH 45/89 v4] " Damien Lespiau
2014-10-28 15:11           ` Ville Syrjälä
2014-09-04 11:27 ` [PATCH 46/89] drm/i915/skl: Add DDB allocation management structures Damien Lespiau
2014-09-17 10:47   ` Ville Syrjälä
2014-09-22 14:08     ` Damien Lespiau
2014-09-22 18:26       ` Ville Syrjälä
2014-10-29 15:32   ` Ville Syrjälä
2014-09-04 11:27 ` [PATCH 47/89] drm/i915/skl: SKL Watermark Computation Damien Lespiau
2014-09-17 12:07   ` Ville Syrjälä
2014-09-22 22:36     ` Damien Lespiau
2014-09-23  6:00       ` Satheeshakrishna M
2014-09-23 11:13     ` [PATCH 47/89 v11] " Damien Lespiau
2014-10-29 17:07       ` Ville Syrjälä [this message]
2014-09-23 11:14     ` [PATCH 47/89] " Damien Lespiau
2014-09-04 11:27 ` [PATCH 48/89] drm/i915/skl: Allocate DDB portions for display planes Damien Lespiau
2014-09-19  9:58   ` Ville Syrjälä
2014-09-27 14:15     ` [PATCH 48/89 v6] " Damien Lespiau
2014-10-29 17:12       ` Ville Syrjälä
2014-09-23 11:19   ` [PATCH 48/89 v4] " Damien Lespiau
2014-09-04 11:27 ` [PATCH 49/89] drm/i915/skl: Program the DDB allocation Damien Lespiau
2014-09-19 10:03   ` Ville Syrjälä
2014-09-27 14:17     ` Damien Lespiau
2014-10-29 18:42       ` Ville Syrjälä
2014-09-04 11:27 ` [PATCH 50/89] drm/i915/skl: Read the pipe WM HW state Damien Lespiau
2014-10-29 19:02   ` Ville Syrjälä
2014-10-30 12:03     ` Damien Lespiau
2014-09-04 11:27 ` [PATCH 51/89] drm/i915/gen9: Add 2us read latency to WM level Damien Lespiau
2014-09-19 10:04   ` Ville Syrjälä
2014-09-04 11:27 ` [PATCH 52/89] drm/i915/gen9: Disable WM if corresponding latency is 0 Damien Lespiau
2014-09-19 10:05   ` Ville Syrjälä
2014-09-24 14:06     ` Damien Lespiau
2014-10-29 19:05       ` Ville Syrjälä
2014-09-04 11:27 ` [PATCH 53/89] drm/i915/skl: Gen9 Forcewake Damien Lespiau
2014-09-10 13:44   ` Mika Kuoppala
2014-09-16 13:49     ` [PATCH 53/89 v2] " Damien Lespiau
2014-09-04 11:27 ` [PATCH 54/89] drm/i915/skl: Enable Gen9 RC6 Damien Lespiau
2014-09-22 13:15   ` Mika Kuoppala
2014-09-24 17:58     ` Bob Wang
2014-09-04 11:27 ` [PATCH 55/89] drm/i915/skl: Gen9 multi-engine forcewake Damien Lespiau
2014-09-22 15:11   ` Mika Kuoppala
2014-09-24 18:08     ` Bob Wang
2014-09-25  7:32       ` Mika Kuoppala
2014-11-03 17:09         ` [PATCH 55/59 v4] " Damien Lespiau
2014-11-19 13:25           ` Mika Kuoppala
2014-09-04 11:27 ` [PATCH 56/89] drm/i915: Gen9 shadowed registers Damien Lespiau
2014-09-24 13:36   ` Mika Kuoppala
2014-09-24 18:16     ` Bob Wang
2014-09-25  8:58       ` Mika Kuoppala
2014-11-03 17:45         ` [PATCH 56/89 v4] " Damien Lespiau
2014-11-19 13:25           ` Mika Kuoppala
2014-09-04 11:27 ` [PATCH 57/89] drm/i915: Rewrite ABS_DIFF() in a safer manner Damien Lespiau
2014-09-04 12:11   ` Jani Nikula
2014-09-04 12:32     ` Damien Lespiau
2014-09-04 13:11       ` Daniel Vetter
2014-09-04 11:27 ` [PATCH 58/89] drm/i915/skl: Register definitions for SKL Clocks Damien Lespiau
2014-09-22 18:17   ` Paulo Zanoni
2014-10-01 10:51     ` M, Satheeshakrishna
2014-11-04 16:11     ` [PATCH 58/89 v5] " Damien Lespiau
2014-09-04 11:27 ` [PATCH 59/89] drm/i915/skl: Structure/enum definitions for SKL clocks Damien Lespiau
2014-09-22 18:25   ` Paulo Zanoni
2014-11-04 16:12     ` Damien Lespiau
2014-11-05  9:11       ` Daniel Vetter
2014-09-04 11:27 ` [PATCH 60/89] drm/i915/skl: CD clock back calculation for SKL Damien Lespiau
2014-09-22 19:19   ` Paulo Zanoni
2014-10-01 10:51     ` M, Satheeshakrishna
2014-11-04 16:15     ` [PATCH 60/89 v5] " Damien Lespiau
2014-09-04 11:27 ` [PATCH 61/89] drm/i915/skl: Determine enabled PLL and its linkrate/pixel clock Damien Lespiau
2014-09-22 20:12   ` Paulo Zanoni
2014-10-01 10:51     ` M, Satheeshakrishna
2014-10-03 18:25       ` Paulo Zanoni
2014-11-04 16:17     ` [PATCH 61/89 v4] " Damien Lespiau
2014-09-04 11:27 ` [PATCH 62/89] drm/i915/skl: Query DPLL attached to port on SKL Damien Lespiau
2014-09-22 20:24   ` Paulo Zanoni
2014-10-01 10:51     ` M, Satheeshakrishna
2014-11-04 16:19     ` [PATCH 62/89 v3] " Damien Lespiau
2014-09-04 11:27 ` [PATCH 63/89] drm/i915/skl: Define shared DPLLs for Skylake Damien Lespiau
2014-09-23 14:28   ` Paulo Zanoni
2014-10-01 10:52     ` M, Satheeshakrishna
2014-09-04 11:27 ` [PATCH 64/89] drm/i915/skl: Adjust the port PLL selection code Damien Lespiau
2014-09-23 14:39   ` Paulo Zanoni
2014-09-04 11:27 ` [PATCH 65/89] drm/i915/skl: Always use DPLL0 for eDP Damien Lespiau
2014-09-23 15:07   ` Paulo Zanoni
2014-10-01 10:52     ` M, Satheeshakrishna
2014-09-04 11:27 ` [PATCH 66/89] drm/i915/skl: Implementation of SKL DPLL programming Damien Lespiau
2014-09-23 18:05   ` Paulo Zanoni
2014-10-01 10:52     ` M, Satheeshakrishna
2014-11-04 16:26     ` [PATCH 66/89 v9] " Damien Lespiau
2014-11-07 19:56       ` Paulo Zanoni
2015-05-13 14:54   ` [PATCH 66/89] " Tvrtko Ursulin
2015-05-13 15:31     ` Damien Lespiau
2014-09-04 11:27 ` [PATCH 67/89] drm/i915/skl: Provide skl-specific pll hw state cross-checking Damien Lespiau
2014-09-23 18:07   ` Paulo Zanoni
2014-09-04 11:27 ` [PATCH 68/89] drm/i915/skl: Apply eDP WA only for gen < 9 Damien Lespiau
2014-09-23 18:11   ` Paulo Zanoni
2014-09-04 11:27 ` [PATCH 69/89] drm/i915/skl: Adding power domains for AUX controllers Damien Lespiau
2014-09-16 12:35   ` Imre Deak
2014-09-18 13:56     ` Damien Lespiau
2014-09-18 14:23       ` Imre Deak
2014-09-18 14:29         ` Ville Syrjälä
2014-11-05 14:23     ` [PATCH 69/89 v5] " Damien Lespiau
2014-09-04 11:27 ` [PATCH 70/89] drm/i915/skl: Register definition for SKL power well Damien Lespiau
2014-09-16 12:43   ` Imre Deak
2014-09-04 11:27 ` [PATCH 71/89] drm/i915/skl: Implementation of SKL display power well support Damien Lespiau
2014-09-16 13:56   ` Imre Deak
2014-09-16 14:19     ` Imre Deak
2014-09-04 11:27 ` [PATCH 72/89] drm/i915/skl: Enable/disable power well for aux transaction Damien Lespiau
2014-09-16 13:19   ` Imre Deak
2014-09-16 16:13     ` Daniel Vetter
2014-11-07 12:08     ` Damien Lespiau
2014-11-10 19:21       ` Imre Deak
2014-11-11 12:22         ` Damien Lespiau
2014-11-11 13:11           ` Imre Deak
2014-11-11 14:43           ` Daniel Vetter
2014-11-11 14:41         ` Daniel Vetter
2014-11-07 13:11     ` Damien Lespiau
2014-11-07 13:31       ` Ville Syrjälä
2014-11-07 13:49         ` Damien Lespiau
2014-11-07 14:05           ` Ville Syrjälä
2014-09-04 11:27 ` [PATCH 73/89] drm/i915/skl: Enabling MISC IO power well Damien Lespiau
2014-09-16 14:12   ` Imre Deak
2014-09-04 11:27 ` [PATCH 74/89] drm/i915/skl: Implement queue_flip Damien Lespiau
2014-09-23 20:06   ` Paulo Zanoni
2014-09-29 16:54     ` Damien Lespiau
2014-09-29 17:13     ` [PATCH 74/89 v4] " Damien Lespiau
2014-09-30 12:08       ` Paulo Zanoni
2014-09-30 12:19         ` Damien Lespiau
2014-09-04 11:27 ` [PATCH 75/89] drm/i915/skl: fetch, enable/disable pfit as needed Damien Lespiau
2014-09-23 20:50   ` Paulo Zanoni
2014-09-24 10:44     ` Damien Lespiau
2014-09-25 14:48     ` Jesse Barnes
2014-09-25 14:55       ` Damien Lespiau
2014-09-25 17:58   ` [PATCH] drm/i915/skl: fetch, enable/disable pfit as needed v2 Jesse Barnes
2014-09-25 18:06     ` Paulo Zanoni
2014-09-29 13:51       ` Damien Lespiau
2014-09-04 11:27 ` [PATCH 76/89] drm/i915/skl: Store the new WM state at the very end of the update Damien Lespiau
2014-10-29 19:19   ` Ville Syrjälä
2014-09-04 11:27 ` [PATCH 77/89] drm/i915: Introduce a for_each_plane() macro Damien Lespiau
2014-09-04 13:26   ` Daniel Vetter
2014-09-04 13:32   ` Chris Wilson
2014-09-04 14:00     ` Daniel Vetter
2014-09-04 14:05       ` Damien Lespiau
2014-09-04 14:16         ` Daniel Vetter
2014-09-04 14:02     ` Damien Lespiau
2014-09-04 11:27 ` [PATCH 78/89] drm/i915/skl: Flush the WM configuration Damien Lespiau
2014-09-19 10:46   ` Ville Syrjälä
2014-09-04 11:27 ` [PATCH 79/89] drm/i915/skl: Read back the DDB allocation hw state Damien Lespiau
2014-09-19 10:54   ` Ville Syrjälä
2014-09-04 11:27 ` [PATCH 80/89] drm/i915/skl: Augment the latency debugfs files for SKL Damien Lespiau
2014-09-19 10:53   ` Ville Syrjälä
2014-09-29 13:37     ` [PATCH 80/89 v2] " Damien Lespiau
2014-09-04 11:27 ` [PATCH 81/89] drm/i915/skl: Expose skl_ddb_get_hw_state() Damien Lespiau
2014-10-29 19:21   ` Ville Syrjälä
2014-10-29 23:49     ` Damien Lespiau
2014-09-04 11:27 ` [PATCH 82/89] drm/i915/skl: Add a debugfs file to dump the DDB allocation Damien Lespiau
2014-10-29 19:23   ` Ville Syrjälä
2014-09-04 11:27 ` [PATCH 83/89] drm/i915/skl: Check the DDB state at modeset Damien Lespiau
2014-09-04 13:27   ` Daniel Vetter
2014-10-29 19:16     ` Ville Syrjälä
2014-09-04 11:27 ` [PATCH 84/89] drm/i915/skl: add turbo support Damien Lespiau
2014-09-26 14:55   ` Mika Kuoppala
2014-09-04 11:27 ` [PATCH 85/89] drm/i915/skl: Retrieve the frequency limits Damien Lespiau
2014-09-26 15:09   ` Mika Kuoppala
2014-09-04 11:27 ` [PATCH 86/89] drm/i915: only reset media, blt, and render engines on GPU hangs Damien Lespiau
2014-09-04 12:03   ` Jani Nikula
2014-09-04 12:29     ` Damien Lespiau
2014-09-04 13:13       ` Daniel Vetter
2014-09-04 15:46       ` Jesse Barnes
2014-09-04 12:36   ` Mika Kuoppala
2014-09-04 11:27 ` [PATCH 87/89] drm/i915/skl: AUX irqs have moved Damien Lespiau
2014-09-26 15:21   ` Mika Kuoppala
2014-09-04 11:27 ` [PATCH 88/89] drm/i915/skl: Add Gen9 LRC size Damien Lespiau
2014-09-04 11:27 ` [PATCH 89/89] drm/i915/skl: Disable contexts if execlists aren't enabled Damien Lespiau
2014-09-26 15:28   ` Mika Kuoppala
2014-09-26 15:47     ` Chris Wilson
2014-09-04 14:16 ` [PATCH 00/89] Basic Skylake enabling (reviewers) Damien Lespiau
2014-09-16 14:51   ` Thomas Wood
2014-10-17 14:29   ` Damien Lespiau

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=20141029170758.GC10649@intel.com \
    --to=ville.syrjala@linux.intel.com \
    --cc=damien.lespiau@intel.com \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=pradeep.bhat@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox