Subversion Repositories Kolibri OS

Rev

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

Rev 5060 Rev 5354
Line 33... Line 33...
33
#include 
33
#include 
34
#include "i915_drv.h"
34
#include "i915_drv.h"
35
#include "i915_trace.h"
35
#include "i915_trace.h"
36
#include "intel_drv.h"
36
#include "intel_drv.h"
Line -... Line 37...
-
 
37
 
37
 
38
/**
-
 
39
 * DOC: interrupt handling
-
 
40
 *
-
 
41
 * These functions provide the basic support for enabling and disabling the
-
 
42
 * interrupt handling support. There's a lot more functionality in i915_irq.c
-
 
43
 * and related files, but that will be described in separate chapters.
Line 38... Line 44...
38
#define assert_spin_locked(a)
44
 */
39
 
45
 
40
static const u32 hpd_ibx[] = {
46
static const u32 hpd_ibx[] = {
41
	[HPD_CRT] = SDE_CRT_HOTPLUG,
47
	[HPD_CRT] = SDE_CRT_HOTPLUG,
Line 116... Line 122...
116
	} \
122
	} \
117
} while (0)
123
} while (0)
Line 118... Line 124...
118
 
124
 
119
#define GEN8_IRQ_INIT_NDX(type, which, imr_val, ier_val) do { \
125
#define GEN8_IRQ_INIT_NDX(type, which, imr_val, ier_val) do { \
120
	GEN5_ASSERT_IIR_IS_ZERO(GEN8_##type##_IIR(which)); \
-
 
121
	I915_WRITE(GEN8_##type##_IMR(which), (imr_val)); \
126
	GEN5_ASSERT_IIR_IS_ZERO(GEN8_##type##_IIR(which)); \
-
 
127
	I915_WRITE(GEN8_##type##_IER(which), (ier_val)); \
122
	I915_WRITE(GEN8_##type##_IER(which), (ier_val)); \
128
	I915_WRITE(GEN8_##type##_IMR(which), (imr_val)); \
123
	POSTING_READ(GEN8_##type##_IER(which)); \
129
	POSTING_READ(GEN8_##type##_IMR(which)); \
Line 124... Line 130...
124
} while (0)
130
} while (0)
125
 
131
 
126
#define GEN5_IRQ_INIT(type, imr_val, ier_val) do { \
-
 
127
	GEN5_ASSERT_IIR_IS_ZERO(type##IIR); \
132
#define GEN5_IRQ_INIT(type, imr_val, ier_val) do { \
-
 
133
	GEN5_ASSERT_IIR_IS_ZERO(type##IIR); \
128
	I915_WRITE(type##IMR, (imr_val)); \
134
	I915_WRITE(type##IER, (ier_val)); \
129
	I915_WRITE(type##IER, (ier_val)); \
135
	I915_WRITE(type##IMR, (imr_val)); \
Line 130... Line -...
130
	POSTING_READ(type##IER); \
-
 
131
} while (0)
-
 
132
 
-
 
133
#define pr_err(fmt, ...) \
-
 
134
        printk(KERN_ERR pr_fmt(fmt), ##__VA_ARGS__)
-
 
135
 
136
	POSTING_READ(type##IMR); \
136
 
-
 
137
#define DRM_WAKEUP( queue ) wake_up( queue )
-
 
138
#define DRM_INIT_WAITQUEUE( queue ) init_waitqueue_head( queue )
-
 
139
 
-
 
Line 140... Line 137...
140
#define MAX_NOPID ((u32)~0)
137
} while (0)
141
 
138
 
142
 
139
static void gen6_rps_irq_handler(struct drm_i915_private *dev_priv, u32 pm_iir);
143
 
140
 
144
/* For display hotplug interrupt */
141
/* For display hotplug interrupt */
Line 145... Line 142...
145
static void
142
void
Line 155... Line 152...
155
        I915_WRITE(DEIMR, dev_priv->irq_mask);
152
        I915_WRITE(DEIMR, dev_priv->irq_mask);
156
        POSTING_READ(DEIMR);
153
        POSTING_READ(DEIMR);
157
    }
154
    }
158
}
155
}
Line 159... Line 156...
159
 
156
 
160
static void
157
void
161
ironlake_disable_display_irq(struct drm_i915_private *dev_priv, u32 mask)
158
ironlake_disable_display_irq(struct drm_i915_private *dev_priv, u32 mask)
162
{
159
{
Line 163... Line 160...
163
	assert_spin_locked(&dev_priv->irq_lock);
160
	assert_spin_locked(&dev_priv->irq_lock);
164
 
161
 
Line 165... Line 162...
165
	if (!intel_irqs_enabled(dev_priv))
162
	if (WARN_ON(!intel_irqs_enabled(dev_priv)))
166
		return;
163
		return;
167
 
164
 
Line 201... Line 198...
201
void gen5_disable_gt_irq(struct drm_i915_private *dev_priv, uint32_t mask)
198
void gen5_disable_gt_irq(struct drm_i915_private *dev_priv, uint32_t mask)
202
{
199
{
203
	ilk_update_gt_irq(dev_priv, mask, 0);
200
	ilk_update_gt_irq(dev_priv, mask, 0);
204
}
201
}
Line 205... Line -...
205
 
-
 
206
/**
-
 
207
  * snb_update_pm_irq - update GEN6_PMIMR
-
 
208
  * @dev_priv: driver private
-
 
209
  * @interrupt_mask: mask of interrupt bits to update
-
 
210
  * @enabled_irq_mask: mask of interrupt bits to enable
-
 
211
  */
202
 
212
static void snb_update_pm_irq(struct drm_i915_private *dev_priv,
-
 
213
			      uint32_t interrupt_mask,
-
 
214
			      uint32_t enabled_irq_mask)
203
static u32 gen6_pm_iir(struct drm_i915_private *dev_priv)
215
{
-
 
216
	uint32_t new_val;
-
 
217
 
-
 
218
	assert_spin_locked(&dev_priv->irq_lock);
-
 
219
 
-
 
220
	if (WARN_ON(!intel_irqs_enabled(dev_priv)))
-
 
221
		return;
-
 
222
 
-
 
223
	new_val = dev_priv->pm_irq_mask;
-
 
224
	new_val &= ~interrupt_mask;
-
 
225
	new_val |= (~enabled_irq_mask & interrupt_mask);
-
 
226
 
-
 
227
	if (new_val != dev_priv->pm_irq_mask) {
-
 
228
		dev_priv->pm_irq_mask = new_val;
204
{
229
		I915_WRITE(GEN6_PMIMR, dev_priv->pm_irq_mask);
-
 
230
		POSTING_READ(GEN6_PMIMR);
-
 
231
	}
205
	return INTEL_INFO(dev_priv)->gen >= 8 ? GEN8_GT_IIR(2) : GEN6_PMIIR;
Line 232... Line 206...
232
}
206
}
233
 
207
 
234
void gen6_enable_pm_irq(struct drm_i915_private *dev_priv, uint32_t mask)
208
static u32 gen6_pm_imr(struct drm_i915_private *dev_priv)
235
{
209
{
Line 236... Line 210...
236
	snb_update_pm_irq(dev_priv, mask, mask);
210
	return INTEL_INFO(dev_priv)->gen >= 8 ? GEN8_GT_IMR(2) : GEN6_PMIMR;
237
}
211
}
238
 
-
 
239
void gen6_disable_pm_irq(struct drm_i915_private *dev_priv, uint32_t mask)
-
 
240
{
-
 
241
	snb_update_pm_irq(dev_priv, mask, 0);
-
 
242
}
-
 
243
 
-
 
244
static bool ivb_can_enable_err_int(struct drm_device *dev)
-
 
245
{
-
 
246
	struct drm_i915_private *dev_priv = dev->dev_private;
-
 
247
	struct intel_crtc *crtc;
-
 
248
	enum pipe pipe;
-
 
249
 
-
 
250
	assert_spin_locked(&dev_priv->irq_lock);
212
 
251
 
-
 
252
	for_each_pipe(pipe) {
-
 
253
		crtc = to_intel_crtc(dev_priv->pipe_to_crtc_mapping[pipe]);
-
 
254
 
-
 
255
		if (crtc->cpu_fifo_underrun_disabled)
-
 
256
			return false;
-
 
257
	}
213
static u32 gen6_pm_ier(struct drm_i915_private *dev_priv)
Line 258... Line 214...
258
 
214
{
259
	return true;
215
	return INTEL_INFO(dev_priv)->gen >= 8 ? GEN8_GT_IER(2) : GEN6_PMIER;
260
}
216
}
261
 
217
 
262
/**
218
/**
263
  * bdw_update_pm_irq - update GT interrupt 2
-
 
264
  * @dev_priv: driver private
-
 
265
  * @interrupt_mask: mask of interrupt bits to update
219
  * snb_update_pm_irq - update GEN6_PMIMR
266
  * @enabled_irq_mask: mask of interrupt bits to enable
220
  * @dev_priv: driver private
267
  *
221
  * @interrupt_mask: mask of interrupt bits to update
268
  * Copied from the snb function, updated with relevant register offsets
222
  * @enabled_irq_mask: mask of interrupt bits to enable
269
  */
223
  */
270
static void bdw_update_pm_irq(struct drm_i915_private *dev_priv,
224
static void snb_update_pm_irq(struct drm_i915_private *dev_priv,
Line 271... Line 225...
271
			      uint32_t interrupt_mask,
225
			      uint32_t interrupt_mask,
Line 272... Line -...
272
			      uint32_t enabled_irq_mask)
-
 
273
{
-
 
274
	uint32_t new_val;
-
 
275
 
226
			      uint32_t enabled_irq_mask)
276
	assert_spin_locked(&dev_priv->irq_lock);
227
{
277
 
228
	uint32_t new_val;
Line 278... Line 229...
278
	if (WARN_ON(!intel_irqs_enabled(dev_priv)))
229
 
279
		return;
230
	assert_spin_locked(&dev_priv->irq_lock);
280
 
231
 
281
	new_val = dev_priv->pm_irq_mask;
232
	new_val = dev_priv->pm_irq_mask;
282
	new_val &= ~interrupt_mask;
233
	new_val &= ~interrupt_mask;
283
	new_val |= (~enabled_irq_mask & interrupt_mask);
234
	new_val |= (~enabled_irq_mask & interrupt_mask);
Line 284... Line 235...
284
 
235
 
285
	if (new_val != dev_priv->pm_irq_mask) {
236
	if (new_val != dev_priv->pm_irq_mask) {
-
 
237
		dev_priv->pm_irq_mask = new_val;
-
 
238
		I915_WRITE(gen6_pm_imr(dev_priv), dev_priv->pm_irq_mask);
-
 
239
		POSTING_READ(gen6_pm_imr(dev_priv));
286
		dev_priv->pm_irq_mask = new_val;
240
	}
287
		I915_WRITE(GEN8_GT_IMR(2), dev_priv->pm_irq_mask);
241
}
Line 288... Line 242...
288
		POSTING_READ(GEN8_GT_IMR(2));
242
 
-
 
243
void gen6_enable_pm_irq(struct drm_i915_private *dev_priv, uint32_t mask)
289
	}
244
{
290
}
245
	if (WARN_ON(!intel_irqs_enabled(dev_priv)))
291
 
246
		return;
Line 292... Line 247...
292
void gen8_enable_pm_irq(struct drm_i915_private *dev_priv, uint32_t mask)
247
 
293
{
248
	snb_update_pm_irq(dev_priv, mask, mask);
294
	bdw_update_pm_irq(dev_priv, mask, mask);
249
}
295
}
-
 
296
 
-
 
297
void gen8_disable_pm_irq(struct drm_i915_private *dev_priv, uint32_t mask)
-
 
298
{
-
 
299
	bdw_update_pm_irq(dev_priv, mask, 0);
-
 
300
}
-
 
301
 
-
 
302
static bool cpt_can_enable_serr_int(struct drm_device *dev)
-
 
303
{
-
 
304
	struct drm_i915_private *dev_priv = dev->dev_private;
250
 
305
	enum pipe pipe;
-
 
Line 306... Line 251...
306
	struct intel_crtc *crtc;
251
static void __gen6_disable_pm_irq(struct drm_i915_private *dev_priv,
307
 
252
				  uint32_t mask)
Line 308... Line 253...
308
	assert_spin_locked(&dev_priv->irq_lock);
253
{
309
 
254
	snb_update_pm_irq(dev_priv, mask, 0);
310
	for_each_pipe(pipe) {
255
}
311
		crtc = to_intel_crtc(dev_priv->pipe_to_crtc_mapping[pipe]);
-
 
312
 
-
 
313
		if (crtc->pch_fifo_underrun_disabled)
-
 
314
			return false;
256
 
Line 315... Line 257...
315
	}
257
void gen6_disable_pm_irq(struct drm_i915_private *dev_priv, uint32_t mask)
316
 
258
{
317
	return true;
-
 
318
}
-
 
319
 
-
 
320
void i9xx_check_fifo_underruns(struct drm_device *dev)
-
 
321
{
-
 
322
	struct drm_i915_private *dev_priv = dev->dev_private;
-
 
323
	struct intel_crtc *crtc;
-
 
324
	unsigned long flags;
-
 
325
 
-
 
326
	spin_lock_irqsave(&dev_priv->irq_lock, flags);
259
	if (WARN_ON(!intel_irqs_enabled(dev_priv)))
327
 
260
		return;
328
	for_each_intel_crtc(dev, crtc) {
-
 
329
		u32 reg = PIPESTAT(crtc->pipe);
-
 
330
		u32 pipestat;
-
 
331
 
-
 
332
		if (crtc->cpu_fifo_underrun_disabled)
261
 
333
			continue;
262
	__gen6_disable_pm_irq(dev_priv, mask);
Line 334... Line 263...
334
 
263
}
335
		pipestat = I915_READ(reg) & 0xffff0000;
-
 
336
		if ((pipestat & PIPE_FIFO_UNDERRUN_STATUS) == 0)
-
 
337
			continue;
264
 
338
 
265
void gen6_reset_rps_interrupts(struct drm_device *dev)
339
		I915_WRITE(reg, pipestat | PIPE_FIFO_UNDERRUN_STATUS);
-
 
340
		POSTING_READ(reg);
-
 
341
 
-
 
342
		DRM_ERROR("pipe %c underrun\n", pipe_name(crtc->pipe));
-
 
Line 343... Line -...
343
	}
-
 
344
 
-
 
345
	spin_unlock_irqrestore(&dev_priv->irq_lock, flags);
-
 
346
}
-
 
347
 
-
 
348
static void i9xx_set_fifo_underrun_reporting(struct drm_device *dev,
266
{
349
					     enum pipe pipe,
-
 
350
					     bool enable, bool old)
-
 
Line 351... Line 267...
351
{
267
	struct drm_i915_private *dev_priv = dev->dev_private;
352
	struct drm_i915_private *dev_priv = dev->dev_private;
268
	uint32_t reg = gen6_pm_iir(dev_priv);
353
	u32 reg = PIPESTAT(pipe);
-
 
354
	u32 pipestat = I915_READ(reg) & 0xffff0000;
269
 
355
 
270
	spin_lock_irq(&dev_priv->irq_lock);
356
	assert_spin_locked(&dev_priv->irq_lock);
271
	I915_WRITE(reg, dev_priv->pm_rps_events);
-
 
272
	I915_WRITE(reg, dev_priv->pm_rps_events);
Line 357... Line -...
357
 
-
 
358
	if (enable) {
273
		POSTING_READ(reg);
359
	I915_WRITE(reg, pipestat | PIPE_FIFO_UNDERRUN_STATUS);
-
 
360
	POSTING_READ(reg);
-
 
361
	} else {
274
	spin_unlock_irq(&dev_priv->irq_lock);
Line 362... Line 275...
362
		if (old && pipestat & PIPE_FIFO_UNDERRUN_STATUS)
275
}
363
			DRM_ERROR("pipe %c underrun\n", pipe_name(pipe));
-
 
364
	}
-
 
365
}
276
 
366
 
277
void gen6_enable_rps_interrupts(struct drm_device *dev)
367
static void ironlake_set_fifo_underrun_reporting(struct drm_device *dev,
-
 
368
						 enum pipe pipe, bool enable)
-
 
Line -... Line 278...
-
 
278
{
369
{
279
	struct drm_i915_private *dev_priv = dev->dev_private;
370
	struct drm_i915_private *dev_priv = dev->dev_private;
280
 
Line 371... Line 281...
371
	uint32_t bit = (pipe == PIPE_A) ? DE_PIPEA_FIFO_UNDERRUN :
281
	spin_lock_irq(&dev_priv->irq_lock);
372
					  DE_PIPEB_FIFO_UNDERRUN;
-
 
373
 
-
 
Line 374... Line -...
374
	if (enable)
-
 
375
		ironlake_enable_display_irq(dev_priv, bit);
-
 
376
	else
-
 
377
		ironlake_disable_display_irq(dev_priv, bit);
282
 
378
}
-
 
379
 
-
 
380
static void ivybridge_set_fifo_underrun_reporting(struct drm_device *dev,
-
 
Line 381... Line 283...
381
						  enum pipe pipe,
283
	WARN_ON(dev_priv->rps.pm_iir);
382
						  bool enable, bool old)
-
 
383
{
-
 
384
	struct drm_i915_private *dev_priv = dev->dev_private;
284
	WARN_ON(I915_READ(gen6_pm_iir(dev_priv)) & dev_priv->pm_rps_events);
Line 385... Line 285...
385
	if (enable) {
285
	dev_priv->rps.interrupts_enabled = true;
-
 
286
	I915_WRITE(gen6_pm_ier(dev_priv), I915_READ(gen6_pm_ier(dev_priv)) |
-
 
287
				dev_priv->pm_rps_events);
-
 
288
	gen6_enable_pm_irq(dev_priv, dev_priv->pm_rps_events);
-
 
289
 
Line 386... Line -...
386
		I915_WRITE(GEN7_ERR_INT, ERR_INT_FIFO_UNDERRUN(pipe));
-
 
387
 
290
	spin_unlock_irq(&dev_priv->irq_lock);
388
		if (!ivb_can_enable_err_int(dev))
291
}
389
			return;
-
 
390
 
292
 
391
		ironlake_enable_display_irq(dev_priv, DE_ERR_INT_IVB);
-
 
392
	} else {
293
void gen6_disable_rps_interrupts(struct drm_device *dev)
Line 393... Line 294...
393
		ironlake_disable_display_irq(dev_priv, DE_ERR_INT_IVB);
294
{
394
 
295
	struct drm_i915_private *dev_priv = dev->dev_private;
395
		if (old &&
296
 
396
		    I915_READ(GEN7_ERR_INT) & ERR_INT_FIFO_UNDERRUN(pipe)) {
297
	spin_lock_irq(&dev_priv->irq_lock);
397
			DRM_ERROR("uncleared fifo underrun on pipe %c\n",
298
	dev_priv->rps.interrupts_enabled = false;
398
				      pipe_name(pipe));
299
	spin_unlock_irq(&dev_priv->irq_lock);
399
		}
300
 
400
	}
301
	cancel_work_sync(&dev_priv->rps.work);
401
}
302
 
402
 
303
	spin_lock_irq(&dev_priv->irq_lock);
403
static void broadwell_set_fifo_underrun_reporting(struct drm_device *dev,
304
 
404
						  enum pipe pipe, bool enable)
305
	I915_WRITE(GEN6_PMINTRMSK, INTEL_INFO(dev_priv)->gen >= 8 ?
Line 435... Line 336...
435
		return;
336
		return;
Line 436... Line 337...
436
 
337
 
437
	I915_WRITE(SDEIMR, sdeimr);
338
	I915_WRITE(SDEIMR, sdeimr);
438
	POSTING_READ(SDEIMR);
339
	POSTING_READ(SDEIMR);
439
}
-
 
440
#define ibx_enable_display_interrupt(dev_priv, bits) \
-
 
441
	ibx_display_interrupt_update((dev_priv), (bits), (bits))
-
 
442
#define ibx_disable_display_interrupt(dev_priv, bits) \
-
 
443
	ibx_display_interrupt_update((dev_priv), (bits), 0)
-
 
444
 
-
 
445
static void ibx_set_fifo_underrun_reporting(struct drm_device *dev,
-
 
446
					    enum transcoder pch_transcoder,
-
 
447
					    bool enable)
-
 
448
{
-
 
449
	struct drm_i915_private *dev_priv = dev->dev_private;
-
 
450
	uint32_t bit = (pch_transcoder == TRANSCODER_A) ?
-
 
451
		       SDE_TRANSA_FIFO_UNDER : SDE_TRANSB_FIFO_UNDER;
-
 
452
 
-
 
453
	if (enable)
-
 
454
		ibx_enable_display_interrupt(dev_priv, bit);
-
 
455
	else
-
 
456
		ibx_disable_display_interrupt(dev_priv, bit);
-
 
457
}
-
 
458
 
-
 
459
static void cpt_set_fifo_underrun_reporting(struct drm_device *dev,
-
 
460
					    enum transcoder pch_transcoder,
-
 
461
					    bool enable, bool old)
-
 
462
{
-
 
463
	struct drm_i915_private *dev_priv = dev->dev_private;
-
 
464
 
-
 
465
	if (enable) {
-
 
466
		I915_WRITE(SERR_INT,
-
 
467
			   SERR_INT_TRANS_FIFO_UNDERRUN(pch_transcoder));
-
 
468
 
-
 
469
		if (!cpt_can_enable_serr_int(dev))
-
 
470
			return;
-
 
471
 
-
 
472
		ibx_enable_display_interrupt(dev_priv, SDE_ERROR_CPT);
-
 
473
	} else {
-
 
474
		ibx_disable_display_interrupt(dev_priv, SDE_ERROR_CPT);
-
 
475
 
-
 
476
		if (old && I915_READ(SERR_INT) &
-
 
477
		    SERR_INT_TRANS_FIFO_UNDERRUN(pch_transcoder)) {
-
 
478
			DRM_ERROR("uncleared pch fifo underrun on pch transcoder %c\n",
-
 
479
				      transcoder_name(pch_transcoder));
-
 
480
		}
-
 
481
	}
-
 
482
}
-
 
483
 
-
 
484
/**
-
 
485
 * intel_set_cpu_fifo_underrun_reporting - enable/disable FIFO underrun messages
-
 
486
 * @dev: drm device
-
 
487
 * @pipe: pipe
-
 
488
 * @enable: true if we want to report FIFO underrun errors, false otherwise
-
 
489
 *
-
 
490
 * This function makes us disable or enable CPU fifo underruns for a specific
-
 
491
 * pipe. Notice that on some Gens (e.g. IVB, HSW), disabling FIFO underrun
-
 
492
 * reporting for one pipe may also disable all the other CPU error interruts for
-
 
493
 * the other pipes, due to the fact that there's just one interrupt mask/enable
-
 
494
 * bit for all the pipes.
-
 
495
 *
-
 
496
 * Returns the previous state of underrun reporting.
-
 
497
 */
-
 
498
static bool __intel_set_cpu_fifo_underrun_reporting(struct drm_device *dev,
-
 
499
					   enum pipe pipe, bool enable)
-
 
500
{
-
 
501
	struct drm_i915_private *dev_priv = dev->dev_private;
-
 
502
	struct drm_crtc *crtc = dev_priv->pipe_to_crtc_mapping[pipe];
-
 
503
	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
-
 
504
	bool old;
-
 
505
 
-
 
506
	assert_spin_locked(&dev_priv->irq_lock);
-
 
507
 
-
 
508
	old = !intel_crtc->cpu_fifo_underrun_disabled;
-
 
509
	intel_crtc->cpu_fifo_underrun_disabled = !enable;
-
 
510
 
-
 
511
	if (INTEL_INFO(dev)->gen < 5 || IS_VALLEYVIEW(dev))
-
 
512
		i9xx_set_fifo_underrun_reporting(dev, pipe, enable, old);
-
 
513
	else if (IS_GEN5(dev) || IS_GEN6(dev))
-
 
514
		ironlake_set_fifo_underrun_reporting(dev, pipe, enable);
-
 
515
	else if (IS_GEN7(dev))
-
 
516
		ivybridge_set_fifo_underrun_reporting(dev, pipe, enable, old);
-
 
517
	else if (IS_GEN8(dev))
-
 
518
		broadwell_set_fifo_underrun_reporting(dev, pipe, enable);
-
 
519
 
-
 
520
	return old;
-
 
521
}
-
 
522
 
-
 
523
bool intel_set_cpu_fifo_underrun_reporting(struct drm_device *dev,
-
 
524
					   enum pipe pipe, bool enable)
-
 
525
{
-
 
526
	struct drm_i915_private *dev_priv = dev->dev_private;
-
 
527
	unsigned long flags;
-
 
528
	bool ret;
-
 
529
 
-
 
530
	spin_lock_irqsave(&dev_priv->irq_lock, flags);
-
 
531
	ret = __intel_set_cpu_fifo_underrun_reporting(dev, pipe, enable);
-
 
532
	spin_unlock_irqrestore(&dev_priv->irq_lock, flags);
-
 
533
 
-
 
534
	return ret;
-
 
535
}
-
 
536
 
-
 
537
static bool __cpu_fifo_underrun_reporting_enabled(struct drm_device *dev,
-
 
538
						  enum pipe pipe)
-
 
539
{
-
 
540
	struct drm_i915_private *dev_priv = dev->dev_private;
-
 
541
	struct drm_crtc *crtc = dev_priv->pipe_to_crtc_mapping[pipe];
-
 
542
	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
-
 
543
 
-
 
544
	return !intel_crtc->cpu_fifo_underrun_disabled;
-
 
545
}
-
 
546
 
-
 
547
/**
-
 
548
 * intel_set_pch_fifo_underrun_reporting - enable/disable FIFO underrun messages
-
 
549
 * @dev: drm device
-
 
550
 * @pch_transcoder: the PCH transcoder (same as pipe on IVB and older)
-
 
551
 * @enable: true if we want to report FIFO underrun errors, false otherwise
-
 
552
 *
-
 
553
 * This function makes us disable or enable PCH fifo underruns for a specific
-
 
554
 * PCH transcoder. Notice that on some PCHs (e.g. CPT/PPT), disabling FIFO
-
 
555
 * underrun reporting for one transcoder may also disable all the other PCH
-
 
556
 * error interruts for the other transcoders, due to the fact that there's just
-
 
557
 * one interrupt mask/enable bit for all the transcoders.
-
 
558
 *
-
 
559
 * Returns the previous state of underrun reporting.
-
 
560
 */
-
 
561
bool intel_set_pch_fifo_underrun_reporting(struct drm_device *dev,
-
 
562
					   enum transcoder pch_transcoder,
-
 
563
					   bool enable)
-
 
564
{
-
 
565
	struct drm_i915_private *dev_priv = dev->dev_private;
-
 
566
	struct drm_crtc *crtc = dev_priv->pipe_to_crtc_mapping[pch_transcoder];
-
 
567
	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
-
 
568
	unsigned long flags;
-
 
569
	bool old;
-
 
570
 
-
 
571
	/*
-
 
572
	 * NOTE: Pre-LPT has a fixed cpu pipe -> pch transcoder mapping, but LPT
-
 
573
	 * has only one pch transcoder A that all pipes can use. To avoid racy
-
 
574
	 * pch transcoder -> pipe lookups from interrupt code simply store the
-
 
575
	 * underrun statistics in crtc A. Since we never expose this anywhere
-
 
576
	 * nor use it outside of the fifo underrun code here using the "wrong"
-
 
577
	 * crtc on LPT won't cause issues.
-
 
578
	 */
-
 
579
 
-
 
580
	spin_lock_irqsave(&dev_priv->irq_lock, flags);
-
 
581
 
-
 
582
	old = !intel_crtc->pch_fifo_underrun_disabled;
-
 
583
	intel_crtc->pch_fifo_underrun_disabled = !enable;
-
 
584
 
-
 
585
	if (HAS_PCH_IBX(dev))
-
 
586
		ibx_set_fifo_underrun_reporting(dev, pch_transcoder, enable);
-
 
587
	else
-
 
588
		cpt_set_fifo_underrun_reporting(dev, pch_transcoder, enable, old);
-
 
589
 
-
 
590
	spin_unlock_irqrestore(&dev_priv->irq_lock, flags);
-
 
591
	return old;
-
 
592
}
-
 
Line 593... Line 340...
593
 
340
}
594
 
341
 
595
static void
342
static void
596
__i915_enable_pipestat(struct drm_i915_private *dev_priv, enum pipe pipe,
343
__i915_enable_pipestat(struct drm_i915_private *dev_priv, enum pipe pipe,
597
		       u32 enable_mask, u32 status_mask)
344
		       u32 enable_mask, u32 status_mask)
598
{
345
{
Line 599... Line 346...
599
		u32 reg = PIPESTAT(pipe);
346
		u32 reg = PIPESTAT(pipe);
-
 
347
	u32 pipestat = I915_READ(reg) & PIPESTAT_INT_ENABLE_MASK;
Line 600... Line 348...
600
	u32 pipestat = I915_READ(reg) & PIPESTAT_INT_ENABLE_MASK;
348
 
601
 
349
	assert_spin_locked(&dev_priv->irq_lock);
602
	assert_spin_locked(&dev_priv->irq_lock);
350
	WARN_ON(!intel_irqs_enabled(dev_priv));
603
 
351
 
Line 624... Line 372...
624
{
372
{
625
		u32 reg = PIPESTAT(pipe);
373
		u32 reg = PIPESTAT(pipe);
626
	u32 pipestat = I915_READ(reg) & PIPESTAT_INT_ENABLE_MASK;
374
	u32 pipestat = I915_READ(reg) & PIPESTAT_INT_ENABLE_MASK;
Line 627... Line 375...
627
 
375
 
-
 
376
	assert_spin_locked(&dev_priv->irq_lock);
Line 628... Line 377...
628
	assert_spin_locked(&dev_priv->irq_lock);
377
	WARN_ON(!intel_irqs_enabled(dev_priv));
629
 
378
 
630
	if (WARN_ONCE(enable_mask & ~PIPESTAT_INT_ENABLE_MASK ||
379
	if (WARN_ONCE(enable_mask & ~PIPESTAT_INT_ENABLE_MASK ||
631
		      status_mask & ~PIPESTAT_INT_STATUS_MASK,
380
		      status_mask & ~PIPESTAT_INT_STATUS_MASK,
Line 703... Line 452...
703
 * i915_enable_asle_pipestat - enable ASLE pipestat for OpRegion
452
 * i915_enable_asle_pipestat - enable ASLE pipestat for OpRegion
704
 */
453
 */
705
static void i915_enable_asle_pipestat(struct drm_device *dev)
454
static void i915_enable_asle_pipestat(struct drm_device *dev)
706
{
455
{
707
	struct drm_i915_private *dev_priv = dev->dev_private;
456
	struct drm_i915_private *dev_priv = dev->dev_private;
708
	unsigned long irqflags;
-
 
Line 709... Line 457...
709
 
457
 
710
	if (!dev_priv->opregion.asle || !IS_MOBILE(dev))
458
	if (!dev_priv->opregion.asle || !IS_MOBILE(dev))
Line 711... Line 459...
711
		return;
459
		return;
Line 712... Line 460...
712
 
460
 
713
	spin_lock_irqsave(&dev_priv->irq_lock, irqflags);
461
	spin_lock_irq(&dev_priv->irq_lock);
714
 
462
 
715
	i915_enable_pipestat(dev_priv, PIPE_B, PIPE_LEGACY_BLC_EVENT_STATUS);
463
	i915_enable_pipestat(dev_priv, PIPE_B, PIPE_LEGACY_BLC_EVENT_STATUS);
Line 716... Line 464...
716
		if (INTEL_INFO(dev)->gen >= 4)
464
		if (INTEL_INFO(dev)->gen >= 4)
717
		i915_enable_pipestat(dev_priv, PIPE_A,
465
		i915_enable_pipestat(dev_priv, PIPE_A,
Line 718... Line 466...
718
				     PIPE_LEGACY_BLC_EVENT_STATUS);
466
				     PIPE_LEGACY_BLC_EVENT_STATUS);
719
 
467
 
720
	spin_unlock_irqrestore(&dev_priv->irq_lock, irqflags);
468
	spin_unlock_irq(&dev_priv->irq_lock);
Line 1023... Line 771...
1023
		*hpos = position - (*vpos * htotal);
771
		*hpos = position - (*vpos * htotal);
1024
	}
772
	}
Line 1025... Line 773...
1025
 
773
 
1026
	/* In vblank? */
774
	/* In vblank? */
1027
	if (in_vbl)
775
	if (in_vbl)
Line 1028... Line 776...
1028
		ret |= DRM_SCANOUTPOS_INVBL;
776
		ret |= DRM_SCANOUTPOS_IN_VBLANK;
1029
 
777
 
Line 1030... Line 778...
1030
	return ret;
778
	return ret;
Line 1107... Line 855...
1107
	struct drm_device *dev = dev_priv->dev;
855
	struct drm_device *dev = dev_priv->dev;
1108
	struct drm_mode_config *mode_config = &dev->mode_config;
856
	struct drm_mode_config *mode_config = &dev->mode_config;
1109
	struct intel_connector *intel_connector;
857
	struct intel_connector *intel_connector;
1110
	struct intel_encoder *intel_encoder;
858
	struct intel_encoder *intel_encoder;
1111
	struct drm_connector *connector;
859
	struct drm_connector *connector;
1112
	unsigned long irqflags;
-
 
1113
	bool hpd_disabled = false;
860
	bool hpd_disabled = false;
1114
	bool changed = false;
861
	bool changed = false;
1115
	u32 hpd_event_bits;
862
	u32 hpd_event_bits;
Line 1116... Line 863...
1116
 
863
 
1117
	mutex_lock(&mode_config->mutex);
864
	mutex_lock(&mode_config->mutex);
Line 1118... Line 865...
1118
	DRM_DEBUG_KMS("running encoder hotplug functions\n");
865
	DRM_DEBUG_KMS("running encoder hotplug functions\n");
Line 1119... Line 866...
1119
 
866
 
1120
	spin_lock_irqsave(&dev_priv->irq_lock, irqflags);
867
	spin_lock_irq(&dev_priv->irq_lock);
1121
 
868
 
1122
	hpd_event_bits = dev_priv->hpd_event_bits;
869
	hpd_event_bits = dev_priv->hpd_event_bits;
Line 1144... Line 891...
1144
	}
891
	}
1145
	 /* if there were no outputs to poll, poll was disabled,
892
	 /* if there were no outputs to poll, poll was disabled,
1146
	  * therefore make sure it's enabled when disabling HPD on
893
	  * therefore make sure it's enabled when disabling HPD on
1147
	  * some connectors */
894
	  * some connectors */
Line 1148... Line 895...
1148
 
895
 
Line 1149... Line 896...
1149
	spin_unlock_irqrestore(&dev_priv->irq_lock, irqflags);
896
	spin_unlock_irq(&dev_priv->irq_lock);
1150
 
897
 
1151
	list_for_each_entry(connector, &mode_config->connector_list, head) {
898
	list_for_each_entry(connector, &mode_config->connector_list, head) {
1152
		intel_connector = to_intel_connector(connector);
899
		intel_connector = to_intel_connector(connector);
Line 1267... Line 1014...
1267
 * vlv_calc_delay_from_C0_counters - Increase/Decrease freq based on GPU
1014
 * vlv_calc_delay_from_C0_counters - Increase/Decrease freq based on GPU
1268
 * busy-ness calculated from C0 counters of render & media power wells
1015
 * busy-ness calculated from C0 counters of render & media power wells
1269
 * @dev_priv: DRM device private
1016
 * @dev_priv: DRM device private
1270
 *
1017
 *
1271
 */
1018
 */
1272
static u32 vlv_calc_delay_from_C0_counters(struct drm_i915_private *dev_priv)
1019
static int vlv_calc_delay_from_C0_counters(struct drm_i915_private *dev_priv)
1273
{
1020
{
1274
	u32 residency_C0_up = 0, residency_C0_down = 0;
1021
	u32 residency_C0_up = 0, residency_C0_down = 0;
1275
	u8 new_delay, adj;
1022
	int new_delay, adj;
Line 1276... Line 1023...
1276
 
1023
 
Line 1277... Line 1024...
1277
	dev_priv->rps.ei_interrupt_count++;
1024
	dev_priv->rps.ei_interrupt_count++;
Line 1345... Line 1092...
1345
		container_of(work, struct drm_i915_private, rps.work);
1092
		container_of(work, struct drm_i915_private, rps.work);
1346
	u32 pm_iir;
1093
	u32 pm_iir;
1347
	int new_delay, adj;
1094
	int new_delay, adj;
Line 1348... Line 1095...
1348
 
1095
 
-
 
1096
	spin_lock_irq(&dev_priv->irq_lock);
-
 
1097
	/* Speed up work cancelation during disabling rps interrupts. */
-
 
1098
	if (!dev_priv->rps.interrupts_enabled) {
-
 
1099
		spin_unlock_irq(&dev_priv->irq_lock);
-
 
1100
		return;
1349
	spin_lock_irq(&dev_priv->irq_lock);
1101
	}
1350
	pm_iir = dev_priv->rps.pm_iir;
1102
	pm_iir = dev_priv->rps.pm_iir;
1351
	dev_priv->rps.pm_iir = 0;
-
 
1352
	if (INTEL_INFO(dev_priv->dev)->gen >= 8)
-
 
1353
		gen8_enable_pm_irq(dev_priv, dev_priv->pm_rps_events);
-
 
1354
	else {
1103
	dev_priv->rps.pm_iir = 0;
1355
		/* Make sure not to corrupt PMIMR state used by ringbuffer */
1104
	/* Make sure not to corrupt PMIMR state used by ringbuffer on GEN6 */
1356
		gen6_enable_pm_irq(dev_priv, dev_priv->pm_rps_events);
-
 
1357
	}
1105
		gen6_enable_pm_irq(dev_priv, dev_priv->pm_rps_events);
Line 1358... Line 1106...
1358
	spin_unlock_irq(&dev_priv->irq_lock);
1106
	spin_unlock_irq(&dev_priv->irq_lock);
1359
 
1107
 
Line 1433... Line 1181...
1433
	struct drm_i915_private *dev_priv =
1181
	struct drm_i915_private *dev_priv =
1434
		container_of(work, struct drm_i915_private, l3_parity.error_work);
1182
		container_of(work, struct drm_i915_private, l3_parity.error_work);
1435
	u32 error_status, row, bank, subbank;
1183
	u32 error_status, row, bank, subbank;
1436
	char *parity_event[6];
1184
	char *parity_event[6];
1437
	uint32_t misccpctl;
1185
	uint32_t misccpctl;
1438
	unsigned long flags;
-
 
1439
	uint8_t slice = 0;
1186
	uint8_t slice = 0;
Line 1440... Line 1187...
1440
 
1187
 
1441
	/* We must turn off DOP level clock gating to access the L3 registers.
1188
	/* We must turn off DOP level clock gating to access the L3 registers.
1442
	 * In order to prevent a get/put style interface, acquire struct mutex
1189
	 * In order to prevent a get/put style interface, acquire struct mutex
Line 1478... Line 1225...
1478
 
1225
 
Line 1479... Line 1226...
1479
	I915_WRITE(GEN7_MISCCPCTL, misccpctl);
1226
	I915_WRITE(GEN7_MISCCPCTL, misccpctl);
1480
 
1227
 
1481
out:
1228
out:
1482
	WARN_ON(dev_priv->l3_parity.which_slice);
1229
	WARN_ON(dev_priv->l3_parity.which_slice);
1483
	spin_lock_irqsave(&dev_priv->irq_lock, flags);
1230
	spin_lock_irq(&dev_priv->irq_lock);
Line 1484... Line 1231...
1484
	gen5_enable_gt_irq(dev_priv, GT_PARITY_ERROR(dev_priv->dev));
1231
	gen5_enable_gt_irq(dev_priv, GT_PARITY_ERROR(dev_priv->dev));
1485
	spin_unlock_irqrestore(&dev_priv->irq_lock, flags);
1232
	spin_unlock_irq(&dev_priv->irq_lock);
Line 1486... Line 1233...
1486
 
1233
 
Line 1532... Line 1279...
1532
	if (gt_iir & GT_BLT_USER_INTERRUPT)
1279
	if (gt_iir & GT_BLT_USER_INTERRUPT)
1533
		notify_ring(dev, &dev_priv->ring[BCS]);
1280
		notify_ring(dev, &dev_priv->ring[BCS]);
Line 1534... Line 1281...
1534
 
1281
 
1535
	if (gt_iir & (GT_BLT_CS_ERROR_INTERRUPT |
1282
	if (gt_iir & (GT_BLT_CS_ERROR_INTERRUPT |
1536
		      GT_BSD_CS_ERROR_INTERRUPT |
1283
		      GT_BSD_CS_ERROR_INTERRUPT |
1537
		      GT_RENDER_CS_MASTER_ERROR_INTERRUPT)) {
1284
		      GT_RENDER_CS_MASTER_ERROR_INTERRUPT))
1538
		i915_handle_error(dev, false, "GT error interrupt 0x%08x",
-
 
1539
				  gt_iir);
-
 
Line 1540... Line 1285...
1540
	}
1285
		DRM_DEBUG("Command parser error, gt_iir 0x%08x\n", gt_iir);
1541
 
1286
 
1542
	if (gt_iir & GT_PARITY_ERROR(dev))
1287
	if (gt_iir & GT_PARITY_ERROR(dev))
Line 1543... Line -...
1543
		ivybridge_parity_error_irq_handler(dev, gt_iir);
-
 
1544
}
-
 
1545
 
-
 
1546
static void gen8_rps_irq_handler(struct drm_i915_private *dev_priv, u32 pm_iir)
-
 
1547
{
-
 
1548
	if ((pm_iir & dev_priv->pm_rps_events) == 0)
-
 
1549
		return;
-
 
1550
 
-
 
1551
	spin_lock(&dev_priv->irq_lock);
-
 
1552
	dev_priv->rps.pm_iir |= pm_iir & dev_priv->pm_rps_events;
-
 
1553
	gen8_disable_pm_irq(dev_priv, pm_iir & dev_priv->pm_rps_events);
-
 
1554
	spin_unlock(&dev_priv->irq_lock);
-
 
1555
 
-
 
1556
	queue_work(dev_priv->wq, &dev_priv->rps.work);
1288
		ivybridge_parity_error_irq_handler(dev, gt_iir);
1557
}
1289
}
1558
 
1290
 
1559
static irqreturn_t gen8_gt_irq_handler(struct drm_device *dev,
1291
static irqreturn_t gen8_gt_irq_handler(struct drm_device *dev,
-
 
1292
				       struct drm_i915_private *dev_priv,
1560
				       struct drm_i915_private *dev_priv,
1293
				       u32 master_ctl)
1561
				       u32 master_ctl)
1294
{
1562
{
1295
	struct intel_engine_cs *ring;
Line 1563... Line 1296...
1563
	u32 rcs, bcs, vcs;
1296
	u32 rcs, bcs, vcs;
1564
	uint32_t tmp = 0;
1297
	uint32_t tmp = 0;
1565
	irqreturn_t ret = IRQ_NONE;
1298
	irqreturn_t ret = IRQ_NONE;
1566
 
1299
 
1567
	if (master_ctl & (GEN8_GT_RCS_IRQ | GEN8_GT_BCS_IRQ)) {
1300
	if (master_ctl & (GEN8_GT_RCS_IRQ | GEN8_GT_BCS_IRQ)) {
-
 
1301
		tmp = I915_READ(GEN8_GT_IIR(0));
1568
		tmp = I915_READ(GEN8_GT_IIR(0));
1302
		if (tmp) {
1569
		if (tmp) {
1303
			I915_WRITE(GEN8_GT_IIR(0), tmp);
1570
			I915_WRITE(GEN8_GT_IIR(0), tmp);
1304
			ret = IRQ_HANDLED;
-
 
1305
 
-
 
1306
			rcs = tmp >> GEN8_RCS_IRQ_SHIFT;
-
 
1307
			ring = &dev_priv->ring[RCS];
-
 
1308
			if (rcs & GT_RENDER_USER_INTERRUPT)
-
 
1309
				notify_ring(dev, ring);
1571
			ret = IRQ_HANDLED;
1310
			if (rcs & GT_CONTEXT_SWITCH_INTERRUPT)
1572
			rcs = tmp >> GEN8_RCS_IRQ_SHIFT;
1311
				intel_execlists_handle_ctx_events(ring);
1573
			bcs = tmp >> GEN8_BCS_IRQ_SHIFT;
1312
 
-
 
1313
			bcs = tmp >> GEN8_BCS_IRQ_SHIFT;
-
 
1314
			ring = &dev_priv->ring[BCS];
1574
			if (rcs & GT_RENDER_USER_INTERRUPT)
1315
			if (bcs & GT_RENDER_USER_INTERRUPT)
1575
				notify_ring(dev, &dev_priv->ring[RCS]);
1316
				notify_ring(dev, ring);
1576
			if (bcs & GT_RENDER_USER_INTERRUPT)
1317
			if (bcs & GT_CONTEXT_SWITCH_INTERRUPT)
Line 1577... Line 1318...
1577
				notify_ring(dev, &dev_priv->ring[BCS]);
1318
				intel_execlists_handle_ctx_events(ring);
1578
		} else
1319
		} else
1579
			DRM_ERROR("The master control interrupt lied (GT0)!\n");
1320
			DRM_ERROR("The master control interrupt lied (GT0)!\n");
1580
	}
1321
	}
1581
 
1322
 
-
 
1323
	if (master_ctl & (GEN8_GT_VCS1_IRQ | GEN8_GT_VCS2_IRQ)) {
1582
	if (master_ctl & (GEN8_GT_VCS1_IRQ | GEN8_GT_VCS2_IRQ)) {
1324
		tmp = I915_READ(GEN8_GT_IIR(1));
-
 
1325
		if (tmp) {
1583
		tmp = I915_READ(GEN8_GT_IIR(1));
1326
			I915_WRITE(GEN8_GT_IIR(1), tmp);
1584
		if (tmp) {
1327
			ret = IRQ_HANDLED;
-
 
1328
 
-
 
1329
			vcs = tmp >> GEN8_VCS1_IRQ_SHIFT;
-
 
1330
			ring = &dev_priv->ring[VCS];
1585
			I915_WRITE(GEN8_GT_IIR(1), tmp);
1331
			if (vcs & GT_RENDER_USER_INTERRUPT)
-
 
1332
				notify_ring(dev, ring);
1586
			ret = IRQ_HANDLED;
1333
			if (vcs & GT_CONTEXT_SWITCH_INTERRUPT)
1587
			vcs = tmp >> GEN8_VCS1_IRQ_SHIFT;
1334
				intel_execlists_handle_ctx_events(ring);
-
 
1335
 
-
 
1336
			vcs = tmp >> GEN8_VCS2_IRQ_SHIFT;
1588
			if (vcs & GT_RENDER_USER_INTERRUPT)
1337
			ring = &dev_priv->ring[VCS2];
1589
				notify_ring(dev, &dev_priv->ring[VCS]);
1338
			if (vcs & GT_RENDER_USER_INTERRUPT)
1590
			vcs = tmp >> GEN8_VCS2_IRQ_SHIFT;
1339
				notify_ring(dev, ring);
Line 1591... Line 1340...
1591
			if (vcs & GT_RENDER_USER_INTERRUPT)
1340
			if (vcs & GT_CONTEXT_SWITCH_INTERRUPT)
1592
				notify_ring(dev, &dev_priv->ring[VCS2]);
1341
				intel_execlists_handle_ctx_events(ring);
1593
		} else
1342
		} else
1594
			DRM_ERROR("The master control interrupt lied (GT1)!\n");
1343
			DRM_ERROR("The master control interrupt lied (GT1)!\n");
1595
	}
1344
	}
1596
 
1345
 
1597
	if (master_ctl & GEN8_GT_PM_IRQ) {
1346
	if (master_ctl & GEN8_GT_PM_IRQ) {
1598
		tmp = I915_READ(GEN8_GT_IIR(2));
1347
		tmp = I915_READ(GEN8_GT_IIR(2));
1599
		if (tmp & dev_priv->pm_rps_events) {
1348
		if (tmp & dev_priv->pm_rps_events) {
1600
			I915_WRITE(GEN8_GT_IIR(2),
1349
			I915_WRITE(GEN8_GT_IIR(2),
Line 1601... Line 1350...
1601
				   tmp & dev_priv->pm_rps_events);
1350
				   tmp & dev_priv->pm_rps_events);
1602
			ret = IRQ_HANDLED;
1351
			ret = IRQ_HANDLED;
1603
			gen8_rps_irq_handler(dev_priv, tmp);
1352
			gen6_rps_irq_handler(dev_priv, tmp);
1604
		} else
1353
		} else
1605
			DRM_ERROR("The master control interrupt lied (PM)!\n");
1354
			DRM_ERROR("The master control interrupt lied (PM)!\n");
-
 
1355
	}
1606
	}
1356
 
-
 
1357
	if (master_ctl & GEN8_GT_VECS_IRQ) {
1607
 
1358
		tmp = I915_READ(GEN8_GT_IIR(3));
1608
	if (master_ctl & GEN8_GT_VECS_IRQ) {
1359
		if (tmp) {
-
 
1360
			I915_WRITE(GEN8_GT_IIR(3), tmp);
-
 
1361
			ret = IRQ_HANDLED;
1609
		tmp = I915_READ(GEN8_GT_IIR(3));
1362
 
1610
		if (tmp) {
1363
			vcs = tmp >> GEN8_VECS_IRQ_SHIFT;
1611
			I915_WRITE(GEN8_GT_IIR(3), tmp);
1364
			ring = &dev_priv->ring[VECS];
Line 1612... Line 1365...
1612
			ret = IRQ_HANDLED;
1365
			if (vcs & GT_RENDER_USER_INTERRUPT)
1613
			vcs = tmp >> GEN8_VECS_IRQ_SHIFT;
1366
				notify_ring(dev, ring);
Line 1614... Line 1367...
1614
			if (vcs & GT_RENDER_USER_INTERRUPT)
1367
			if (vcs & GT_CONTEXT_SWITCH_INTERRUPT)
1615
				notify_ring(dev, &dev_priv->ring[VECS]);
1368
				intel_execlists_handle_ctx_events(ring);
Line 1616... Line 1369...
1616
		} else
1369
		} else
1617
			DRM_ERROR("The master control interrupt lied (GT3)!\n");
1370
			DRM_ERROR("The master control interrupt lied (GT3)!\n");
1618
	}
1371
	}
1619
 
1372
 
1620
	return ret;
1373
	return ret;
1621
}
1374
}
Line 1637... Line 1390...
1637
	case PORT_D:
1390
	case PORT_D:
1638
		return 16;
1391
		return 16;
1639
	}
1392
	}
1640
}
1393
}
Line 1641... Line 1394...
1641
 
1394
 
1642
static int g4x_port_to_hotplug_shift(enum port port)
1395
static int i915_port_to_hotplug_shift(enum port port)
1643
{
1396
{
1644
	switch (port) {
1397
	switch (port) {
1645
	case PORT_A:
1398
	case PORT_A:
1646
	case PORT_E:
1399
	case PORT_E:
Line 1695... Line 1448...
1695
 
1448
 
1696
		port = get_port_from_pin(i);
1449
		port = get_port_from_pin(i);
1697
		if (port && dev_priv->hpd_irq_port[port]) {
1450
		if (port && dev_priv->hpd_irq_port[port]) {
Line 1698... Line 1451...
1698
			bool long_hpd;
1451
			bool long_hpd;
1699
 
1452
 
1700
			if (IS_G4X(dev)) {
-
 
1701
				dig_shift = g4x_port_to_hotplug_shift(port);
-
 
1702
				long_hpd = (hotplug_trigger >> dig_shift) & PORTB_HOTPLUG_LONG_DETECT;
-
 
1703
			} else {
1453
			if (HAS_PCH_SPLIT(dev)) {
-
 
1454
				dig_shift = pch_port_to_hotplug_shift(port);
-
 
1455
				long_hpd = (dig_hotplug_reg >> dig_shift) & PORTB_HOTPLUG_LONG_DETECT;
-
 
1456
			} else {
1704
				dig_shift = ilk_port_to_hotplug_shift(port);
1457
				dig_shift = i915_port_to_hotplug_shift(port);
Line 1705... Line 1458...
1705
				long_hpd = (dig_hotplug_reg >> dig_shift) & PORTB_HOTPLUG_LONG_DETECT;
1458
				long_hpd = (hotplug_trigger >> dig_shift) & PORTB_HOTPLUG_LONG_DETECT;
-
 
1459
			}
-
 
1460
 
1706
			}
1461
			DRM_DEBUG_DRIVER("digital hpd port %c - %s\n",
1707
 
1462
					 port_name(port),
1708
			DRM_DEBUG_DRIVER("digital hpd port %d %d\n", port, long_hpd);
1463
					 long_hpd ? "long" : "short");
1709
			/* for long HPD pulses we want to have the digital queue happen,
1464
			/* for long HPD pulses we want to have the digital queue happen,
1710
			   but we still want HPD storm detection to function. */
1465
			   but we still want HPD storm detection to function. */
Line 1804... Line 1559...
1804
 
1559
 
Line 1805... Line 1560...
1805
	spin_lock(&pipe_crc->lock);
1560
	spin_lock(&pipe_crc->lock);
1806
 
1561
 
1807
	if (!pipe_crc->entries) {
1562
	if (!pipe_crc->entries) {
1808
		spin_unlock(&pipe_crc->lock);
1563
		spin_unlock(&pipe_crc->lock);
1809
		DRM_ERROR("spurious interrupt\n");
1564
		DRM_DEBUG_KMS("spurious interrupt\n");
Line 1810... Line 1565...
1810
		return;
1565
		return;
1811
	}
1566
	}
Line 1890... Line 1645...
1890
/* The RPS events need forcewake, so we add them to a work queue and mask their
1645
/* The RPS events need forcewake, so we add them to a work queue and mask their
1891
 * IMR bits until the work is done. Other interrupts can be processed without
1646
 * IMR bits until the work is done. Other interrupts can be processed without
1892
 * the work queue. */
1647
 * the work queue. */
1893
static void gen6_rps_irq_handler(struct drm_i915_private *dev_priv, u32 pm_iir)
1648
static void gen6_rps_irq_handler(struct drm_i915_private *dev_priv, u32 pm_iir)
1894
{
1649
{
-
 
1650
	/* TODO: RPS on GEN9+ is not supported yet. */
-
 
1651
	if (WARN_ONCE(INTEL_INFO(dev_priv)->gen >= 9,
-
 
1652
		      "GEN9+: unexpected RPS IRQ\n"))
-
 
1653
		return;
-
 
1654
 
1895
	if (pm_iir & dev_priv->pm_rps_events) {
1655
	if (pm_iir & dev_priv->pm_rps_events) {
1896
		spin_lock(&dev_priv->irq_lock);
1656
		spin_lock(&dev_priv->irq_lock);
1897
		dev_priv->rps.pm_iir |= pm_iir & dev_priv->pm_rps_events;
-
 
1898
		gen6_disable_pm_irq(dev_priv, pm_iir & dev_priv->pm_rps_events);
1657
		gen6_disable_pm_irq(dev_priv, pm_iir & dev_priv->pm_rps_events);
1899
		spin_unlock(&dev_priv->irq_lock);
1658
		if (dev_priv->rps.interrupts_enabled) {
1900
 
-
 
-
 
1659
		dev_priv->rps.pm_iir |= pm_iir & dev_priv->pm_rps_events;
1901
		queue_work(dev_priv->wq, &dev_priv->rps.work);
1660
			queue_work(dev_priv->wq, &dev_priv->rps.work);
1902
	}
1661
		}
-
 
1662
		spin_unlock(&dev_priv->irq_lock);
-
 
1663
	}
-
 
1664
 
-
 
1665
	if (INTEL_INFO(dev_priv)->gen >= 8)
-
 
1666
		return;
Line 1903... Line 1667...
1903
 
1667
 
1904
	if (HAS_VEBOX(dev_priv->dev)) {
1668
	if (HAS_VEBOX(dev_priv->dev)) {
1905
		if (pm_iir & PM_VEBOX_USER_INTERRUPT)
1669
		if (pm_iir & PM_VEBOX_USER_INTERRUPT)
Line 1906... Line 1670...
1906
			notify_ring(dev_priv->dev, &dev_priv->ring[VECS]);
1670
			notify_ring(dev_priv->dev, &dev_priv->ring[VECS]);
1907
 
-
 
1908
		if (pm_iir & PM_VEBOX_CS_ERROR_INTERRUPT) {
1671
 
1909
			i915_handle_error(dev_priv->dev, false,
-
 
1910
					  "VEBOX CS error interrupt 0x%08x",
1672
		if (pm_iir & PM_VEBOX_CS_ERROR_INTERRUPT)
1911
					  pm_iir);
1673
			DRM_DEBUG("Command parser error, pm_iir 0x%08x\n", pm_iir);
-
 
1674
	}
-
 
1675
}
-
 
1676
 
-
 
1677
static bool intel_pipe_handle_vblank(struct drm_device *dev, enum pipe pipe)
-
 
1678
{
-
 
1679
	if (!drm_handle_vblank(dev, pipe))
-
 
1680
		return false;
1912
		}
1681
 
Line 1913... Line 1682...
1913
	}
1682
	return true;
1914
}
1683
}
1915
 
1684
 
1916
static void valleyview_pipestat_irq_handler(struct drm_device *dev, u32 iir)
1685
static void valleyview_pipestat_irq_handler(struct drm_device *dev, u32 iir)
1917
{
1686
{
Line 1918... Line 1687...
1918
	struct drm_i915_private *dev_priv = dev->dev_private;
1687
	struct drm_i915_private *dev_priv = dev->dev_private;
1919
	u32 pipe_stats[I915_MAX_PIPES] = { };
1688
	u32 pipe_stats[I915_MAX_PIPES] = { };
1920
	int pipe;
1689
	int pipe;
1921
 
1690
 
Line 1922... Line 1691...
1922
	spin_lock(&dev_priv->irq_lock);
1691
	spin_lock(&dev_priv->irq_lock);
1923
	for_each_pipe(pipe) {
1692
	for_each_pipe(dev_priv, pipe) {
1924
		int reg;
1693
		int reg;
1925
		u32 mask, iir_bit = 0;
1694
		u32 mask, iir_bit = 0;
1926
 
1695
 
1927
		/*
1696
		/*
1928
		 * PIPESTAT bits get signalled even when the interrupt is
1697
		 * PIPESTAT bits get signalled even when the interrupt is
1929
		 * disabled with the mask bits, and some of the status bits do
1698
		 * disabled with the mask bits, and some of the status bits do
1930
		 * not generate interrupts at all (like the underrun bit). Hence
1699
		 * not generate interrupts at all (like the underrun bit). Hence
1931
		 * we need to be careful that we only handle what we want to
1700
		 * we need to be careful that we only handle what we want to
Line 1932... Line 1701...
1932
		 * handle.
1701
		 * handle.
1933
		 */
1702
		 */
1934
		mask = 0;
1703
 
1935
		if (__cpu_fifo_underrun_reporting_enabled(dev, pipe))
1704
		/* fifo underruns are filterered in the underrun handler. */
Line 1963... Line 1732...
1963
					PIPESTAT_INT_STATUS_MASK))
1732
					PIPESTAT_INT_STATUS_MASK))
1964
				I915_WRITE(reg, pipe_stats[pipe]);
1733
				I915_WRITE(reg, pipe_stats[pipe]);
1965
			}
1734
			}
1966
	spin_unlock(&dev_priv->irq_lock);
1735
	spin_unlock(&dev_priv->irq_lock);
Line 1967... Line 1736...
1967
 
1736
 
1968
		for_each_pipe(pipe) {
-
 
1969
//			if (pipe_stats[pipe] & PIPE_START_VBLANK_INTERRUPT_STATUS)
-
 
Line 1970... Line -...
1970
//				drm_handle_vblank(dev, pipe);
-
 
1971
 
-
 
1972
		if (pipe_stats[pipe] & PLANE_FLIP_DONE_INT_STATUS_VLV) {
-
 
1973
//			intel_prepare_page_flip(dev, pipe);
-
 
Line 1974... Line 1737...
1974
//			intel_finish_page_flip(dev, pipe);
1737
	for_each_pipe(dev_priv, pipe) {
1975
			}
1738
 
Line 1976... Line 1739...
1976
 
1739
 
1977
			if (pipe_stats[pipe] & PIPE_CRC_DONE_INTERRUPT_STATUS)
1740
			if (pipe_stats[pipe] & PIPE_CRC_DONE_INTERRUPT_STATUS)
1978
				i9xx_pipe_crc_irq_handler(dev, pipe);
-
 
1979
 
1741
				i9xx_pipe_crc_irq_handler(dev, pipe);
Line 1980... Line 1742...
1980
		if (pipe_stats[pipe] & PIPE_FIFO_UNDERRUN_STATUS &&
1742
 
1981
		    intel_set_cpu_fifo_underrun_reporting(dev, pipe, false))
1743
		if (pipe_stats[pipe] & PIPE_FIFO_UNDERRUN_STATUS)
1982
			DRM_ERROR("pipe %c underrun\n", pipe_name(pipe));
1744
			intel_cpu_fifo_underrun_irq_handler(dev_priv, pipe);
Line 2132... Line 1894...
2132
 
1894
 
2133
	if (pch_iir & SDE_POISON)
1895
	if (pch_iir & SDE_POISON)
Line 2134... Line 1896...
2134
		DRM_ERROR("PCH poison interrupt\n");
1896
		DRM_ERROR("PCH poison interrupt\n");
2135
 
1897
 
2136
	if (pch_iir & SDE_FDI_MASK)
1898
	if (pch_iir & SDE_FDI_MASK)
2137
		for_each_pipe(pipe)
1899
		for_each_pipe(dev_priv, pipe)
2138
			DRM_DEBUG_DRIVER("  pipe %c FDI IIR: 0x%08x\n",
1900
			DRM_DEBUG_DRIVER("  pipe %c FDI IIR: 0x%08x\n",
Line 2139... Line 1901...
2139
					 pipe_name(pipe),
1901
					 pipe_name(pipe),
Line 2144... Line 1906...
2144
 
1906
 
2145
	if (pch_iir & (SDE_TRANSB_CRC_ERR | SDE_TRANSA_CRC_ERR))
1907
	if (pch_iir & (SDE_TRANSB_CRC_ERR | SDE_TRANSA_CRC_ERR))
Line 2146... Line 1908...
2146
		DRM_DEBUG_DRIVER("PCH transcoder CRC error interrupt\n");
1908
		DRM_DEBUG_DRIVER("PCH transcoder CRC error interrupt\n");
2147
 
1909
 
2148
	if (pch_iir & SDE_TRANSA_FIFO_UNDER)
-
 
2149
		if (intel_set_pch_fifo_underrun_reporting(dev, TRANSCODER_A,
-
 
Line 2150... Line 1910...
2150
							  false))
1910
	if (pch_iir & SDE_TRANSA_FIFO_UNDER)
2151
			DRM_ERROR("PCH transcoder A FIFO underrun\n");
1911
		intel_pch_fifo_underrun_irq_handler(dev_priv, TRANSCODER_A);
2152
 
-
 
2153
	if (pch_iir & SDE_TRANSB_FIFO_UNDER)
-
 
2154
		if (intel_set_pch_fifo_underrun_reporting(dev, TRANSCODER_B,
1912
 
Line 2155... Line 1913...
2155
							  false))
1913
	if (pch_iir & SDE_TRANSB_FIFO_UNDER)
2156
			DRM_ERROR("PCH transcoder B FIFO underrun\n");
1914
		intel_pch_fifo_underrun_irq_handler(dev_priv, TRANSCODER_B);
2157
}
1915
}
Line 2163... Line 1921...
2163
	enum pipe pipe;
1921
	enum pipe pipe;
Line 2164... Line 1922...
2164
 
1922
 
2165
	if (err_int & ERR_INT_POISON)
1923
	if (err_int & ERR_INT_POISON)
Line 2166... Line 1924...
2166
		DRM_ERROR("Poison interrupt\n");
1924
		DRM_ERROR("Poison interrupt\n");
2167
 
1925
 
2168
	for_each_pipe(pipe) {
1926
	for_each_pipe(dev_priv, pipe) {
2169
		if (err_int & ERR_INT_FIFO_UNDERRUN(pipe)) {
-
 
2170
			if (intel_set_cpu_fifo_underrun_reporting(dev, pipe,
-
 
2171
								  false))
-
 
2172
				DRM_ERROR("Pipe %c FIFO underrun\n",
-
 
Line 2173... Line 1927...
2173
						 pipe_name(pipe));
1927
		if (err_int & ERR_INT_FIFO_UNDERRUN(pipe))
2174
		}
1928
			intel_cpu_fifo_underrun_irq_handler(dev_priv, pipe);
2175
 
1929
 
2176
		if (err_int & ERR_INT_PIPE_CRC_DONE(pipe)) {
1930
		if (err_int & ERR_INT_PIPE_CRC_DONE(pipe)) {
Line 2191... Line 1945...
2191
 
1945
 
2192
	if (serr_int & SERR_INT_POISON)
1946
	if (serr_int & SERR_INT_POISON)
Line 2193... Line 1947...
2193
		DRM_ERROR("PCH poison interrupt\n");
1947
		DRM_ERROR("PCH poison interrupt\n");
2194
 
1948
 
2195
	if (serr_int & SERR_INT_TRANS_A_FIFO_UNDERRUN)
-
 
2196
		if (intel_set_pch_fifo_underrun_reporting(dev, TRANSCODER_A,
-
 
Line 2197... Line 1949...
2197
							  false))
1949
	if (serr_int & SERR_INT_TRANS_A_FIFO_UNDERRUN)
2198
			DRM_ERROR("PCH transcoder A FIFO underrun\n");
1950
		intel_pch_fifo_underrun_irq_handler(dev_priv, TRANSCODER_A);
2199
 
-
 
2200
	if (serr_int & SERR_INT_TRANS_B_FIFO_UNDERRUN)
-
 
Line 2201... Line 1951...
2201
		if (intel_set_pch_fifo_underrun_reporting(dev, TRANSCODER_B,
1951
 
2202
							  false))
1952
	if (serr_int & SERR_INT_TRANS_B_FIFO_UNDERRUN)
2203
			DRM_ERROR("PCH transcoder B FIFO underrun\n");
-
 
2204
 
-
 
Line 2205... Line 1953...
2205
	if (serr_int & SERR_INT_TRANS_C_FIFO_UNDERRUN)
1953
		intel_pch_fifo_underrun_irq_handler(dev_priv, TRANSCODER_B);
2206
		if (intel_set_pch_fifo_underrun_reporting(dev, TRANSCODER_C,
1954
 
Line 2207... Line 1955...
2207
							  false))
1955
	if (serr_int & SERR_INT_TRANS_C_FIFO_UNDERRUN)
Line 2240... Line 1988...
2240
 
1988
 
2241
	if (pch_iir & SDE_AUDIO_CP_CHG_CPT)
1989
	if (pch_iir & SDE_AUDIO_CP_CHG_CPT)
Line 2242... Line 1990...
2242
		DRM_DEBUG_DRIVER("Audio CP change interrupt\n");
1990
		DRM_DEBUG_DRIVER("Audio CP change interrupt\n");
2243
 
1991
 
2244
	if (pch_iir & SDE_FDI_MASK_CPT)
1992
	if (pch_iir & SDE_FDI_MASK_CPT)
2245
		for_each_pipe(pipe)
1993
		for_each_pipe(dev_priv, pipe)
2246
			DRM_DEBUG_DRIVER("  pipe %c FDI IIR: 0x%08x\n",
1994
			DRM_DEBUG_DRIVER("  pipe %c FDI IIR: 0x%08x\n",
Line 2247... Line 1995...
2247
					 pipe_name(pipe),
1995
					 pipe_name(pipe),
Line 2263... Line 2011...
2263
		intel_opregion_asle_intr(dev);
2011
		intel_opregion_asle_intr(dev);
Line 2264... Line 2012...
2264
 
2012
 
2265
	if (de_iir & DE_POISON)
2013
	if (de_iir & DE_POISON)
Line 2266... Line 2014...
2266
		DRM_ERROR("Poison interrupt\n");
2014
		DRM_ERROR("Poison interrupt\n");
2267
 
-
 
2268
	for_each_pipe(pipe) {
-
 
Line 2269... Line 2015...
2269
//		if (de_iir & DE_PIPE_VBLANK(pipe))
2015
 
2270
//			drm_handle_vblank(dev, pipe);
2016
	for_each_pipe(dev_priv, pipe) {
2271
 
-
 
2272
		if (de_iir & DE_PIPE_FIFO_UNDERRUN(pipe))
-
 
Line 2273... Line 2017...
2273
			if (intel_set_cpu_fifo_underrun_reporting(dev, pipe, false))
2017
 
2274
				DRM_ERROR("Pipe %c FIFO underrun\n",
2018
		if (de_iir & DE_PIPE_FIFO_UNDERRUN(pipe))
Line 2275... Line 2019...
2275
						 pipe_name(pipe));
2019
			intel_cpu_fifo_underrun_irq_handler(dev_priv, pipe);
Line 2313... Line 2057...
2313
		dp_aux_irq_handler(dev);
2057
		dp_aux_irq_handler(dev);
Line 2314... Line 2058...
2314
 
2058
 
2315
	if (de_iir & DE_GSE_IVB)
2059
	if (de_iir & DE_GSE_IVB)
Line 2316... Line 2060...
2316
		intel_opregion_asle_intr(dev);
2060
		intel_opregion_asle_intr(dev);
2317
 
-
 
2318
	for_each_pipe(pipe) {
-
 
Line 2319... Line 2061...
2319
//		if (de_iir & (DE_PIPE_VBLANK_IVB(pipe)))
2061
 
2320
//			drm_handle_vblank(dev, pipe);
2062
	for_each_pipe(dev_priv, pipe) {
2321
 
2063
 
2322
		/* plane/pipes map 1:1 on ilk+ */
2064
		/* plane/pipes map 1:1 on ilk+ */
Line 2419... Line 2161...
2419
	struct drm_i915_private *dev_priv = dev->dev_private;
2161
	struct drm_i915_private *dev_priv = dev->dev_private;
2420
	u32 master_ctl;
2162
	u32 master_ctl;
2421
	irqreturn_t ret = IRQ_NONE;
2163
	irqreturn_t ret = IRQ_NONE;
2422
	uint32_t tmp = 0;
2164
	uint32_t tmp = 0;
2423
	enum pipe pipe;
2165
	enum pipe pipe;
-
 
2166
	u32 aux_mask = GEN8_AUX_CHANNEL_A;
-
 
2167
 
-
 
2168
	if (IS_GEN9(dev))
-
 
2169
		aux_mask |=  GEN9_AUX_CHANNEL_B | GEN9_AUX_CHANNEL_C |
-
 
2170
			GEN9_AUX_CHANNEL_D;
Line 2424... Line 2171...
2424
 
2171
 
2425
	master_ctl = I915_READ(GEN8_MASTER_IRQ);
2172
	master_ctl = I915_READ(GEN8_MASTER_IRQ);
2426
	master_ctl &= ~GEN8_MASTER_IRQ_CONTROL;
2173
	master_ctl &= ~GEN8_MASTER_IRQ_CONTROL;
2427
	if (!master_ctl)
2174
	if (!master_ctl)
Line 2451... Line 2198...
2451
	if (master_ctl & GEN8_DE_PORT_IRQ) {
2198
	if (master_ctl & GEN8_DE_PORT_IRQ) {
2452
		tmp = I915_READ(GEN8_DE_PORT_IIR);
2199
		tmp = I915_READ(GEN8_DE_PORT_IIR);
2453
		if (tmp) {
2200
		if (tmp) {
2454
			I915_WRITE(GEN8_DE_PORT_IIR, tmp);
2201
			I915_WRITE(GEN8_DE_PORT_IIR, tmp);
2455
			ret = IRQ_HANDLED;
2202
			ret = IRQ_HANDLED;
-
 
2203
 
2456
		if (tmp & GEN8_AUX_CHANNEL_A)
2204
			if (tmp & aux_mask)
2457
			dp_aux_irq_handler(dev);
2205
			dp_aux_irq_handler(dev);
2458
			else
2206
			else
2459
			DRM_ERROR("Unexpected DE Port interrupt\n");
2207
			DRM_ERROR("Unexpected DE Port interrupt\n");
2460
		}
2208
		}
2461
		else
2209
		else
2462
			DRM_ERROR("The master control interrupt lied (DE PORT)!\n");
2210
			DRM_ERROR("The master control interrupt lied (DE PORT)!\n");
2463
	}
2211
	}
Line 2464... Line 2212...
2464
 
2212
 
2465
	for_each_pipe(pipe) {
2213
	for_each_pipe(dev_priv, pipe) {
Line 2466... Line 2214...
2466
		uint32_t pipe_iir;
2214
		uint32_t pipe_iir, flip_done = 0, fault_errors = 0;
2467
 
2215
 
Line 2468... Line 2216...
2468
		if (!(master_ctl & GEN8_DE_PIPE_IRQ(pipe)))
2216
		if (!(master_ctl & GEN8_DE_PIPE_IRQ(pipe)))
2469
			continue;
2217
			continue;
2470
 
2218
 
2471
		pipe_iir = I915_READ(GEN8_DE_PIPE_IIR(pipe));
2219
		pipe_iir = I915_READ(GEN8_DE_PIPE_IIR(pipe));
2472
		if (pipe_iir) {
-
 
2473
			ret = IRQ_HANDLED;
-
 
Line -... Line 2220...
-
 
2220
		if (pipe_iir) {
-
 
2221
			ret = IRQ_HANDLED;
2474
			I915_WRITE(GEN8_DE_PIPE_IIR(pipe), pipe_iir);
2222
			I915_WRITE(GEN8_DE_PIPE_IIR(pipe), pipe_iir);
2475
//		if (pipe_iir & GEN8_PIPE_VBLANK)
2223
 
2476
//			intel_pipe_handle_vblank(dev, pipe);
2224
 
2477
 
2225
			if (IS_GEN9(dev))
Line 2478... Line 2226...
2478
		if (pipe_iir & GEN8_PIPE_PRIMARY_FLIP_DONE) {
2226
				flip_done = pipe_iir & GEN9_PIPE_PLANE1_FLIP_DONE;
2479
//			intel_prepare_page_flip(dev, pipe);
2227
			else
Line 2480... Line 2228...
2480
//			intel_finish_page_flip_plane(dev, pipe);
2228
				flip_done = pipe_iir & GEN8_PIPE_PRIMARY_FLIP_DONE;
2481
		}
2229
 
2482
 
2230
 
-
 
2231
		if (pipe_iir & GEN8_PIPE_CDCLK_CRC_DONE)
-
 
2232
			hsw_pipe_crc_irq_handler(dev, pipe);
2483
		if (pipe_iir & GEN8_PIPE_CDCLK_CRC_DONE)
2233
 
2484
			hsw_pipe_crc_irq_handler(dev, pipe);
2234
			if (pipe_iir & GEN8_PIPE_FIFO_UNDERRUN)
2485
 
2235
				intel_cpu_fifo_underrun_irq_handler(dev_priv,
-
 
2236
								    pipe);
Line 2486... Line 2237...
2486
		if (pipe_iir & GEN8_PIPE_FIFO_UNDERRUN) {
2237
 
2487
			if (intel_set_cpu_fifo_underrun_reporting(dev, pipe,
2238
 
2488
								  false))
2239
			if (IS_GEN9(dev))
2489
				DRM_ERROR("Pipe %c FIFO underrun\n",
2240
				fault_errors = pipe_iir & GEN9_DE_PIPE_IRQ_FAULT_ERRORS;
2490
						 pipe_name(pipe));
-
 
2491
		}
2241
			else
2492
 
2242
				fault_errors = pipe_iir & GEN8_DE_PIPE_IRQ_FAULT_ERRORS;
2493
		if (pipe_iir & GEN8_DE_PIPE_IRQ_FAULT_ERRORS) {
2243
 
Line 2494... Line 2244...
2494
			DRM_ERROR("Fault errors on pipe %c\n: 0x%08x",
2244
			if (fault_errors)
Line 2660... Line 2410...
2660
		}
2410
		}
2661
	}
2411
	}
Line 2662... Line 2412...
2662
 
2412
 
2663
	if (eir & I915_ERROR_MEMORY_REFRESH) {
2413
	if (eir & I915_ERROR_MEMORY_REFRESH) {
2664
		pr_err("memory refresh error:\n");
2414
		pr_err("memory refresh error:\n");
2665
		for_each_pipe(pipe)
2415
		for_each_pipe(dev_priv, pipe)
2666
			pr_err("pipe %c stat: 0x%08x\n",
2416
			pr_err("pipe %c stat: 0x%08x\n",
2667
			       pipe_name(pipe), I915_READ(PIPESTAT(pipe)));
2417
			       pipe_name(pipe), I915_READ(PIPESTAT(pipe)));
2668
		/* pipestat has already been acked */
2418
		/* pipestat has already been acked */
2669
	}
2419
	}
Line 2757... Line 2507...
2757
	 * code will deadlock.
2507
	 * code will deadlock.
2758
	 */
2508
	 */
2759
	schedule_work(&dev_priv->gpu_error.work);
2509
	schedule_work(&dev_priv->gpu_error.work);
2760
}
2510
}
Line 2761... Line -...
2761
 
-
 
2762
#if 0
-
 
2763
static void __always_unused i915_pageflip_stall_check(struct drm_device *dev, int pipe)
-
 
2764
{
-
 
2765
	struct drm_i915_private *dev_priv = dev->dev_private;
-
 
2766
	struct drm_crtc *crtc = dev_priv->pipe_to_crtc_mapping[pipe];
-
 
2767
	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
-
 
2768
	struct drm_i915_gem_object *obj;
-
 
2769
	struct intel_unpin_work *work;
-
 
2770
	unsigned long flags;
-
 
2771
	bool stall_detected;
-
 
2772
 
-
 
2773
	/* Ignore early vblank irqs */
-
 
2774
	if (intel_crtc == NULL)
-
 
2775
		return;
-
 
2776
 
-
 
2777
	spin_lock_irqsave(&dev->event_lock, flags);
-
 
2778
	work = intel_crtc->unpin_work;
-
 
2779
 
-
 
2780
	if (work == NULL ||
-
 
2781
	    atomic_read(&work->pending) >= INTEL_FLIP_COMPLETE ||
-
 
2782
	    !work->enable_stall_check) {
-
 
2783
		/* Either the pending flip IRQ arrived, or we're too early. Don't check */
-
 
2784
		spin_unlock_irqrestore(&dev->event_lock, flags);
-
 
2785
		return;
-
 
2786
	}
-
 
2787
 
-
 
2788
	/* Potential stall - if we see that the flip has happened, assume a missed interrupt */
-
 
2789
	obj = work->pending_flip_obj;
-
 
2790
	if (INTEL_INFO(dev)->gen >= 4) {
-
 
2791
		int dspsurf = DSPSURF(intel_crtc->plane);
-
 
2792
		stall_detected = I915_HI_DISPBASE(I915_READ(dspsurf)) ==
-
 
2793
					i915_gem_obj_ggtt_offset(obj);
-
 
2794
	} else {
-
 
2795
		int dspaddr = DSPADDR(intel_crtc->plane);
-
 
2796
		stall_detected = I915_READ(dspaddr) == (i915_gem_obj_ggtt_offset(obj) +
-
 
2797
							crtc->y * crtc->primary->fb->pitches[0] +
-
 
2798
							crtc->x * crtc->primary->fb->bits_per_pixel/8);
-
 
2799
	}
-
 
2800
 
-
 
2801
	spin_unlock_irqrestore(&dev->event_lock, flags);
-
 
2802
 
-
 
2803
	if (stall_detected) {
-
 
2804
		DRM_DEBUG_DRIVER("Pageflip stall detected\n");
-
 
2805
		intel_prepare_page_flip(dev, intel_crtc->plane);
-
 
2806
	}
-
 
2807
}
-
 
2808
 
-
 
2809
#endif
-
 
2810
 
2511
 
2811
/* Called from drm generic code, passed 'crtc' which
2512
/* Called from drm generic code, passed 'crtc' which
2812
 * we use as a pipe index
2513
 * we use as a pipe index
2813
 */
2514
 */
2814
static int i915_enable_vblank(struct drm_device *dev, int pipe)
2515
static int i915_enable_vblank(struct drm_device *dev, int pipe)
Line 3297... Line 2998...
3297
	gen5_gt_irq_reset(dev);
2998
	gen5_gt_irq_reset(dev);
Line 3298... Line 2999...
3298
 
2999
 
3299
	ibx_irq_reset(dev);
3000
	ibx_irq_reset(dev);
Line -... Line 3001...
-
 
3001
}
-
 
3002
 
-
 
3003
static void vlv_display_irq_reset(struct drm_i915_private *dev_priv)
-
 
3004
{
-
 
3005
	enum pipe pipe;
-
 
3006
 
-
 
3007
	I915_WRITE(PORT_HOTPLUG_EN, 0);
-
 
3008
	I915_WRITE(PORT_HOTPLUG_STAT, I915_READ(PORT_HOTPLUG_STAT));
-
 
3009
 
-
 
3010
	for_each_pipe(dev_priv, pipe)
-
 
3011
		I915_WRITE(PIPESTAT(pipe), 0xffff);
-
 
3012
 
-
 
3013
	GEN5_IRQ_RESET(VLV_);
3300
}
3014
}
3301
 
3015
 
3302
static void valleyview_irq_preinstall(struct drm_device *dev)
3016
static void valleyview_irq_preinstall(struct drm_device *dev)
3303
{
-
 
Line 3304... Line 3017...
3304
	struct drm_i915_private *dev_priv = dev->dev_private;
3017
{
3305
	int pipe;
3018
	struct drm_i915_private *dev_priv = dev->dev_private;
3306
 
3019
 
3307
	/* VLV magic */
3020
	/* VLV magic */
3308
	I915_WRITE(VLV_IMR, 0);
3021
	I915_WRITE(VLV_IMR, 0);
Line 3309... Line -...
3309
	I915_WRITE(RING_IMR(RENDER_RING_BASE), 0);
-
 
3310
	I915_WRITE(RING_IMR(GEN6_BSD_RING_BASE), 0);
-
 
3311
	I915_WRITE(RING_IMR(BLT_RING_BASE), 0);
-
 
3312
 
-
 
3313
	/* and GT */
3022
	I915_WRITE(RING_IMR(RENDER_RING_BASE), 0);
Line 3314... Line 3023...
3314
	I915_WRITE(GTIIR, I915_READ(GTIIR));
3023
	I915_WRITE(RING_IMR(GEN6_BSD_RING_BASE), 0);
Line 3315... Line 3024...
3315
	I915_WRITE(GTIIR, I915_READ(GTIIR));
3024
	I915_WRITE(RING_IMR(BLT_RING_BASE), 0);
3316
 
-
 
3317
	gen5_gt_irq_reset(dev);
-
 
3318
 
-
 
3319
	I915_WRITE(DPINVGTT, 0xff);
-
 
3320
 
-
 
3321
	I915_WRITE(PORT_HOTPLUG_EN, 0);
-
 
3322
	I915_WRITE(PORT_HOTPLUG_STAT, I915_READ(PORT_HOTPLUG_STAT));
-
 
3323
	for_each_pipe(pipe)
3025
 
Line 3324... Line 3026...
3324
		I915_WRITE(PIPESTAT(pipe), 0xffff);
3026
	gen5_gt_irq_reset(dev);
3325
	I915_WRITE(VLV_IIR, 0xffffffff);
3027
 
3326
	I915_WRITE(VLV_IMR, 0xffffffff);
3028
	I915_WRITE(DPINVGTT, DPINVGTT_STATUS_MASK);
Line 3344... Line 3046...
3344
	I915_WRITE(GEN8_MASTER_IRQ, 0);
3046
	I915_WRITE(GEN8_MASTER_IRQ, 0);
3345
	POSTING_READ(GEN8_MASTER_IRQ);
3047
	POSTING_READ(GEN8_MASTER_IRQ);
Line 3346... Line 3048...
3346
 
3048
 
Line 3347... Line 3049...
3347
	gen8_gt_irq_reset(dev_priv);
3049
	gen8_gt_irq_reset(dev_priv);
3348
 
3050
 
3349
	for_each_pipe(pipe)
3051
	for_each_pipe(dev_priv, pipe)
3350
		if (intel_display_power_enabled(dev_priv,
3052
		if (intel_display_power_is_enabled(dev_priv,
Line 3351... Line 3053...
3351
						POWER_DOMAIN_PIPE(pipe)))
3053
						POWER_DOMAIN_PIPE(pipe)))
3352
		GEN8_IRQ_RESET_NDX(DE_PIPE, pipe);
3054
		GEN8_IRQ_RESET_NDX(DE_PIPE, pipe);
Line 3358... Line 3060...
3358
	ibx_irq_reset(dev);
3060
	ibx_irq_reset(dev);
3359
}
3061
}
Line 3360... Line 3062...
3360
 
3062
 
3361
void gen8_irq_power_well_post_enable(struct drm_i915_private *dev_priv)
3063
void gen8_irq_power_well_post_enable(struct drm_i915_private *dev_priv)
3362
{
3064
{
Line 3363... Line 3065...
3363
	unsigned long irqflags;
3065
	uint32_t extra_ier = GEN8_PIPE_VBLANK | GEN8_PIPE_FIFO_UNDERRUN;
3364
 
3066
 
3365
	spin_lock_irqsave(&dev_priv->irq_lock, irqflags);
3067
	spin_lock_irq(&dev_priv->irq_lock);
3366
	GEN8_IRQ_INIT_NDX(DE_PIPE, PIPE_B, dev_priv->de_irq_mask[PIPE_B],
3068
	GEN8_IRQ_INIT_NDX(DE_PIPE, PIPE_B, dev_priv->de_irq_mask[PIPE_B],
3367
			  ~dev_priv->de_irq_mask[PIPE_B]);
3069
			  ~dev_priv->de_irq_mask[PIPE_B] | extra_ier);
3368
	GEN8_IRQ_INIT_NDX(DE_PIPE, PIPE_C, dev_priv->de_irq_mask[PIPE_C],
3070
	GEN8_IRQ_INIT_NDX(DE_PIPE, PIPE_C, dev_priv->de_irq_mask[PIPE_C],
3369
			  ~dev_priv->de_irq_mask[PIPE_C]);
3071
			  ~dev_priv->de_irq_mask[PIPE_C] | extra_ier);
Line 3370... Line 3072...
3370
	spin_unlock_irqrestore(&dev_priv->irq_lock, irqflags);
3072
	spin_unlock_irq(&dev_priv->irq_lock);
3371
}
3073
}
3372
 
3074
 
3373
static void cherryview_irq_preinstall(struct drm_device *dev)
-
 
Line 3374... Line 3075...
3374
{
3075
static void cherryview_irq_preinstall(struct drm_device *dev)
3375
	struct drm_i915_private *dev_priv = dev->dev_private;
3076
{
Line 3376... Line 3077...
3376
	int pipe;
3077
	struct drm_i915_private *dev_priv = dev->dev_private;
Line 3377... Line 3078...
3377
 
3078
 
Line 3378... Line -...
3378
	I915_WRITE(GEN8_MASTER_IRQ, 0);
-
 
3379
	POSTING_READ(GEN8_MASTER_IRQ);
-
 
3380
 
3079
	I915_WRITE(GEN8_MASTER_IRQ, 0);
Line 3381... Line 3080...
3381
	gen8_gt_irq_reset(dev_priv);
3080
	POSTING_READ(GEN8_MASTER_IRQ);
3382
 
-
 
3383
	GEN5_IRQ_RESET(GEN8_PCU_);
-
 
3384
 
-
 
3385
	POSTING_READ(GEN8_PCU_IIR);
-
 
3386
 
-
 
3387
	I915_WRITE(DPINVGTT, DPINVGTT_STATUS_MASK_CHV);
-
 
3388
 
-
 
3389
	I915_WRITE(PORT_HOTPLUG_EN, 0);
-
 
3390
	I915_WRITE(PORT_HOTPLUG_STAT, I915_READ(PORT_HOTPLUG_STAT));
-
 
3391
 
3081
 
Line 3392... Line 3082...
3392
	for_each_pipe(pipe)
3082
	gen8_gt_irq_reset(dev_priv);
3393
		I915_WRITE(PIPESTAT(pipe), 0xffff);
3083
 
3394
 
3084
	GEN5_IRQ_RESET(GEN8_PCU_);
3395
	I915_WRITE(VLV_IMR, 0xffffffff);
-
 
3396
	I915_WRITE(VLV_IER, 0x0);
3085
 
3397
	I915_WRITE(VLV_IIR, 0xffffffff);
3086
	I915_WRITE(DPINVGTT, DPINVGTT_STATUS_MASK_CHV);
Line 3398... Line 3087...
3398
	POSTING_READ(VLV_IIR);
3087
 
3399
}
3088
	vlv_display_irq_reset(dev_priv);
3400
 
3089
}
3401
static void ibx_hpd_irq_setup(struct drm_device *dev)
3090
 
3402
{
3091
static void ibx_hpd_irq_setup(struct drm_device *dev)
3403
	struct drm_i915_private *dev_priv = dev->dev_private;
3092
{
3404
	struct drm_mode_config *mode_config = &dev->mode_config;
3093
	struct drm_i915_private *dev_priv = dev->dev_private;
3405
	struct intel_encoder *intel_encoder;
3094
	struct intel_encoder *intel_encoder;
3406
	u32 hotplug_irqs, hotplug, enabled_irqs = 0;
3095
	u32 hotplug_irqs, hotplug, enabled_irqs = 0;
3407
 
3096
 
3408
	if (HAS_PCH_IBX(dev)) {
3097
	if (HAS_PCH_IBX(dev)) {
Line 3409... Line 3098...
3409
		hotplug_irqs = SDE_HOTPLUG_MASK;
3098
		hotplug_irqs = SDE_HOTPLUG_MASK;
Line 3473... Line 3162...
3473
	}
3162
	}
Line 3474... Line 3163...
3474
 
3163
 
Line 3475... Line 3164...
3475
	GEN5_IRQ_INIT(GT, dev_priv->gt_irq_mask, gt_irqs);
3164
	GEN5_IRQ_INIT(GT, dev_priv->gt_irq_mask, gt_irqs);
-
 
3165
 
-
 
3166
	if (INTEL_INFO(dev)->gen >= 6) {
3476
 
3167
		/*
3477
	if (INTEL_INFO(dev)->gen >= 6) {
3168
		 * RPS interrupts will get enabled/disabled on demand when RPS
3478
		pm_irqs |= dev_priv->pm_rps_events;
3169
		 * itself is enabled/disabled.
3479
 
3170
		 */
Line 3480... Line 3171...
3480
		if (HAS_VEBOX(dev))
3171
		if (HAS_VEBOX(dev))
3481
			pm_irqs |= PM_VEBOX_USER_INTERRUPT;
3172
			pm_irqs |= PM_VEBOX_USER_INTERRUPT;
3482
 
3173
 
3483
		dev_priv->pm_irq_mask = 0xffffffff;
3174
		dev_priv->pm_irq_mask = 0xffffffff;
Line 3484... Line 3175...
3484
		GEN5_IRQ_INIT(GEN6_PM, dev_priv->pm_irq_mask, pm_irqs);
3175
		GEN5_IRQ_INIT(GEN6_PM, dev_priv->pm_irq_mask, pm_irqs);
3485
    }
3176
    }
3486
}
-
 
3487
 
3177
}
3488
static int ironlake_irq_postinstall(struct drm_device *dev)
3178
 
Line 3489... Line 3179...
3489
{
3179
static int ironlake_irq_postinstall(struct drm_device *dev)
3490
	unsigned long irqflags;
3180
{
Line 3524... Line 3214...
3524
		/* Enable PCU event interrupts
3214
		/* Enable PCU event interrupts
3525
		 *
3215
		 *
3526
		 * spinlocking not required here for correctness since interrupt
3216
		 * spinlocking not required here for correctness since interrupt
3527
		 * setup is guaranteed to run in single-threaded context. But we
3217
		 * setup is guaranteed to run in single-threaded context. But we
3528
		 * need it to make the assert_spin_locked happy. */
3218
		 * need it to make the assert_spin_locked happy. */
3529
		spin_lock_irqsave(&dev_priv->irq_lock, irqflags);
3219
		spin_lock_irq(&dev_priv->irq_lock);
3530
		ironlake_enable_display_irq(dev_priv, DE_PCU_EVENT);
3220
		ironlake_enable_display_irq(dev_priv, DE_PCU_EVENT);
3531
		spin_unlock_irqrestore(&dev_priv->irq_lock, irqflags);
3221
		spin_unlock_irq(&dev_priv->irq_lock);
3532
	}
3222
	}
Line 3533... Line 3223...
3533
 
3223
 
3534
	return 0;
3224
	return 0;
Line 3535... Line 3225...
3535
}
3225
}
3536
 
3226
 
3537
static void valleyview_display_irqs_install(struct drm_i915_private *dev_priv)
3227
static void valleyview_display_irqs_install(struct drm_i915_private *dev_priv)
3538
{
3228
{
-
 
3229
	u32 pipestat_mask;
Line 3539... Line 3230...
3539
	u32 pipestat_mask;
3230
	u32 iir_mask;
3540
	u32 iir_mask;
3231
	enum pipe pipe;
Line 3541... Line 3232...
3541
 
3232
 
3542
	pipestat_mask = PIPESTAT_INT_STATUS_MASK |
3233
	pipestat_mask = PIPESTAT_INT_STATUS_MASK |
3543
			PIPE_FIFO_UNDERRUN_STATUS;
3234
			PIPE_FIFO_UNDERRUN_STATUS;
Line 3544... Line 3235...
3544
 
3235
 
3545
	I915_WRITE(PIPESTAT(PIPE_A), pipestat_mask);
3236
	for_each_pipe(dev_priv, pipe)
Line 3546... Line 3237...
3546
	I915_WRITE(PIPESTAT(PIPE_B), pipestat_mask);
3237
		I915_WRITE(PIPESTAT(pipe), pipestat_mask);
3547
	POSTING_READ(PIPESTAT(PIPE_A));
3238
	POSTING_READ(PIPESTAT(PIPE_A));
3548
 
3239
 
Line 3549... Line 3240...
3549
	pipestat_mask = PLANE_FLIP_DONE_INT_STATUS_VLV |
3240
	pipestat_mask = PLANE_FLIP_DONE_INT_STATUS_VLV |
3550
			PIPE_CRC_DONE_INTERRUPT_STATUS;
3241
			PIPE_CRC_DONE_INTERRUPT_STATUS;
3551
 
3242
 
-
 
3243
	i915_enable_pipestat(dev_priv, PIPE_A, PIPE_GMBUS_INTERRUPT_STATUS);
-
 
3244
	for_each_pipe(dev_priv, pipe)
3552
	i915_enable_pipestat(dev_priv, PIPE_A, pipestat_mask |
3245
		      i915_enable_pipestat(dev_priv, pipe, pipestat_mask);
Line 3553... Line 3246...
3553
					       PIPE_GMBUS_INTERRUPT_STATUS);
3246
 
3554
	i915_enable_pipestat(dev_priv, PIPE_B, pipestat_mask);
3247
	iir_mask = I915_DISPLAY_PORT_INTERRUPT |
3555
 
-
 
3556
	iir_mask = I915_DISPLAY_PORT_INTERRUPT |
3248
		   I915_DISPLAY_PIPE_A_EVENT_INTERRUPT |
-
 
3249
		   I915_DISPLAY_PIPE_B_EVENT_INTERRUPT;
3557
		   I915_DISPLAY_PIPE_A_EVENT_INTERRUPT |
3250
	if (IS_CHERRYVIEW(dev_priv))
3558
		   I915_DISPLAY_PIPE_B_EVENT_INTERRUPT;
3251
		iir_mask |= I915_DISPLAY_PIPE_C_EVENT_INTERRUPT;
Line 3559... Line 3252...
3559
	dev_priv->irq_mask &= ~iir_mask;
3252
	dev_priv->irq_mask &= ~iir_mask;
3560
 
3253
 
3561
	I915_WRITE(VLV_IIR, iir_mask);
3254
	I915_WRITE(VLV_IIR, iir_mask);
3562
	I915_WRITE(VLV_IIR, iir_mask);
3255
	I915_WRITE(VLV_IIR, iir_mask);
-
 
3256
	I915_WRITE(VLV_IER, ~dev_priv->irq_mask);
Line 3563... Line 3257...
3563
	I915_WRITE(VLV_IMR, dev_priv->irq_mask);
3257
	I915_WRITE(VLV_IMR, dev_priv->irq_mask);
3564
	I915_WRITE(VLV_IER, ~dev_priv->irq_mask);
3258
	POSTING_READ(VLV_IMR);
3565
	POSTING_READ(VLV_IER);
3259
}
-
 
3260
 
-
 
3261
static void valleyview_display_irqs_uninstall(struct drm_i915_private *dev_priv)
Line 3566... Line 3262...
3566
}
3262
{
3567
 
-
 
3568
static void valleyview_display_irqs_uninstall(struct drm_i915_private *dev_priv)
3263
	u32 pipestat_mask;
-
 
3264
	u32 iir_mask;
3569
{
3265
	enum pipe pipe;
3570
	u32 pipestat_mask;
3266
 
3571
	u32 iir_mask;
3267
	iir_mask = I915_DISPLAY_PORT_INTERRUPT |
Line 3572... Line 3268...
3572
 
3268
		   I915_DISPLAY_PIPE_A_EVENT_INTERRUPT |
3573
	iir_mask = I915_DISPLAY_PORT_INTERRUPT |
3269
		   I915_DISPLAY_PIPE_B_EVENT_INTERRUPT;
Line 3574... Line 3270...
3574
		   I915_DISPLAY_PIPE_A_EVENT_INTERRUPT |
3270
	if (IS_CHERRYVIEW(dev_priv))
3575
		   I915_DISPLAY_PIPE_B_EVENT_INTERRUPT;
3271
		iir_mask |= I915_DISPLAY_PIPE_C_EVENT_INTERRUPT;
3576
 
3272
 
Line 3577... Line 3273...
3577
	dev_priv->irq_mask |= iir_mask;
3273
	dev_priv->irq_mask |= iir_mask;
3578
	I915_WRITE(VLV_IER, ~dev_priv->irq_mask);
3274
	I915_WRITE(VLV_IMR, dev_priv->irq_mask);
-
 
3275
	I915_WRITE(VLV_IER, ~dev_priv->irq_mask);
3579
	I915_WRITE(VLV_IMR, dev_priv->irq_mask);
3276
	I915_WRITE(VLV_IIR, iir_mask);
3580
	I915_WRITE(VLV_IIR, iir_mask);
3277
	I915_WRITE(VLV_IIR, iir_mask);
3581
	I915_WRITE(VLV_IIR, iir_mask);
3278
	POSTING_READ(VLV_IIR);
3582
	POSTING_READ(VLV_IIR);
3279
 
Line 3583... Line 3280...
3583
 
3280
	pipestat_mask = PLANE_FLIP_DONE_INT_STATUS_VLV |
3584
	pipestat_mask = PLANE_FLIP_DONE_INT_STATUS_VLV |
3281
			PIPE_CRC_DONE_INTERRUPT_STATUS;
Line 3602... Line 3299...
3602
	if (dev_priv->display_irqs_enabled)
3299
	if (dev_priv->display_irqs_enabled)
3603
		return;
3300
		return;
Line 3604... Line 3301...
3604
 
3301
 
Line 3605... Line 3302...
3605
	dev_priv->display_irqs_enabled = true;
3302
	dev_priv->display_irqs_enabled = true;
3606
 
3303
 
3607
	if (dev_priv->dev->irq_enabled)
3304
	if (intel_irqs_enabled(dev_priv))
Line 3608... Line 3305...
3608
		valleyview_display_irqs_install(dev_priv);
3305
		valleyview_display_irqs_install(dev_priv);
3609
}
3306
}
Line 3615... Line 3312...
3615
	if (!dev_priv->display_irqs_enabled)
3312
	if (!dev_priv->display_irqs_enabled)
3616
		return;
3313
		return;
Line 3617... Line 3314...
3617
 
3314
 
Line 3618... Line 3315...
3618
	dev_priv->display_irqs_enabled = false;
3315
	dev_priv->display_irqs_enabled = false;
3619
 
3316
 
3620
	if (dev_priv->dev->irq_enabled)
3317
	if (intel_irqs_enabled(dev_priv))
Line 3621... Line 3318...
3621
		valleyview_display_irqs_uninstall(dev_priv);
3318
		valleyview_display_irqs_uninstall(dev_priv);
3622
}
3319
}
3623
 
-
 
3624
static int valleyview_irq_postinstall(struct drm_device *dev)
-
 
3625
{
-
 
3626
	struct drm_i915_private *dev_priv = dev->dev_private;
3320
 
Line 3627... Line 3321...
3627
	unsigned long irqflags;
3321
static void vlv_display_irq_postinstall(struct drm_i915_private *dev_priv)
3628
 
3322
{
Line 3629... Line -...
3629
	dev_priv->irq_mask = ~0;
-
 
3630
 
-
 
3631
	I915_WRITE(PORT_HOTPLUG_EN, 0);
3323
	dev_priv->irq_mask = ~0;
-
 
3324
 
-
 
3325
	I915_WRITE(PORT_HOTPLUG_EN, 0);
-
 
3326
	POSTING_READ(PORT_HOTPLUG_EN);
3632
	POSTING_READ(PORT_HOTPLUG_EN);
3327
 
Line 3633... Line 3328...
3633
 
3328
	I915_WRITE(VLV_IIR, 0xffffffff);
3634
	I915_WRITE(VLV_IMR, dev_priv->irq_mask);
3329
	I915_WRITE(VLV_IIR, 0xffffffff);
3635
	I915_WRITE(VLV_IER, ~dev_priv->irq_mask);
3330
	I915_WRITE(VLV_IER, ~dev_priv->irq_mask);
3636
	I915_WRITE(VLV_IIR, 0xffffffff);
3331
	I915_WRITE(VLV_IMR, dev_priv->irq_mask);
3637
	POSTING_READ(VLV_IER);
3332
	POSTING_READ(VLV_IMR);
3638
 
3333
 
-
 
3334
	/* Interrupt setup is already guaranteed to be single-threaded, this is
Line -... Line 3335...
-
 
3335
	 * just to make the assert_spin_locked check happy. */
-
 
3336
	spin_lock_irq(&dev_priv->irq_lock);
3639
	/* Interrupt setup is already guaranteed to be single-threaded, this is
3337
	if (dev_priv->display_irqs_enabled)
-
 
3338
		valleyview_display_irqs_install(dev_priv);
3640
	 * just to make the assert_spin_locked check happy. */
3339
	spin_unlock_irq(&dev_priv->irq_lock);
Line 3641... Line 3340...
3641
	spin_lock_irqsave(&dev_priv->irq_lock, irqflags);
3340
}
Line 3642... Line 3341...
3642
	if (dev_priv->display_irqs_enabled)
3341
 
3643
		valleyview_display_irqs_install(dev_priv);
3342
static int valleyview_irq_postinstall(struct drm_device *dev)
Line 3659... Line 3358...
3659
	return 0;
3358
	return 0;
3660
}
3359
}
Line 3661... Line 3360...
3661
 
3360
 
3662
static void gen8_gt_irq_postinstall(struct drm_i915_private *dev_priv)
3361
static void gen8_gt_irq_postinstall(struct drm_i915_private *dev_priv)
3663
{
-
 
3664
	int i;
-
 
3665
 
3362
{
3666
	/* These are interrupts we'll toggle with the ring mask register */
3363
	/* These are interrupts we'll toggle with the ring mask register */
3667
	uint32_t gt_interrupts[] = {
3364
	uint32_t gt_interrupts[] = {
-
 
3365
		GT_RENDER_USER_INTERRUPT << GEN8_RCS_IRQ_SHIFT |
3668
		GT_RENDER_USER_INTERRUPT << GEN8_RCS_IRQ_SHIFT |
3366
			GT_CONTEXT_SWITCH_INTERRUPT << GEN8_RCS_IRQ_SHIFT |
3669
			GT_RENDER_L3_PARITY_ERROR_INTERRUPT |
3367
			GT_RENDER_L3_PARITY_ERROR_INTERRUPT |
-
 
3368
			GT_RENDER_USER_INTERRUPT << GEN8_BCS_IRQ_SHIFT |
3670
			GT_RENDER_USER_INTERRUPT << GEN8_BCS_IRQ_SHIFT,
3369
			GT_CONTEXT_SWITCH_INTERRUPT << GEN8_BCS_IRQ_SHIFT,
-
 
3370
		GT_RENDER_USER_INTERRUPT << GEN8_VCS1_IRQ_SHIFT |
3671
		GT_RENDER_USER_INTERRUPT << GEN8_VCS1_IRQ_SHIFT |
3371
			GT_CONTEXT_SWITCH_INTERRUPT << GEN8_VCS1_IRQ_SHIFT |
-
 
3372
			GT_RENDER_USER_INTERRUPT << GEN8_VCS2_IRQ_SHIFT |
3672
			GT_RENDER_USER_INTERRUPT << GEN8_VCS2_IRQ_SHIFT,
3373
			GT_CONTEXT_SWITCH_INTERRUPT << GEN8_VCS2_IRQ_SHIFT,
3673
		0,
3374
		0,
-
 
3375
		GT_RENDER_USER_INTERRUPT << GEN8_VECS_IRQ_SHIFT |
3674
		GT_RENDER_USER_INTERRUPT << GEN8_VECS_IRQ_SHIFT
3376
			GT_CONTEXT_SWITCH_INTERRUPT << GEN8_VECS_IRQ_SHIFT
Line 3675... Line -...
3675
		};
-
 
3676
 
-
 
3677
	for (i = 0; i < ARRAY_SIZE(gt_interrupts); i++)
-
 
3678
		GEN8_IRQ_INIT_NDX(GT, i, ~gt_interrupts[i], gt_interrupts[i]);
3377
		};
-
 
3378
 
-
 
3379
	dev_priv->pm_irq_mask = 0xffffffff;
-
 
3380
	GEN8_IRQ_INIT_NDX(GT, 0, ~gt_interrupts[0], gt_interrupts[0]);
-
 
3381
	GEN8_IRQ_INIT_NDX(GT, 1, ~gt_interrupts[1], gt_interrupts[1]);
-
 
3382
	/*
-
 
3383
	 * RPS interrupts will get enabled/disabled on demand when RPS itself
-
 
3384
	 * is enabled/disabled.
-
 
3385
	 */
3679
 
3386
	GEN8_IRQ_INIT_NDX(GT, 2, dev_priv->pm_irq_mask, 0);
Line 3680... Line 3387...
3680
	dev_priv->pm_irq_mask = 0xffffffff;
3387
	GEN8_IRQ_INIT_NDX(GT, 3, ~gt_interrupts[3], gt_interrupts[3]);
3681
}
3388
}
-
 
3389
 
-
 
3390
static void gen8_de_irq_postinstall(struct drm_i915_private *dev_priv)
-
 
3391
{
3682
 
3392
	uint32_t de_pipe_masked = GEN8_PIPE_CDCLK_CRC_DONE;
-
 
3393
	uint32_t de_pipe_enables;
-
 
3394
	int pipe;
3683
static void gen8_de_irq_postinstall(struct drm_i915_private *dev_priv)
3395
	u32 aux_en = GEN8_AUX_CHANNEL_A;
-
 
3396
 
-
 
3397
	if (IS_GEN9(dev_priv)) {
3684
{
3398
		de_pipe_masked |= GEN9_PIPE_PLANE1_FLIP_DONE |
-
 
3399
				  GEN9_DE_PIPE_IRQ_FAULT_ERRORS;
-
 
3400
		aux_en |= GEN9_AUX_CHANNEL_B | GEN9_AUX_CHANNEL_C |
3685
	struct drm_device *dev = dev_priv->dev;
3401
			GEN9_AUX_CHANNEL_D;
-
 
3402
	} else
3686
	uint32_t de_pipe_masked = GEN8_PIPE_PRIMARY_FLIP_DONE |
3403
		de_pipe_masked |= GEN8_PIPE_PRIMARY_FLIP_DONE |
3687
		GEN8_PIPE_CDCLK_CRC_DONE |
3404
		GEN8_DE_PIPE_IRQ_FAULT_ERRORS;
3688
		GEN8_DE_PIPE_IRQ_FAULT_ERRORS;
3405
 
3689
	uint32_t de_pipe_enables = de_pipe_masked | GEN8_PIPE_VBLANK |
3406
	de_pipe_enables = de_pipe_masked | GEN8_PIPE_VBLANK |
3690
		GEN8_PIPE_FIFO_UNDERRUN;
3407
		GEN8_PIPE_FIFO_UNDERRUN;
3691
	int pipe;
3408
 
Line 3692... Line 3409...
3692
	dev_priv->de_irq_mask[PIPE_A] = ~de_pipe_masked;
3409
	dev_priv->de_irq_mask[PIPE_A] = ~de_pipe_masked;
3693
	dev_priv->de_irq_mask[PIPE_B] = ~de_pipe_masked;
3410
	dev_priv->de_irq_mask[PIPE_B] = ~de_pipe_masked;
3694
	dev_priv->de_irq_mask[PIPE_C] = ~de_pipe_masked;
3411
	dev_priv->de_irq_mask[PIPE_C] = ~de_pipe_masked;
3695
 
3412
 
3696
	for_each_pipe(pipe)
3413
	for_each_pipe(dev_priv, pipe)
3697
		if (intel_display_power_enabled(dev_priv,
3414
		if (intel_display_power_is_enabled(dev_priv,
Line 3698... Line 3415...
3698
				POWER_DOMAIN_PIPE(pipe)))
3415
				POWER_DOMAIN_PIPE(pipe)))
3699
			GEN8_IRQ_INIT_NDX(DE_PIPE, pipe,
3416
			GEN8_IRQ_INIT_NDX(DE_PIPE, pipe,
Line 3700... Line 3417...
3700
					  dev_priv->de_irq_mask[pipe],
3417
					  dev_priv->de_irq_mask[pipe],
3701
				  de_pipe_enables);
3418
				  de_pipe_enables);
3702
 
3419
 
Line 3721... Line 3438...
3721
}
3438
}
Line 3722... Line 3439...
3722
 
3439
 
3723
static int cherryview_irq_postinstall(struct drm_device *dev)
3440
static int cherryview_irq_postinstall(struct drm_device *dev)
3724
{
3441
{
3725
	struct drm_i915_private *dev_priv = dev->dev_private;
-
 
3726
	u32 enable_mask = I915_DISPLAY_PORT_INTERRUPT |
-
 
3727
		I915_DISPLAY_PIPE_A_EVENT_INTERRUPT |
-
 
3728
		I915_DISPLAY_PIPE_B_EVENT_INTERRUPT |
-
 
3729
		I915_DISPLAY_PIPE_C_EVENT_INTERRUPT;
-
 
3730
	u32 pipestat_enable = PLANE_FLIP_DONE_INT_STATUS_VLV |
-
 
3731
		PIPE_CRC_DONE_INTERRUPT_STATUS;
-
 
3732
	unsigned long irqflags;
-
 
3733
	int pipe;
-
 
3734
 
-
 
3735
	/*
-
 
3736
	 * Leave vblank interrupts masked initially.  enable/disable will
-
 
3737
	 * toggle them based on usage.
-
 
3738
	 */
-
 
Line 3739... Line -...
3739
	dev_priv->irq_mask = ~enable_mask;
-
 
3740
 
-
 
3741
	for_each_pipe(pipe)
-
 
3742
		I915_WRITE(PIPESTAT(pipe), 0xffff);
-
 
3743
 
-
 
3744
	spin_lock_irqsave(&dev_priv->irq_lock, irqflags);
-
 
3745
	i915_enable_pipestat(dev_priv, PIPE_A, PIPE_GMBUS_INTERRUPT_STATUS);
-
 
3746
	for_each_pipe(pipe)
-
 
3747
		i915_enable_pipestat(dev_priv, pipe, pipestat_enable);
-
 
3748
	spin_unlock_irqrestore(&dev_priv->irq_lock, irqflags);
-
 
3749
 
-
 
3750
	I915_WRITE(VLV_IIR, 0xffffffff);
3442
	struct drm_i915_private *dev_priv = dev->dev_private;
Line 3751... Line 3443...
3751
	I915_WRITE(VLV_IMR, dev_priv->irq_mask);
3443
 
Line 3752... Line 3444...
3752
	I915_WRITE(VLV_IER, enable_mask);
3444
	vlv_display_irq_postinstall(dev_priv);
3753
 
3445
 
Line 3767... Line 3459...
3767
		return;
3459
		return;
Line 3768... Line 3460...
3768
 
3460
 
3769
	gen8_irq_reset(dev);
3461
	gen8_irq_reset(dev);
Line -... Line 3462...
-
 
3462
}
-
 
3463
 
-
 
3464
static void vlv_display_irq_uninstall(struct drm_i915_private *dev_priv)
-
 
3465
{
-
 
3466
	/* Interrupt setup is already guaranteed to be single-threaded, this is
-
 
3467
	 * just to make the assert_spin_locked check happy. */
-
 
3468
	spin_lock_irq(&dev_priv->irq_lock);
-
 
3469
	if (dev_priv->display_irqs_enabled)
-
 
3470
		valleyview_display_irqs_uninstall(dev_priv);
-
 
3471
	spin_unlock_irq(&dev_priv->irq_lock);
-
 
3472
 
-
 
3473
	vlv_display_irq_reset(dev_priv);
-
 
3474
 
-
 
3475
	dev_priv->irq_mask = ~0;
3770
}
3476
}
3771
 
3477
 
3772
static void valleyview_irq_uninstall(struct drm_device *dev)
3478
static void valleyview_irq_uninstall(struct drm_device *dev)
3773
{
-
 
3774
	struct drm_i915_private *dev_priv = dev->dev_private;
-
 
Line 3775... Line 3479...
3775
	unsigned long irqflags;
3479
{
3776
	int pipe;
3480
	struct drm_i915_private *dev_priv = dev->dev_private;
Line 3777... Line 3481...
3777
 
3481
 
Line 3778... Line 3482...
3778
	if (!dev_priv)
3482
	if (!dev_priv)
3779
		return;
-
 
Line 3780... Line 3483...
3780
 
3483
		return;
3781
	I915_WRITE(VLV_MASTER_IER, 0);
-
 
3782
 
-
 
Line 3783... Line -...
3783
	for_each_pipe(pipe)
-
 
3784
		I915_WRITE(PIPESTAT(pipe), 0xffff);
-
 
3785
 
3484
 
3786
	I915_WRITE(HWSTAM, 0xffffffff);
-
 
3787
	I915_WRITE(PORT_HOTPLUG_EN, 0);
-
 
3788
	I915_WRITE(PORT_HOTPLUG_STAT, I915_READ(PORT_HOTPLUG_STAT));
-
 
3789
 
-
 
3790
	spin_lock_irqsave(&dev_priv->irq_lock, irqflags);
-
 
3791
	if (dev_priv->display_irqs_enabled)
-
 
3792
		valleyview_display_irqs_uninstall(dev_priv);
-
 
3793
	spin_unlock_irqrestore(&dev_priv->irq_lock, irqflags);
-
 
3794
 
3485
	I915_WRITE(VLV_MASTER_IER, 0);
Line 3795... Line 3486...
3795
	dev_priv->irq_mask = 0;
3486
 
3796
 
3487
	gen5_gt_irq_reset(dev);
3797
	I915_WRITE(VLV_IIR, 0xffffffff);
3488
 
3798
	I915_WRITE(VLV_IMR, 0xffffffff);
-
 
Line 3799... Line 3489...
3799
	I915_WRITE(VLV_IER, 0x0);
3489
	I915_WRITE(HWSTAM, 0xffffffff);
3800
	POSTING_READ(VLV_IER);
3490
 
Line 3801... Line 3491...
3801
}
3491
	vlv_display_irq_uninstall(dev_priv);
3802
 
3492
}
Line 3803... Line -...
3803
static void cherryview_irq_uninstall(struct drm_device *dev)
-
 
3804
{
-
 
3805
	struct drm_i915_private *dev_priv = dev->dev_private;
-
 
3806
	int pipe;
-
 
3807
 
-
 
3808
	if (!dev_priv)
-
 
3809
		return;
-
 
3810
 
-
 
3811
	I915_WRITE(GEN8_MASTER_IRQ, 0);
-
 
3812
	POSTING_READ(GEN8_MASTER_IRQ);
-
 
3813
 
-
 
3814
#define GEN8_IRQ_FINI_NDX(type, which)				\
-
 
3815
do {								\
-
 
3816
	I915_WRITE(GEN8_##type##_IMR(which), 0xffffffff);	\
-
 
3817
	I915_WRITE(GEN8_##type##_IER(which), 0);		\
-
 
3818
	I915_WRITE(GEN8_##type##_IIR(which), 0xffffffff);	\
-
 
3819
	POSTING_READ(GEN8_##type##_IIR(which));			\
-
 
3820
	I915_WRITE(GEN8_##type##_IIR(which), 0xffffffff);	\
-
 
3821
} while (0)
-
 
3822
 
-
 
3823
#define GEN8_IRQ_FINI(type)				\
3493
 
3824
do {							\
-
 
3825
	I915_WRITE(GEN8_##type##_IMR, 0xffffffff);	\
-
 
3826
	I915_WRITE(GEN8_##type##_IER, 0);		\
-
 
3827
	I915_WRITE(GEN8_##type##_IIR, 0xffffffff);	\
-
 
3828
	POSTING_READ(GEN8_##type##_IIR);		\
-
 
3829
	I915_WRITE(GEN8_##type##_IIR, 0xffffffff);	\
-
 
3830
} while (0)
-
 
3831
 
-
 
3832
	GEN8_IRQ_FINI_NDX(GT, 0);
-
 
Line 3833... Line -...
3833
	GEN8_IRQ_FINI_NDX(GT, 1);
-
 
3834
	GEN8_IRQ_FINI_NDX(GT, 2);
3494
static void cherryview_irq_uninstall(struct drm_device *dev)
Line 3835... Line -...
3835
	GEN8_IRQ_FINI_NDX(GT, 3);
-
 
3836
 
-
 
3837
	GEN8_IRQ_FINI(PCU);
3495
{
3838
 
-
 
3839
#undef GEN8_IRQ_FINI
3496
	struct drm_i915_private *dev_priv = dev->dev_private;
Line 3840... Line 3497...
3840
#undef GEN8_IRQ_FINI_NDX
3497
 
3841
 
3498
	if (!dev_priv)
3842
	I915_WRITE(PORT_HOTPLUG_EN, 0);
3499
		return;
Line 3860... Line 3517...
3860
 
3517
 
3861
	ironlake_irq_reset(dev);
3518
	ironlake_irq_reset(dev);
Line 3862... Line 3519...
3862
}
3519
}
3863
 
-
 
3864
#if 0
3520
 
3865
 
3521
#if 0
3866
static void i8xx_irq_preinstall(struct drm_device * dev)
3522
static void i8xx_irq_preinstall(struct drm_device * dev)
3867
{
3523
{
Line 3868... Line 3524...
3868
	struct drm_i915_private *dev_priv = dev->dev_private;
3524
	struct drm_i915_private *dev_priv = dev->dev_private;
3869
	int pipe;
3525
	int pipe;
3870
 
3526
 
3871
	for_each_pipe(pipe)
3527
	for_each_pipe(dev_priv, pipe)
3872
		I915_WRITE(PIPESTAT(pipe), 0);
3528
		I915_WRITE(PIPESTAT(pipe), 0);
3873
	I915_WRITE16(IMR, 0xffff);
3529
	I915_WRITE16(IMR, 0xffff);
Line 3874... Line 3530...
3874
	I915_WRITE16(IER, 0x0);
3530
	I915_WRITE16(IER, 0x0);
3875
	POSTING_READ16(IER);
3531
	POSTING_READ16(IER);
3876
}
3532
}
3877
 
-
 
Line 3878... Line 3533...
3878
static int i8xx_irq_postinstall(struct drm_device *dev)
3533
 
3879
{
3534
static int i8xx_irq_postinstall(struct drm_device *dev)
Line 3880... Line 3535...
3880
	struct drm_i915_private *dev_priv = dev->dev_private;
3535
{
Line 3899... Line 3554...
3899
		     I915_USER_INTERRUPT);
3554
		     I915_USER_INTERRUPT);
3900
	POSTING_READ16(IER);
3555
	POSTING_READ16(IER);
Line 3901... Line 3556...
3901
 
3556
 
3902
	/* Interrupt setup is already guaranteed to be single-threaded, this is
3557
	/* Interrupt setup is already guaranteed to be single-threaded, this is
3903
	 * just to make the assert_spin_locked check happy. */
3558
	 * just to make the assert_spin_locked check happy. */
3904
	spin_lock_irqsave(&dev_priv->irq_lock, irqflags);
3559
	spin_lock_irq(&dev_priv->irq_lock);
3905
	i915_enable_pipestat(dev_priv, PIPE_A, PIPE_CRC_DONE_INTERRUPT_STATUS);
3560
	i915_enable_pipestat(dev_priv, PIPE_A, PIPE_CRC_DONE_INTERRUPT_STATUS);
3906
	i915_enable_pipestat(dev_priv, PIPE_B, PIPE_CRC_DONE_INTERRUPT_STATUS);
3561
	i915_enable_pipestat(dev_priv, PIPE_B, PIPE_CRC_DONE_INTERRUPT_STATUS);
Line 3907... Line 3562...
3907
	spin_unlock_irqrestore(&dev_priv->irq_lock, irqflags);
3562
	spin_unlock_irq(&dev_priv->irq_lock);
3908
 
3563
 
Line 3909... Line 3564...
3909
	return 0;
3564
	return 0;
Line 3920... Line 3575...
3920
 
3575
 
3921
//   if (!drm_handle_vblank(dev, pipe))
3576
//   if (!drm_handle_vblank(dev, pipe))
Line 3922... Line 3577...
3922
       return false;
3577
       return false;
3923
 
3578
 
Line 3924... Line 3579...
3924
	if ((iir & flip_pending) == 0)
3579
	if ((iir & flip_pending) == 0)
Line 3925... Line 3580...
3925
		return false;
3580
		goto check_page_flip;
3926
 
3581
 
3927
//   intel_prepare_page_flip(dev, pipe);
3582
//   intel_prepare_page_flip(dev, pipe);
3928
 
3583
 
3929
	/* We detect FlipDone by looking for the change in PendingFlip from '1'
3584
	/* We detect FlipDone by looking for the change in PendingFlip from '1'
3930
	 * to '0' on the following vblank, i.e. IIR has the Pendingflip
3585
	 * to '0' on the following vblank, i.e. IIR has the Pendingflip
3931
	 * asserted following the MI_DISPLAY_FLIP, but ISR is deasserted, hence
3586
	 * asserted following the MI_DISPLAY_FLIP, but ISR is deasserted, hence
3932
	 * the flip is completed (no longer pending). Since this doesn't raise
3587
	 * the flip is completed (no longer pending). Since this doesn't raise
Line 3933... Line 3588...
3933
	 * an interrupt per se, we watch for the change at vblank.
3588
	 * an interrupt per se, we watch for the change at vblank.
3934
	 */
-
 
3935
	if (I915_READ16(ISR) & flip_pending)
3589
	 */
-
 
3590
	if (I915_READ16(ISR) & flip_pending)
-
 
3591
		goto check_page_flip;
-
 
3592
 
-
 
3593
	intel_finish_page_flip(dev, pipe);
3936
		return false;
3594
	return true;
Line 3937... Line 3595...
3937
 
3595
 
3938
	intel_finish_page_flip(dev, pipe);
3596
check_page_flip:
3939
 
3597
//	intel_check_page_flip(dev, pipe);
3940
	return true;
3598
	return false;
3941
}
3599
}
3942
 
3600
 
3943
static irqreturn_t i8xx_irq_handler(int irq, void *arg)
-
 
3944
{
3601
static irqreturn_t i8xx_irq_handler(int irq, void *arg)
3945
	struct drm_device *dev = arg;
3602
{
3946
	struct drm_i915_private *dev_priv = dev->dev_private;
3603
	struct drm_device *dev = arg;
3947
	u16 iir, new_iir;
3604
	struct drm_i915_private *dev_priv = dev->dev_private;
Line 3960... Line 3617...
3960
		/* Can't rely on pipestat interrupt bit in iir as it might
3617
		/* Can't rely on pipestat interrupt bit in iir as it might
3961
		 * have been cleared after the pipestat interrupt was received.
3618
		 * have been cleared after the pipestat interrupt was received.
3962
		 * It doesn't set the bit in iir again, but it still produces
3619
		 * It doesn't set the bit in iir again, but it still produces
3963
		 * interrupts (for non-MSI).
3620
		 * interrupts (for non-MSI).
3964
		 */
3621
		 */
3965
		spin_lock_irqsave(&dev_priv->irq_lock, irqflags);
3622
		spin_lock(&dev_priv->irq_lock);
3966
		if (iir & I915_RENDER_COMMAND_PARSER_ERROR_INTERRUPT)
3623
		if (iir & I915_RENDER_COMMAND_PARSER_ERROR_INTERRUPT)
3967
			i915_handle_error(dev, false,
-
 
3968
					  "Command parser error, iir 0x%08x",
3624
			DRM_DEBUG("Command parser error, iir 0x%08x\n", iir);
3969
					  iir);
-
 
Line 3970... Line 3625...
3970
 
3625
 
3971
		for_each_pipe(pipe) {
3626
		for_each_pipe(dev_priv, pipe) {
3972
			int reg = PIPESTAT(pipe);
3627
			int reg = PIPESTAT(pipe);
Line 3973... Line 3628...
3973
			pipe_stats[pipe] = I915_READ(reg);
3628
			pipe_stats[pipe] = I915_READ(reg);
3974
 
3629
 
3975
			/*
3630
			/*
3976
			 * Clear the PIPE*STAT regs before the IIR
3631
			 * Clear the PIPE*STAT regs before the IIR
3977
			 */
3632
			 */
3978
			if (pipe_stats[pipe] & 0x8000ffff)
3633
			if (pipe_stats[pipe] & 0x8000ffff)
3979
				I915_WRITE(reg, pipe_stats[pipe]);
3634
				I915_WRITE(reg, pipe_stats[pipe]);
Line 3980... Line 3635...
3980
			}
3635
			}
3981
		spin_unlock_irqrestore(&dev_priv->irq_lock, irqflags);
3636
		spin_unlock(&dev_priv->irq_lock);
Line 3982... Line -...
3982
 
-
 
3983
		I915_WRITE16(IIR, iir & ~flip_mask);
-
 
3984
		new_iir = I915_READ16(IIR); /* Flush posted writes */
3637
 
3985
 
3638
		I915_WRITE16(IIR, iir & ~flip_mask);
Line 3986... Line 3639...
3986
		i915_update_dri1_breadcrumb(dev);
3639
		new_iir = I915_READ16(IIR); /* Flush posted writes */
3987
 
3640
 
3988
		if (iir & I915_USER_INTERRUPT)
3641
		if (iir & I915_USER_INTERRUPT)
3989
			notify_ring(dev, &dev_priv->ring[RCS]);
3642
			notify_ring(dev, &dev_priv->ring[RCS]);
Line 3990... Line 3643...
3990
 
3643
 
Line 3998... Line 3651...
3998
				flip_mask &= ~DISPLAY_PLANE_FLIP_PENDING(plane);
3651
				flip_mask &= ~DISPLAY_PLANE_FLIP_PENDING(plane);
Line 3999... Line 3652...
3999
 
3652
 
4000
			if (pipe_stats[pipe] & PIPE_CRC_DONE_INTERRUPT_STATUS)
3653
			if (pipe_stats[pipe] & PIPE_CRC_DONE_INTERRUPT_STATUS)
Line 4001... Line 3654...
4001
				i9xx_pipe_crc_irq_handler(dev, pipe);
3654
				i9xx_pipe_crc_irq_handler(dev, pipe);
4002
 
3655
 
4003
			if (pipe_stats[pipe] & PIPE_FIFO_UNDERRUN_STATUS &&
3656
			if (pipe_stats[pipe] & PIPE_FIFO_UNDERRUN_STATUS)
4004
			    intel_set_cpu_fifo_underrun_reporting(dev, pipe, false))
3657
				intel_cpu_fifo_underrun_irq_handler(dev_priv,
Line 4005... Line 3658...
4005
				DRM_ERROR("pipe %c underrun\n", pipe_name(pipe));
3658
								    pipe);
4006
		}
3659
		}
Line 4014... Line 3667...
4014
static void i8xx_irq_uninstall(struct drm_device * dev)
3667
static void i8xx_irq_uninstall(struct drm_device * dev)
4015
{
3668
{
4016
	struct drm_i915_private *dev_priv = dev->dev_private;
3669
	struct drm_i915_private *dev_priv = dev->dev_private;
4017
	int pipe;
3670
	int pipe;
Line 4018... Line 3671...
4018
 
3671
 
4019
	for_each_pipe(pipe) {
3672
	for_each_pipe(dev_priv, pipe) {
4020
		/* Clear enable bits; then clear status bits */
3673
		/* Clear enable bits; then clear status bits */
4021
		I915_WRITE(PIPESTAT(pipe), 0);
3674
		I915_WRITE(PIPESTAT(pipe), 0);
4022
		I915_WRITE(PIPESTAT(pipe), I915_READ(PIPESTAT(pipe)));
3675
		I915_WRITE(PIPESTAT(pipe), I915_READ(PIPESTAT(pipe)));
4023
	}
3676
	}
Line 4037... Line 3690...
4037
		I915_WRITE(PORT_HOTPLUG_EN, 0);
3690
		I915_WRITE(PORT_HOTPLUG_EN, 0);
4038
		I915_WRITE(PORT_HOTPLUG_STAT, I915_READ(PORT_HOTPLUG_STAT));
3691
		I915_WRITE(PORT_HOTPLUG_STAT, I915_READ(PORT_HOTPLUG_STAT));
4039
	}
3692
	}
Line 4040... Line 3693...
4040
 
3693
 
4041
	I915_WRITE16(HWSTAM, 0xeffe);
3694
	I915_WRITE16(HWSTAM, 0xeffe);
4042
	for_each_pipe(pipe)
3695
	for_each_pipe(dev_priv, pipe)
4043
		I915_WRITE(PIPESTAT(pipe), 0);
3696
		I915_WRITE(PIPESTAT(pipe), 0);
4044
	I915_WRITE(IMR, 0xffffffff);
3697
	I915_WRITE(IMR, 0xffffffff);
4045
	I915_WRITE(IER, 0x0);
3698
	I915_WRITE(IER, 0x0);
4046
	POSTING_READ(IER);
3699
	POSTING_READ(IER);
Line 4047... Line 3700...
4047
}
3700
}
4048
 
3701
 
4049
static int i915_irq_postinstall(struct drm_device *dev)
3702
static int i915_irq_postinstall(struct drm_device *dev)
4050
{
3703
{
4051
	struct drm_i915_private *dev_priv = dev->dev_private;
-
 
Line 4052... Line 3704...
4052
	u32 enable_mask;
3704
	struct drm_i915_private *dev_priv = dev->dev_private;
Line 4053... Line 3705...
4053
	unsigned long irqflags;
3705
	u32 enable_mask;
4054
 
3706
 
Line 4086... Line 3738...
4086
 
3738
 
Line 4087... Line 3739...
4087
	i915_enable_asle_pipestat(dev);
3739
	i915_enable_asle_pipestat(dev);
4088
 
3740
 
4089
	/* Interrupt setup is already guaranteed to be single-threaded, this is
3741
	/* Interrupt setup is already guaranteed to be single-threaded, this is
4090
	 * just to make the assert_spin_locked check happy. */
3742
	 * just to make the assert_spin_locked check happy. */
4091
	spin_lock_irqsave(&dev_priv->irq_lock, irqflags);
3743
	spin_lock_irq(&dev_priv->irq_lock);
4092
	i915_enable_pipestat(dev_priv, PIPE_A, PIPE_CRC_DONE_INTERRUPT_STATUS);
3744
	i915_enable_pipestat(dev_priv, PIPE_A, PIPE_CRC_DONE_INTERRUPT_STATUS);
Line 4093... Line 3745...
4093
	i915_enable_pipestat(dev_priv, PIPE_B, PIPE_CRC_DONE_INTERRUPT_STATUS);
3745
	i915_enable_pipestat(dev_priv, PIPE_B, PIPE_CRC_DONE_INTERRUPT_STATUS);
4094
	spin_unlock_irqrestore(&dev_priv->irq_lock, irqflags);
3746
	spin_unlock_irq(&dev_priv->irq_lock);
Line 4095... Line 3747...
4095
 
3747
 
Line 4107... Line 3759...
4107
 
3759
 
4108
//   if (!drm_handle_vblank(dev, pipe))
3760
//   if (!drm_handle_vblank(dev, pipe))
Line 4109... Line 3761...
4109
		return false;
3761
		return false;
4110
 
3762
 
Line 4111... Line 3763...
4111
	if ((iir & flip_pending) == 0)
3763
	if ((iir & flip_pending) == 0)
Line 4112... Line 3764...
4112
		return false;
3764
		goto check_page_flip;
4113
 
3765
 
4114
//   intel_prepare_page_flip(dev, plane);
3766
//   intel_prepare_page_flip(dev, plane);
4115
 
3767
 
4116
	/* We detect FlipDone by looking for the change in PendingFlip from '1'
3768
	/* We detect FlipDone by looking for the change in PendingFlip from '1'
4117
	 * to '0' on the following vblank, i.e. IIR has the Pendingflip
3769
	 * to '0' on the following vblank, i.e. IIR has the Pendingflip
4118
	 * asserted following the MI_DISPLAY_FLIP, but ISR is deasserted, hence
3770
	 * asserted following the MI_DISPLAY_FLIP, but ISR is deasserted, hence
4119
	 * the flip is completed (no longer pending). Since this doesn't raise
3771
	 * the flip is completed (no longer pending). Since this doesn't raise
Line 4120... Line 3772...
4120
	 * an interrupt per se, we watch for the change at vblank.
3772
	 * an interrupt per se, we watch for the change at vblank.
4121
	 */
-
 
4122
	if (I915_READ(ISR) & flip_pending)
3773
	 */
-
 
3774
	if (I915_READ(ISR) & flip_pending)
-
 
3775
		goto check_page_flip;
-
 
3776
 
-
 
3777
	intel_finish_page_flip(dev, pipe);
4123
		return false;
3778
	return true;
Line 4124... Line 3779...
4124
 
3779
 
4125
	intel_finish_page_flip(dev, pipe);
3780
check_page_flip:
4126
 
3781
//	intel_check_page_flip(dev, pipe);
4127
	return true;
3782
	return false;
4128
}
3783
}
4129
 
-
 
4130
static irqreturn_t i915_irq_handler(int irq, void *arg)
3784
 
4131
{
3785
static irqreturn_t i915_irq_handler(int irq, void *arg)
4132
	struct drm_device *dev = arg;
3786
{
4133
	struct drm_i915_private *dev_priv = dev->dev_private;
3787
	struct drm_device *dev = arg;
Line 4146... Line 3800...
4146
		/* Can't rely on pipestat interrupt bit in iir as it might
3800
		/* Can't rely on pipestat interrupt bit in iir as it might
4147
		 * have been cleared after the pipestat interrupt was received.
3801
		 * have been cleared after the pipestat interrupt was received.
4148
		 * It doesn't set the bit in iir again, but it still produces
3802
		 * It doesn't set the bit in iir again, but it still produces
4149
		 * interrupts (for non-MSI).
3803
		 * interrupts (for non-MSI).
4150
		 */
3804
		 */
4151
		spin_lock_irqsave(&dev_priv->irq_lock, irqflags);
3805
		spin_lock(&dev_priv->irq_lock);
4152
		if (iir & I915_RENDER_COMMAND_PARSER_ERROR_INTERRUPT)
3806
		if (iir & I915_RENDER_COMMAND_PARSER_ERROR_INTERRUPT)
4153
			i915_handle_error(dev, false,
-
 
4154
					  "Command parser error, iir 0x%08x",
3807
			DRM_DEBUG("Command parser error, iir 0x%08x\n", iir);
4155
					  iir);
-
 
Line 4156... Line 3808...
4156
 
3808
 
4157
		for_each_pipe(pipe) {
3809
		for_each_pipe(dev_priv, pipe) {
4158
			int reg = PIPESTAT(pipe);
3810
			int reg = PIPESTAT(pipe);
Line 4159... Line 3811...
4159
			pipe_stats[pipe] = I915_READ(reg);
3811
			pipe_stats[pipe] = I915_READ(reg);
4160
 
3812
 
4161
			/* Clear the PIPE*STAT regs before the IIR */
3813
			/* Clear the PIPE*STAT regs before the IIR */
4162
			if (pipe_stats[pipe] & 0x8000ffff) {
3814
			if (pipe_stats[pipe] & 0x8000ffff) {
4163
				I915_WRITE(reg, pipe_stats[pipe]);
3815
				I915_WRITE(reg, pipe_stats[pipe]);
4164
				irq_received = true;
3816
				irq_received = true;
4165
			}
3817
			}
Line 4166... Line 3818...
4166
		}
3818
		}
4167
		spin_unlock_irqrestore(&dev_priv->irq_lock, irqflags);
3819
		spin_unlock(&dev_priv->irq_lock);
Line 4168... Line 3820...
4168
 
3820
 
Line 4178... Line 3830...
4178
		new_iir = I915_READ(IIR); /* Flush posted writes */
3830
		new_iir = I915_READ(IIR); /* Flush posted writes */
Line 4179... Line 3831...
4179
 
3831
 
4180
		if (iir & I915_USER_INTERRUPT)
3832
		if (iir & I915_USER_INTERRUPT)
Line 4181... Line 3833...
4181
			notify_ring(dev, &dev_priv->ring[RCS]);
3833
			notify_ring(dev, &dev_priv->ring[RCS]);
4182
 
3834
 
4183
		for_each_pipe(pipe) {
3835
		for_each_pipe(dev_priv, pipe) {
4184
			int plane = pipe;
3836
			int plane = pipe;
Line 4185... Line 3837...
4185
			if (HAS_FBC(dev))
3837
			if (HAS_FBC(dev))
Line 4193... Line 3845...
4193
				blc_event = true;
3845
				blc_event = true;
Line 4194... Line 3846...
4194
 
3846
 
4195
			if (pipe_stats[pipe] & PIPE_CRC_DONE_INTERRUPT_STATUS)
3847
			if (pipe_stats[pipe] & PIPE_CRC_DONE_INTERRUPT_STATUS)
Line 4196... Line 3848...
4196
				i9xx_pipe_crc_irq_handler(dev, pipe);
3848
				i9xx_pipe_crc_irq_handler(dev, pipe);
4197
 
3849
 
4198
			if (pipe_stats[pipe] & PIPE_FIFO_UNDERRUN_STATUS &&
3850
			if (pipe_stats[pipe] & PIPE_FIFO_UNDERRUN_STATUS)
4199
			    intel_set_cpu_fifo_underrun_reporting(dev, pipe, false))
3851
				intel_cpu_fifo_underrun_irq_handler(dev_priv,
Line 4200... Line 3852...
4200
				DRM_ERROR("pipe %c underrun\n", pipe_name(pipe));
3852
								    pipe);
4201
		}
3853
		}
Line 4220... Line 3872...
4220
		 */
3872
		 */
4221
		ret = IRQ_HANDLED;
3873
		ret = IRQ_HANDLED;
4222
		iir = new_iir;
3874
		iir = new_iir;
4223
	} while (iir & ~flip_mask);
3875
	} while (iir & ~flip_mask);
Line 4224... Line -...
4224
 
-
 
4225
	i915_update_dri1_breadcrumb(dev);
-
 
4226
 
3876
 
4227
	return ret;
3877
	return ret;
Line 4228... Line 3878...
4228
}
3878
}
4229
 
3879
 
Line 4236... Line 3886...
4236
		I915_WRITE(PORT_HOTPLUG_EN, 0);
3886
		I915_WRITE(PORT_HOTPLUG_EN, 0);
4237
		I915_WRITE(PORT_HOTPLUG_STAT, I915_READ(PORT_HOTPLUG_STAT));
3887
		I915_WRITE(PORT_HOTPLUG_STAT, I915_READ(PORT_HOTPLUG_STAT));
4238
	}
3888
	}
Line 4239... Line 3889...
4239
 
3889
 
4240
	I915_WRITE16(HWSTAM, 0xffff);
3890
	I915_WRITE16(HWSTAM, 0xffff);
4241
	for_each_pipe(pipe) {
3891
	for_each_pipe(dev_priv, pipe) {
4242
		/* Clear enable bits; then clear status bits */
3892
		/* Clear enable bits; then clear status bits */
4243
		I915_WRITE(PIPESTAT(pipe), 0);
3893
		I915_WRITE(PIPESTAT(pipe), 0);
4244
		I915_WRITE(PIPESTAT(pipe), I915_READ(PIPESTAT(pipe)));
3894
		I915_WRITE(PIPESTAT(pipe), I915_READ(PIPESTAT(pipe)));
4245
	}
3895
	}
Line 4256... Line 3906...
4256
 
3906
 
4257
	I915_WRITE(PORT_HOTPLUG_EN, 0);
3907
	I915_WRITE(PORT_HOTPLUG_EN, 0);
Line 4258... Line 3908...
4258
	I915_WRITE(PORT_HOTPLUG_STAT, I915_READ(PORT_HOTPLUG_STAT));
3908
	I915_WRITE(PORT_HOTPLUG_STAT, I915_READ(PORT_HOTPLUG_STAT));
4259
 
3909
 
4260
	I915_WRITE(HWSTAM, 0xeffe);
3910
	I915_WRITE(HWSTAM, 0xeffe);
4261
	for_each_pipe(pipe)
3911
	for_each_pipe(dev_priv, pipe)
4262
		I915_WRITE(PIPESTAT(pipe), 0);
3912
		I915_WRITE(PIPESTAT(pipe), 0);
4263
	I915_WRITE(IMR, 0xffffffff);
3913
	I915_WRITE(IMR, 0xffffffff);
4264
	I915_WRITE(IER, 0x0);
3914
	I915_WRITE(IER, 0x0);
Line 4268... Line 3918...
4268
static int i965_irq_postinstall(struct drm_device *dev)
3918
static int i965_irq_postinstall(struct drm_device *dev)
4269
{
3919
{
4270
	struct drm_i915_private *dev_priv = dev->dev_private;
3920
	struct drm_i915_private *dev_priv = dev->dev_private;
4271
	u32 enable_mask;
3921
	u32 enable_mask;
4272
	u32 error_mask;
3922
	u32 error_mask;
4273
	unsigned long irqflags;
-
 
Line 4274... Line 3923...
4274
 
3923
 
4275
	/* Unmask the interrupts that we always want on. */
3924
	/* Unmask the interrupts that we always want on. */
4276
	dev_priv->irq_mask = ~(I915_ASLE_INTERRUPT |
3925
	dev_priv->irq_mask = ~(I915_ASLE_INTERRUPT |
4277
			       I915_DISPLAY_PORT_INTERRUPT |
3926
			       I915_DISPLAY_PORT_INTERRUPT |
Line 4289... Line 3938...
4289
	if (IS_G4X(dev))
3938
	if (IS_G4X(dev))
4290
		enable_mask |= I915_BSD_USER_INTERRUPT;
3939
		enable_mask |= I915_BSD_USER_INTERRUPT;
Line 4291... Line 3940...
4291
 
3940
 
4292
	/* Interrupt setup is already guaranteed to be single-threaded, this is
3941
	/* Interrupt setup is already guaranteed to be single-threaded, this is
4293
	 * just to make the assert_spin_locked check happy. */
3942
	 * just to make the assert_spin_locked check happy. */
4294
	spin_lock_irqsave(&dev_priv->irq_lock, irqflags);
3943
	spin_lock_irq(&dev_priv->irq_lock);
4295
	i915_enable_pipestat(dev_priv, PIPE_A, PIPE_GMBUS_INTERRUPT_STATUS);
3944
	i915_enable_pipestat(dev_priv, PIPE_A, PIPE_GMBUS_INTERRUPT_STATUS);
4296
	i915_enable_pipestat(dev_priv, PIPE_A, PIPE_CRC_DONE_INTERRUPT_STATUS);
3945
	i915_enable_pipestat(dev_priv, PIPE_A, PIPE_CRC_DONE_INTERRUPT_STATUS);
4297
	i915_enable_pipestat(dev_priv, PIPE_B, PIPE_CRC_DONE_INTERRUPT_STATUS);
3946
	i915_enable_pipestat(dev_priv, PIPE_B, PIPE_CRC_DONE_INTERRUPT_STATUS);
Line 4298... Line 3947...
4298
	spin_unlock_irqrestore(&dev_priv->irq_lock, irqflags);
3947
	spin_unlock_irq(&dev_priv->irq_lock);
4299
 
3948
 
4300
	/*
3949
	/*
4301
	 * Enable some error detection, note the instruction error mask
3950
	 * Enable some error detection, note the instruction error mask
Line 4325... Line 3974...
4325
}
3974
}
Line 4326... Line 3975...
4326
 
3975
 
4327
static void i915_hpd_irq_setup(struct drm_device *dev)
3976
static void i915_hpd_irq_setup(struct drm_device *dev)
4328
{
3977
{
4329
	struct drm_i915_private *dev_priv = dev->dev_private;
-
 
4330
	struct drm_mode_config *mode_config = &dev->mode_config;
3978
	struct drm_i915_private *dev_priv = dev->dev_private;
4331
	struct intel_encoder *intel_encoder;
3979
	struct intel_encoder *intel_encoder;
Line 4332... Line 3980...
4332
	u32 hotplug_en;
3980
	u32 hotplug_en;
Line 4333... Line 3981...
4333
 
3981
 
4334
	assert_spin_locked(&dev_priv->irq_lock);
3982
	assert_spin_locked(&dev_priv->irq_lock);
4335
 
3983
 
4336
	if (I915_HAS_HOTPLUG(dev)) {
3984
	if (I915_HAS_HOTPLUG(dev)) {
4337
		hotplug_en = I915_READ(PORT_HOTPLUG_EN);
3985
		hotplug_en = I915_READ(PORT_HOTPLUG_EN);
4338
		hotplug_en &= ~HOTPLUG_INT_EN_MASK;
3986
		hotplug_en &= ~HOTPLUG_INT_EN_MASK;
4339
	/* Note HDMI and DP share hotplug bits */
3987
	/* Note HDMI and DP share hotplug bits */
4340
		/* enable bits are the same for all generations */
3988
		/* enable bits are the same for all generations */
4341
		list_for_each_entry(intel_encoder, &mode_config->encoder_list, base.head)
3989
		for_each_intel_encoder(dev, intel_encoder)
4342
			if (dev_priv->hpd_stats[intel_encoder->hpd_pin].hpd_mark == HPD_ENABLED)
3990
			if (dev_priv->hpd_stats[intel_encoder->hpd_pin].hpd_mark == HPD_ENABLED)
4343
				hotplug_en |= hpd_mask_i915[intel_encoder->hpd_pin];
3991
				hotplug_en |= hpd_mask_i915[intel_encoder->hpd_pin];
Line 4359... Line 4007...
4359
{
4007
{
4360
	struct drm_device *dev = arg;
4008
	struct drm_device *dev = arg;
4361
	struct drm_i915_private *dev_priv = dev->dev_private;
4009
	struct drm_i915_private *dev_priv = dev->dev_private;
4362
	u32 iir, new_iir;
4010
	u32 iir, new_iir;
4363
	u32 pipe_stats[I915_MAX_PIPES];
4011
	u32 pipe_stats[I915_MAX_PIPES];
4364
	unsigned long irqflags;
-
 
4365
	int ret = IRQ_NONE, pipe;
4012
	int ret = IRQ_NONE, pipe;
4366
	u32 flip_mask =
4013
	u32 flip_mask =
4367
		I915_DISPLAY_PLANE_A_FLIP_PENDING_INTERRUPT |
4014
		I915_DISPLAY_PLANE_A_FLIP_PENDING_INTERRUPT |
4368
		I915_DISPLAY_PLANE_B_FLIP_PENDING_INTERRUPT;
4015
		I915_DISPLAY_PLANE_B_FLIP_PENDING_INTERRUPT;
Line 4376... Line 4023...
4376
		/* Can't rely on pipestat interrupt bit in iir as it might
4023
		/* Can't rely on pipestat interrupt bit in iir as it might
4377
		 * have been cleared after the pipestat interrupt was received.
4024
		 * have been cleared after the pipestat interrupt was received.
4378
		 * It doesn't set the bit in iir again, but it still produces
4025
		 * It doesn't set the bit in iir again, but it still produces
4379
		 * interrupts (for non-MSI).
4026
		 * interrupts (for non-MSI).
4380
		 */
4027
		 */
4381
		spin_lock_irqsave(&dev_priv->irq_lock, irqflags);
4028
		spin_lock(&dev_priv->irq_lock);
4382
		if (iir & I915_RENDER_COMMAND_PARSER_ERROR_INTERRUPT)
4029
		if (iir & I915_RENDER_COMMAND_PARSER_ERROR_INTERRUPT)
4383
			i915_handle_error(dev, false,
-
 
4384
					  "Command parser error, iir 0x%08x",
4030
			DRM_DEBUG("Command parser error, iir 0x%08x\n", iir);
4385
					  iir);
-
 
Line 4386... Line 4031...
4386
 
4031
 
4387
		for_each_pipe(pipe) {
4032
		for_each_pipe(dev_priv, pipe) {
4388
			int reg = PIPESTAT(pipe);
4033
			int reg = PIPESTAT(pipe);
Line 4389... Line 4034...
4389
			pipe_stats[pipe] = I915_READ(reg);
4034
			pipe_stats[pipe] = I915_READ(reg);
4390
 
4035
 
Line 4394... Line 4039...
4394
			if (pipe_stats[pipe] & 0x8000ffff) {
4039
			if (pipe_stats[pipe] & 0x8000ffff) {
4395
				I915_WRITE(reg, pipe_stats[pipe]);
4040
				I915_WRITE(reg, pipe_stats[pipe]);
4396
				irq_received = true;
4041
				irq_received = true;
4397
			}
4042
			}
4398
		}
4043
		}
4399
		spin_unlock_irqrestore(&dev_priv->irq_lock, irqflags);
4044
		spin_unlock(&dev_priv->irq_lock);
Line 4400... Line 4045...
4400
 
4045
 
4401
		if (!irq_received)
4046
		if (!irq_received)
Line 4402... Line 4047...
4402
			break;
4047
			break;
Line 4413... Line 4058...
4413
		if (iir & I915_USER_INTERRUPT)
4058
		if (iir & I915_USER_INTERRUPT)
4414
			notify_ring(dev, &dev_priv->ring[RCS]);
4059
			notify_ring(dev, &dev_priv->ring[RCS]);
4415
		if (iir & I915_BSD_USER_INTERRUPT)
4060
		if (iir & I915_BSD_USER_INTERRUPT)
4416
			notify_ring(dev, &dev_priv->ring[VCS]);
4061
			notify_ring(dev, &dev_priv->ring[VCS]);
Line 4417... Line 4062...
4417
 
4062
 
4418
		for_each_pipe(pipe) {
4063
		for_each_pipe(dev_priv, pipe) {
4419
			if (pipe_stats[pipe] & PIPE_START_VBLANK_INTERRUPT_STATUS &&
4064
			if (pipe_stats[pipe] & PIPE_START_VBLANK_INTERRUPT_STATUS &&
4420
			    i915_handle_vblank(dev, pipe, pipe, iir))
4065
			    i915_handle_vblank(dev, pipe, pipe, iir))
Line 4421... Line 4066...
4421
				flip_mask &= ~DISPLAY_PLANE_FLIP_PENDING(pipe);
4066
				flip_mask &= ~DISPLAY_PLANE_FLIP_PENDING(pipe);
4422
 
4067
 
Line 4423... Line 4068...
4423
			if (pipe_stats[pipe] & PIPE_LEGACY_BLC_EVENT_STATUS)
4068
			if (pipe_stats[pipe] & PIPE_LEGACY_BLC_EVENT_STATUS)
4424
				blc_event = true;
4069
				blc_event = true;
Line 4425... Line 4070...
4425
 
4070
 
4426
			if (pipe_stats[pipe] & PIPE_CRC_DONE_INTERRUPT_STATUS)
4071
			if (pipe_stats[pipe] & PIPE_CRC_DONE_INTERRUPT_STATUS)
4427
				i9xx_pipe_crc_irq_handler(dev, pipe);
-
 
4428
 
4072
				i9xx_pipe_crc_irq_handler(dev, pipe);
Line 4429... Line 4073...
4429
			if (pipe_stats[pipe] & PIPE_FIFO_UNDERRUN_STATUS &&
4073
 
4430
			    intel_set_cpu_fifo_underrun_reporting(dev, pipe, false))
4074
			if (pipe_stats[pipe] & PIPE_FIFO_UNDERRUN_STATUS)
Line 4453... Line 4097...
4453
		 * stray interrupts.
4097
		 * stray interrupts.
4454
		 */
4098
		 */
4455
		iir = new_iir;
4099
		iir = new_iir;
4456
	}
4100
	}
Line 4457... Line -...
4457
 
-
 
4458
	i915_update_dri1_breadcrumb(dev);
-
 
4459
 
4101
 
4460
	return ret;
4102
	return ret;
Line 4461... Line 4103...
4461
}
4103
}
4462
 
4104
 
Line 4470... Line 4112...
4470
 
4112
 
4471
	I915_WRITE(PORT_HOTPLUG_EN, 0);
4113
	I915_WRITE(PORT_HOTPLUG_EN, 0);
Line 4472... Line 4114...
4472
	I915_WRITE(PORT_HOTPLUG_STAT, I915_READ(PORT_HOTPLUG_STAT));
4114
	I915_WRITE(PORT_HOTPLUG_STAT, I915_READ(PORT_HOTPLUG_STAT));
4473
 
4115
 
4474
	I915_WRITE(HWSTAM, 0xffffffff);
4116
	I915_WRITE(HWSTAM, 0xffffffff);
4475
	for_each_pipe(pipe)
4117
	for_each_pipe(dev_priv, pipe)
4476
		I915_WRITE(PIPESTAT(pipe), 0);
4118
		I915_WRITE(PIPESTAT(pipe), 0);
Line 4477... Line 4119...
4477
	I915_WRITE(IMR, 0xffffffff);
4119
	I915_WRITE(IMR, 0xffffffff);
4478
	I915_WRITE(IER, 0x0);
4120
	I915_WRITE(IER, 0x0);
4479
 
4121
 
4480
	for_each_pipe(pipe)
4122
	for_each_pipe(dev_priv, pipe)
4481
		I915_WRITE(PIPESTAT(pipe),
4123
		I915_WRITE(PIPESTAT(pipe),
Line 4482... Line 4124...
4482
			   I915_READ(PIPESTAT(pipe)) & 0x8000ffff);
4124
			   I915_READ(PIPESTAT(pipe)) & 0x8000ffff);
4483
	I915_WRITE(IIR, I915_READ(IIR));
4125
	I915_WRITE(IIR, I915_READ(IIR));
4484
}
4126
}
4485
 
4127
 
4486
static void intel_hpd_irq_reenable(struct work_struct *work)
4128
static void intel_hpd_irq_reenable_work(struct work_struct *work)
4487
{
4129
{
4488
	struct drm_i915_private *dev_priv =
4130
	struct drm_i915_private *dev_priv =
4489
		container_of(work, typeof(*dev_priv),
-
 
4490
			     hotplug_reenable_work.work);
4131
		container_of(work, typeof(*dev_priv),
Line -... Line 4132...
-
 
4132
			     hotplug_reenable_work.work);
-
 
4133
	struct drm_device *dev = dev_priv->dev;
4491
	struct drm_device *dev = dev_priv->dev;
4134
	struct drm_mode_config *mode_config = &dev->mode_config;
4492
	struct drm_mode_config *mode_config = &dev->mode_config;
4135
	int i;
4493
	unsigned long irqflags;
4136
 
Line 4494... Line 4137...
4494
	int i;
4137
	intel_runtime_pm_get(dev_priv);
4495
 
4138
 
Line 4515... Line 4158...
4515
			}
4158
			}
4516
		}
4159
		}
4517
	}
4160
	}
4518
	if (dev_priv->display.hpd_irq_setup)
4161
	if (dev_priv->display.hpd_irq_setup)
4519
		dev_priv->display.hpd_irq_setup(dev);
4162
		dev_priv->display.hpd_irq_setup(dev);
4520
	spin_unlock_irqrestore(&dev_priv->irq_lock, irqflags);
4163
	spin_unlock_irq(&dev_priv->irq_lock);
-
 
4164
 
-
 
4165
	intel_runtime_pm_put(dev_priv);
4521
}
4166
}
Line -... Line 4167...
-
 
4167
 
-
 
4168
/**
-
 
4169
 * intel_irq_init - initializes irq support
-
 
4170
 * @dev_priv: i915 device instance
-
 
4171
 *
-
 
4172
 * This function initializes all the irq support including work items, timers
-
 
4173
 * and all the vtables. It does not setup the interrupt itself though.
4522
 
4174
 */
4523
void intel_irq_init(struct drm_device *dev)
4175
void intel_irq_init(struct drm_i915_private *dev_priv)
4524
{
4176
{
Line 4525... Line 4177...
4525
	struct drm_i915_private *dev_priv = dev->dev_private;
4177
	struct drm_device *dev = dev_priv->dev;
-
 
4178
 
4526
 
4179
	INIT_WORK(&dev_priv->hotplug_work, i915_hotplug_work_func);
4527
	INIT_WORK(&dev_priv->hotplug_work, i915_hotplug_work_func);
4180
//	INIT_WORK(&dev_priv->dig_port_work, i915_digport_work_func);
4528
	INIT_WORK(&dev_priv->gpu_error.work, i915_error_work_func);
4181
	INIT_WORK(&dev_priv->gpu_error.work, i915_error_work_func);
Line 4529... Line 4182...
4529
	INIT_WORK(&dev_priv->rps.work, gen6_pm_rps_work);
4182
	INIT_WORK(&dev_priv->rps.work, gen6_pm_rps_work);
4530
	INIT_WORK(&dev_priv->l3_parity.error_work, ivybridge_parity_work);
4183
	INIT_WORK(&dev_priv->l3_parity.error_work, ivybridge_parity_work);
4531
 
4184
 
4532
	/* Let's track the enabled rps events */
4185
	/* Let's track the enabled rps events */
4533
	if (IS_VALLEYVIEW(dev))
4186
	if (IS_VALLEYVIEW(dev_priv) && !IS_CHERRYVIEW(dev_priv))
4534
		/* WaGsvRC0ResidenncyMethod:VLV */
4187
		/* WaGsvRC0ResidencyMethod:vlv */
Line 4535... Line -...
4535
		dev_priv->pm_rps_events = GEN6_PM_RP_UP_EI_EXPIRED;
-
 
4536
	else
-
 
Line -... Line 4188...
-
 
4188
		dev_priv->pm_rps_events = GEN6_PM_RP_UP_EI_EXPIRED;
4537
	dev_priv->pm_rps_events = GEN6_PM_RPS_EVENTS;
4189
	else
4538
 
4190
	dev_priv->pm_rps_events = GEN6_PM_RPS_EVENTS;
4539
	/* Haven't installed the IRQ handler yet */
4191
 
4540
	dev_priv->pm._irqs_disabled = true;
4192
 
4541
 
4193
 
4542
	if (IS_GEN2(dev)) {
4194
	if (IS_GEN2(dev_priv)) {
4543
		dev->max_vblank_count = 0;
4195
		dev->max_vblank_count = 0;
4544
		dev->driver->get_vblank_counter = i8xx_get_vblank_counter;
4196
		dev->driver->get_vblank_counter = i8xx_get_vblank_counter;
4545
	} else if (IS_G4X(dev) || INTEL_INFO(dev)->gen >= 5) {
4197
	} else if (IS_G4X(dev_priv) || INTEL_INFO(dev_priv)->gen >= 5) {
4546
		dev->max_vblank_count = 0xffffffff; /* full 32 bit counter */
4198
		dev->max_vblank_count = 0xffffffff; /* full 32 bit counter */
Line -... Line 4199...
-
 
4199
		dev->driver->get_vblank_counter = gm45_get_vblank_counter;
-
 
4200
	} else {
-
 
4201
	dev->driver->get_vblank_counter = i915_get_vblank_counter;
-
 
4202
	dev->max_vblank_count = 0xffffff; /* only 24 bits of frame count */
-
 
4203
	}
-
 
4204
 
-
 
4205
	/*
-
 
4206
	 * Opt out of the vblank disable timer on everything except gen2.
4547
		dev->driver->get_vblank_counter = gm45_get_vblank_counter;
4207
	 * Gen2 doesn't have a hardware frame counter and so depends on
4548
	} else {
4208
	 * vblank interrupts to produce sane vblank seuquence numbers.
4549
	dev->driver->get_vblank_counter = i915_get_vblank_counter;
4209
	 */
4550
	dev->max_vblank_count = 0xffffff; /* only 24 bits of frame count */
4210
	if (!IS_GEN2(dev_priv))
Line 4551... Line 4211...
4551
	}
4211
		dev->vblank_disable_immediate = true;
4552
 
4212
 
4553
	if (drm_core_check_feature(dev, DRIVER_MODESET)) {
4213
	if (drm_core_check_feature(dev, DRIVER_MODESET)) {
4554
		dev->driver->get_vblank_timestamp = i915_get_vblank_timestamp;
4214
		dev->driver->get_vblank_timestamp = i915_get_vblank_timestamp;
4555
	dev->driver->get_scanout_position = i915_get_crtc_scanoutpos;
4215
	dev->driver->get_scanout_position = i915_get_crtc_scanoutpos;
4556
	}
4216
	}
4557
 
4217
 
4558
	if (IS_CHERRYVIEW(dev)) {
4218
	if (IS_CHERRYVIEW(dev_priv)) {
4559
		dev->driver->irq_handler = cherryview_irq_handler;
4219
		dev->driver->irq_handler = cherryview_irq_handler;
4560
		dev->driver->irq_preinstall = cherryview_irq_preinstall;
4220
		dev->driver->irq_preinstall = cherryview_irq_preinstall;
4561
		dev->driver->irq_postinstall = cherryview_irq_postinstall;
4221
		dev->driver->irq_postinstall = cherryview_irq_postinstall;
4562
		dev->driver->irq_uninstall = cherryview_irq_uninstall;
4222
		dev->driver->irq_uninstall = cherryview_irq_uninstall;
4563
		dev->driver->enable_vblank = valleyview_enable_vblank;
4223
		dev->driver->enable_vblank = valleyview_enable_vblank;
4564
		dev->driver->disable_vblank = valleyview_disable_vblank;
4224
		dev->driver->disable_vblank = valleyview_disable_vblank;
4565
		dev_priv->display.hpd_irq_setup = i915_hpd_irq_setup;
4225
		dev_priv->display.hpd_irq_setup = i915_hpd_irq_setup;
4566
	} else if (IS_VALLEYVIEW(dev)) {
4226
	} else if (IS_VALLEYVIEW(dev_priv)) {
4567
		dev->driver->irq_handler = valleyview_irq_handler;
4227
		dev->driver->irq_handler = valleyview_irq_handler;
4568
		dev->driver->irq_preinstall = valleyview_irq_preinstall;
4228
		dev->driver->irq_preinstall = valleyview_irq_preinstall;
4569
		dev->driver->irq_postinstall = valleyview_irq_postinstall;
4229
		dev->driver->irq_postinstall = valleyview_irq_postinstall;
4570
		dev->driver->irq_uninstall = valleyview_irq_uninstall;
4230
		dev->driver->irq_uninstall = valleyview_irq_uninstall;
4571
		dev->driver->enable_vblank = valleyview_enable_vblank;
4231
		dev->driver->enable_vblank = valleyview_enable_vblank;
4572
		dev->driver->disable_vblank = valleyview_disable_vblank;
4232
		dev->driver->disable_vblank = valleyview_disable_vblank;
Line 4586... Line 4246...
4586
		dev->driver->irq_uninstall = ironlake_irq_uninstall;
4246
		dev->driver->irq_uninstall = ironlake_irq_uninstall;
4587
		dev->driver->enable_vblank = ironlake_enable_vblank;
4247
		dev->driver->enable_vblank = ironlake_enable_vblank;
4588
		dev->driver->disable_vblank = ironlake_disable_vblank;
4248
		dev->driver->disable_vblank = ironlake_disable_vblank;
4589
		dev_priv->display.hpd_irq_setup = ibx_hpd_irq_setup;
4249
		dev_priv->display.hpd_irq_setup = ibx_hpd_irq_setup;
4590
	} else {
4250
	} else {
4591
		if (INTEL_INFO(dev)->gen == 2) {
4251
		if (INTEL_INFO(dev_priv)->gen == 2) {
4592
		} else if (INTEL_INFO(dev)->gen == 3) {
4252
		} else if (INTEL_INFO(dev_priv)->gen == 3) {
4593
			dev->driver->irq_preinstall = i915_irq_preinstall;
4253
			dev->driver->irq_preinstall = i915_irq_preinstall;
4594
			dev->driver->irq_postinstall = i915_irq_postinstall;
4254
			dev->driver->irq_postinstall = i915_irq_postinstall;
4595
			dev->driver->irq_uninstall = i915_irq_uninstall;
4255
			dev->driver->irq_uninstall = i915_irq_uninstall;
4596
			dev->driver->irq_handler = i915_irq_handler;
4256
			dev->driver->irq_handler = i915_irq_handler;
4597
			dev_priv->display.hpd_irq_setup = i915_hpd_irq_setup;
4257
			dev_priv->display.hpd_irq_setup = i915_hpd_irq_setup;
Line 4605... Line 4265...
4605
		dev->driver->enable_vblank = i915_enable_vblank;
4265
		dev->driver->enable_vblank = i915_enable_vblank;
4606
		dev->driver->disable_vblank = i915_disable_vblank;
4266
		dev->driver->disable_vblank = i915_disable_vblank;
4607
	}
4267
	}
4608
}
4268
}
Line -... Line 4269...
-
 
4269
 
-
 
4270
/**
-
 
4271
 * intel_hpd_init - initializes and enables hpd support
-
 
4272
 * @dev_priv: i915 device instance
-
 
4273
 *
-
 
4274
 * This function enables the hotplug support. It requires that interrupts have
-
 
4275
 * already been enabled with intel_irq_init_hw(). From this point on hotplug and
-
 
4276
 * poll request can run concurrently to other code, so locking rules must be
-
 
4277
 * obeyed.
-
 
4278
 *
-
 
4279
 * This is a separate step from interrupt enabling to simplify the locking rules
-
 
4280
 * in the driver load and resume code.
4609
 
4281
 */
4610
void intel_hpd_init(struct drm_device *dev)
4282
void intel_hpd_init(struct drm_i915_private *dev_priv)
4611
{
4283
{
4612
	struct drm_i915_private *dev_priv = dev->dev_private;
4284
	struct drm_device *dev = dev_priv->dev;
4613
	struct drm_mode_config *mode_config = &dev->mode_config;
4285
	struct drm_mode_config *mode_config = &dev->mode_config;
4614
	struct drm_connector *connector;
-
 
4615
	unsigned long irqflags;
4286
	struct drm_connector *connector;
Line 4616... Line 4287...
4616
	int i;
4287
	int i;
4617
 
4288
 
4618
	for (i = 1; i < HPD_NUM_PINS; i++) {
4289
	for (i = 1; i < HPD_NUM_PINS; i++) {
Line 4628... Line 4299...
4628
			connector->polled = DRM_CONNECTOR_POLL_HPD;
4299
			connector->polled = DRM_CONNECTOR_POLL_HPD;
4629
	}
4300
	}
Line 4630... Line 4301...
4630
 
4301
 
4631
	/* Interrupt setup is already guaranteed to be single-threaded, this is
4302
	/* Interrupt setup is already guaranteed to be single-threaded, this is
4632
	 * just to make the assert_spin_locked checks happy. */
4303
	 * just to make the assert_spin_locked checks happy. */
4633
	spin_lock_irqsave(&dev_priv->irq_lock, irqflags);
4304
	spin_lock_irq(&dev_priv->irq_lock);
4634
	if (dev_priv->display.hpd_irq_setup)
4305
	if (dev_priv->display.hpd_irq_setup)
4635
		dev_priv->display.hpd_irq_setup(dev);
4306
		dev_priv->display.hpd_irq_setup(dev);
4636
	spin_unlock_irqrestore(&dev_priv->irq_lock, irqflags);
4307
	spin_unlock_irq(&dev_priv->irq_lock);
Line -... Line 4308...
-
 
4308
}
4637
}
4309
 
-
 
4310
/**
-
 
4311
 * intel_irq_install - enables the hardware interrupt
-
 
4312
 * @dev_priv: i915 device instance
-
 
4313
 *
-
 
4314
 * This function enables the hardware interrupt handling, but leaves the hotplug
-
 
4315
 * handling still disabled. It is called after intel_irq_init().
-
 
4316
 *
-
 
4317
 * In the driver load and resume code we need working interrupts in a few places
-
 
4318
 * but don't want to deal with the hassle of concurrent probe and hotplug
4638
 
4319
 * workers. Hence the split into this two-stage approach.
4639
/* Disable interrupts so we can allow runtime PM. */
4320
 */
-
 
4321
int intel_irq_install(struct drm_i915_private *dev_priv)
-
 
4322
{
4640
void intel_runtime_pm_disable_interrupts(struct drm_device *dev)
4323
	/*
-
 
4324
	 * We enable some interrupt sources in our postinstall hooks, so mark
-
 
4325
	 * interrupts as enabled _before_ actually enabling them to avoid
-
 
4326
	 * special cases in our ordering checks.
Line 4641... Line -...
4641
{
-
 
4642
	struct drm_i915_private *dev_priv = dev->dev_private;
4327
	 */
4643
 
4328
	dev_priv->pm.irqs_enabled = true;
Line -... Line 4329...
-
 
4329
 
-
 
4330
	return drm_irq_install(dev_priv->dev, dev_priv->dev->pdev->irq);
-
 
4331
}
-
 
4332
 
4644
	dev->driver->irq_uninstall(dev);
4333
/**
-
 
4334
 * intel_irq_uninstall - finilizes all irq handling
-
 
4335
 * @dev_priv: i915 device instance
4645
	dev_priv->pm._irqs_disabled = true;
4336
 *
4646
}
4337
 * This stops interrupt and hotplug handling and unregisters and frees all
4647
 
4338
 * resources acquired in the init functions.
-
 
4339
 */
-
 
4340
void intel_irq_uninstall(struct drm_i915_private *dev_priv)
-
 
4341
{
Line -... Line 4342...
-
 
4342
//	drm_irq_uninstall(dev_priv->dev);
-
 
4343
//	intel_hpd_cancel_work(dev_priv);
4648
/* Restore interrupts so we can recover from runtime PM. */
4344
	dev_priv->pm.irqs_enabled = false;
-
 
4345
}
-
 
4346
 
-
 
4347
/**
-
 
4348
 * intel_runtime_pm_disable_interrupts - runtime interrupt disabling
-
 
4349
 * @dev_priv: i915 device instance
-
 
4350
 *
4649
void intel_runtime_pm_restore_interrupts(struct drm_device *dev)
4351
 * This function is used to disable interrupts at runtime, both in the runtime
4650
{
4352
 * pm and the system suspend/resume code.
4651
	struct drm_i915_private *dev_priv = dev->dev_private;
4353
 */
Line -... Line 4354...
-
 
4354
void intel_runtime_pm_disable_interrupts(struct drm_i915_private *dev_priv)
-
 
4355
{
-
 
4356
	dev_priv->dev->driver->irq_uninstall(dev_priv->dev);
-
 
4357
	dev_priv->pm.irqs_enabled = false;
-
 
4358
}
-
 
4359
 
-
 
4360
/**
-
 
4361
 * intel_runtime_pm_enable_interrupts - runtime interrupt enabling
-
 
4362
 * @dev_priv: i915 device instance
-
 
4363
 *
-
 
4364
 * This function is used to enable interrupts at runtime, both in the runtime
-
 
4365
 * pm and the system suspend/resume code.
-
 
4366
 */
Line 4652... Line 4367...
4652
 
4367
void intel_runtime_pm_enable_interrupts(struct drm_i915_private *dev_priv)
4653
	dev_priv->pm._irqs_disabled = false;
4368
{
Line 4654... Line 4369...
4654
	dev->driver->irq_preinstall(dev);
4369
	dev_priv->pm.irqs_enabled = true;
4655
	dev->driver->irq_postinstall(dev);
-
 
4656
}
4370
	dev_priv->dev->driver->irq_preinstall(dev_priv->dev);
Line 4657... Line 4371...
4657
 
4371
	dev_priv->dev->driver->irq_postinstall(dev_priv->dev);
4658
 
4372
}