All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/3] GLK plane/scaling fixes
@ 2017-02-22 10:29 Ander Conselvan de Oliveira
  2017-02-22 10:29 ` [PATCH 1/3] drm/i915/glk: Fix watermark computations for third sprite plane Ander Conselvan de Oliveira
                   ` (3 more replies)
  0 siblings, 4 replies; 10+ messages in thread
From: Ander Conselvan de Oliveira @ 2017-02-22 10:29 UTC (permalink / raw)
  To: intel-gfx; +Cc: Ander Conselvan de Oliveira

A few fixes to the plane and scaling code for Geminilake.

Ander Conselvan de Oliveira (3):
  drm/i915/glk: Fix watermark computations for third sprite plane
  drm/i915/glk: Fix maximum scaling factor for Geminilake scalers
  drm/i915/glk: Fix Geminilake scalers mode programming

 drivers/gpu/drm/i915/i915_drv.h      |  1 +
 drivers/gpu/drm/i915/intel_atomic.c  | 14 ++++++++------
 drivers/gpu/drm/i915/intel_display.c | 17 ++++++++++++-----
 drivers/gpu/drm/i915/intel_drv.h     |  6 +++---
 4 files changed, 24 insertions(+), 14 deletions(-)

-- 
2.9.3

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [PATCH 1/3] drm/i915/glk: Fix watermark computations for third sprite plane
  2017-02-22 10:29 [PATCH 0/3] GLK plane/scaling fixes Ander Conselvan de Oliveira
@ 2017-02-22 10:29 ` Ander Conselvan de Oliveira
  2017-02-22 10:29 ` [PATCH 2/3] drm/i915/glk: Fix maximum scaling factor for Geminilake scalers Ander Conselvan de Oliveira
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 10+ messages in thread
From: Ander Conselvan de Oliveira @ 2017-02-22 10:29 UTC (permalink / raw)
  To: intel-gfx
  Cc: Daniel Vetter, Ander Conselvan de Oliveira, drm-intel-fixes,
	Rodrigo Vivi

Geminilake has a third sprite plane (or fourth universal plane) that is
independent from the cursor. Make sure that for_each_plane_id_on_crtc()
is aware of that extra plane so that the watermark code takes it into
account.

Fixes: e9c9882556fc ("drm/i915/glk: Configure number of sprite planes properly")
Cc: Ander Conselvan de Oliveira <ander.conselvan.de.oliveira@intel.com>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Cc: Daniel Vetter <daniel.vetter@intel.com>
Cc: Jani Nikula <jani.nikula@linux.intel.com>
Cc: intel-gfx@lists.freedesktop.org
Cc: <drm-intel-fixes@lists.freedesktop.org>
Signed-off-by: Ander Conselvan de Oliveira <ander.conselvan.de.oliveira@intel.com>
---
 drivers/gpu/drm/i915/i915_drv.h | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index e346b2d..70892ea 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -293,6 +293,7 @@ enum plane_id {
 	PLANE_PRIMARY,
 	PLANE_SPRITE0,
 	PLANE_SPRITE1,
+	PLANE_SPRITE2,
 	PLANE_CURSOR,
 	I915_MAX_PLANES,
 };
-- 
2.9.3

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH 2/3] drm/i915/glk: Fix maximum scaling factor for Geminilake scalers
  2017-02-22 10:29 [PATCH 0/3] GLK plane/scaling fixes Ander Conselvan de Oliveira
  2017-02-22 10:29 ` [PATCH 1/3] drm/i915/glk: Fix watermark computations for third sprite plane Ander Conselvan de Oliveira
@ 2017-02-22 10:29 ` Ander Conselvan de Oliveira
  2017-02-22 14:39   ` Ville Syrjälä
  2017-02-22 10:29 ` [PATCH 3/3] drm/i915/glk: Fix Geminilake scalers mode programming Ander Conselvan de Oliveira
  2017-02-22 12:22 ` ✓ Fi.CI.BAT: success for GLK plane/scaling fixes Patchwork
  3 siblings, 1 reply; 10+ messages in thread
From: Ander Conselvan de Oliveira @ 2017-02-22 10:29 UTC (permalink / raw)
  To: intel-gfx; +Cc: Ander Conselvan de Oliveira, Rodrigo Vivi

Geminilake can output two pixels per clock, and that affects the maximum
scaling factor for its scalers. Take that into account and avoid the
following warning:

WARNING: CPU: 1 PID: 593 at drivers/gpu/drm/i915/intel_display.c:13223 skl_max_scale.part.129+0x78/0x80 [i915]
WARN_ON_ONCE(!crtc_clock || cdclk < crtc_clock)
Modules linked in: x86_pkg_temp_thermal i915 coretemp kvm_intel kvm i2c_algo_bit drm_kms_helper irqbypass crct10dif_pclmul prime_numbers crc32_pclmul drm ghash_clmulni_intel shpchp tpm_tis tpm_tis_core tpm nfsd authw
CPU: 1 PID: 593 Comm: kworker/u8:3 Tainted: G        W       4.10.0-rc8ander+ #330
Hardware name: Intel Corp. Geminilake/GLK RVP1 DDR4 (05), BIOS GELKRVPA.X64.0035.B33.1702150552 02/15/2017
Workqueue: events_unbound async_run_entry_fn
Call Trace:
 dump_stack+0x86/0xc3
 __warn+0xcb/0xf0
 warn_slowpath_fmt+0x5f/0x80
 skl_max_scale.part.129+0x78/0x80 [i915]
 intel_check_primary_plane+0xa6/0xc0 [i915]
 intel_plane_atomic_check_with_state+0xd1/0x1a0 [i915]
 ? drm_printk+0xb5/0xc0 [drm]
 intel_plane_atomic_check+0x3d/0x80 [i915]
 drm_atomic_helper_check_planes+0x7c/0x200 [drm_kms_helper]
 intel_atomic_check+0xa5b/0x11a0 [i915]
 drm_atomic_check_only+0x353/0x600 [drm]
 ? drm_atomic_add_affected_connectors+0x10c/0x120 [drm]
 drm_atomic_commit+0x18/0x50 [drm]
 restore_fbdev_mode+0x14c/0x2a0 [drm_kms_helper]
 drm_fb_helper_restore_fbdev_mode_unlocked+0x34/0x80 [drm_kms_helper]
 drm_fb_helper_set_par+0x2d/0x60 [drm_kms_helper]
 intel_fbdev_set_par+0x1a/0x70 [i915]
 fbcon_init+0x582/0x610
 visual_init+0xd6/0x130
 do_bind_con_driver+0x1da/0x3c0
 do_take_over_console+0x116/0x180
 do_fbcon_takeover+0x5c/0xb0
 fbcon_event_notify+0x772/0x8a0
 ? __blocking_notifier_call_chain+0x35/0x70
 notifier_call_chain+0x4a/0x70
 __blocking_notifier_call_chain+0x4d/0x70
 blocking_notifier_call_chain+0x16/0x20
 fb_notifier_call_chain+0x1b/0x20
 register_framebuffer+0x278/0x360
 drm_fb_helper_initial_config+0x253/0x440 [drm_kms_helper]
 intel_fbdev_initial_config+0x18/0x30 [i915]
 async_run_entry_fn+0x39/0x170
 process_one_work+0x212/0x670
 ? process_one_work+0x197/0x670
 worker_thread+0x4e/0x490
 kthread+0x101/0x140
 ? process_one_work+0x670/0x670
 ? kthread_create_on_node+0x60/0x60
 ret_from_fork+0x31/0x40

Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Signed-off-by: Ander Conselvan de Oliveira <ander.conselvan.de.oliveira@intel.com>
---
 drivers/gpu/drm/i915/intel_display.c | 15 +++++++++++----
 1 file changed, 11 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index 957c62d..000fb31 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -13211,16 +13211,22 @@ intel_cleanup_plane_fb(struct drm_plane *plane,
 int
 skl_max_scale(struct intel_crtc *intel_crtc, struct intel_crtc_state *crtc_state)
 {
+	struct drm_i915_private *dev_priv;
 	int max_scale;
-	int crtc_clock, cdclk;
+	int crtc_clock, max_pixclk;
 
 	if (!intel_crtc || !crtc_state->base.enable)
 		return DRM_PLANE_HELPER_NO_SCALING;
 
+	dev_priv = to_i915(intel_crtc->base.dev);
+
 	crtc_clock = crtc_state->base.adjusted_mode.crtc_clock;
-	cdclk = to_intel_atomic_state(crtc_state->base.state)->cdclk.logical.cdclk;
+	max_pixclk = to_intel_atomic_state(crtc_state->base.state)->cdclk.logical.cdclk;
+
+	if (IS_GEMINILAKE(dev_priv))
+		max_pixclk *= 2;
 
-	if (WARN_ON_ONCE(!crtc_clock || cdclk < crtc_clock))
+	if (WARN_ON_ONCE(!crtc_clock || max_pixclk < crtc_clock))
 		return DRM_PLANE_HELPER_NO_SCALING;
 
 	/*
@@ -13229,7 +13235,8 @@ skl_max_scale(struct intel_crtc *intel_crtc, struct intel_crtc_state *crtc_state
 	 *            or
 	 *    cdclk/crtc_clock
 	 */
-	max_scale = min((1 << 16) * 3 - 1, (1 << 8) * ((cdclk << 8) / crtc_clock));
+	max_scale = min((1 << 16) * 3 - 1,
+			(1 << 8) * ((max_pixclk << 8) / crtc_clock));
 
 	return max_scale;
 }
-- 
2.9.3

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH 3/3] drm/i915/glk: Fix Geminilake scalers mode programming
  2017-02-22 10:29 [PATCH 0/3] GLK plane/scaling fixes Ander Conselvan de Oliveira
  2017-02-22 10:29 ` [PATCH 1/3] drm/i915/glk: Fix watermark computations for third sprite plane Ander Conselvan de Oliveira
  2017-02-22 10:29 ` [PATCH 2/3] drm/i915/glk: Fix maximum scaling factor for Geminilake scalers Ander Conselvan de Oliveira
@ 2017-02-22 10:29 ` Ander Conselvan de Oliveira
  2017-02-22 14:41   ` Ville Syrjälä
  2017-02-22 12:22 ` ✓ Fi.CI.BAT: success for GLK plane/scaling fixes Patchwork
  3 siblings, 1 reply; 10+ messages in thread
From: Ander Conselvan de Oliveira @ 2017-02-22 10:29 UTC (permalink / raw)
  To: intel-gfx; +Cc: Ander Conselvan de Oliveira

Geminilake scalers can do 7x7 filtering for all supported input sizes,
so it doesn't need the "high quality" mode programming, which was
actually removed from that platform.

Signed-off-by: Ander Conselvan de Oliveira <ander.conselvan.de.oliveira@intel.com>
---
 drivers/gpu/drm/i915/intel_atomic.c  | 14 ++++++++------
 drivers/gpu/drm/i915/intel_display.c |  2 +-
 drivers/gpu/drm/i915/intel_drv.h     |  6 +++---
 3 files changed, 12 insertions(+), 10 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_atomic.c b/drivers/gpu/drm/i915/intel_atomic.c
index aa9160e..e65818e 100644
--- a/drivers/gpu/drm/i915/intel_atomic.c
+++ b/drivers/gpu/drm/i915/intel_atomic.c
@@ -121,7 +121,7 @@ intel_crtc_destroy_state(struct drm_crtc *crtc,
 
 /**
  * intel_atomic_setup_scalers() - setup scalers for crtc per staged requests
- * @dev: DRM device
+ * @dev_priv: i915 device
  * @crtc: intel crtc
  * @crtc_state: incoming crtc_state to validate and setup scalers
  *
@@ -136,9 +136,9 @@ intel_crtc_destroy_state(struct drm_crtc *crtc,
  *         0 - scalers were setup succesfully
  *         error code - otherwise
  */
-int intel_atomic_setup_scalers(struct drm_device *dev,
-	struct intel_crtc *intel_crtc,
-	struct intel_crtc_state *crtc_state)
+int intel_atomic_setup_scalers(struct drm_i915_private *dev_priv,
+			       struct intel_crtc *intel_crtc,
+			       struct intel_crtc_state *crtc_state)
 {
 	struct drm_plane *plane = NULL;
 	struct intel_plane *intel_plane;
@@ -199,7 +199,7 @@ int intel_atomic_setup_scalers(struct drm_device *dev,
 			 */
 			if (!plane) {
 				struct drm_plane_state *state;
-				plane = drm_plane_from_index(dev, i);
+				plane = drm_plane_from_index(&dev_priv->drm, i);
 				state = drm_atomic_get_plane_state(drm_state, plane);
 				if (IS_ERR(state)) {
 					DRM_DEBUG_KMS("Failed to add [PLANE:%d] to drm_state\n",
@@ -247,7 +247,9 @@ int intel_atomic_setup_scalers(struct drm_device *dev,
 		}
 
 		/* set scaler mode */
-		if (num_scalers_need == 1 && intel_crtc->pipe != PIPE_C) {
+		if (IS_GEMINILAKE(dev_priv)) {
+			scaler_state->scalers[*scaler_id].mode = 0;
+		} else if (num_scalers_need == 1 && intel_crtc->pipe != PIPE_C) {
 			/*
 			 * when only 1 scaler is in use on either pipe A or B,
 			 * scaler 0 operates in high quality (HQ) mode.
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index 000fb31..65e76d1 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -10959,7 +10959,7 @@ static int intel_crtc_atomic_check(struct drm_crtc *crtc,
 			ret = skl_update_scaler_crtc(pipe_config);
 
 		if (!ret)
-			ret = intel_atomic_setup_scalers(dev, intel_crtc,
+			ret = intel_atomic_setup_scalers(dev_priv, intel_crtc,
 							 pipe_config);
 	}
 
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
index 0edc499..d9d96d6 100644
--- a/drivers/gpu/drm/i915/intel_drv.h
+++ b/drivers/gpu/drm/i915/intel_drv.h
@@ -1910,9 +1910,9 @@ intel_atomic_get_existing_plane_state(struct drm_atomic_state *state,
 	return to_intel_plane_state(plane_state);
 }
 
-int intel_atomic_setup_scalers(struct drm_device *dev,
-	struct intel_crtc *intel_crtc,
-	struct intel_crtc_state *crtc_state);
+int intel_atomic_setup_scalers(struct drm_i915_private *dev_priv,
+			       struct intel_crtc *intel_crtc,
+			       struct intel_crtc_state *crtc_state);
 
 /* intel_atomic_plane.c */
 struct intel_plane_state *intel_create_plane_state(struct drm_plane *plane);
-- 
2.9.3

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* ✓ Fi.CI.BAT: success for GLK plane/scaling fixes
  2017-02-22 10:29 [PATCH 0/3] GLK plane/scaling fixes Ander Conselvan de Oliveira
                   ` (2 preceding siblings ...)
  2017-02-22 10:29 ` [PATCH 3/3] drm/i915/glk: Fix Geminilake scalers mode programming Ander Conselvan de Oliveira
@ 2017-02-22 12:22 ` Patchwork
  3 siblings, 0 replies; 10+ messages in thread
From: Patchwork @ 2017-02-22 12:22 UTC (permalink / raw)
  To: Ander Conselvan de Oliveira; +Cc: intel-gfx

== Series Details ==

Series: GLK plane/scaling fixes
URL   : https://patchwork.freedesktop.org/series/20051/
State : success

== Summary ==

Series 20051v1 GLK plane/scaling fixes
https://patchwork.freedesktop.org/api/1.0/series/20051/revisions/1/mbox/

fi-bdw-5557u     total:253  pass:242  dwarn:0   dfail:0   fail:0   skip:11 
fi-bsw-n3050     total:253  pass:214  dwarn:0   dfail:0   fail:0   skip:39 
fi-bxt-j4205     total:253  pass:234  dwarn:0   dfail:0   fail:0   skip:19 
fi-bxt-t5700     total:83   pass:70   dwarn:0   dfail:0   fail:0   skip:12 
fi-byt-j1900     total:253  pass:226  dwarn:0   dfail:0   fail:0   skip:27 
fi-byt-n2820     total:253  pass:222  dwarn:0   dfail:0   fail:0   skip:31 
fi-hsw-4770      total:253  pass:237  dwarn:0   dfail:0   fail:0   skip:16 
fi-hsw-4770r     total:253  pass:237  dwarn:0   dfail:0   fail:0   skip:16 
fi-ilk-650       total:253  pass:203  dwarn:0   dfail:0   fail:0   skip:50 
fi-ivb-3520m     total:253  pass:235  dwarn:0   dfail:0   fail:0   skip:18 
fi-ivb-3770      total:253  pass:235  dwarn:0   dfail:0   fail:0   skip:18 
fi-kbl-7500u     total:253  pass:235  dwarn:0   dfail:0   fail:0   skip:18 
fi-skl-6260u     total:253  pass:243  dwarn:0   dfail:0   fail:0   skip:10 
fi-skl-6700hq    total:253  pass:236  dwarn:0   dfail:0   fail:0   skip:17 
fi-skl-6700k     total:253  pass:231  dwarn:4   dfail:0   fail:0   skip:18 
fi-skl-6770hq    total:253  pass:243  dwarn:0   dfail:0   fail:0   skip:10 
fi-snb-2520m     total:253  pass:225  dwarn:0   dfail:0   fail:0   skip:28 
fi-snb-2600      total:253  pass:224  dwarn:0   dfail:0   fail:0   skip:29 

2362c155a028031f2686044863203d4825ace1e7 drm-tip: 2017y-02m-22d-10h-33m-14s UTC integration manifest
64dd29d drm/i915/glk: Fix Geminilake scalers mode programming
7d3c55c drm/i915/glk: Fix maximum scaling factor for Geminilake scalers
bcef97e drm/i915/glk: Fix watermark computations for third sprite plane

== Logs ==

For more details see: https://intel-gfx-ci.01.org/CI/Patchwork_3925/
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 2/3] drm/i915/glk: Fix maximum scaling factor for Geminilake scalers
  2017-02-22 10:29 ` [PATCH 2/3] drm/i915/glk: Fix maximum scaling factor for Geminilake scalers Ander Conselvan de Oliveira
@ 2017-02-22 14:39   ` Ville Syrjälä
  2017-02-22 14:44     ` Ander Conselvan De Oliveira
  0 siblings, 1 reply; 10+ messages in thread
From: Ville Syrjälä @ 2017-02-22 14:39 UTC (permalink / raw)
  To: Ander Conselvan de Oliveira; +Cc: intel-gfx, Rodrigo Vivi

On Wed, Feb 22, 2017 at 12:29:08PM +0200, Ander Conselvan de Oliveira wrote:
> Geminilake can output two pixels per clock, and that affects the maximum
> scaling factor for its scalers. Take that into account and avoid the
> following warning:
> 
> WARNING: CPU: 1 PID: 593 at drivers/gpu/drm/i915/intel_display.c:13223 skl_max_scale.part.129+0x78/0x80 [i915]
> WARN_ON_ONCE(!crtc_clock || cdclk < crtc_clock)
> Modules linked in: x86_pkg_temp_thermal i915 coretemp kvm_intel kvm i2c_algo_bit drm_kms_helper irqbypass crct10dif_pclmul prime_numbers crc32_pclmul drm ghash_clmulni_intel shpchp tpm_tis tpm_tis_core tpm nfsd authw
> CPU: 1 PID: 593 Comm: kworker/u8:3 Tainted: G        W       4.10.0-rc8ander+ #330
> Hardware name: Intel Corp. Geminilake/GLK RVP1 DDR4 (05), BIOS GELKRVPA.X64.0035.B33.1702150552 02/15/2017
> Workqueue: events_unbound async_run_entry_fn
> Call Trace:
>  dump_stack+0x86/0xc3
>  __warn+0xcb/0xf0
>  warn_slowpath_fmt+0x5f/0x80
>  skl_max_scale.part.129+0x78/0x80 [i915]
>  intel_check_primary_plane+0xa6/0xc0 [i915]
>  intel_plane_atomic_check_with_state+0xd1/0x1a0 [i915]
>  ? drm_printk+0xb5/0xc0 [drm]
>  intel_plane_atomic_check+0x3d/0x80 [i915]
>  drm_atomic_helper_check_planes+0x7c/0x200 [drm_kms_helper]
>  intel_atomic_check+0xa5b/0x11a0 [i915]
>  drm_atomic_check_only+0x353/0x600 [drm]
>  ? drm_atomic_add_affected_connectors+0x10c/0x120 [drm]
>  drm_atomic_commit+0x18/0x50 [drm]
>  restore_fbdev_mode+0x14c/0x2a0 [drm_kms_helper]
>  drm_fb_helper_restore_fbdev_mode_unlocked+0x34/0x80 [drm_kms_helper]
>  drm_fb_helper_set_par+0x2d/0x60 [drm_kms_helper]
>  intel_fbdev_set_par+0x1a/0x70 [i915]
>  fbcon_init+0x582/0x610
>  visual_init+0xd6/0x130
>  do_bind_con_driver+0x1da/0x3c0
>  do_take_over_console+0x116/0x180
>  do_fbcon_takeover+0x5c/0xb0
>  fbcon_event_notify+0x772/0x8a0
>  ? __blocking_notifier_call_chain+0x35/0x70
>  notifier_call_chain+0x4a/0x70
>  __blocking_notifier_call_chain+0x4d/0x70
>  blocking_notifier_call_chain+0x16/0x20
>  fb_notifier_call_chain+0x1b/0x20
>  register_framebuffer+0x278/0x360
>  drm_fb_helper_initial_config+0x253/0x440 [drm_kms_helper]
>  intel_fbdev_initial_config+0x18/0x30 [i915]
>  async_run_entry_fn+0x39/0x170
>  process_one_work+0x212/0x670
>  ? process_one_work+0x197/0x670
>  worker_thread+0x4e/0x490
>  kthread+0x101/0x140
>  ? process_one_work+0x670/0x670
>  ? kthread_create_on_node+0x60/0x60
>  ret_from_fork+0x31/0x40
> 
> Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
> Signed-off-by: Ander Conselvan de Oliveira <ander.conselvan.de.oliveira@intel.com>
> ---
>  drivers/gpu/drm/i915/intel_display.c | 15 +++++++++++----
>  1 file changed, 11 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
> index 957c62d..000fb31 100644
> --- a/drivers/gpu/drm/i915/intel_display.c
> +++ b/drivers/gpu/drm/i915/intel_display.c
> @@ -13211,16 +13211,22 @@ intel_cleanup_plane_fb(struct drm_plane *plane,
>  int
>  skl_max_scale(struct intel_crtc *intel_crtc, struct intel_crtc_state *crtc_state)
>  {
> +	struct drm_i915_private *dev_priv;
>  	int max_scale;
> -	int crtc_clock, cdclk;
> +	int crtc_clock, max_pixclk;
>  
>  	if (!intel_crtc || !crtc_state->base.enable)
>  		return DRM_PLANE_HELPER_NO_SCALING;
>  
> +	dev_priv = to_i915(intel_crtc->base.dev);
> +
>  	crtc_clock = crtc_state->base.adjusted_mode.crtc_clock;
> -	cdclk = to_intel_atomic_state(crtc_state->base.state)->cdclk.logical.cdclk;
> +	max_pixclk = to_intel_atomic_state(crtc_state->base.state)->cdclk.logical.cdclk;
> +
> +	if (IS_GEMINILAKE(dev_priv))
> +		max_pixclk *= 2;

max_dotclock perhaps?

>  
> -	if (WARN_ON_ONCE(!crtc_clock || cdclk < crtc_clock))
> +	if (WARN_ON_ONCE(!crtc_clock || max_pixclk < crtc_clock))
>  		return DRM_PLANE_HELPER_NO_SCALING;
>  
>  	/*
> @@ -13229,7 +13235,8 @@ skl_max_scale(struct intel_crtc *intel_crtc, struct intel_crtc_state *crtc_state
>  	 *            or
>  	 *    cdclk/crtc_clock
>  	 */
> -	max_scale = min((1 << 16) * 3 - 1, (1 << 8) * ((cdclk << 8) / crtc_clock));
> +	max_scale = min((1 << 16) * 3 - 1,
> +			(1 << 8) * ((max_pixclk << 8) / crtc_clock));
>  
>  	return max_scale;
>  }
> -- 
> 2.9.3
> 
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 3/3] drm/i915/glk: Fix Geminilake scalers mode programming
  2017-02-22 10:29 ` [PATCH 3/3] drm/i915/glk: Fix Geminilake scalers mode programming Ander Conselvan de Oliveira
@ 2017-02-22 14:41   ` Ville Syrjälä
  2017-02-22 14:44     ` Ander Conselvan De Oliveira
  0 siblings, 1 reply; 10+ messages in thread
From: Ville Syrjälä @ 2017-02-22 14:41 UTC (permalink / raw)
  To: Ander Conselvan de Oliveira; +Cc: intel-gfx

On Wed, Feb 22, 2017 at 12:29:09PM +0200, Ander Conselvan de Oliveira wrote:
> Geminilake scalers can do 7x7 filtering for all supported input sizes,
> so it doesn't need the "high quality" mode programming, which was
> actually removed from that platform.
> 
> Signed-off-by: Ander Conselvan de Oliveira <ander.conselvan.de.oliveira@intel.com>
> ---
>  drivers/gpu/drm/i915/intel_atomic.c  | 14 ++++++++------
>  drivers/gpu/drm/i915/intel_display.c |  2 +-
>  drivers/gpu/drm/i915/intel_drv.h     |  6 +++---
>  3 files changed, 12 insertions(+), 10 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/intel_atomic.c b/drivers/gpu/drm/i915/intel_atomic.c
> index aa9160e..e65818e 100644
> --- a/drivers/gpu/drm/i915/intel_atomic.c
> +++ b/drivers/gpu/drm/i915/intel_atomic.c
> @@ -121,7 +121,7 @@ intel_crtc_destroy_state(struct drm_crtc *crtc,
>  
>  /**
>   * intel_atomic_setup_scalers() - setup scalers for crtc per staged requests
> - * @dev: DRM device
> + * @dev_priv: i915 device

This change makes the diff quite messy for what's essentially a
addition of two lines of code.

>   * @crtc: intel crtc
>   * @crtc_state: incoming crtc_state to validate and setup scalers
>   *
> @@ -136,9 +136,9 @@ intel_crtc_destroy_state(struct drm_crtc *crtc,
>   *         0 - scalers were setup succesfully
>   *         error code - otherwise
>   */
> -int intel_atomic_setup_scalers(struct drm_device *dev,
> -	struct intel_crtc *intel_crtc,
> -	struct intel_crtc_state *crtc_state)
> +int intel_atomic_setup_scalers(struct drm_i915_private *dev_priv,
> +			       struct intel_crtc *intel_crtc,
> +			       struct intel_crtc_state *crtc_state)
>  {
>  	struct drm_plane *plane = NULL;
>  	struct intel_plane *intel_plane;
> @@ -199,7 +199,7 @@ int intel_atomic_setup_scalers(struct drm_device *dev,
>  			 */
>  			if (!plane) {
>  				struct drm_plane_state *state;
> -				plane = drm_plane_from_index(dev, i);
> +				plane = drm_plane_from_index(&dev_priv->drm, i);
>  				state = drm_atomic_get_plane_state(drm_state, plane);
>  				if (IS_ERR(state)) {
>  					DRM_DEBUG_KMS("Failed to add [PLANE:%d] to drm_state\n",
> @@ -247,7 +247,9 @@ int intel_atomic_setup_scalers(struct drm_device *dev,
>  		}
>  
>  		/* set scaler mode */
> -		if (num_scalers_need == 1 && intel_crtc->pipe != PIPE_C) {
> +		if (IS_GEMINILAKE(dev_priv)) {
> +			scaler_state->scalers[*scaler_id].mode = 0;
> +		} else if (num_scalers_need == 1 && intel_crtc->pipe != PIPE_C) {
>  			/*
>  			 * when only 1 scaler is in use on either pipe A or B,
>  			 * scaler 0 operates in high quality (HQ) mode.
> diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
> index 000fb31..65e76d1 100644
> --- a/drivers/gpu/drm/i915/intel_display.c
> +++ b/drivers/gpu/drm/i915/intel_display.c
> @@ -10959,7 +10959,7 @@ static int intel_crtc_atomic_check(struct drm_crtc *crtc,
>  			ret = skl_update_scaler_crtc(pipe_config);
>  
>  		if (!ret)
> -			ret = intel_atomic_setup_scalers(dev, intel_crtc,
> +			ret = intel_atomic_setup_scalers(dev_priv, intel_crtc,
>  							 pipe_config);
>  	}
>  
> diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
> index 0edc499..d9d96d6 100644
> --- a/drivers/gpu/drm/i915/intel_drv.h
> +++ b/drivers/gpu/drm/i915/intel_drv.h
> @@ -1910,9 +1910,9 @@ intel_atomic_get_existing_plane_state(struct drm_atomic_state *state,
>  	return to_intel_plane_state(plane_state);
>  }
>  
> -int intel_atomic_setup_scalers(struct drm_device *dev,
> -	struct intel_crtc *intel_crtc,
> -	struct intel_crtc_state *crtc_state);
> +int intel_atomic_setup_scalers(struct drm_i915_private *dev_priv,
> +			       struct intel_crtc *intel_crtc,
> +			       struct intel_crtc_state *crtc_state);
>  
>  /* intel_atomic_plane.c */
>  struct intel_plane_state *intel_create_plane_state(struct drm_plane *plane);
> -- 
> 2.9.3
> 
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 3/3] drm/i915/glk: Fix Geminilake scalers mode programming
  2017-02-22 14:41   ` Ville Syrjälä
@ 2017-02-22 14:44     ` Ander Conselvan De Oliveira
  2017-02-22 14:53       ` Ville Syrjälä
  0 siblings, 1 reply; 10+ messages in thread
From: Ander Conselvan De Oliveira @ 2017-02-22 14:44 UTC (permalink / raw)
  To: Ville Syrjälä; +Cc: intel-gfx

On Wed, 2017-02-22 at 16:41 +0200, Ville Syrjälä wrote:
> On Wed, Feb 22, 2017 at 12:29:09PM +0200, Ander Conselvan de Oliveira wrote:
> > Geminilake scalers can do 7x7 filtering for all supported input sizes,
> > so it doesn't need the "high quality" mode programming, which was
> > actually removed from that platform.
> > 
> > Signed-off-by: Ander Conselvan de Oliveira <ander.conselvan.de.oliveira@intel.com>
> > ---
> >  drivers/gpu/drm/i915/intel_atomic.c  | 14 ++++++++------
> >  drivers/gpu/drm/i915/intel_display.c |  2 +-
> >  drivers/gpu/drm/i915/intel_drv.h     |  6 +++---
> >  3 files changed, 12 insertions(+), 10 deletions(-)
> > 
> > diff --git a/drivers/gpu/drm/i915/intel_atomic.c b/drivers/gpu/drm/i915/intel_atomic.c
> > index aa9160e..e65818e 100644
> > --- a/drivers/gpu/drm/i915/intel_atomic.c
> > +++ b/drivers/gpu/drm/i915/intel_atomic.c
> > @@ -121,7 +121,7 @@ intel_crtc_destroy_state(struct drm_crtc *crtc,
> >  
> >  /**
> >   * intel_atomic_setup_scalers() - setup scalers for crtc per staged requests
> > - * @dev: DRM device
> > + * @dev_priv: i915 device
> 
> This change makes the diff quite messy for what's essentially a
> addition of two lines of code.

There's no dev_priv in that function. While adding the dev_priv, it just seemed
like pure laziness not to change the parameter. Didn't seem like a big deal
since it has only one caller, but I'll split if you insist.

Ander

> 
> >   * @crtc: intel crtc
> >   * @crtc_state: incoming crtc_state to validate and setup scalers
> >   *
> > @@ -136,9 +136,9 @@ intel_crtc_destroy_state(struct drm_crtc *crtc,
> >   *         0 - scalers were setup succesfully
> >   *         error code - otherwise
> >   */
> > -int intel_atomic_setup_scalers(struct drm_device *dev,
> > -	struct intel_crtc *intel_crtc,
> > -	struct intel_crtc_state *crtc_state)
> > +int intel_atomic_setup_scalers(struct drm_i915_private *dev_priv,
> > +			       struct intel_crtc *intel_crtc,
> > +			       struct intel_crtc_state *crtc_state)
> >  {
> >  	struct drm_plane *plane = NULL;
> >  	struct intel_plane *intel_plane;
> > @@ -199,7 +199,7 @@ int intel_atomic_setup_scalers(struct drm_device *dev,
> >  			 */
> >  			if (!plane) {
> >  				struct drm_plane_state *state;
> > -				plane = drm_plane_from_index(dev, i);
> > +				plane = drm_plane_from_index(&dev_priv->drm, i);
> >  				state = drm_atomic_get_plane_state(drm_state, plane);
> >  				if (IS_ERR(state)) {
> >  					DRM_DEBUG_KMS("Failed to add [PLANE:%d] to drm_state\n",
> > @@ -247,7 +247,9 @@ int intel_atomic_setup_scalers(struct drm_device *dev,
> >  		}
> >  
> >  		/* set scaler mode */
> > -		if (num_scalers_need == 1 && intel_crtc->pipe != PIPE_C) {
> > +		if (IS_GEMINILAKE(dev_priv)) {
> > +			scaler_state->scalers[*scaler_id].mode = 0;
> > +		} else if (num_scalers_need == 1 && intel_crtc->pipe != PIPE_C) {
> >  			/*
> >  			 * when only 1 scaler is in use on either pipe A or B,
> >  			 * scaler 0 operates in high quality (HQ) mode.
> > diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
> > index 000fb31..65e76d1 100644
> > --- a/drivers/gpu/drm/i915/intel_display.c
> > +++ b/drivers/gpu/drm/i915/intel_display.c
> > @@ -10959,7 +10959,7 @@ static int intel_crtc_atomic_check(struct drm_crtc *crtc,
> >  			ret = skl_update_scaler_crtc(pipe_config);
> >  
> >  		if (!ret)
> > -			ret = intel_atomic_setup_scalers(dev, intel_crtc,
> > +			ret = intel_atomic_setup_scalers(dev_priv, intel_crtc,
> >  							 pipe_config);
> >  	}
> >  
> > diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
> > index 0edc499..d9d96d6 100644
> > --- a/drivers/gpu/drm/i915/intel_drv.h
> > +++ b/drivers/gpu/drm/i915/intel_drv.h
> > @@ -1910,9 +1910,9 @@ intel_atomic_get_existing_plane_state(struct drm_atomic_state *state,
> >  	return to_intel_plane_state(plane_state);
> >  }
> >  
> > -int intel_atomic_setup_scalers(struct drm_device *dev,
> > -	struct intel_crtc *intel_crtc,
> > -	struct intel_crtc_state *crtc_state);
> > +int intel_atomic_setup_scalers(struct drm_i915_private *dev_priv,
> > +			       struct intel_crtc *intel_crtc,
> > +			       struct intel_crtc_state *crtc_state);
> >  
> >  /* intel_atomic_plane.c */
> >  struct intel_plane_state *intel_create_plane_state(struct drm_plane *plane);
> > -- 
> > 2.9.3
> > 
> > _______________________________________________
> > Intel-gfx mailing list
> > Intel-gfx@lists.freedesktop.org
> > https://lists.freedesktop.org/mailman/listinfo/intel-gfx
> 
> 
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 2/3] drm/i915/glk: Fix maximum scaling factor for Geminilake scalers
  2017-02-22 14:39   ` Ville Syrjälä
@ 2017-02-22 14:44     ` Ander Conselvan De Oliveira
  0 siblings, 0 replies; 10+ messages in thread
From: Ander Conselvan De Oliveira @ 2017-02-22 14:44 UTC (permalink / raw)
  To: Ville Syrjälä; +Cc: intel-gfx, Rodrigo Vivi

On Wed, 2017-02-22 at 16:39 +0200, Ville Syrjälä wrote:
> On Wed, Feb 22, 2017 at 12:29:08PM +0200, Ander Conselvan de Oliveira wrote:
> > Geminilake can output two pixels per clock, and that affects the maximum
> > scaling factor for its scalers. Take that into account and avoid the
> > following warning:
> > 
> > WARNING: CPU: 1 PID: 593 at drivers/gpu/drm/i915/intel_display.c:13223 skl_max_scale.part.129+0x78/0x80 [i915]
> > WARN_ON_ONCE(!crtc_clock || cdclk < crtc_clock)
> > Modules linked in: x86_pkg_temp_thermal i915 coretemp kvm_intel kvm i2c_algo_bit drm_kms_helper irqbypass crct10dif_pclmul prime_numbers crc32_pclmul drm ghash_clmulni_intel shpchp tpm_tis tpm_tis_core tpm nfsd authw
> > CPU: 1 PID: 593 Comm: kworker/u8:3 Tainted: G        W       4.10.0-rc8ander+ #330
> > Hardware name: Intel Corp. Geminilake/GLK RVP1 DDR4 (05), BIOS GELKRVPA.X64.0035.B33.1702150552 02/15/2017
> > Workqueue: events_unbound async_run_entry_fn
> > Call Trace:
> >  dump_stack+0x86/0xc3
> >  __warn+0xcb/0xf0
> >  warn_slowpath_fmt+0x5f/0x80
> >  skl_max_scale.part.129+0x78/0x80 [i915]
> >  intel_check_primary_plane+0xa6/0xc0 [i915]
> >  intel_plane_atomic_check_with_state+0xd1/0x1a0 [i915]
> >  ? drm_printk+0xb5/0xc0 [drm]
> >  intel_plane_atomic_check+0x3d/0x80 [i915]
> >  drm_atomic_helper_check_planes+0x7c/0x200 [drm_kms_helper]
> >  intel_atomic_check+0xa5b/0x11a0 [i915]
> >  drm_atomic_check_only+0x353/0x600 [drm]
> >  ? drm_atomic_add_affected_connectors+0x10c/0x120 [drm]
> >  drm_atomic_commit+0x18/0x50 [drm]
> >  restore_fbdev_mode+0x14c/0x2a0 [drm_kms_helper]
> >  drm_fb_helper_restore_fbdev_mode_unlocked+0x34/0x80 [drm_kms_helper]
> >  drm_fb_helper_set_par+0x2d/0x60 [drm_kms_helper]
> >  intel_fbdev_set_par+0x1a/0x70 [i915]
> >  fbcon_init+0x582/0x610
> >  visual_init+0xd6/0x130
> >  do_bind_con_driver+0x1da/0x3c0
> >  do_take_over_console+0x116/0x180
> >  do_fbcon_takeover+0x5c/0xb0
> >  fbcon_event_notify+0x772/0x8a0
> >  ? __blocking_notifier_call_chain+0x35/0x70
> >  notifier_call_chain+0x4a/0x70
> >  __blocking_notifier_call_chain+0x4d/0x70
> >  blocking_notifier_call_chain+0x16/0x20
> >  fb_notifier_call_chain+0x1b/0x20
> >  register_framebuffer+0x278/0x360
> >  drm_fb_helper_initial_config+0x253/0x440 [drm_kms_helper]
> >  intel_fbdev_initial_config+0x18/0x30 [i915]
> >  async_run_entry_fn+0x39/0x170
> >  process_one_work+0x212/0x670
> >  ? process_one_work+0x197/0x670
> >  worker_thread+0x4e/0x490
> >  kthread+0x101/0x140
> >  ? process_one_work+0x670/0x670
> >  ? kthread_create_on_node+0x60/0x60
> >  ret_from_fork+0x31/0x40
> > 
> > Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
> > Signed-off-by: Ander Conselvan de Oliveira <ander.conselvan.de.oliveira@intel.com>
> > ---
> >  drivers/gpu/drm/i915/intel_display.c | 15 +++++++++++----
> >  1 file changed, 11 insertions(+), 4 deletions(-)
> > 
> > diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
> > index 957c62d..000fb31 100644
> > --- a/drivers/gpu/drm/i915/intel_display.c
> > +++ b/drivers/gpu/drm/i915/intel_display.c
> > @@ -13211,16 +13211,22 @@ intel_cleanup_plane_fb(struct drm_plane *plane,
> >  int
> >  skl_max_scale(struct intel_crtc *intel_crtc, struct intel_crtc_state *crtc_state)
> >  {
> > +	struct drm_i915_private *dev_priv;
> >  	int max_scale;
> > -	int crtc_clock, cdclk;
> > +	int crtc_clock, max_pixclk;
> >  
> >  	if (!intel_crtc || !crtc_state->base.enable)
> >  		return DRM_PLANE_HELPER_NO_SCALING;
> >  
> > +	dev_priv = to_i915(intel_crtc->base.dev);
> > +
> >  	crtc_clock = crtc_state->base.adjusted_mode.crtc_clock;
> > -	cdclk = to_intel_atomic_state(crtc_state->base.state)->cdclk.logical.cdclk;
> > +	max_pixclk = to_intel_atomic_state(crtc_state->base.state)->cdclk.logical.cdclk;
> > +
> > +	if (IS_GEMINILAKE(dev_priv))
> > +		max_pixclk *= 2;
> 
> max_dotclock perhaps?

Yeah, that would be more consistent, will respin.

Ander


> >  
> > -	if (WARN_ON_ONCE(!crtc_clock || cdclk < crtc_clock))
> > +	if (WARN_ON_ONCE(!crtc_clock || max_pixclk < crtc_clock))
> >  		return DRM_PLANE_HELPER_NO_SCALING;
> >  
> >  	/*
> > @@ -13229,7 +13235,8 @@ skl_max_scale(struct intel_crtc *intel_crtc, struct intel_crtc_state *crtc_state
> >  	 *            or
> >  	 *    cdclk/crtc_clock
> >  	 */
> > -	max_scale = min((1 << 16) * 3 - 1, (1 << 8) * ((cdclk << 8) / crtc_clock));
> > +	max_scale = min((1 << 16) * 3 - 1,
> > +			(1 << 8) * ((max_pixclk << 8) / crtc_clock));
> >  
> >  	return max_scale;
> >  }
> > -- 
> > 2.9.3
> > 
> > _______________________________________________
> > Intel-gfx mailing list
> > Intel-gfx@lists.freedesktop.org
> > https://lists.freedesktop.org/mailman/listinfo/intel-gfx
> 
> 
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 3/3] drm/i915/glk: Fix Geminilake scalers mode programming
  2017-02-22 14:44     ` Ander Conselvan De Oliveira
@ 2017-02-22 14:53       ` Ville Syrjälä
  0 siblings, 0 replies; 10+ messages in thread
From: Ville Syrjälä @ 2017-02-22 14:53 UTC (permalink / raw)
  To: Ander Conselvan De Oliveira; +Cc: intel-gfx

On Wed, Feb 22, 2017 at 04:44:10PM +0200, Ander Conselvan De Oliveira wrote:
> On Wed, 2017-02-22 at 16:41 +0200, Ville Syrjälä wrote:
> > On Wed, Feb 22, 2017 at 12:29:09PM +0200, Ander Conselvan de Oliveira wrote:
> > > Geminilake scalers can do 7x7 filtering for all supported input sizes,
> > > so it doesn't need the "high quality" mode programming, which was
> > > actually removed from that platform.
> > > 
> > > Signed-off-by: Ander Conselvan de Oliveira <ander.conselvan.de.oliveira@intel.com>
> > > ---
> > >  drivers/gpu/drm/i915/intel_atomic.c  | 14 ++++++++------
> > >  drivers/gpu/drm/i915/intel_display.c |  2 +-
> > >  drivers/gpu/drm/i915/intel_drv.h     |  6 +++---
> > >  3 files changed, 12 insertions(+), 10 deletions(-)
> > > 
> > > diff --git a/drivers/gpu/drm/i915/intel_atomic.c b/drivers/gpu/drm/i915/intel_atomic.c
> > > index aa9160e..e65818e 100644
> > > --- a/drivers/gpu/drm/i915/intel_atomic.c
> > > +++ b/drivers/gpu/drm/i915/intel_atomic.c
> > > @@ -121,7 +121,7 @@ intel_crtc_destroy_state(struct drm_crtc *crtc,
> > >  
> > >  /**
> > >   * intel_atomic_setup_scalers() - setup scalers for crtc per staged requests
> > > - * @dev: DRM device
> > > + * @dev_priv: i915 device
> > 
> > This change makes the diff quite messy for what's essentially a
> > addition of two lines of code.
> 
> There's no dev_priv in that function. While adding the dev_priv, it just seemed
> like pure laziness not to change the parameter. Didn't seem like a big deal
> since it has only one caller, but I'll split if you insist.

to_i915(dev) still works, so there's no real need for changing the
parameter at this time. I think sneaking in cosmetic changes should only
be done if it's really just a few lines, whereas in this case the
cosmetic change makes up most of the patch leading to a very low
signal to noise ratio.

> 
> Ander
> 
> > 
> > >   * @crtc: intel crtc
> > >   * @crtc_state: incoming crtc_state to validate and setup scalers
> > >   *
> > > @@ -136,9 +136,9 @@ intel_crtc_destroy_state(struct drm_crtc *crtc,
> > >   *         0 - scalers were setup succesfully
> > >   *         error code - otherwise
> > >   */
> > > -int intel_atomic_setup_scalers(struct drm_device *dev,
> > > -	struct intel_crtc *intel_crtc,
> > > -	struct intel_crtc_state *crtc_state)
> > > +int intel_atomic_setup_scalers(struct drm_i915_private *dev_priv,
> > > +			       struct intel_crtc *intel_crtc,
> > > +			       struct intel_crtc_state *crtc_state)
> > >  {
> > >  	struct drm_plane *plane = NULL;
> > >  	struct intel_plane *intel_plane;
> > > @@ -199,7 +199,7 @@ int intel_atomic_setup_scalers(struct drm_device *dev,
> > >  			 */
> > >  			if (!plane) {
> > >  				struct drm_plane_state *state;
> > > -				plane = drm_plane_from_index(dev, i);
> > > +				plane = drm_plane_from_index(&dev_priv->drm, i);
> > >  				state = drm_atomic_get_plane_state(drm_state, plane);
> > >  				if (IS_ERR(state)) {
> > >  					DRM_DEBUG_KMS("Failed to add [PLANE:%d] to drm_state\n",
> > > @@ -247,7 +247,9 @@ int intel_atomic_setup_scalers(struct drm_device *dev,
> > >  		}
> > >  
> > >  		/* set scaler mode */
> > > -		if (num_scalers_need == 1 && intel_crtc->pipe != PIPE_C) {
> > > +		if (IS_GEMINILAKE(dev_priv)) {
> > > +			scaler_state->scalers[*scaler_id].mode = 0;
> > > +		} else if (num_scalers_need == 1 && intel_crtc->pipe != PIPE_C) {
> > >  			/*
> > >  			 * when only 1 scaler is in use on either pipe A or B,
> > >  			 * scaler 0 operates in high quality (HQ) mode.
> > > diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
> > > index 000fb31..65e76d1 100644
> > > --- a/drivers/gpu/drm/i915/intel_display.c
> > > +++ b/drivers/gpu/drm/i915/intel_display.c
> > > @@ -10959,7 +10959,7 @@ static int intel_crtc_atomic_check(struct drm_crtc *crtc,
> > >  			ret = skl_update_scaler_crtc(pipe_config);
> > >  
> > >  		if (!ret)
> > > -			ret = intel_atomic_setup_scalers(dev, intel_crtc,
> > > +			ret = intel_atomic_setup_scalers(dev_priv, intel_crtc,
> > >  							 pipe_config);
> > >  	}
> > >  
> > > diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
> > > index 0edc499..d9d96d6 100644
> > > --- a/drivers/gpu/drm/i915/intel_drv.h
> > > +++ b/drivers/gpu/drm/i915/intel_drv.h
> > > @@ -1910,9 +1910,9 @@ intel_atomic_get_existing_plane_state(struct drm_atomic_state *state,
> > >  	return to_intel_plane_state(plane_state);
> > >  }
> > >  
> > > -int intel_atomic_setup_scalers(struct drm_device *dev,
> > > -	struct intel_crtc *intel_crtc,
> > > -	struct intel_crtc_state *crtc_state);
> > > +int intel_atomic_setup_scalers(struct drm_i915_private *dev_priv,
> > > +			       struct intel_crtc *intel_crtc,
> > > +			       struct intel_crtc_state *crtc_state);
> > >  
> > >  /* intel_atomic_plane.c */
> > >  struct intel_plane_state *intel_create_plane_state(struct drm_plane *plane);
> > > -- 
> > > 2.9.3
> > > 
> > > _______________________________________________
> > > Intel-gfx mailing list
> > > Intel-gfx@lists.freedesktop.org
> > > https://lists.freedesktop.org/mailman/listinfo/intel-gfx
> > 
> > 

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

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2017-02-22 14:53 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-02-22 10:29 [PATCH 0/3] GLK plane/scaling fixes Ander Conselvan de Oliveira
2017-02-22 10:29 ` [PATCH 1/3] drm/i915/glk: Fix watermark computations for third sprite plane Ander Conselvan de Oliveira
2017-02-22 10:29 ` [PATCH 2/3] drm/i915/glk: Fix maximum scaling factor for Geminilake scalers Ander Conselvan de Oliveira
2017-02-22 14:39   ` Ville Syrjälä
2017-02-22 14:44     ` Ander Conselvan De Oliveira
2017-02-22 10:29 ` [PATCH 3/3] drm/i915/glk: Fix Geminilake scalers mode programming Ander Conselvan de Oliveira
2017-02-22 14:41   ` Ville Syrjälä
2017-02-22 14:44     ` Ander Conselvan De Oliveira
2017-02-22 14:53       ` Ville Syrjälä
2017-02-22 12:22 ` ✓ Fi.CI.BAT: success for GLK plane/scaling fixes Patchwork

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.