diff mbox

[1/5] drm/i915: Add wait_for_us

Message ID 1457015805-23742-1-git-send-email-tvrtko.ursulin@linux.intel.com (mailing list archive)
State New, archived
Headers show

Commit Message

Tvrtko Ursulin March 3, 2016, 2:36 p.m. UTC
From: Tvrtko Ursulin <tvrtko.ursulin@intel.com>

This is for callers who want micro-second precision but are not
waiting from the atomic context.

v2:
  * Fix atomic waits. (Dave Gordon)
  * Use USEC_PER_SEC and USEC_PER_MSEC. (Chris Wilson)

Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Cc: Dave Gordon <david.s.gordon@intel.com>
Cc: Chris Wilson <chris@chris-wilson.co.uk>
---
 drivers/gpu/drm/i915/intel_dp.c  |  4 ++--
 drivers/gpu/drm/i915/intel_drv.h | 15 ++++++++-------
 drivers/gpu/drm/i915/intel_psr.c |  3 ++-
 3 files changed, 12 insertions(+), 10 deletions(-)

Comments

Tvrtko Ursulin March 3, 2016, 5:01 p.m. UTC | #1
On 03/03/16 15:03, Patchwork wrote:
> == Series Details ==
>
> Series: series starting with [1/5] drm/i915: Add wait_for_us
> URL   : https://patchwork.freedesktop.org/series/4059/
> State : failure
>
> == Summary ==
>
> Series 4059v1 Series without cover letter
> http://patchwork.freedesktop.org/api/1.0/series/4059/revisions/1/mbox/
>
> Test gem_sync:
>          Subgroup basic-bsd:
>                  dmesg-fail -> PASS       (ilk-hp8440p)
> Test kms_flip:
>          Subgroup basic-flip-vs-wf_vblank:
>                  pass       -> DMESG-WARN (hsw-gt2)

Known unrelated: https://bugs.freedesktop.org/show_bug.cgi?id=94349

>          Subgroup basic-plain-flip:
>                  pass       -> DMESG-WARN (snb-dellxps)

Same as above.

>                  dmesg-warn -> PASS       (hsw-brixbox)
> Test kms_force_connector_basic:
>          Subgroup force-edid:
>                  skip       -> PASS       (ilk-hp8440p)
> Test kms_psr_sink_crc:
>          Subgroup psr_basic:
>                  dmesg-warn -> PASS       (bdw-ultra)
> Test pm_rpm:
>          Subgroup basic-pci-d3-state:
>                  dmesg-warn -> PASS       (snb-dellxps)
>          Subgroup basic-rte:
>                  pass       -> DMESG-WARN (bsw-nuc-2)

Known unrelated: https://bugs.freedesktop.org/show_bug.cgi?id=94164

>
> bdw-nuci7        total:183  pass:172  dwarn:0   dfail:0   fail:0   skip:11
> bdw-ultra        total:183  pass:165  dwarn:0   dfail:0   fail:0   skip:18
> bsw-nuc-2        total:183  pass:147  dwarn:1   dfail:0   fail:1   skip:34
> byt-nuc          total:183  pass:152  dwarn:0   dfail:0   fail:0   skip:31
> hsw-brixbox      total:183  pass:163  dwarn:1   dfail:0   fail:0   skip:19
> hsw-gt2          total:183  pass:168  dwarn:1   dfail:0   fail:0   skip:14
> ilk-hp8440p      total:183  pass:125  dwarn:0   dfail:0   fail:0   skip:58
> ivb-t430s        total:183  pass:162  dwarn:0   dfail:0   fail:0   skip:21
> skl-i5k-2        total:183  pass:163  dwarn:0   dfail:0   fail:0   skip:20
> skl-i7k-2        total:183  pass:163  dwarn:0   dfail:0   fail:0   skip:20
> snb-dellxps      total:183  pass:153  dwarn:1   dfail:0   fail:0   skip:29
>
> Results at /archive/results/CI_IGT_test/Patchwork_1524/
>
> 1b34b1cf252bb734775331c435b0e3a3de484db6 drm-intel-nightly: 2016y-03m-03d-13h-06m-21s UTC integration manifest
> f69fa33fd56c8d11757c3f12b918b3a5b1ede935 drm/i915: Do not wait atomically for display clocks
> dae20b8161fd1e3b460f176064689f28aa852210 drm/i915: Do not lie about atomic wait granularity
> 328f1cc8e235f05948e43c71cf4c3457185a236f drm/i915: Kconfig for extra driver debugging
> 0324e4ed18bbc27f6620c29bf266eaa4debee3fb drm/i915/lrc: Do not wait atomically when stopping engines
> 822b3c5647a918dd7f1b7a81318c82f99697a0d3 drm/i915: Add wait_for_us

Just need some r-b's and this is merge-able then. :)

Regards,

Tvrtko
Chris Wilson March 3, 2016, 5:20 p.m. UTC | #2
On Thu, Mar 03, 2016 at 05:01:15PM +0000, Tvrtko Ursulin wrote:
> 
> On 03/03/16 15:03, Patchwork wrote:
> >== Series Details ==
> >
> >Series: series starting with [1/5] drm/i915: Add wait_for_us
> >URL   : https://patchwork.freedesktop.org/series/4059/
> >State : failure
> >
> >== Summary ==
> >
> >Series 4059v1 Series without cover letter
> >http://patchwork.freedesktop.org/api/1.0/series/4059/revisions/1/mbox/
> >
> >Test gem_sync:
> >         Subgroup basic-bsd:
> >                 dmesg-fail -> PASS       (ilk-hp8440p)
> >Test kms_flip:
> >         Subgroup basic-flip-vs-wf_vblank:
> >                 pass       -> DMESG-WARN (hsw-gt2)
> 
> Known unrelated: https://bugs.freedesktop.org/show_bug.cgi?id=94349
> 
> >         Subgroup basic-plain-flip:
> >                 pass       -> DMESG-WARN (snb-dellxps)
> 
> Same as above.
> 
> >                 dmesg-warn -> PASS       (hsw-brixbox)
> >Test kms_force_connector_basic:
> >         Subgroup force-edid:
> >                 skip       -> PASS       (ilk-hp8440p)
> >Test kms_psr_sink_crc:
> >         Subgroup psr_basic:
> >                 dmesg-warn -> PASS       (bdw-ultra)
> >Test pm_rpm:
> >         Subgroup basic-pci-d3-state:
> >                 dmesg-warn -> PASS       (snb-dellxps)
> >         Subgroup basic-rte:
> >                 pass       -> DMESG-WARN (bsw-nuc-2)
> 
> Known unrelated: https://bugs.freedesktop.org/show_bug.cgi?id=94164
> 
> >
> >bdw-nuci7        total:183  pass:172  dwarn:0   dfail:0   fail:0   skip:11
> >bdw-ultra        total:183  pass:165  dwarn:0   dfail:0   fail:0   skip:18
> >bsw-nuc-2        total:183  pass:147  dwarn:1   dfail:0   fail:1   skip:34
> >byt-nuc          total:183  pass:152  dwarn:0   dfail:0   fail:0   skip:31
> >hsw-brixbox      total:183  pass:163  dwarn:1   dfail:0   fail:0   skip:19
> >hsw-gt2          total:183  pass:168  dwarn:1   dfail:0   fail:0   skip:14
> >ilk-hp8440p      total:183  pass:125  dwarn:0   dfail:0   fail:0   skip:58
> >ivb-t430s        total:183  pass:162  dwarn:0   dfail:0   fail:0   skip:21
> >skl-i5k-2        total:183  pass:163  dwarn:0   dfail:0   fail:0   skip:20
> >skl-i7k-2        total:183  pass:163  dwarn:0   dfail:0   fail:0   skip:20
> >snb-dellxps      total:183  pass:153  dwarn:1   dfail:0   fail:0   skip:29
> >
> >Results at /archive/results/CI_IGT_test/Patchwork_1524/
> >
> >1b34b1cf252bb734775331c435b0e3a3de484db6 drm-intel-nightly: 2016y-03m-03d-13h-06m-21s UTC integration manifest
> >f69fa33fd56c8d11757c3f12b918b3a5b1ede935 drm/i915: Do not wait atomically for display clocks
> >dae20b8161fd1e3b460f176064689f28aa852210 drm/i915: Do not lie about atomic wait granularity
> >328f1cc8e235f05948e43c71cf4c3457185a236f drm/i915: Kconfig for extra driver debugging
> >0324e4ed18bbc27f6620c29bf266eaa4debee3fb drm/i915/lrc: Do not wait atomically when stopping engines
> >822b3c5647a918dd7f1b7a81318c82f99697a0d3 drm/i915: Add wait_for_us
> 
> Just need some r-b's and this is merge-able then. :)

Series looks good, so deal.
Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk>
-Chris
Tvrtko Ursulin March 3, 2016, 5:35 p.m. UTC | #3
On 03/03/16 17:20, Chris Wilson wrote:
> On Thu, Mar 03, 2016 at 05:01:15PM +0000, Tvrtko Ursulin wrote:
>>
>> On 03/03/16 15:03, Patchwork wrote:
>>> == Series Details ==
>>>
>>> Series: series starting with [1/5] drm/i915: Add wait_for_us
>>> URL   : https://patchwork.freedesktop.org/series/4059/
>>> State : failure
>>>
>>> == Summary ==
>>>
>>> Series 4059v1 Series without cover letter
>>> http://patchwork.freedesktop.org/api/1.0/series/4059/revisions/1/mbox/
>>>
>>> Test gem_sync:
>>>          Subgroup basic-bsd:
>>>                  dmesg-fail -> PASS       (ilk-hp8440p)
>>> Test kms_flip:
>>>          Subgroup basic-flip-vs-wf_vblank:
>>>                  pass       -> DMESG-WARN (hsw-gt2)
>>
>> Known unrelated: https://bugs.freedesktop.org/show_bug.cgi?id=94349
>>
>>>          Subgroup basic-plain-flip:
>>>                  pass       -> DMESG-WARN (snb-dellxps)
>>
>> Same as above.
>>
>>>                  dmesg-warn -> PASS       (hsw-brixbox)
>>> Test kms_force_connector_basic:
>>>          Subgroup force-edid:
>>>                  skip       -> PASS       (ilk-hp8440p)
>>> Test kms_psr_sink_crc:
>>>          Subgroup psr_basic:
>>>                  dmesg-warn -> PASS       (bdw-ultra)
>>> Test pm_rpm:
>>>          Subgroup basic-pci-d3-state:
>>>                  dmesg-warn -> PASS       (snb-dellxps)
>>>          Subgroup basic-rte:
>>>                  pass       -> DMESG-WARN (bsw-nuc-2)
>>
>> Known unrelated: https://bugs.freedesktop.org/show_bug.cgi?id=94164
>>
>>>
>>> bdw-nuci7        total:183  pass:172  dwarn:0   dfail:0   fail:0   skip:11
>>> bdw-ultra        total:183  pass:165  dwarn:0   dfail:0   fail:0   skip:18
>>> bsw-nuc-2        total:183  pass:147  dwarn:1   dfail:0   fail:1   skip:34
>>> byt-nuc          total:183  pass:152  dwarn:0   dfail:0   fail:0   skip:31
>>> hsw-brixbox      total:183  pass:163  dwarn:1   dfail:0   fail:0   skip:19
>>> hsw-gt2          total:183  pass:168  dwarn:1   dfail:0   fail:0   skip:14
>>> ilk-hp8440p      total:183  pass:125  dwarn:0   dfail:0   fail:0   skip:58
>>> ivb-t430s        total:183  pass:162  dwarn:0   dfail:0   fail:0   skip:21
>>> skl-i5k-2        total:183  pass:163  dwarn:0   dfail:0   fail:0   skip:20
>>> skl-i7k-2        total:183  pass:163  dwarn:0   dfail:0   fail:0   skip:20
>>> snb-dellxps      total:183  pass:153  dwarn:1   dfail:0   fail:0   skip:29
>>>
>>> Results at /archive/results/CI_IGT_test/Patchwork_1524/
>>>
>>> 1b34b1cf252bb734775331c435b0e3a3de484db6 drm-intel-nightly: 2016y-03m-03d-13h-06m-21s UTC integration manifest
>>> f69fa33fd56c8d11757c3f12b918b3a5b1ede935 drm/i915: Do not wait atomically for display clocks
>>> dae20b8161fd1e3b460f176064689f28aa852210 drm/i915: Do not lie about atomic wait granularity
>>> 328f1cc8e235f05948e43c71cf4c3457185a236f drm/i915: Kconfig for extra driver debugging
>>> 0324e4ed18bbc27f6620c29bf266eaa4debee3fb drm/i915/lrc: Do not wait atomically when stopping engines
>>> 822b3c5647a918dd7f1b7a81318c82f99697a0d3 drm/i915: Add wait_for_us
>>
>> Just need some r-b's and this is merge-able then. :)
>
> Series looks good, so deal.
> Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk>

Thanks! I've merged the series.

Now I have only CSB MMIO outstanding. ;)

Regards,

Tvrtko
diff mbox

Patch

diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
index f272b3541e00..3629e293ff61 100644
--- a/drivers/gpu/drm/i915/intel_dp.c
+++ b/drivers/gpu/drm/i915/intel_dp.c
@@ -1779,11 +1779,11 @@  static void wait_panel_status(struct intel_dp *intel_dp,
 			I915_READ(pp_stat_reg),
 			I915_READ(pp_ctrl_reg));
 
-	if (_wait_for((I915_READ(pp_stat_reg) & mask) == value, 5000, 10)) {
+	if (_wait_for((I915_READ(pp_stat_reg) & mask) == value,
+		      5 * USEC_PER_SEC, 10 * USEC_PER_MSEC))
 		DRM_ERROR("Panel status timeout: status %08x control %08x\n",
 				I915_READ(pp_stat_reg),
 				I915_READ(pp_ctrl_reg));
-	}
 
 	DRM_DEBUG_KMS("Wait complete\n");
 }
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
index 6c0085496fca..c2a62e9554b3 100644
--- a/drivers/gpu/drm/i915/intel_drv.h
+++ b/drivers/gpu/drm/i915/intel_drv.h
@@ -45,8 +45,8 @@ 
  * having timed out, since the timeout could be due to preemption or similar and
  * we've never had a chance to check the condition before the timeout.
  */
-#define _wait_for(COND, MS, W) ({ \
-	unsigned long timeout__ = jiffies + msecs_to_jiffies(MS) + 1;	\
+#define _wait_for(COND, US, W) ({ \
+	unsigned long timeout__ = jiffies + usecs_to_jiffies(US) + 1;	\
 	int ret__ = 0;							\
 	while (!(COND)) {						\
 		if (time_after(jiffies, timeout__)) {			\
@@ -55,7 +55,7 @@ 
 			break;						\
 		}							\
 		if ((W) && drm_can_sleep()) {				\
-			usleep_range((W)*1000, (W)*2000);		\
+			usleep_range((W), (W)*2);			\
 		} else {						\
 			cpu_relax();					\
 		}							\
@@ -63,10 +63,11 @@ 
 	ret__;								\
 })
 
-#define wait_for(COND, MS) _wait_for(COND, MS, 1)
-#define wait_for_atomic(COND, MS) _wait_for(COND, MS, 0)
-#define wait_for_atomic_us(COND, US) _wait_for((COND), \
-					       DIV_ROUND_UP((US), 1000), 0)
+#define wait_for(COND, MS)	  	_wait_for((COND), (MS) * 1000, 1000)
+#define wait_for_us(COND, US)	  	_wait_for((COND), (US), 1)
+
+#define wait_for_atomic(COND, MS) 	_wait_for((COND), (MS) * 1000, 0)
+#define wait_for_atomic_us(COND, US)	_wait_for((COND), (US), 0)
 
 #define KHz(x) (1000 * (x))
 #define MHz(x) KHz(1000 * (x))
diff --git a/drivers/gpu/drm/i915/intel_psr.c b/drivers/gpu/drm/i915/intel_psr.c
index 0b42ada338c8..b1413beb00d1 100644
--- a/drivers/gpu/drm/i915/intel_psr.c
+++ b/drivers/gpu/drm/i915/intel_psr.c
@@ -507,7 +507,8 @@  static void hsw_psr_disable(struct intel_dp *intel_dp)
 
 		/* Wait till PSR is idle */
 		if (_wait_for((I915_READ(EDP_PSR_STATUS_CTL) &
-			       EDP_PSR_STATUS_STATE_MASK) == 0, 2000, 10))
+			       EDP_PSR_STATUS_STATE_MASK) == 0,
+			       2 * USEC_PER_SEC, 10 * USEC_PER_MSEC))
 			DRM_ERROR("Timed out waiting for PSR Idle State\n");
 
 		dev_priv->psr.active = false;