Subversion Repositories Kolibri OS

Rev

Rev 6935 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 6935 Rev 6937
Line 137... Line 137...
137
} while (0)
137
} while (0)
Line 138... Line 138...
138
 
138
 
139
/*
139
/*
140
 * We should clear IMR at preinstall/uninstall, and just check at postinstall.
140
 * We should clear IMR at preinstall/uninstall, and just check at postinstall.
141
 */
141
 */
-
 
142
static void gen5_assert_iir_is_zero(struct drm_i915_private *dev_priv,
142
static void gen5_assert_iir_is_zero(struct drm_i915_private *dev_priv, u32 reg)
143
				    i915_reg_t reg)
143
{
144
{
Line 144... Line 145...
144
	u32 val = I915_READ(reg);
145
	u32 val = I915_READ(reg);
145
 
146
 
Line 146... Line 147...
146
	if (val == 0)
147
	if (val == 0)
147
		return;
148
		return;
148
 
149
 
149
	WARN(1, "Interrupt register 0x%x is not zero: 0x%08x\n",
150
	WARN(1, "Interrupt register 0x%x is not zero: 0x%08x\n",
150
	     reg, val);
151
	     i915_mmio_reg_offset(reg), val);
151
	I915_WRITE(reg, 0xffffffff);
152
	I915_WRITE(reg, 0xffffffff);
152
	POSTING_READ(reg);
153
	POSTING_READ(reg);
Line 212... Line 213...
212
 * ilk_update_display_irq - update DEIMR
213
 * ilk_update_display_irq - update DEIMR
213
 * @dev_priv: driver private
214
 * @dev_priv: driver private
214
 * @interrupt_mask: mask of interrupt bits to update
215
 * @interrupt_mask: mask of interrupt bits to update
215
 * @enabled_irq_mask: mask of interrupt bits to enable
216
 * @enabled_irq_mask: mask of interrupt bits to enable
216
 */
217
 */
217
static void ilk_update_display_irq(struct drm_i915_private *dev_priv,
218
void ilk_update_display_irq(struct drm_i915_private *dev_priv,
218
				   uint32_t interrupt_mask,
219
				   uint32_t interrupt_mask,
219
				   uint32_t enabled_irq_mask)
220
				   uint32_t enabled_irq_mask)
220
{
221
{
221
	uint32_t new_val;
222
	uint32_t new_val;
Line 236... Line 237...
236
		I915_WRITE(DEIMR, dev_priv->irq_mask);
237
		I915_WRITE(DEIMR, dev_priv->irq_mask);
237
		POSTING_READ(DEIMR);
238
		POSTING_READ(DEIMR);
238
	}
239
	}
239
}
240
}
Line 240... Line -...
240
 
-
 
241
void
-
 
242
ironlake_enable_display_irq(struct drm_i915_private *dev_priv, u32 mask)
-
 
243
{
-
 
244
	ilk_update_display_irq(dev_priv, mask, mask);
-
 
245
}
-
 
246
 
-
 
247
void
-
 
248
ironlake_disable_display_irq(struct drm_i915_private *dev_priv, u32 mask)
-
 
249
{
-
 
250
	ilk_update_display_irq(dev_priv, mask, 0);
-
 
251
}
-
 
252
 
241
 
253
/**
242
/**
254
 * ilk_update_gt_irq - update GTIMR
243
 * ilk_update_gt_irq - update GTIMR
255
 * @dev_priv: driver private
244
 * @dev_priv: driver private
256
 * @interrupt_mask: mask of interrupt bits to update
245
 * @interrupt_mask: mask of interrupt bits to update
Line 281... Line 270...
281
void gen5_disable_gt_irq(struct drm_i915_private *dev_priv, uint32_t mask)
270
void gen5_disable_gt_irq(struct drm_i915_private *dev_priv, uint32_t mask)
282
{
271
{
283
	ilk_update_gt_irq(dev_priv, mask, 0);
272
	ilk_update_gt_irq(dev_priv, mask, 0);
284
}
273
}
Line 285... Line 274...
285
 
274
 
286
static u32 gen6_pm_iir(struct drm_i915_private *dev_priv)
275
static i915_reg_t gen6_pm_iir(struct drm_i915_private *dev_priv)
287
{
276
{
288
	return INTEL_INFO(dev_priv)->gen >= 8 ? GEN8_GT_IIR(2) : GEN6_PMIIR;
277
	return INTEL_INFO(dev_priv)->gen >= 8 ? GEN8_GT_IIR(2) : GEN6_PMIIR;
Line 289... Line 278...
289
}
278
}
290
 
279
 
291
static u32 gen6_pm_imr(struct drm_i915_private *dev_priv)
280
static i915_reg_t gen6_pm_imr(struct drm_i915_private *dev_priv)
292
{
281
{
Line 293... Line 282...
293
	return INTEL_INFO(dev_priv)->gen >= 8 ? GEN8_GT_IMR(2) : GEN6_PMIMR;
282
	return INTEL_INFO(dev_priv)->gen >= 8 ? GEN8_GT_IMR(2) : GEN6_PMIMR;
294
}
283
}
295
 
284
 
296
static u32 gen6_pm_ier(struct drm_i915_private *dev_priv)
285
static i915_reg_t gen6_pm_ier(struct drm_i915_private *dev_priv)
Line 297... Line 286...
297
{
286
{
Line 348... Line 337...
348
}
337
}
Line 349... Line 338...
349
 
338
 
350
void gen6_reset_rps_interrupts(struct drm_device *dev)
339
void gen6_reset_rps_interrupts(struct drm_device *dev)
351
{
340
{
352
	struct drm_i915_private *dev_priv = dev->dev_private;
341
	struct drm_i915_private *dev_priv = dev->dev_private;
Line 353... Line 342...
353
	uint32_t reg = gen6_pm_iir(dev_priv);
342
	i915_reg_t reg = gen6_pm_iir(dev_priv);
354
 
343
 
355
	spin_lock_irq(&dev_priv->irq_lock);
344
	spin_lock_irq(&dev_priv->irq_lock);
356
	I915_WRITE(reg, dev_priv->pm_rps_events);
345
	I915_WRITE(reg, dev_priv->pm_rps_events);
Line 399... Line 388...
399
 
388
 
400
	spin_lock_irq(&dev_priv->irq_lock);
389
	spin_lock_irq(&dev_priv->irq_lock);
401
	dev_priv->rps.interrupts_enabled = false;
390
	dev_priv->rps.interrupts_enabled = false;
Line 402... Line -...
402
	spin_unlock_irq(&dev_priv->irq_lock);
-
 
Line 403... Line 391...
403
 
391
	spin_unlock_irq(&dev_priv->irq_lock);
Line 404... Line 392...
404
	cancel_work_sync(&dev_priv->rps.work);
392
 
Line 446... Line 434...
446
		POSTING_READ(GEN8_DE_PORT_IMR);
434
		POSTING_READ(GEN8_DE_PORT_IMR);
447
	}
435
	}
448
}
436
}
Line 449... Line 437...
449
 
437
 
-
 
438
/**
-
 
439
 * bdw_update_pipe_irq - update DE pipe interrupt
-
 
440
 * @dev_priv: driver private
-
 
441
 * @pipe: pipe whose interrupt to update
-
 
442
 * @interrupt_mask: mask of interrupt bits to update
-
 
443
 * @enabled_irq_mask: mask of interrupt bits to enable
-
 
444
 */
-
 
445
void bdw_update_pipe_irq(struct drm_i915_private *dev_priv,
-
 
446
			 enum pipe pipe,
-
 
447
			 uint32_t interrupt_mask,
-
 
448
			 uint32_t enabled_irq_mask)
-
 
449
{
-
 
450
	uint32_t new_val;
-
 
451
 
-
 
452
	assert_spin_locked(&dev_priv->irq_lock);
-
 
453
 
-
 
454
	WARN_ON(enabled_irq_mask & ~interrupt_mask);
-
 
455
 
-
 
456
	if (WARN_ON(!intel_irqs_enabled(dev_priv)))
-
 
457
		return;
-
 
458
 
-
 
459
	new_val = dev_priv->de_irq_mask[pipe];
-
 
460
	new_val &= ~interrupt_mask;
-
 
461
	new_val |= (~enabled_irq_mask & interrupt_mask);
-
 
462
 
-
 
463
	if (new_val != dev_priv->de_irq_mask[pipe]) {
-
 
464
		dev_priv->de_irq_mask[pipe] = new_val;
-
 
465
		I915_WRITE(GEN8_DE_PIPE_IMR(pipe), dev_priv->de_irq_mask[pipe]);
-
 
466
		POSTING_READ(GEN8_DE_PIPE_IMR(pipe));
-
 
467
	}
-
 
468
}
-
 
469
 
450
/**
470
/**
451
 * ibx_display_interrupt_update - update SDEIMR
471
 * ibx_display_interrupt_update - update SDEIMR
452
 * @dev_priv: driver private
472
 * @dev_priv: driver private
453
 * @interrupt_mask: mask of interrupt bits to update
473
 * @interrupt_mask: mask of interrupt bits to update
454
 * @enabled_irq_mask: mask of interrupt bits to enable
474
 * @enabled_irq_mask: mask of interrupt bits to enable
Line 474... Line 494...
474
 
494
 
475
static void
495
static void
476
__i915_enable_pipestat(struct drm_i915_private *dev_priv, enum pipe pipe,
496
__i915_enable_pipestat(struct drm_i915_private *dev_priv, enum pipe pipe,
477
		       u32 enable_mask, u32 status_mask)
497
		       u32 enable_mask, u32 status_mask)
478
{
498
{
479
	u32 reg = PIPESTAT(pipe);
499
	i915_reg_t reg = PIPESTAT(pipe);
Line 480... Line 500...
480
	u32 pipestat = I915_READ(reg) & PIPESTAT_INT_ENABLE_MASK;
500
	u32 pipestat = I915_READ(reg) & PIPESTAT_INT_ENABLE_MASK;
481
 
501
 
Line 501... Line 521...
501
 
521
 
502
static void
522
static void
503
__i915_disable_pipestat(struct drm_i915_private *dev_priv, enum pipe pipe,
523
__i915_disable_pipestat(struct drm_i915_private *dev_priv, enum pipe pipe,
504
		        u32 enable_mask, u32 status_mask)
524
		        u32 enable_mask, u32 status_mask)
505
{
525
{
506
	u32 reg = PIPESTAT(pipe);
526
	i915_reg_t reg = PIPESTAT(pipe);
Line 507... Line 527...
507
	u32 pipestat = I915_READ(reg) & PIPESTAT_INT_ENABLE_MASK;
527
	u32 pipestat = I915_READ(reg) & PIPESTAT_INT_ENABLE_MASK;
508
 
528
 
Line 557... Line 577...
557
i915_enable_pipestat(struct drm_i915_private *dev_priv, enum pipe pipe,
577
i915_enable_pipestat(struct drm_i915_private *dev_priv, enum pipe pipe,
558
		     u32 status_mask)
578
		     u32 status_mask)
559
{
579
{
560
	u32 enable_mask;
580
	u32 enable_mask;
Line 561... Line 581...
561
 
581
 
562
	if (IS_VALLEYVIEW(dev_priv->dev))
582
	if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv))
563
		enable_mask = vlv_get_pipestat_enable_mask(dev_priv->dev,
583
		enable_mask = vlv_get_pipestat_enable_mask(dev_priv->dev,
564
							   status_mask);
584
							   status_mask);
565
	else
585
	else
566
		enable_mask = status_mask << 16;
586
		enable_mask = status_mask << 16;
Line 571... Line 591...
571
i915_disable_pipestat(struct drm_i915_private *dev_priv, enum pipe pipe,
591
i915_disable_pipestat(struct drm_i915_private *dev_priv, enum pipe pipe,
572
		      u32 status_mask)
592
		      u32 status_mask)
573
{
593
{
574
	u32 enable_mask;
594
	u32 enable_mask;
Line 575... Line 595...
575
 
595
 
576
	if (IS_VALLEYVIEW(dev_priv->dev))
596
	if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv))
577
		enable_mask = vlv_get_pipestat_enable_mask(dev_priv->dev,
597
		enable_mask = vlv_get_pipestat_enable_mask(dev_priv->dev,
578
							   status_mask);
598
							   status_mask);
579
	else
599
	else
580
		enable_mask = status_mask << 16;
600
		enable_mask = status_mask << 16;
Line 662... Line 682...
662
 * we use as a pipe index
682
 * we use as a pipe index
663
 */
683
 */
664
static u32 i915_get_vblank_counter(struct drm_device *dev, unsigned int pipe)
684
static u32 i915_get_vblank_counter(struct drm_device *dev, unsigned int pipe)
665
{
685
{
666
	struct drm_i915_private *dev_priv = dev->dev_private;
686
	struct drm_i915_private *dev_priv = dev->dev_private;
667
	unsigned long high_frame;
-
 
668
	unsigned long low_frame;
687
	i915_reg_t high_frame, low_frame;
669
	u32 high1, high2, low, pixel, vbl_start, hsync_start, htotal;
688
	u32 high1, high2, low, pixel, vbl_start, hsync_start, htotal;
670
	struct intel_crtc *intel_crtc =
689
	struct intel_crtc *intel_crtc =
671
		to_intel_crtc(dev_priv->pipe_to_crtc_mapping[pipe]);
690
		to_intel_crtc(dev_priv->pipe_to_crtc_mapping[pipe]);
672
	const struct drm_display_mode *mode = &intel_crtc->base.hwmode;
691
	const struct drm_display_mode *mode = &intel_crtc->base.hwmode;
Line 714... Line 733...
714
	struct drm_i915_private *dev_priv = dev->dev_private;
733
	struct drm_i915_private *dev_priv = dev->dev_private;
Line 715... Line 734...
715
 
734
 
716
	return I915_READ(PIPE_FRMCOUNT_G4X(pipe));
735
	return I915_READ(PIPE_FRMCOUNT_G4X(pipe));
Line 717... Line 736...
717
}
736
}
718
 
-
 
719
/* raw reads, only for fast reads of display block, no need for forcewake etc. */
-
 
720
#define __raw_i915_read32(dev_priv__, reg__) readl((dev_priv__)->regs + (reg__))
737
 
721
 
738
/* I915_READ_FW, only for fast reads of display block, no need for forcewake etc. */
722
static int __intel_get_crtc_scanline(struct intel_crtc *crtc)
739
static int __intel_get_crtc_scanline(struct intel_crtc *crtc)
723
{
740
{
724
	struct drm_device *dev = crtc->base.dev;
741
	struct drm_device *dev = crtc->base.dev;
Line 730... Line 747...
730
	vtotal = mode->crtc_vtotal;
747
	vtotal = mode->crtc_vtotal;
731
	if (mode->flags & DRM_MODE_FLAG_INTERLACE)
748
	if (mode->flags & DRM_MODE_FLAG_INTERLACE)
732
		vtotal /= 2;
749
		vtotal /= 2;
Line 733... Line 750...
733
 
750
 
734
	if (IS_GEN2(dev))
751
	if (IS_GEN2(dev))
735
		position = __raw_i915_read32(dev_priv, PIPEDSL(pipe)) & DSL_LINEMASK_GEN2;
752
		position = I915_READ_FW(PIPEDSL(pipe)) & DSL_LINEMASK_GEN2;
736
	else
753
	else
Line 737... Line 754...
737
		position = __raw_i915_read32(dev_priv, PIPEDSL(pipe)) & DSL_LINEMASK_GEN3;
754
		position = I915_READ_FW(PIPEDSL(pipe)) & DSL_LINEMASK_GEN3;
738
 
755
 
739
	/*
756
	/*
740
	 * On HSW, the DSL reg (0x70000) appears to return 0 if we
757
	 * On HSW, the DSL reg (0x70000) appears to return 0 if we
Line 824... Line 841...
824
	} else {
841
	} else {
825
		/* Have access to pixelcount since start of frame.
842
		/* Have access to pixelcount since start of frame.
826
		 * We can split this into vertical and horizontal
843
		 * We can split this into vertical and horizontal
827
		 * scanout position.
844
		 * scanout position.
828
		 */
845
		 */
829
		position = (__raw_i915_read32(dev_priv, PIPEFRAMEPIXEL(pipe)) & PIPE_PIXEL_MASK) >> PIPE_PIXEL_SHIFT;
846
		position = (I915_READ_FW(PIPEFRAMEPIXEL(pipe)) & PIPE_PIXEL_MASK) >> PIPE_PIXEL_SHIFT;
Line 830... Line 847...
830
 
847
 
831
		/* convert to pixel counts */
848
		/* convert to pixel counts */
832
		vbl_start *= htotal;
849
		vbl_start *= htotal;
833
		vbl_end *= htotal;
850
		vbl_end *= htotal;
Line 991... Line 1008...
991
	ei->cz_clock = vlv_punit_read(dev_priv, PUNIT_REG_CZ_TIMESTAMP);
1008
	ei->cz_clock = vlv_punit_read(dev_priv, PUNIT_REG_CZ_TIMESTAMP);
992
	ei->render_c0 = I915_READ(VLV_RENDER_C0_COUNT);
1009
	ei->render_c0 = I915_READ(VLV_RENDER_C0_COUNT);
993
	ei->media_c0 = I915_READ(VLV_MEDIA_C0_COUNT);
1010
	ei->media_c0 = I915_READ(VLV_MEDIA_C0_COUNT);
994
}
1011
}
Line -... Line 1012...
-
 
1012
 
-
 
1013
static bool vlv_c0_above(struct drm_i915_private *dev_priv,
-
 
1014
			 const struct intel_rps_ei *old,
-
 
1015
			 const struct intel_rps_ei *now,
-
 
1016
			 int threshold)
-
 
1017
{
-
 
1018
	u64 time, c0;
-
 
1019
	unsigned int mul = 100;
-
 
1020
 
-
 
1021
	if (old->cz_clock == 0)
-
 
1022
		return false;
-
 
1023
 
-
 
1024
	if (I915_READ(VLV_COUNTER_CONTROL) & VLV_COUNT_RANGE_HIGH)
-
 
1025
		mul <<= 8;
-
 
1026
 
-
 
1027
	time = now->cz_clock - old->cz_clock;
-
 
1028
	time *= threshold * dev_priv->czclk_freq;
-
 
1029
 
-
 
1030
	/* Workload can be split between render + media, e.g. SwapBuffers
-
 
1031
	 * being blitted in X after being rendered in mesa. To account for
-
 
1032
	 * this we need to combine both engines into our activity counter.
-
 
1033
	 */
-
 
1034
	c0 = now->render_c0 - old->render_c0;
-
 
1035
	c0 += now->media_c0 - old->media_c0;
-
 
1036
	c0 *= mul * VLV_CZ_CLOCK_TO_MILLI_SEC;
-
 
1037
 
-
 
1038
	return c0 >= time;
-
 
1039
}
995
 
1040
 
996
void gen6_rps_reset_ei(struct drm_i915_private *dev_priv)
1041
void gen6_rps_reset_ei(struct drm_i915_private *dev_priv)
-
 
1042
{
997
{
1043
	vlv_c0_read(dev_priv, &dev_priv->rps.down_ei);
998
	memset(&dev_priv->rps.ei, 0, sizeof(dev_priv->rps.ei));
1044
	dev_priv->rps.up_ei = dev_priv->rps.down_ei;
Line 999... Line 1045...
999
}
1045
}
1000
 
1046
 
1001
static u32 vlv_wa_c0_ei(struct drm_i915_private *dev_priv, u32 pm_iir)
-
 
1002
{
1047
static u32 vlv_wa_c0_ei(struct drm_i915_private *dev_priv, u32 pm_iir)
1003
	const struct intel_rps_ei *prev = &dev_priv->rps.ei;
1048
{
Line 1004... Line 1049...
1004
	struct intel_rps_ei now;
1049
	struct intel_rps_ei now;
1005
	u32 events = 0;
1050
	u32 events = 0;
Line 1006... Line 1051...
1006
 
1051
 
1007
	if ((pm_iir & GEN6_PM_RP_UP_EI_EXPIRED) == 0)
1052
	if ((pm_iir & (GEN6_PM_RP_DOWN_EI_EXPIRED | GEN6_PM_RP_UP_EI_EXPIRED)) == 0)
1008
		return 0;
1053
		return 0;
Line 1009... Line -...
1009
 
-
 
1010
	vlv_c0_read(dev_priv, &now);
-
 
1011
	if (now.cz_clock == 0)
-
 
1012
		return 0;
-
 
1013
 
-
 
1014
	if (prev->cz_clock) {
1054
 
1015
		u64 time, c0;
-
 
1016
		unsigned int mul;
-
 
1017
 
1055
	vlv_c0_read(dev_priv, &now);
1018
		mul = VLV_CZ_CLOCK_TO_MILLI_SEC * 100; /* scale to threshold% */
1056
	if (now.cz_clock == 0)
1019
		if (I915_READ(VLV_COUNTER_CONTROL) & VLV_COUNT_RANGE_HIGH)
-
 
1020
			mul <<= 8;
1057
		return 0;
1021
 
-
 
1022
		time = now.cz_clock - prev->cz_clock;
1058
 
1023
		time *= dev_priv->czclk_freq;
1059
	if (pm_iir & GEN6_PM_RP_DOWN_EI_EXPIRED) {
1024
 
1060
		if (!vlv_c0_above(dev_priv,
1025
		/* Workload can be split between render + media,
-
 
1026
		 * e.g. SwapBuffers being blitted in X after being rendered in
-
 
1027
		 * mesa. To account for this we need to combine both engines
-
 
Line 1028... Line 1061...
1028
		 * into our activity counter.
1061
				  &dev_priv->rps.down_ei, &now,
-
 
1062
				  dev_priv->rps.down_threshold))
1029
		 */
1063
			events |= GEN6_PM_RP_DOWN_THRESHOLD;
1030
		c0 = now.render_c0 - prev->render_c0;
1064
		dev_priv->rps.down_ei = now;
1031
		c0 += now.media_c0 - prev->media_c0;
1065
	}
-
 
1066
 
1032
		c0 *= mul;
1067
	if (pm_iir & GEN6_PM_RP_UP_EI_EXPIRED) {
Line 1033... Line -...
1033
 
-
 
1034
		if (c0 > time * dev_priv->rps.up_threshold)
1068
		if (vlv_c0_above(dev_priv,
1035
			events = GEN6_PM_RP_UP_THRESHOLD;
1069
				 &dev_priv->rps.up_ei, &now,
Line 1036... Line 1070...
1036
		else if (c0 < time * dev_priv->rps.down_threshold)
1070
				 dev_priv->rps.up_threshold))
1037
			events = GEN6_PM_RP_DOWN_THRESHOLD;
1071
			events |= GEN6_PM_RP_UP_THRESHOLD;
Line 1065... Line 1099...
1065
	/* Speed up work cancelation during disabling rps interrupts. */
1099
	/* Speed up work cancelation during disabling rps interrupts. */
1066
	if (!dev_priv->rps.interrupts_enabled) {
1100
	if (!dev_priv->rps.interrupts_enabled) {
1067
		spin_unlock_irq(&dev_priv->irq_lock);
1101
		spin_unlock_irq(&dev_priv->irq_lock);
1068
		return;
1102
		return;
1069
	}
1103
	}
-
 
1104
 
-
 
1105
	/*
-
 
1106
	 * The RPS work is synced during runtime suspend, we don't require a
-
 
1107
	 * wakeref. TODO: instead of disabling the asserts make sure that we
-
 
1108
	 * always hold an RPM reference while the work is running.
-
 
1109
	 */
-
 
1110
	DISABLE_RPM_WAKEREF_ASSERTS(dev_priv);
-
 
1111
 
1070
	pm_iir = dev_priv->rps.pm_iir;
1112
	pm_iir = dev_priv->rps.pm_iir;
1071
	dev_priv->rps.pm_iir = 0;
1113
	dev_priv->rps.pm_iir = 0;
1072
	/* Make sure not to corrupt PMIMR state used by ringbuffer on GEN6 */
1114
	/* Make sure not to corrupt PMIMR state used by ringbuffer on GEN6 */
1073
	gen6_enable_pm_irq(dev_priv, dev_priv->pm_rps_events);
1115
	gen6_enable_pm_irq(dev_priv, dev_priv->pm_rps_events);
1074
	client_boost = dev_priv->rps.client_boost;
1116
	client_boost = dev_priv->rps.client_boost;
Line 1077... Line 1119...
1077
 
1119
 
1078
	/* Make sure we didn't queue anything we're not going to process. */
1120
	/* Make sure we didn't queue anything we're not going to process. */
Line 1079... Line 1121...
1079
	WARN_ON(pm_iir & ~dev_priv->pm_rps_events);
1121
	WARN_ON(pm_iir & ~dev_priv->pm_rps_events);
1080
 
1122
 
Line 1081... Line 1123...
1081
	if ((pm_iir & dev_priv->pm_rps_events) == 0 && !client_boost)
1123
	if ((pm_iir & dev_priv->pm_rps_events) == 0 && !client_boost)
Line 1082... Line 1124...
1082
		return;
1124
		goto out;
Line 1132... Line 1174...
1132
	new_delay = clamp_t(int, new_delay, min, max);
1174
	new_delay = clamp_t(int, new_delay, min, max);
Line 1133... Line 1175...
1133
 
1175
 
Line 1134... Line 1176...
1134
	intel_set_rps(dev_priv->dev, new_delay);
1176
	intel_set_rps(dev_priv->dev, new_delay);
-
 
1177
 
-
 
1178
	mutex_unlock(&dev_priv->rps.hw_lock);
1135
 
1179
out:
Line 1136... Line 1180...
1136
	mutex_unlock(&dev_priv->rps.hw_lock);
1180
	ENABLE_RPM_WAKEREF_ASSERTS(dev_priv);
1137
}
1181
}
Line 1168... Line 1212...
1168
	misccpctl = I915_READ(GEN7_MISCCPCTL);
1212
	misccpctl = I915_READ(GEN7_MISCCPCTL);
1169
	I915_WRITE(GEN7_MISCCPCTL, misccpctl & ~GEN7_DOP_CLOCK_GATE_ENABLE);
1213
	I915_WRITE(GEN7_MISCCPCTL, misccpctl & ~GEN7_DOP_CLOCK_GATE_ENABLE);
1170
	POSTING_READ(GEN7_MISCCPCTL);
1214
	POSTING_READ(GEN7_MISCCPCTL);
Line 1171... Line 1215...
1171
 
1215
 
1172
	while ((slice = ffs(dev_priv->l3_parity.which_slice)) != 0) {
1216
	while ((slice = ffs(dev_priv->l3_parity.which_slice)) != 0) {
Line 1173... Line 1217...
1173
		u32 reg;
1217
		i915_reg_t reg;
1174
 
1218
 
1175
		slice--;
1219
		slice--;
Line 1176... Line 1220...
1176
		if (WARN_ON_ONCE(slice >= NUM_L3_SLICES(dev_priv->dev)))
1220
		if (WARN_ON_ONCE(slice >= NUM_L3_SLICES(dev_priv->dev)))
Line 1177... Line 1221...
1177
			break;
1221
			break;
Line 1178... Line 1222...
1178
 
1222
 
1179
		dev_priv->l3_parity.which_slice &= ~(1<
1223
		dev_priv->l3_parity.which_slice &= ~(1<
1180
 
1224
 
1181
		reg = GEN7_L3CDERRST1 + (slice * 0x200);
1225
		reg = GEN7_L3CDERRST1(slice);
Line 1256... Line 1300...
1256
 
1300
 
1257
	if (gt_iir & GT_PARITY_ERROR(dev))
1301
	if (gt_iir & GT_PARITY_ERROR(dev))
1258
		ivybridge_parity_error_irq_handler(dev, gt_iir);
1302
		ivybridge_parity_error_irq_handler(dev, gt_iir);
Line -... Line 1303...
-
 
1303
}
-
 
1304
 
-
 
1305
static __always_inline void
-
 
1306
gen8_cs_irq_handler(struct intel_engine_cs *ring, u32 iir, int test_shift)
-
 
1307
{
-
 
1308
	if (iir & (GT_RENDER_USER_INTERRUPT << test_shift))
-
 
1309
		notify_ring(ring);
-
 
1310
	if (iir & (GT_CONTEXT_SWITCH_INTERRUPT << test_shift))
-
 
1311
		intel_lrc_irq_handler(ring);
1259
}
1312
}
1260
 
1313
 
1261
static irqreturn_t gen8_gt_irq_handler(struct drm_i915_private *dev_priv,
1314
static irqreturn_t gen8_gt_irq_handler(struct drm_i915_private *dev_priv,
1262
				       u32 master_ctl)
1315
				       u32 master_ctl)
Line 1263... Line 1316...
1263
{
1316
{
1264
	irqreturn_t ret = IRQ_NONE;
1317
	irqreturn_t ret = IRQ_NONE;
1265
 
1318
 
1266
	if (master_ctl & (GEN8_GT_RCS_IRQ | GEN8_GT_BCS_IRQ)) {
1319
	if (master_ctl & (GEN8_GT_RCS_IRQ | GEN8_GT_BCS_IRQ)) {
1267
		u32 tmp = I915_READ_FW(GEN8_GT_IIR(0));
1320
		u32 iir = I915_READ_FW(GEN8_GT_IIR(0));
Line 1268... Line -...
1268
		if (tmp) {
-
 
1269
			I915_WRITE_FW(GEN8_GT_IIR(0), tmp);
1321
		if (iir) {
1270
			ret = IRQ_HANDLED;
-
 
1271
 
1322
			I915_WRITE_FW(GEN8_GT_IIR(0), iir);
Line 1272... Line -...
1272
			if (tmp & (GT_CONTEXT_SWITCH_INTERRUPT << GEN8_RCS_IRQ_SHIFT))
-
 
1273
				intel_lrc_irq_handler(&dev_priv->ring[RCS]);
1323
			ret = IRQ_HANDLED;
1274
			if (tmp & (GT_RENDER_USER_INTERRUPT << GEN8_RCS_IRQ_SHIFT))
-
 
1275
				notify_ring(&dev_priv->ring[RCS]);
1324
 
1276
 
1325
			gen8_cs_irq_handler(&dev_priv->ring[RCS],
1277
			if (tmp & (GT_CONTEXT_SWITCH_INTERRUPT << GEN8_BCS_IRQ_SHIFT))
1326
					iir, GEN8_RCS_IRQ_SHIFT);
1278
				intel_lrc_irq_handler(&dev_priv->ring[BCS]);
1327
 
Line 1279... Line 1328...
1279
			if (tmp & (GT_RENDER_USER_INTERRUPT << GEN8_BCS_IRQ_SHIFT))
1328
			gen8_cs_irq_handler(&dev_priv->ring[BCS],
1280
				notify_ring(&dev_priv->ring[BCS]);
1329
					iir, GEN8_BCS_IRQ_SHIFT);
1281
		} else
1330
		} else
1282
			DRM_ERROR("The master control interrupt lied (GT0)!\n");
1331
			DRM_ERROR("The master control interrupt lied (GT0)!\n");
1283
	}
1332
	}
Line 1284... Line -...
1284
 
-
 
1285
	if (master_ctl & (GEN8_GT_VCS1_IRQ | GEN8_GT_VCS2_IRQ)) {
1333
 
1286
		u32 tmp = I915_READ_FW(GEN8_GT_IIR(1));
-
 
1287
		if (tmp) {
1334
	if (master_ctl & (GEN8_GT_VCS1_IRQ | GEN8_GT_VCS2_IRQ)) {
Line 1288... Line -...
1288
			I915_WRITE_FW(GEN8_GT_IIR(1), tmp);
-
 
1289
			ret = IRQ_HANDLED;
1335
		u32 iir = I915_READ_FW(GEN8_GT_IIR(1));
1290
 
1336
		if (iir) {
1291
			if (tmp & (GT_CONTEXT_SWITCH_INTERRUPT << GEN8_VCS1_IRQ_SHIFT))
-
 
1292
				intel_lrc_irq_handler(&dev_priv->ring[VCS]);
1337
			I915_WRITE_FW(GEN8_GT_IIR(1), iir);
1293
			if (tmp & (GT_RENDER_USER_INTERRUPT << GEN8_VCS1_IRQ_SHIFT))
1338
			ret = IRQ_HANDLED;
1294
				notify_ring(&dev_priv->ring[VCS]);
1339
 
Line 1295... Line 1340...
1295
 
1340
			gen8_cs_irq_handler(&dev_priv->ring[VCS],
1296
			if (tmp & (GT_CONTEXT_SWITCH_INTERRUPT << GEN8_VCS2_IRQ_SHIFT))
1341
					iir, GEN8_VCS1_IRQ_SHIFT);
1297
				intel_lrc_irq_handler(&dev_priv->ring[VCS2]);
1342
 
1298
			if (tmp & (GT_RENDER_USER_INTERRUPT << GEN8_VCS2_IRQ_SHIFT))
1343
			gen8_cs_irq_handler(&dev_priv->ring[VCS2],
1299
				notify_ring(&dev_priv->ring[VCS2]);
1344
					iir, GEN8_VCS2_IRQ_SHIFT);
Line 1300... Line -...
1300
		} else
-
 
1301
			DRM_ERROR("The master control interrupt lied (GT1)!\n");
1345
		} else
1302
	}
1346
			DRM_ERROR("The master control interrupt lied (GT1)!\n");
1303
 
-
 
1304
	if (master_ctl & GEN8_GT_VECS_IRQ) {
1347
	}
1305
		u32 tmp = I915_READ_FW(GEN8_GT_IIR(3));
1348
 
1306
		if (tmp) {
1349
	if (master_ctl & GEN8_GT_VECS_IRQ) {
Line 1307... Line 1350...
1307
			I915_WRITE_FW(GEN8_GT_IIR(3), tmp);
1350
		u32 iir = I915_READ_FW(GEN8_GT_IIR(3));
1308
			ret = IRQ_HANDLED;
1351
		if (iir) {
1309
 
1352
			I915_WRITE_FW(GEN8_GT_IIR(3), iir);
1310
			if (tmp & (GT_CONTEXT_SWITCH_INTERRUPT << GEN8_VECS_IRQ_SHIFT))
1353
			ret = IRQ_HANDLED;
1311
				intel_lrc_irq_handler(&dev_priv->ring[VECS]);
1354
 
1312
			if (tmp & (GT_RENDER_USER_INTERRUPT << GEN8_VECS_IRQ_SHIFT))
1355
			gen8_cs_irq_handler(&dev_priv->ring[VECS],
1313
				notify_ring(&dev_priv->ring[VECS]);
1356
					iir, GEN8_VECS_IRQ_SHIFT);
1314
		} else
1357
		} else
1315
			DRM_ERROR("The master control interrupt lied (GT3)!\n");
1358
			DRM_ERROR("The master control interrupt lied (GT3)!\n");
1316
	}
1359
	}
Line 1317... Line 1360...
1317
 
1360
 
Line 1591... Line 1634...
1591
	u32 pipe_stats[I915_MAX_PIPES] = { };
1634
	u32 pipe_stats[I915_MAX_PIPES] = { };
1592
	int pipe;
1635
	int pipe;
Line 1593... Line 1636...
1593
 
1636
 
1594
	spin_lock(&dev_priv->irq_lock);
1637
	spin_lock(&dev_priv->irq_lock);
1595
	for_each_pipe(dev_priv, pipe) {
1638
	for_each_pipe(dev_priv, pipe) {
1596
		int reg;
1639
		i915_reg_t reg;
Line 1597... Line 1640...
1597
		u32 mask, iir_bit = 0;
1640
		u32 mask, iir_bit = 0;
1598
 
1641
 
1599
		/*
1642
		/*
Line 1672... Line 1715...
1672
	 * Make sure hotplug status is cleared before we clear IIR, or else we
1715
	 * Make sure hotplug status is cleared before we clear IIR, or else we
1673
	 * may miss hotplug events.
1716
	 * may miss hotplug events.
1674
	 */
1717
	 */
1675
	POSTING_READ(PORT_HOTPLUG_STAT);
1718
	POSTING_READ(PORT_HOTPLUG_STAT);
Line 1676... Line 1719...
1676
 
1719
 
1677
	if (IS_G4X(dev) || IS_VALLEYVIEW(dev)) {
1720
	if (IS_G4X(dev) || IS_VALLEYVIEW(dev) || IS_CHERRYVIEW(dev)) {
Line 1678... Line 1721...
1678
		u32 hotplug_trigger = hotplug_status & HOTPLUG_INT_STATUS_G4X;
1721
		u32 hotplug_trigger = hotplug_status & HOTPLUG_INT_STATUS_G4X;
1679
 
1722
 
1680
		if (hotplug_trigger) {
1723
		if (hotplug_trigger) {
Line 1707... Line 1750...
1707
	irqreturn_t ret = IRQ_NONE;
1750
	irqreturn_t ret = IRQ_NONE;
Line 1708... Line 1751...
1708
 
1751
 
1709
	if (!intel_irqs_enabled(dev_priv))
1752
	if (!intel_irqs_enabled(dev_priv))
Line -... Line 1753...
-
 
1753
		return IRQ_NONE;
-
 
1754
 
-
 
1755
	/* IRQs are synced during runtime_suspend, we don't require a wakeref */
1710
		return IRQ_NONE;
1756
	disable_rpm_wakeref_asserts(dev_priv);
1711
 
1757
 
Line 1712... Line 1758...
1712
	while (true) {
1758
	while (true) {
1713
		/* Find, clear, then process each source of interrupt */
1759
		/* Find, clear, then process each source of interrupt */
Line 1741... Line 1787...
1741
		 * signalled in iir */
1787
		 * signalled in iir */
1742
		valleyview_pipestat_irq_handler(dev, iir);
1788
		valleyview_pipestat_irq_handler(dev, iir);
1743
	}
1789
	}
Line 1744... Line 1790...
1744
 
1790
 
-
 
1791
out:
-
 
1792
	enable_rpm_wakeref_asserts(dev_priv);
1745
out:
1793
 
1746
	return ret;
1794
	return ret;
Line 1747... Line 1795...
1747
}
1795
}
1748
 
1796
 
Line 1754... Line 1802...
1754
	irqreturn_t ret = IRQ_NONE;
1802
	irqreturn_t ret = IRQ_NONE;
Line 1755... Line 1803...
1755
 
1803
 
1756
	if (!intel_irqs_enabled(dev_priv))
1804
	if (!intel_irqs_enabled(dev_priv))
Line -... Line 1805...
-
 
1805
		return IRQ_NONE;
-
 
1806
 
-
 
1807
	/* IRQs are synced during runtime_suspend, we don't require a wakeref */
1757
		return IRQ_NONE;
1808
	disable_rpm_wakeref_asserts(dev_priv);
1758
 
1809
 
1759
	for (;;) {
1810
	for (;;) {
Line 1760... Line 1811...
1760
		master_ctl = I915_READ(GEN8_MASTER_IRQ) & ~GEN8_MASTER_IRQ_CONTROL;
1811
		master_ctl = I915_READ(GEN8_MASTER_IRQ) & ~GEN8_MASTER_IRQ_CONTROL;
Line 1784... Line 1835...
1784
 
1835
 
1785
		I915_WRITE(GEN8_MASTER_IRQ, DE_MASTER_IRQ_CONTROL);
1836
		I915_WRITE(GEN8_MASTER_IRQ, DE_MASTER_IRQ_CONTROL);
1786
		POSTING_READ(GEN8_MASTER_IRQ);
1837
		POSTING_READ(GEN8_MASTER_IRQ);
Line -... Line 1838...
-
 
1838
	}
-
 
1839
 
1787
	}
1840
	enable_rpm_wakeref_asserts(dev_priv);
1788
 
1841
 
Line 1789... Line 1842...
1789
	return ret;
1842
	return ret;
1790
}
1843
}
1791
 
1844
 
1792
static void ibx_hpd_irq_handler(struct drm_device *dev, u32 hotplug_trigger,
1845
static void ibx_hpd_irq_handler(struct drm_device *dev, u32 hotplug_trigger,
1793
				const u32 hpd[HPD_NUM_PINS])
1846
				const u32 hpd[HPD_NUM_PINS])
Line -... Line 1847...
-
 
1847
{
-
 
1848
	struct drm_i915_private *dev_priv = to_i915(dev);
-
 
1849
	u32 dig_hotplug_reg, pin_mask = 0, long_mask = 0;
-
 
1850
 
-
 
1851
	/*
-
 
1852
	 * Somehow the PCH doesn't seem to really ack the interrupt to the CPU
1794
{
1853
	 * unless we touch the hotplug register, even if hotplug_trigger is
-
 
1854
	 * zero. Not acking leads to "The master control interrupt lied (SDE)!"
-
 
1855
	 * errors.
-
 
1856
	 */
-
 
1857
	dig_hotplug_reg = I915_READ(PCH_PORT_HOTPLUG);
-
 
1858
	if (!hotplug_trigger) {
-
 
1859
		u32 mask = PORTA_HOTPLUG_STATUS_MASK |
-
 
1860
			PORTD_HOTPLUG_STATUS_MASK |
-
 
1861
			PORTC_HOTPLUG_STATUS_MASK |
1795
	struct drm_i915_private *dev_priv = to_i915(dev);
1862
			PORTB_HOTPLUG_STATUS_MASK;
-
 
1863
		dig_hotplug_reg &= ~mask;
-
 
1864
	}
Line 1796... Line 1865...
1796
	u32 dig_hotplug_reg, pin_mask = 0, long_mask = 0;
1865
 
1797
 
1866
	I915_WRITE(PCH_PORT_HOTPLUG, dig_hotplug_reg);
1798
	dig_hotplug_reg = I915_READ(PCH_PORT_HOTPLUG);
1867
	if (!hotplug_trigger)
Line 1809... Line 1878...
1809
{
1878
{
1810
	struct drm_i915_private *dev_priv = dev->dev_private;
1879
	struct drm_i915_private *dev_priv = dev->dev_private;
1811
	int pipe;
1880
	int pipe;
1812
	u32 hotplug_trigger = pch_iir & SDE_HOTPLUG_MASK;
1881
	u32 hotplug_trigger = pch_iir & SDE_HOTPLUG_MASK;
Line 1813... Line -...
1813
 
-
 
1814
	if (hotplug_trigger)
1882
 
Line 1815... Line 1883...
1815
		ibx_hpd_irq_handler(dev, hotplug_trigger, hpd_ibx);
1883
		ibx_hpd_irq_handler(dev, hotplug_trigger, hpd_ibx);
1816
 
1884
 
1817
	if (pch_iir & SDE_AUDIO_POWER_MASK) {
1885
	if (pch_iir & SDE_AUDIO_POWER_MASK) {
Line 1903... Line 1971...
1903
{
1971
{
1904
	struct drm_i915_private *dev_priv = dev->dev_private;
1972
	struct drm_i915_private *dev_priv = dev->dev_private;
1905
	int pipe;
1973
	int pipe;
1906
	u32 hotplug_trigger = pch_iir & SDE_HOTPLUG_MASK_CPT;
1974
	u32 hotplug_trigger = pch_iir & SDE_HOTPLUG_MASK_CPT;
Line 1907... Line -...
1907
 
-
 
1908
	if (hotplug_trigger)
1975
 
Line 1909... Line 1976...
1909
		ibx_hpd_irq_handler(dev, hotplug_trigger, hpd_cpt);
1976
		ibx_hpd_irq_handler(dev, hotplug_trigger, hpd_cpt);
1910
 
1977
 
1911
	if (pch_iir & SDE_AUDIO_POWER_MASK_CPT) {
1978
	if (pch_iir & SDE_AUDIO_POWER_MASK_CPT) {
Line 2100... Line 2167...
2100
	irqreturn_t ret = IRQ_NONE;
2167
	irqreturn_t ret = IRQ_NONE;
Line 2101... Line 2168...
2101
 
2168
 
2102
	if (!intel_irqs_enabled(dev_priv))
2169
	if (!intel_irqs_enabled(dev_priv))
Line -... Line 2170...
-
 
2170
		return IRQ_NONE;
-
 
2171
 
-
 
2172
	/* IRQs are synced during runtime_suspend, we don't require a wakeref */
2103
		return IRQ_NONE;
2173
	disable_rpm_wakeref_asserts(dev_priv);
2104
 
2174
 
2105
	/* We get interrupts on unclaimed registers, so check for this before we
2175
	/* We get interrupts on unclaimed registers, so check for this before we
Line 2106... Line 2176...
2106
	 * do any I915_{READ,WRITE}. */
2176
	 * do any I915_{READ,WRITE}. */
Line 2158... Line 2228...
2158
	if (!HAS_PCH_NOP(dev)) {
2228
	if (!HAS_PCH_NOP(dev)) {
2159
		I915_WRITE(SDEIER, sde_ier);
2229
		I915_WRITE(SDEIER, sde_ier);
2160
		POSTING_READ(SDEIER);
2230
		POSTING_READ(SDEIER);
2161
	}
2231
	}
Line -... Line 2232...
-
 
2232
 
-
 
2233
	/* IRQs are synced during runtime_suspend, we don't require a wakeref */
-
 
2234
	enable_rpm_wakeref_asserts(dev_priv);
2162
 
2235
 
2163
	return ret;
2236
	return ret;
Line 2164... Line 2237...
2164
}
2237
}
2165
 
2238
 
Line 2190... Line 2263...
2190
	u32 aux_mask = GEN8_AUX_CHANNEL_A;
2263
	u32 aux_mask = GEN8_AUX_CHANNEL_A;
Line 2191... Line 2264...
2191
 
2264
 
2192
	if (!intel_irqs_enabled(dev_priv))
2265
	if (!intel_irqs_enabled(dev_priv))
Line -... Line 2266...
-
 
2266
		return IRQ_NONE;
-
 
2267
 
-
 
2268
	/* IRQs are synced during runtime_suspend, we don't require a wakeref */
2193
		return IRQ_NONE;
2269
	disable_rpm_wakeref_asserts(dev_priv);
2194
 
2270
 
2195
	if (INTEL_INFO(dev_priv)->gen >= 9)
2271
	if (INTEL_INFO(dev_priv)->gen >= 9)
Line 2196... Line 2272...
2196
		aux_mask |=  GEN9_AUX_CHANNEL_B | GEN9_AUX_CHANNEL_C |
2272
		aux_mask |=  GEN9_AUX_CHANNEL_B | GEN9_AUX_CHANNEL_C |
2197
			GEN9_AUX_CHANNEL_D;
2273
			GEN9_AUX_CHANNEL_D;
2198
 
2274
 
2199
	master_ctl = I915_READ_FW(GEN8_MASTER_IRQ);
2275
	master_ctl = I915_READ_FW(GEN8_MASTER_IRQ);
Line 2200... Line 2276...
2200
	master_ctl &= ~GEN8_MASTER_IRQ_CONTROL;
2276
	master_ctl &= ~GEN8_MASTER_IRQ_CONTROL;
Line 2201... Line 2277...
2201
	if (!master_ctl)
2277
	if (!master_ctl)
Line 2332... Line 2408...
2332
	}
2408
	}
Line 2333... Line 2409...
2333
 
2409
 
2334
	I915_WRITE_FW(GEN8_MASTER_IRQ, GEN8_MASTER_IRQ_CONTROL);
2410
	I915_WRITE_FW(GEN8_MASTER_IRQ, GEN8_MASTER_IRQ_CONTROL);
Line -... Line 2411...
-
 
2411
	POSTING_READ_FW(GEN8_MASTER_IRQ);
-
 
2412
 
-
 
2413
out:
2335
	POSTING_READ_FW(GEN8_MASTER_IRQ);
2414
	enable_rpm_wakeref_asserts(dev_priv);
2336
 
2415
 
Line 2337... Line 2416...
2337
	return ret;
2416
	return ret;
2338
}
2417
}
Line 2391... Line 2470...
2391
	 * the reset in-progress bit is only ever set by code outside of this
2470
	 * the reset in-progress bit is only ever set by code outside of this
2392
	 * work we don't need to worry about any other races.
2471
	 * work we don't need to worry about any other races.
2393
	 */
2472
	 */
2394
	if (i915_reset_in_progress(error) && !i915_terminally_wedged(error)) {
2473
	if (i915_reset_in_progress(error) && !i915_terminally_wedged(error)) {
2395
		DRM_DEBUG_DRIVER("resetting chip\n");
2474
		DRM_DEBUG_DRIVER("resetting chip\n");
-
 
2475
		/*
-
 
2476
		 * In most cases it's guaranteed that we get here with an RPM
-
 
2477
		 * reference held, for example because there is a pending GPU
-
 
2478
		 * request that won't finish until the reset is done. This
-
 
2479
		 * isn't the case at least when we get here by doing a
-
 
2480
		 * simulated reset via debugs, so get an RPM reference.
-
 
2481
		 */
2396
		intel_runtime_pm_get(dev_priv);
2482
		intel_runtime_pm_get(dev_priv);
Line 2397... Line 2483...
2397
 
2483
 
2398
		/*
2484
		/*
2399
		 * All state reset _must_ be completed before we update the
2485
		 * All state reset _must_ be completed before we update the
Line 2598... Line 2684...
2598
	unsigned long irqflags;
2684
	unsigned long irqflags;
2599
	uint32_t bit = (INTEL_INFO(dev)->gen >= 7) ? DE_PIPE_VBLANK_IVB(pipe) :
2685
	uint32_t bit = (INTEL_INFO(dev)->gen >= 7) ? DE_PIPE_VBLANK_IVB(pipe) :
2600
						     DE_PIPE_VBLANK(pipe);
2686
						     DE_PIPE_VBLANK(pipe);
Line 2601... Line 2687...
2601
 
2687
 
2602
	spin_lock_irqsave(&dev_priv->irq_lock, irqflags);
2688
	spin_lock_irqsave(&dev_priv->irq_lock, irqflags);
2603
	ironlake_enable_display_irq(dev_priv, bit);
2689
	ilk_enable_display_irq(dev_priv, bit);
Line 2604... Line 2690...
2604
	spin_unlock_irqrestore(&dev_priv->irq_lock, irqflags);
2690
	spin_unlock_irqrestore(&dev_priv->irq_lock, irqflags);
2605
 
2691
 
Line 2623... Line 2709...
2623
{
2709
{
2624
	struct drm_i915_private *dev_priv = dev->dev_private;
2710
	struct drm_i915_private *dev_priv = dev->dev_private;
2625
	unsigned long irqflags;
2711
	unsigned long irqflags;
Line 2626... Line 2712...
2626
 
2712
 
2627
	spin_lock_irqsave(&dev_priv->irq_lock, irqflags);
2713
	spin_lock_irqsave(&dev_priv->irq_lock, irqflags);
2628
	dev_priv->de_irq_mask[pipe] &= ~GEN8_PIPE_VBLANK;
-
 
2629
	I915_WRITE(GEN8_DE_PIPE_IMR(pipe), dev_priv->de_irq_mask[pipe]);
-
 
2630
	POSTING_READ(GEN8_DE_PIPE_IMR(pipe));
2714
	bdw_enable_pipe_irq(dev_priv, pipe, GEN8_PIPE_VBLANK);
-
 
2715
	spin_unlock_irqrestore(&dev_priv->irq_lock, irqflags);
2631
	spin_unlock_irqrestore(&dev_priv->irq_lock, irqflags);
2716
 
2632
	return 0;
2717
	return 0;
Line 2633... Line 2718...
2633
}
2718
}
2634
 
2719
 
Line 2653... Line 2738...
2653
	unsigned long irqflags;
2738
	unsigned long irqflags;
2654
	uint32_t bit = (INTEL_INFO(dev)->gen >= 7) ? DE_PIPE_VBLANK_IVB(pipe) :
2739
	uint32_t bit = (INTEL_INFO(dev)->gen >= 7) ? DE_PIPE_VBLANK_IVB(pipe) :
2655
						     DE_PIPE_VBLANK(pipe);
2740
						     DE_PIPE_VBLANK(pipe);
Line 2656... Line 2741...
2656
 
2741
 
2657
	spin_lock_irqsave(&dev_priv->irq_lock, irqflags);
2742
	spin_lock_irqsave(&dev_priv->irq_lock, irqflags);
2658
	ironlake_disable_display_irq(dev_priv, bit);
2743
	ilk_disable_display_irq(dev_priv, bit);
2659
	spin_unlock_irqrestore(&dev_priv->irq_lock, irqflags);
2744
	spin_unlock_irqrestore(&dev_priv->irq_lock, irqflags);
Line 2660... Line 2745...
2660
}
2745
}
2661
 
2746
 
Line 2674... Line 2759...
2674
{
2759
{
2675
	struct drm_i915_private *dev_priv = dev->dev_private;
2760
	struct drm_i915_private *dev_priv = dev->dev_private;
2676
	unsigned long irqflags;
2761
	unsigned long irqflags;
Line 2677... Line 2762...
2677
 
2762
 
2678
	spin_lock_irqsave(&dev_priv->irq_lock, irqflags);
2763
	spin_lock_irqsave(&dev_priv->irq_lock, irqflags);
2679
	dev_priv->de_irq_mask[pipe] |= GEN8_PIPE_VBLANK;
-
 
2680
	I915_WRITE(GEN8_DE_PIPE_IMR(pipe), dev_priv->de_irq_mask[pipe]);
-
 
2681
	POSTING_READ(GEN8_DE_PIPE_IMR(pipe));
2764
	bdw_disable_pipe_irq(dev_priv, pipe, GEN8_PIPE_VBLANK);
2682
	spin_unlock_irqrestore(&dev_priv->irq_lock, irqflags);
2765
	spin_unlock_irqrestore(&dev_priv->irq_lock, irqflags);
Line 2683... Line 2766...
2683
}
2766
}
2684
 
2767
 
Line 2915... Line 2998...
2915
#define HUNG 20
2998
#define HUNG 20
Line 2916... Line 2999...
2916
 
2999
 
2917
	if (!i915.enable_hangcheck)
3000
	if (!i915.enable_hangcheck)
Line -... Line 3001...
-
 
3001
		return;
-
 
3002
 
-
 
3003
	/*
-
 
3004
	 * The hangcheck work is synced during runtime suspend, we don't
-
 
3005
	 * require a wakeref. TODO: instead of disabling the asserts make
-
 
3006
	 * sure that we hold a reference when this work is running.
-
 
3007
	 */
2918
		return;
3008
	DISABLE_RPM_WAKEREF_ASSERTS(dev_priv);
2919
 
3009
 
2920
	for_each_ring(ring, dev_priv, i) {
3010
	for_each_ring(ring, dev_priv, i) {
2921
		u64 acthd;
3011
		u64 acthd;
Line 3385... Line 3475...
3385
		 *
3475
		 *
3386
		 * spinlocking not required here for correctness since interrupt
3476
		 * spinlocking not required here for correctness since interrupt
3387
		 * setup is guaranteed to run in single-threaded context. But we
3477
		 * setup is guaranteed to run in single-threaded context. But we
3388
		 * need it to make the assert_spin_locked happy. */
3478
		 * need it to make the assert_spin_locked happy. */
3389
		spin_lock_irq(&dev_priv->irq_lock);
3479
		spin_lock_irq(&dev_priv->irq_lock);
3390
		ironlake_enable_display_irq(dev_priv, DE_PCU_EVENT);
3480
		ilk_enable_display_irq(dev_priv, DE_PCU_EVENT);
3391
		spin_unlock_irq(&dev_priv->irq_lock);
3481
		spin_unlock_irq(&dev_priv->irq_lock);
3392
	}
3482
	}
Line 3393... Line 3483...
3393
 
3483
 
3394
	return 0;
3484
	return 0;
Line 3785... Line 3875...
3785
	u32 pipe_stats[2];
3875
	u32 pipe_stats[2];
3786
	int pipe;
3876
	int pipe;
3787
	u16 flip_mask =
3877
	u16 flip_mask =
3788
		I915_DISPLAY_PLANE_A_FLIP_PENDING_INTERRUPT |
3878
		I915_DISPLAY_PLANE_A_FLIP_PENDING_INTERRUPT |
3789
		I915_DISPLAY_PLANE_B_FLIP_PENDING_INTERRUPT;
3879
		I915_DISPLAY_PLANE_B_FLIP_PENDING_INTERRUPT;
-
 
3880
	irqreturn_t ret;
Line 3790... Line 3881...
3790
 
3881
 
3791
	if (!intel_irqs_enabled(dev_priv))
3882
	if (!intel_irqs_enabled(dev_priv))
Line -... Line 3883...
-
 
3883
		return IRQ_NONE;
-
 
3884
 
-
 
3885
	/* IRQs are synced during runtime_suspend, we don't require a wakeref */
-
 
3886
	disable_rpm_wakeref_asserts(dev_priv);
3792
		return IRQ_NONE;
3887
 
3793
 
3888
	ret = IRQ_NONE;
3794
	iir = I915_READ16(IIR);
3889
	iir = I915_READ16(IIR);
Line 3795... Line 3890...
3795
	if (iir == 0)
3890
	if (iir == 0)
3796
		return IRQ_NONE;
3891
		goto out;
3797
 
3892
 
3798
	while (iir & ~flip_mask) {
3893
	while (iir & ~flip_mask) {
Line 3804... Line 3899...
3804
		spin_lock(&dev_priv->irq_lock);
3899
		spin_lock(&dev_priv->irq_lock);
3805
		if (iir & I915_RENDER_COMMAND_PARSER_ERROR_INTERRUPT)
3900
		if (iir & I915_RENDER_COMMAND_PARSER_ERROR_INTERRUPT)
3806
			DRM_DEBUG("Command parser error, iir 0x%08x\n", iir);
3901
			DRM_DEBUG("Command parser error, iir 0x%08x\n", iir);
Line 3807... Line 3902...
3807
 
3902
 
3808
		for_each_pipe(dev_priv, pipe) {
3903
		for_each_pipe(dev_priv, pipe) {
3809
			int reg = PIPESTAT(pipe);
3904
			i915_reg_t reg = PIPESTAT(pipe);
Line 3810... Line 3905...
3810
			pipe_stats[pipe] = I915_READ(reg);
3905
			pipe_stats[pipe] = I915_READ(reg);
3811
 
3906
 
3812
			/*
3907
			/*
Line 3840... Line 3935...
3840
								    pipe);
3935
								    pipe);
3841
		}
3936
		}
Line 3842... Line 3937...
3842
 
3937
 
3843
		iir = new_iir;
3938
		iir = new_iir;
-
 
3939
	}
Line -... Line 3940...
-
 
3940
	ret = IRQ_HANDLED;
-
 
3941
 
-
 
3942
out:
3844
	}
3943
	enable_rpm_wakeref_asserts(dev_priv);
3845
 
3944
 
Line 3846... Line 3945...
3846
	return IRQ_HANDLED;
3945
	return ret;
3847
}
3946
}
3848
 
3947
 
Line 3972... Line 4071...
3972
	int pipe, ret = IRQ_NONE;
4071
	int pipe, ret = IRQ_NONE;
Line 3973... Line 4072...
3973
 
4072
 
3974
	if (!intel_irqs_enabled(dev_priv))
4073
	if (!intel_irqs_enabled(dev_priv))
Line -... Line 4074...
-
 
4074
		return IRQ_NONE;
-
 
4075
 
-
 
4076
	/* IRQs are synced during runtime_suspend, we don't require a wakeref */
3975
		return IRQ_NONE;
4077
	disable_rpm_wakeref_asserts(dev_priv);
3976
 
4078
 
3977
	iir = I915_READ(IIR);
4079
	iir = I915_READ(IIR);
3978
	do {
4080
	do {
Line 3987... Line 4089...
3987
		spin_lock(&dev_priv->irq_lock);
4089
		spin_lock(&dev_priv->irq_lock);
3988
		if (iir & I915_RENDER_COMMAND_PARSER_ERROR_INTERRUPT)
4090
		if (iir & I915_RENDER_COMMAND_PARSER_ERROR_INTERRUPT)
3989
			DRM_DEBUG("Command parser error, iir 0x%08x\n", iir);
4091
			DRM_DEBUG("Command parser error, iir 0x%08x\n", iir);
Line 3990... Line 4092...
3990
 
4092
 
3991
		for_each_pipe(dev_priv, pipe) {
4093
		for_each_pipe(dev_priv, pipe) {
3992
			int reg = PIPESTAT(pipe);
4094
			i915_reg_t reg = PIPESTAT(pipe);
Line 3993... Line 4095...
3993
			pipe_stats[pipe] = I915_READ(reg);
4095
			pipe_stats[pipe] = I915_READ(reg);
3994
 
4096
 
3995
			/* Clear the PIPE*STAT regs before the IIR */
4097
			/* Clear the PIPE*STAT regs before the IIR */
Line 4054... Line 4156...
4054
		 */
4156
		 */
4055
		ret = IRQ_HANDLED;
4157
		ret = IRQ_HANDLED;
4056
		iir = new_iir;
4158
		iir = new_iir;
4057
	} while (iir & ~flip_mask);
4159
	} while (iir & ~flip_mask);
Line -... Line 4160...
-
 
4160
 
-
 
4161
	enable_rpm_wakeref_asserts(dev_priv);
4058
 
4162
 
4059
	return ret;
4163
	return ret;
Line 4060... Line 4164...
4060
}
4164
}
4061
 
4165
 
Line 4193... Line 4297...
4193
		I915_DISPLAY_PLANE_B_FLIP_PENDING_INTERRUPT;
4297
		I915_DISPLAY_PLANE_B_FLIP_PENDING_INTERRUPT;
Line 4194... Line 4298...
4194
 
4298
 
4195
	if (!intel_irqs_enabled(dev_priv))
4299
	if (!intel_irqs_enabled(dev_priv))
Line -... Line 4300...
-
 
4300
		return IRQ_NONE;
-
 
4301
 
-
 
4302
	/* IRQs are synced during runtime_suspend, we don't require a wakeref */
4196
		return IRQ_NONE;
4303
	disable_rpm_wakeref_asserts(dev_priv);
Line 4197... Line 4304...
4197
 
4304
 
4198
	iir = I915_READ(IIR);
4305
	iir = I915_READ(IIR);
4199
 
4306
 
Line 4209... Line 4316...
4209
		spin_lock(&dev_priv->irq_lock);
4316
		spin_lock(&dev_priv->irq_lock);
4210
		if (iir & I915_RENDER_COMMAND_PARSER_ERROR_INTERRUPT)
4317
		if (iir & I915_RENDER_COMMAND_PARSER_ERROR_INTERRUPT)
4211
			DRM_DEBUG("Command parser error, iir 0x%08x\n", iir);
4318
			DRM_DEBUG("Command parser error, iir 0x%08x\n", iir);
Line 4212... Line 4319...
4212
 
4319
 
4213
		for_each_pipe(dev_priv, pipe) {
4320
		for_each_pipe(dev_priv, pipe) {
4214
			int reg = PIPESTAT(pipe);
4321
			i915_reg_t reg = PIPESTAT(pipe);
Line 4215... Line 4322...
4215
			pipe_stats[pipe] = I915_READ(reg);
4322
			pipe_stats[pipe] = I915_READ(reg);
4216
 
4323
 
4217
			/*
4324
			/*
Line 4278... Line 4385...
4278
		 * stray interrupts.
4385
		 * stray interrupts.
4279
		 */
4386
		 */
4280
		iir = new_iir;
4387
		iir = new_iir;
4281
	}
4388
	}
Line -... Line 4389...
-
 
4389
 
-
 
4390
	enable_rpm_wakeref_asserts(dev_priv);
4282
 
4391
 
4283
	return ret;
4392
	return ret;
Line 4284... Line 4393...
4284
}
4393
}
4285
 
4394
 
Line 4321... Line 4430...
4321
 
4430
 
4322
	INIT_WORK(&dev_priv->rps.work, gen6_pm_rps_work);
4431
	INIT_WORK(&dev_priv->rps.work, gen6_pm_rps_work);
Line 4323... Line 4432...
4323
	INIT_WORK(&dev_priv->l3_parity.error_work, ivybridge_parity_work);
4432
	INIT_WORK(&dev_priv->l3_parity.error_work, ivybridge_parity_work);
4324
 
4433
 
4325
	/* Let's track the enabled rps events */
4434
	/* Let's track the enabled rps events */
4326
	if (IS_VALLEYVIEW(dev_priv) && !IS_CHERRYVIEW(dev_priv))
4435
	if (IS_VALLEYVIEW(dev_priv))
4327
		/* WaGsvRC0ResidencyMethod:vlv */
4436
		/* WaGsvRC0ResidencyMethod:vlv */
4328
		dev_priv->pm_rps_events = GEN6_PM_RP_UP_EI_EXPIRED;
4437
		dev_priv->pm_rps_events = GEN6_PM_RP_DOWN_EI_EXPIRED | GEN6_PM_RP_UP_EI_EXPIRED;
Line 4329... Line 4438...
4329
	else
4438
	else
4330
		dev_priv->pm_rps_events = GEN6_PM_RPS_EVENTS;
4439
		dev_priv->pm_rps_events = GEN6_PM_RPS_EVENTS;