Subversion Repositories Kolibri OS

Rev

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

Rev 3298 Rev 3480
Line 43... Line 43...
43
#define DRM_WAKEUP( queue ) wake_up( queue )
43
#define DRM_WAKEUP( queue ) wake_up( queue )
44
#define DRM_INIT_WAITQUEUE( queue ) init_waitqueue_head( queue )
44
#define DRM_INIT_WAITQUEUE( queue ) init_waitqueue_head( queue )
Line 45... Line 45...
45
 
45
 
Line 46... Line -...
46
#define MAX_NOPID ((u32)~0)
-
 
47
 
-
 
48
/**
-
 
49
 * Interrupts that are always left unmasked.
-
 
50
 *
-
 
51
 * Since pipe events are edge-triggered from the PIPESTAT register to IIR,
-
 
52
 * we leave them always unmasked in IMR and then control enabling them through
-
 
53
 * PIPESTAT alone.
-
 
54
 */
-
 
55
#define I915_INTERRUPT_ENABLE_FIX			\
-
 
56
	(I915_ASLE_INTERRUPT |				\
-
 
57
	 I915_DISPLAY_PIPE_A_EVENT_INTERRUPT |		\
-
 
58
	 I915_DISPLAY_PIPE_B_EVENT_INTERRUPT |		\
-
 
59
	 I915_DISPLAY_PLANE_A_FLIP_PENDING_INTERRUPT |	\
-
 
60
	 I915_DISPLAY_PLANE_B_FLIP_PENDING_INTERRUPT |	\
-
 
61
	 I915_RENDER_COMMAND_PARSER_ERROR_INTERRUPT)
-
 
62
 
-
 
63
/** Interrupts that we mask and unmask at runtime. */
-
 
64
#define I915_INTERRUPT_ENABLE_VAR (I915_USER_INTERRUPT | I915_BSD_USER_INTERRUPT)
-
 
65
 
-
 
Line 66... Line -...
66
#define I915_PIPE_VBLANK_STATUS	(PIPE_START_VBLANK_INTERRUPT_STATUS |\
-
 
67
				 PIPE_VBLANK_INTERRUPT_STATUS)
-
 
68
 
-
 
69
#define I915_PIPE_VBLANK_ENABLE	(PIPE_START_VBLANK_INTERRUPT_ENABLE |\
-
 
70
				 PIPE_VBLANK_INTERRUPT_ENABLE)
-
 
Line 71... Line 46...
71
 
46
#define MAX_NOPID ((u32)~0)
72
#define DRM_I915_VBLANK_PIPE_ALL	(DRM_I915_VBLANK_PIPE_A | \
47
 
73
					 DRM_I915_VBLANK_PIPE_B)
48
 
74
 
49
 
Line 213... Line 188...
213
	}
188
	}
Line 214... Line 189...
214
 
189
 
215
	return I915_READ(reg);
190
	return I915_READ(reg);
Line -... Line 191...
-
 
191
}
-
 
192
 
-
 
193
/*
-
 
194
 * Handle hotplug events outside the interrupt handler proper.
-
 
195
 */
-
 
196
static void i915_hotplug_work_func(struct work_struct *work)
-
 
197
{
-
 
198
	drm_i915_private_t *dev_priv = container_of(work, drm_i915_private_t,
-
 
199
						    hotplug_work);
-
 
200
	struct drm_device *dev = dev_priv->dev;
-
 
201
	struct drm_mode_config *mode_config = &dev->mode_config;
-
 
202
	struct intel_encoder *encoder;
-
 
203
 
-
 
204
	/* HPD irq before everything is fully set up. */
-
 
205
	if (!dev_priv->enable_hotplug_processing)
-
 
206
		return;
-
 
207
 
-
 
208
	mutex_lock(&mode_config->mutex);
-
 
209
	DRM_DEBUG_KMS("running encoder hotplug functions\n");
-
 
210
 
-
 
211
	list_for_each_entry(encoder, &mode_config->encoder_list, base.head)
-
 
212
		if (encoder->hot_plug)
-
 
213
			encoder->hot_plug(encoder);
-
 
214
 
-
 
215
	mutex_unlock(&mode_config->mutex);
-
 
216
 
-
 
217
	/* Just fire off a uevent and let userspace tell us what to do */
Line 216... Line 218...
216
}
218
	drm_helper_hpd_irq_event(dev);
217
 
219
}
218
 
220
 
219
static void notify_ring(struct drm_device *dev,
221
static void notify_ring(struct drm_device *dev,
Line 400... Line 402...
400
	spin_unlock_irqrestore(&dev_priv->rps.lock, flags);
402
	spin_unlock_irqrestore(&dev_priv->rps.lock, flags);
Line 401... Line 403...
401
 
403
 
402
//   queue_work(dev_priv->wq, &dev_priv->rps.work);
404
//   queue_work(dev_priv->wq, &dev_priv->rps.work);
Line -... Line 405...
-
 
405
}
-
 
406
 
-
 
407
static void gmbus_irq_handler(struct drm_device *dev)
-
 
408
{
-
 
409
	struct drm_i915_private *dev_priv = (drm_i915_private_t *) dev->dev_private;
-
 
410
 
-
 
411
	wake_up_all(&dev_priv->gmbus_wait_queue);
-
 
412
}
-
 
413
 
-
 
414
static void dp_aux_irq_handler(struct drm_device *dev)
-
 
415
{
-
 
416
	struct drm_i915_private *dev_priv = (drm_i915_private_t *) dev->dev_private;
-
 
417
 
-
 
418
	wake_up_all(&dev_priv->gmbus_wait_queue);
403
}
419
}
404
 
420
 
405
static irqreturn_t valleyview_irq_handler(int irq, void *arg)
421
static irqreturn_t valleyview_irq_handler(int irq, void *arg)
406
{
422
{
407
	struct drm_device *dev = (struct drm_device *) arg;
423
	struct drm_device *dev = (struct drm_device *) arg;
408
	drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
424
	drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
409
	u32 iir, gt_iir, pm_iir;
425
	u32 iir, gt_iir, pm_iir;
410
	irqreturn_t ret = IRQ_NONE;
426
	irqreturn_t ret = IRQ_NONE;
411
	unsigned long irqflags;
427
	unsigned long irqflags;
412
	int pipe;
-
 
Line 413... Line 428...
413
	u32 pipe_stats[I915_MAX_PIPES];
428
	int pipe;
Line 414... Line 429...
414
	bool blc_event;
429
	u32 pipe_stats[I915_MAX_PIPES];
415
 
430
 
Line 460... Line 475...
460
		if (iir & I915_DISPLAY_PORT_INTERRUPT) {
475
		if (iir & I915_DISPLAY_PORT_INTERRUPT) {
461
			u32 hotplug_status = I915_READ(PORT_HOTPLUG_STAT);
476
			u32 hotplug_status = I915_READ(PORT_HOTPLUG_STAT);
Line 462... Line 477...
462
 
477
 
463
			DRM_DEBUG_DRIVER("hotplug event received, stat 0x%08x\n",
478
			DRM_DEBUG_DRIVER("hotplug event received, stat 0x%08x\n",
464
					 hotplug_status);
479
					 hotplug_status);
465
//			if (hotplug_status & dev_priv->hotplug_supported_mask)
480
			if (hotplug_status & dev_priv->hotplug_supported_mask)
466
//				queue_work(dev_priv->wq,
481
				queue_work(dev_priv->wq,
Line 467... Line 482...
467
//					   &dev_priv->hotplug_work);
482
					   &dev_priv->hotplug_work);
468
 
483
 
469
			I915_WRITE(PORT_HOTPLUG_STAT, hotplug_status);
484
			I915_WRITE(PORT_HOTPLUG_STAT, hotplug_status);
Line 470... Line 485...
470
			I915_READ(PORT_HOTPLUG_STAT);
485
			I915_READ(PORT_HOTPLUG_STAT);
471
		}
486
		}
Line 472... Line 487...
472
 
487
 
473
		if (pipe_stats[pipe] & PIPE_LEGACY_BLC_EVENT_STATUS)
488
		if (pipe_stats[0] & PIPE_GMBUS_INTERRUPT_STATUS)
Line 474... Line 489...
474
			blc_event = true;
489
			gmbus_irq_handler(dev);
475
 
490
 
476
        if (pm_iir & GEN6_PM_DEFERRED_EVENTS)
491
//        if (pm_iir & GEN6_PM_DEFERRED_EVENTS)
477
            gen6_queue_rps_work(dev_priv, pm_iir);
492
//            gen6_queue_rps_work(dev_priv, pm_iir);
Line 488... Line 503...
488
static void ibx_irq_handler(struct drm_device *dev, u32 pch_iir)
503
static void ibx_irq_handler(struct drm_device *dev, u32 pch_iir)
489
{
504
{
490
	drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
505
	drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
491
	int pipe;
506
	int pipe;
Line 492... Line 507...
492
 
507
 
-
 
508
	if (pch_iir & SDE_HOTPLUG_MASK)
Line 493... Line 509...
493
    printf("%s\n", __FUNCTION__);
509
		queue_work(dev_priv->wq, &dev_priv->hotplug_work);
494
 
510
 
495
	if (pch_iir & SDE_AUDIO_POWER_MASK)
511
	if (pch_iir & SDE_AUDIO_POWER_MASK)
496
		DRM_DEBUG_DRIVER("PCH audio power change on port %d\n",
512
		DRM_DEBUG_DRIVER("PCH audio power change on port %d\n",
Line -... Line 513...
-
 
513
				 (pch_iir & SDE_AUDIO_POWER_MASK) >>
-
 
514
				 SDE_AUDIO_POWER_SHIFT);
-
 
515
 
497
				 (pch_iir & SDE_AUDIO_POWER_MASK) >>
516
	if (pch_iir & SDE_AUX_MASK)
498
				 SDE_AUDIO_POWER_SHIFT);
517
		dp_aux_irq_handler(dev);
Line 499... Line 518...
499
 
518
 
500
	if (pch_iir & SDE_GMBUS)
519
	if (pch_iir & SDE_GMBUS)
Line 501... Line 520...
501
		DRM_DEBUG_DRIVER("PCH GMBUS interrupt\n");
520
		gmbus_irq_handler(dev);
Line 530... Line 549...
530
static void cpt_irq_handler(struct drm_device *dev, u32 pch_iir)
549
static void cpt_irq_handler(struct drm_device *dev, u32 pch_iir)
531
{
550
{
532
	drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
551
	drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
533
	int pipe;
552
	int pipe;
Line -... Line 553...
-
 
553
 
-
 
554
	if (pch_iir & SDE_HOTPLUG_MASK_CPT)
-
 
555
		queue_work(dev_priv->wq, &dev_priv->hotplug_work);
534
 
556
 
535
	if (pch_iir & SDE_AUDIO_POWER_MASK_CPT)
557
	if (pch_iir & SDE_AUDIO_POWER_MASK_CPT)
536
		DRM_DEBUG_DRIVER("PCH audio power change on port %d\n",
558
		DRM_DEBUG_DRIVER("PCH audio power change on port %d\n",
537
				 (pch_iir & SDE_AUDIO_POWER_MASK_CPT) >>
559
				 (pch_iir & SDE_AUDIO_POWER_MASK_CPT) >>
Line 538... Line 560...
538
				 SDE_AUDIO_POWER_SHIFT_CPT);
560
				 SDE_AUDIO_POWER_SHIFT_CPT);
539
 
561
 
Line 540... Line 562...
540
	if (pch_iir & SDE_AUX_MASK_CPT)
562
	if (pch_iir & SDE_AUX_MASK_CPT)
541
		DRM_DEBUG_DRIVER("AUX channel interrupt\n");
563
		dp_aux_irq_handler(dev);
Line 542... Line 564...
542
 
564
 
543
	if (pch_iir & SDE_GMBUS_CPT)
565
	if (pch_iir & SDE_GMBUS_CPT)
Line 544... Line 566...
544
		DRM_DEBUG_DRIVER("PCH GMBUS interrupt\n");
566
		gmbus_irq_handler(dev);
Line 558... Line 580...
558
 
580
 
559
static irqreturn_t ivybridge_irq_handler(int irq, void *arg)
581
static irqreturn_t ivybridge_irq_handler(int irq, void *arg)
560
{
582
{
561
	struct drm_device *dev = (struct drm_device *) arg;
583
	struct drm_device *dev = (struct drm_device *) arg;
562
	drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
584
	drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
563
	u32 de_iir, gt_iir, de_ier, pm_iir;
585
	u32 de_iir, gt_iir, de_ier, pm_iir, sde_ier;
564
	irqreturn_t ret = IRQ_NONE;
586
	irqreturn_t ret = IRQ_NONE;
Line 565... Line 587...
565
	int i;
587
	int i;
Line 566... Line 588...
566
 
588
 
567
	atomic_inc(&dev_priv->irq_received);
589
	atomic_inc(&dev_priv->irq_received);
568
 
590
 
Line -... Line 591...
-
 
591
	/* disable master interrupt before clearing iir  */
-
 
592
	de_ier = I915_READ(DEIER);
-
 
593
	I915_WRITE(DEIER, de_ier & ~DE_MASTER_IRQ_CONTROL);
-
 
594
 
-
 
595
	/* Disable south interrupts. We'll only write to SDEIIR once, so further
-
 
596
	 * interrupts will will be stored on its back queue, and then we'll be
-
 
597
	 * able to process them after we restore SDEIER (as soon as we restore
-
 
598
	 * it, we'll get an interrupt if SDEIIR still has something to process
-
 
599
	 * due to its back queue). */
569
	/* disable master interrupt before clearing iir  */
600
	sde_ier = I915_READ(SDEIER);
570
	de_ier = I915_READ(DEIER);
601
	I915_WRITE(SDEIER, 0);
571
	I915_WRITE(DEIER, de_ier & ~DE_MASTER_IRQ_CONTROL);
602
	POSTING_READ(SDEIER);
572
 
603
 
573
	gt_iir = I915_READ(GTIIR);
604
	gt_iir = I915_READ(GTIIR);
574
	if (gt_iir) {
605
	if (gt_iir) {
Line 575... Line 606...
575
		snb_gt_irq_handler(dev, dev_priv, gt_iir);
606
		snb_gt_irq_handler(dev, dev_priv, gt_iir);
576
		I915_WRITE(GTIIR, gt_iir);
607
		I915_WRITE(GTIIR, gt_iir);
-
 
608
		ret = IRQ_HANDLED;
-
 
609
	}
577
		ret = IRQ_HANDLED;
610
 
578
	}
611
	de_iir = I915_READ(DEIIR);
579
 
612
	if (de_iir) {
Line 580... Line 613...
580
	de_iir = I915_READ(DEIIR);
613
		if (de_iir & DE_AUX_CHANNEL_A_IVB)
Line 594... Line 627...
594
#endif
627
#endif
595
		/* check event from PCH */
628
		/* check event from PCH */
596
		if (de_iir & DE_PCH_EVENT_IVB) {
629
		if (de_iir & DE_PCH_EVENT_IVB) {
597
			u32 pch_iir = I915_READ(SDEIIR);
630
			u32 pch_iir = I915_READ(SDEIIR);
Line 598... Line -...
598
 
-
 
599
//			if (pch_iir & SDE_HOTPLUG_MASK_CPT)
-
 
600
//				queue_work(dev_priv->wq, &dev_priv->hotplug_work);
631
 
Line 601... Line 632...
601
			cpt_irq_handler(dev, pch_iir);
632
			cpt_irq_handler(dev, pch_iir);
602
 
633
 
603
			/* clear PCH hotplug event before clear CPU irq */
634
			/* clear PCH hotplug event before clear CPU irq */
Line 616... Line 647...
616
		ret = IRQ_HANDLED;
647
		ret = IRQ_HANDLED;
617
	}
648
	}
Line 618... Line 649...
618
 
649
 
619
	I915_WRITE(DEIER, de_ier);
650
	I915_WRITE(DEIER, de_ier);
-
 
651
	POSTING_READ(DEIER);
-
 
652
	I915_WRITE(SDEIER, sde_ier);
Line 620... Line 653...
620
	POSTING_READ(DEIER);
653
	POSTING_READ(SDEIER);
621
 
654
 
Line 622... Line 655...
622
	return ret;
655
	return ret;
Line 635... Line 668...
635
static irqreturn_t ironlake_irq_handler(int irq, void *arg)
668
static irqreturn_t ironlake_irq_handler(int irq, void *arg)
636
{
669
{
637
	struct drm_device *dev = (struct drm_device *) arg;
670
	struct drm_device *dev = (struct drm_device *) arg;
638
    drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
671
    drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
639
    int ret = IRQ_NONE;
672
    int ret = IRQ_NONE;
640
    u32 de_iir, gt_iir, de_ier, pch_iir, pm_iir;
673
	u32 de_iir, gt_iir, de_ier, pm_iir, sde_ier;
Line 641... Line 674...
641
 
674
 
Line 642... Line 675...
642
    atomic_inc(&dev_priv->irq_received);
675
    atomic_inc(&dev_priv->irq_received);
643
 
676
 
644
    /* disable master interrupt before clearing iir  */
677
    /* disable master interrupt before clearing iir  */
645
    de_ier = I915_READ(DEIER);
678
    de_ier = I915_READ(DEIER);
Line -... Line 679...
-
 
679
    I915_WRITE(DEIER, de_ier & ~DE_MASTER_IRQ_CONTROL);
-
 
680
    POSTING_READ(DEIER);
-
 
681
 
-
 
682
	/* Disable south interrupts. We'll only write to SDEIIR once, so further
-
 
683
	 * interrupts will will be stored on its back queue, and then we'll be
-
 
684
	 * able to process them after we restore SDEIER (as soon as we restore
-
 
685
	 * it, we'll get an interrupt if SDEIIR still has something to process
-
 
686
	 * due to its back queue). */
-
 
687
	sde_ier = I915_READ(SDEIER);
646
    I915_WRITE(DEIER, de_ier & ~DE_MASTER_IRQ_CONTROL);
688
	I915_WRITE(SDEIER, 0);
647
    POSTING_READ(DEIER);
689
	POSTING_READ(SDEIER);
648
 
-
 
649
    de_iir = I915_READ(DEIIR);
690
 
Line 650... Line 691...
650
    gt_iir = I915_READ(GTIIR);
691
    de_iir = I915_READ(DEIIR);
651
    pch_iir = I915_READ(SDEIIR);
-
 
652
    pm_iir = I915_READ(GEN6_PMIIR);
692
    gt_iir = I915_READ(GTIIR);
Line 653... Line 693...
653
 
693
    pm_iir = I915_READ(GEN6_PMIIR);
Line 654... Line 694...
654
    if (de_iir == 0 && gt_iir == 0 && pch_iir == 0 &&
694
 
655
        (!IS_GEN6(dev) || pm_iir == 0))
695
	if (de_iir == 0 && gt_iir == 0 && (!IS_GEN6(dev) || pm_iir == 0))
656
        goto done;
696
        goto done;
657
 
697
 
-
 
698
    ret = IRQ_HANDLED;
-
 
699
 
-
 
700
	if (IS_GEN5(dev))
-
 
701
		ilk_gt_irq_handler(dev, dev_priv, gt_iir);
658
    ret = IRQ_HANDLED;
702
	else
659
 
703
		snb_gt_irq_handler(dev, dev_priv, gt_iir);
660
	if (IS_GEN5(dev))
704
 
Line 661... Line 705...
661
		ilk_gt_irq_handler(dev, dev_priv, gt_iir);
705
	if (de_iir & DE_AUX_CHANNEL_A)
Line 682... Line 726...
682
	}
726
	}
683
#endif
727
#endif
Line 684... Line 728...
684
 
728
 
685
	/* check event from PCH */
729
	/* check event from PCH */
686
	if (de_iir & DE_PCH_EVENT) {
730
	if (de_iir & DE_PCH_EVENT) {
687
//		if (pch_iir & hotplug_mask)
-
 
-
 
731
		u32 pch_iir = I915_READ(SDEIIR);
688
//			queue_work(dev_priv->wq, &dev_priv->hotplug_work);
732
 
689
		if (HAS_PCH_CPT(dev))
733
		if (HAS_PCH_CPT(dev))
690
			cpt_irq_handler(dev, pch_iir);
734
			cpt_irq_handler(dev, pch_iir);
691
		else
735
		else
-
 
736
			ibx_irq_handler(dev, pch_iir);
-
 
737
 
-
 
738
		/* should clear PCH hotplug event before clear CPU irq */
692
			ibx_irq_handler(dev, pch_iir);
739
		I915_WRITE(SDEIIR, pch_iir);
693
	}
740
	}
694
#if 0
741
#if 0
695
	if (IS_GEN5(dev) &&  de_iir & DE_PCU_EVENT)
742
	if (IS_GEN5(dev) &&  de_iir & DE_PCU_EVENT)
Line 696... Line 743...
696
		ironlake_handle_rps_change(dev);
743
		ironlake_handle_rps_change(dev);
697
 
744
 
698
	if (IS_GEN6(dev) && pm_iir & GEN6_PM_DEFERRED_EVENTS)
745
	if (IS_GEN6(dev) && pm_iir & GEN6_PM_DEFERRED_EVENTS)
699
		gen6_queue_rps_work(dev_priv, pm_iir);
-
 
700
#endif
-
 
701
    /* should clear PCH hotplug event before clear CPU irq */
746
		gen6_queue_rps_work(dev_priv, pm_iir);
702
    I915_WRITE(SDEIIR, pch_iir);
747
#endif
703
    I915_WRITE(GTIIR, gt_iir);
748
    I915_WRITE(GTIIR, gt_iir);
Line 704... Line 749...
704
    I915_WRITE(DEIIR, de_iir);
749
    I915_WRITE(DEIIR, de_iir);
705
    I915_WRITE(GEN6_PMIIR, pm_iir);
750
    I915_WRITE(GEN6_PMIIR, pm_iir);
706
 
751
 
-
 
752
done:
-
 
753
    I915_WRITE(DEIER, de_ier);
Line 707... Line 754...
707
done:
754
    POSTING_READ(DEIER);
708
    I915_WRITE(DEIER, de_ier);
755
	I915_WRITE(SDEIER, sde_ier);
Line 731... Line 778...
731
	case 6:
778
	case 6:
732
		instdone[0] = I915_READ(INSTDONE_I965);
779
		instdone[0] = I915_READ(INSTDONE_I965);
733
		instdone[1] = I915_READ(INSTDONE1);
780
		instdone[1] = I915_READ(INSTDONE1);
734
		break;
781
		break;
735
	default:
782
	default:
736
        WARN(1, "Unsupported platform\n");
783
		WARN_ONCE(1, "Unsupported platform\n");
737
	case 7:
784
	case 7:
738
		instdone[0] = I915_READ(GEN7_INSTDONE_1);
785
		instdone[0] = I915_READ(GEN7_INSTDONE_1);
739
		instdone[1] = I915_READ(GEN7_SC_INSTDONE);
786
		instdone[1] = I915_READ(GEN7_SC_INSTDONE);
740
		instdone[2] = I915_READ(GEN7_SAMPLER_INSTDONE);
787
		instdone[2] = I915_READ(GEN7_SAMPLER_INSTDONE);
741
		instdone[3] = I915_READ(GEN7_ROW_INSTDONE);
788
		instdone[3] = I915_READ(GEN7_ROW_INSTDONE);
Line 769... Line 816...
769
		d = kmalloc(PAGE_SIZE, GFP_ATOMIC);
816
		d = kmalloc(PAGE_SIZE, GFP_ATOMIC);
770
		if (d == NULL)
817
		if (d == NULL)
771
			goto unwind;
818
			goto unwind;
Line 772... Line 819...
772
 
819
 
773
		local_irq_save(flags);
820
		local_irq_save(flags);
774
		if (reloc_offset < dev_priv->mm.gtt_mappable_end &&
821
		if (reloc_offset < dev_priv->gtt.mappable_end &&
775
		    src->has_global_gtt_mapping) {
822
		    src->has_global_gtt_mapping) {
Line 776... Line 823...
776
			void __iomem *s;
823
			void __iomem *s;
777
 
824
 
778
			/* Simply ignore tiling or any overlapping fence.
825
			/* Simply ignore tiling or any overlapping fence.
779
			 * It's part of the error state, and this hopefully
826
			 * It's part of the error state, and this hopefully
Line 780... Line 827...
780
			 * captures what the GPU read.
827
			 * captures what the GPU read.
781
			 */
828
			 */
782
 
829
 
783
			s = io_mapping_map_atomic_wc(dev_priv->mm.gtt_mapping,
830
			s = io_mapping_map_atomic_wc(dev_priv->gtt.mappable,
-
 
831
						     reloc_offset);
-
 
832
			memcpy_fromio(d, s, PAGE_SIZE);
-
 
833
			io_mapping_unmap_atomic(s);
-
 
834
		} else if (src->stolen) {
-
 
835
			unsigned long offset;
-
 
836
 
-
 
837
			offset = dev_priv->mm.stolen_base;
-
 
838
			offset += src->stolen->start;
784
						     reloc_offset);
839
			offset += i << PAGE_SHIFT;
785
			memcpy_fromio(d, s, PAGE_SIZE);
840
 
786
			io_mapping_unmap_atomic(s);
841
			memcpy_fromio(d, (void __iomem *) offset, PAGE_SIZE);
Line 787... Line 842...
787
		} else {
842
		} else {
Line 928... Line 983...
928
	case 2:
983
	case 2:
929
		for (i = 0; i < 8; i++)
984
		for (i = 0; i < 8; i++)
930
			error->fence[i] = I915_READ(FENCE_REG_830_0 + (i * 4));
985
			error->fence[i] = I915_READ(FENCE_REG_830_0 + (i * 4));
931
		break;
986
		break;
Line -... Line 987...
-
 
987
 
-
 
988
	default:
932
 
989
		BUG();
933
	}
990
	}
Line 934... Line 991...
934
}
991
}
935
 
992
 
Line 941... Line 998...
941
	u32 seqno;
998
	u32 seqno;
Line 942... Line 999...
942
 
999
 
943
	if (!ring->get_seqno)
1000
	if (!ring->get_seqno)
Line -... Line 1001...
-
 
1001
		return NULL;
-
 
1002
 
-
 
1003
	if (HAS_BROKEN_CS_TLB(dev_priv->dev)) {
-
 
1004
		u32 acthd = I915_READ(ACTHD);
-
 
1005
 
-
 
1006
		if (WARN_ON(ring->id != RCS))
-
 
1007
			return NULL;
-
 
1008
 
-
 
1009
		obj = ring->private;
-
 
1010
		if (acthd >= obj->gtt_offset &&
-
 
1011
		    acthd < obj->gtt_offset + obj->base.size)
-
 
1012
			return i915_error_object_create(dev_priv, obj);
944
		return NULL;
1013
	}
945
 
1014
 
946
	seqno = ring->get_seqno(ring, false);
1015
	seqno = ring->get_seqno(ring, false);
947
	list_for_each_entry(obj, &dev_priv->mm.active_list, mm_list) {
1016
	list_for_each_entry(obj, &dev_priv->mm.active_list, mm_list) {
Line 1064... Line 1133...
1064
	struct drm_i915_gem_object *obj;
1133
	struct drm_i915_gem_object *obj;
1065
	struct drm_i915_error_state *error;
1134
	struct drm_i915_error_state *error;
1066
	unsigned long flags;
1135
	unsigned long flags;
1067
	int i, pipe;
1136
	int i, pipe;
Line 1068... Line 1137...
1068
 
1137
 
1069
	spin_lock_irqsave(&dev_priv->error_lock, flags);
1138
	spin_lock_irqsave(&dev_priv->gpu_error.lock, flags);
1070
	error = dev_priv->first_error;
1139
	error = dev_priv->gpu_error.first_error;
1071
	spin_unlock_irqrestore(&dev_priv->error_lock, flags);
1140
	spin_unlock_irqrestore(&dev_priv->gpu_error.lock, flags);
1072
	if (error)
1141
	if (error)
Line 1073... Line 1142...
1073
		return;
1142
		return;
1074
 
1143
 
1075
	/* Account for pipe specific data like PIPE*STAT */
1144
	/* Account for pipe specific data like PIPE*STAT */
1076
	error = kzalloc(sizeof(*error), GFP_ATOMIC);
1145
	error = kzalloc(sizeof(*error), GFP_ATOMIC);
1077
	if (!error) {
1146
	if (!error) {
1078
		DRM_DEBUG_DRIVER("out of memory, not capturing error state\n");
1147
		DRM_DEBUG_DRIVER("out of memory, not capturing error state\n");
Line 1079... Line 1148...
1079
		return;
1148
		return;
-
 
1149
	}
1080
	}
1150
 
Line 1081... Line 1151...
1081
 
1151
	DRM_INFO("capturing error event; look for more information in"
1082
	DRM_INFO("capturing error event; look for more information in /debug/dri/%d/i915_error_state\n",
1152
		 "/sys/kernel/debug/dri/%d/i915_error_state\n",
1083
		 dev->primary->index);
1153
		 dev->primary->index);
Line 1160... Line 1230...
1160
	do_gettimeofday(&error->time);
1230
	do_gettimeofday(&error->time);
Line 1161... Line 1231...
1161
 
1231
 
1162
	error->overlay = intel_overlay_capture_error_state(dev);
1232
	error->overlay = intel_overlay_capture_error_state(dev);
Line 1163... Line 1233...
1163
	error->display = intel_display_capture_error_state(dev);
1233
	error->display = intel_display_capture_error_state(dev);
1164
 
1234
 
1165
	spin_lock_irqsave(&dev_priv->error_lock, flags);
1235
	spin_lock_irqsave(&dev_priv->gpu_error.lock, flags);
1166
	if (dev_priv->first_error == NULL) {
1236
	if (dev_priv->gpu_error.first_error == NULL) {
1167
		dev_priv->first_error = error;
1237
		dev_priv->gpu_error.first_error = error;
1168
		error = NULL;
1238
		error = NULL;
Line 1169... Line 1239...
1169
	}
1239
	}
1170
	spin_unlock_irqrestore(&dev_priv->error_lock, flags);
1240
	spin_unlock_irqrestore(&dev_priv->gpu_error.lock, flags);
1171
 
1241
 
Line 1177... Line 1247...
1177
{
1247
{
1178
	struct drm_i915_private *dev_priv = dev->dev_private;
1248
	struct drm_i915_private *dev_priv = dev->dev_private;
1179
	struct drm_i915_error_state *error;
1249
	struct drm_i915_error_state *error;
1180
	unsigned long flags;
1250
	unsigned long flags;
Line 1181... Line 1251...
1181
 
1251
 
1182
	spin_lock_irqsave(&dev_priv->error_lock, flags);
1252
	spin_lock_irqsave(&dev_priv->gpu_error.lock, flags);
1183
	error = dev_priv->first_error;
1253
	error = dev_priv->gpu_error.first_error;
1184
	dev_priv->first_error = NULL;
1254
	dev_priv->gpu_error.first_error = NULL;
Line 1185... Line 1255...
1185
	spin_unlock_irqrestore(&dev_priv->error_lock, flags);
1255
	spin_unlock_irqrestore(&dev_priv->gpu_error.lock, flags);
1186
 
1256
 
1187
	if (error)
1257
	if (error)
1188
		kref_put(&error->ref, i915_error_state_free);
1258
		kref_put(&error->ref, i915_error_state_free);
Line 1301... Line 1371...
1301
 
1371
 
1302
	i915_capture_error_state(dev);
1372
	i915_capture_error_state(dev);
Line 1303... Line 1373...
1303
	i915_report_and_clear_eir(dev);
1373
	i915_report_and_clear_eir(dev);
1304
 
1374
 
1305
	if (wedged) {
1375
	if (wedged) {
Line 1306... Line 1376...
1306
//		INIT_COMPLETION(dev_priv->error_completion);
1376
		atomic_set_mask(I915_RESET_IN_PROGRESS_FLAG,
1307
		atomic_set(&dev_priv->mm.wedged, 1);
1377
				&dev_priv->gpu_error.reset_counter);
-
 
1378
 
1308
 
1379
		/*
1309
		/*
1380
		 * Wakeup waiting processes so that the reset work item
1310
		 * Wakeup waiting processes so they don't hang
1381
		 * doesn't deadlock trying to grab various locks.
1311
		 */
1382
		 */
Line 1577... Line 1648...
1577
 * duration to 2ms (which is the minimum in the Display Port spec)
1648
 * duration to 2ms (which is the minimum in the Display Port spec)
1578
 *
1649
 *
1579
 * This register is the same on all known PCH chips.
1650
 * This register is the same on all known PCH chips.
1580
 */
1651
 */
Line 1581... Line 1652...
1581
 
1652
 
1582
static void ironlake_enable_pch_hotplug(struct drm_device *dev)
1653
static void ibx_enable_hotplug(struct drm_device *dev)
1583
{
1654
{
1584
	drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
1655
	drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
Line 1585... Line 1656...
1585
	u32	hotplug;
1656
	u32	hotplug;
Line 1590... Line 1661...
1590
	hotplug |= PORTC_HOTPLUG_ENABLE | PORTC_PULSE_DURATION_2ms;
1661
	hotplug |= PORTC_HOTPLUG_ENABLE | PORTC_PULSE_DURATION_2ms;
1591
	hotplug |= PORTB_HOTPLUG_ENABLE | PORTB_PULSE_DURATION_2ms;
1662
	hotplug |= PORTB_HOTPLUG_ENABLE | PORTB_PULSE_DURATION_2ms;
1592
	I915_WRITE(PCH_PORT_HOTPLUG, hotplug);
1663
	I915_WRITE(PCH_PORT_HOTPLUG, hotplug);
1593
}
1664
}
Line -... Line 1665...
-
 
1665
 
-
 
1666
static void ibx_irq_postinstall(struct drm_device *dev)
-
 
1667
{
-
 
1668
	drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
-
 
1669
	u32 mask;
-
 
1670
 
-
 
1671
	if (HAS_PCH_IBX(dev))
-
 
1672
		mask = SDE_HOTPLUG_MASK |
-
 
1673
		       SDE_GMBUS |
-
 
1674
		       SDE_AUX_MASK;
-
 
1675
	else
-
 
1676
		mask = SDE_HOTPLUG_MASK_CPT |
-
 
1677
		       SDE_GMBUS_CPT |
-
 
1678
		       SDE_AUX_MASK_CPT;
-
 
1679
 
-
 
1680
	I915_WRITE(SDEIIR, I915_READ(SDEIIR));
-
 
1681
	I915_WRITE(SDEIMR, ~mask);
-
 
1682
	I915_WRITE(SDEIER, mask);
-
 
1683
	POSTING_READ(SDEIER);
-
 
1684
 
-
 
1685
	ibx_enable_hotplug(dev);
-
 
1686
}
1594
 
1687
 
1595
static int ironlake_irq_postinstall(struct drm_device *dev)
1688
static int ironlake_irq_postinstall(struct drm_device *dev)
1596
{
1689
{
1597
    drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
1690
    drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
1598
    /* enable kind of interrupts always enabled */
1691
    /* enable kind of interrupts always enabled */
1599
    u32 display_mask = DE_MASTER_IRQ_CONTROL | DE_GSE | DE_PCH_EVENT |
1692
    u32 display_mask = DE_MASTER_IRQ_CONTROL | DE_GSE | DE_PCH_EVENT |
-
 
1693
			   DE_PLANEA_FLIP_DONE | DE_PLANEB_FLIP_DONE |
1600
               DE_PLANEA_FLIP_DONE | DE_PLANEB_FLIP_DONE;
1694
			   DE_AUX_CHANNEL_A;
1601
    u32 render_irqs;
-
 
Line 1602... Line 1695...
1602
    u32 hotplug_mask;
1695
    u32 render_irqs;
Line 1603... Line 1696...
1603
 
1696
 
1604
    dev_priv->irq_mask = ~display_mask;
1697
    dev_priv->irq_mask = ~display_mask;
Line 1625... Line 1718...
1625
            GT_PIPE_NOTIFY |
1718
            GT_PIPE_NOTIFY |
1626
            GT_BSD_USER_INTERRUPT;
1719
            GT_BSD_USER_INTERRUPT;
1627
    I915_WRITE(GTIER, render_irqs);
1720
    I915_WRITE(GTIER, render_irqs);
1628
    POSTING_READ(GTIER);
1721
    POSTING_READ(GTIER);
Line 1629... Line 1722...
1629
 
1722
 
1630
    if (HAS_PCH_CPT(dev)) {
-
 
1631
        hotplug_mask = (SDE_CRT_HOTPLUG_CPT |
-
 
1632
                SDE_PORTB_HOTPLUG_CPT |
-
 
1633
                SDE_PORTC_HOTPLUG_CPT |
-
 
1634
                SDE_PORTD_HOTPLUG_CPT);
-
 
1635
    } else {
-
 
1636
        hotplug_mask = (SDE_CRT_HOTPLUG |
-
 
1637
                SDE_PORTB_HOTPLUG |
-
 
1638
                SDE_PORTC_HOTPLUG |
-
 
1639
                SDE_PORTD_HOTPLUG |
-
 
1640
                SDE_AUX_MASK);
-
 
1641
    }
-
 
1642
 
-
 
1643
    dev_priv->pch_irq_mask = ~hotplug_mask;
-
 
1644
 
-
 
1645
    I915_WRITE(SDEIIR, I915_READ(SDEIIR));
-
 
1646
    I915_WRITE(SDEIMR, dev_priv->pch_irq_mask);
-
 
1647
    I915_WRITE(SDEIER, hotplug_mask);
-
 
1648
    POSTING_READ(SDEIER);
-
 
1649
 
-
 
Line 1650... Line 1723...
1650
//    ironlake_enable_pch_hotplug(dev);
1723
	ibx_irq_postinstall(dev);
1651
 
1724
 
1652
    if (IS_IRONLAKE_M(dev)) {
1725
    if (IS_IRONLAKE_M(dev)) {
1653
        /* Clear & enable PCU event interrupts */
1726
        /* Clear & enable PCU event interrupts */
1654
        I915_WRITE(DEIIR, DE_PCU_EVENT);
1727
        I915_WRITE(DEIIR, DE_PCU_EVENT);
1655
        I915_WRITE(DEIER, I915_READ(DEIER) | DE_PCU_EVENT);
1728
        I915_WRITE(DEIER, I915_READ(DEIER) | DE_PCU_EVENT);
Line 1656... Line 1729...
1656
//        ironlake_enable_display_irq(dev_priv, DE_PCU_EVENT);
1729
		ironlake_enable_display_irq(dev_priv, DE_PCU_EVENT);
1657
    }
1730
    }
Line 1665... Line 1738...
1665
	/* enable kind of interrupts always enabled */
1738
	/* enable kind of interrupts always enabled */
1666
	u32 display_mask =
1739
	u32 display_mask =
1667
		DE_MASTER_IRQ_CONTROL | DE_GSE_IVB | DE_PCH_EVENT_IVB |
1740
		DE_MASTER_IRQ_CONTROL | DE_GSE_IVB | DE_PCH_EVENT_IVB |
1668
		DE_PLANEC_FLIP_DONE_IVB |
1741
		DE_PLANEC_FLIP_DONE_IVB |
1669
		DE_PLANEB_FLIP_DONE_IVB |
1742
		DE_PLANEB_FLIP_DONE_IVB |
1670
		DE_PLANEA_FLIP_DONE_IVB;
1743
		DE_PLANEA_FLIP_DONE_IVB |
-
 
1744
		DE_AUX_CHANNEL_A_IVB;
1671
	u32 render_irqs;
1745
	u32 render_irqs;
1672
	u32 hotplug_mask;
-
 
Line 1673... Line 1746...
1673
 
1746
 
Line 1674... Line 1747...
1674
	dev_priv->irq_mask = ~display_mask;
1747
	dev_priv->irq_mask = ~display_mask;
1675
 
1748
 
Line 1691... Line 1764...
1691
	render_irqs = GT_USER_INTERRUPT | GEN6_BSD_USER_INTERRUPT |
1764
	render_irqs = GT_USER_INTERRUPT | GEN6_BSD_USER_INTERRUPT |
1692
		GEN6_BLITTER_USER_INTERRUPT | GT_GEN7_L3_PARITY_ERROR_INTERRUPT;
1765
		GEN6_BLITTER_USER_INTERRUPT | GT_GEN7_L3_PARITY_ERROR_INTERRUPT;
1693
	I915_WRITE(GTIER, render_irqs);
1766
	I915_WRITE(GTIER, render_irqs);
1694
	POSTING_READ(GTIER);
1767
	POSTING_READ(GTIER);
Line 1695... Line -...
1695
 
-
 
1696
	hotplug_mask = (SDE_CRT_HOTPLUG_CPT |
-
 
1697
			SDE_PORTB_HOTPLUG_CPT |
-
 
1698
			SDE_PORTC_HOTPLUG_CPT |
-
 
1699
			SDE_PORTD_HOTPLUG_CPT);
-
 
1700
	dev_priv->pch_irq_mask = ~hotplug_mask;
-
 
1701
 
-
 
1702
	I915_WRITE(SDEIIR, I915_READ(SDEIIR));
-
 
1703
	I915_WRITE(SDEIMR, dev_priv->pch_irq_mask);
-
 
1704
	I915_WRITE(SDEIER, hotplug_mask);
-
 
1705
	POSTING_READ(SDEIER);
-
 
1706
 
1768
 
Line 1707... Line 1769...
1707
//	ironlake_enable_pch_hotplug(dev);
1769
	ibx_irq_postinstall(dev);
1708
 
1770
 
Line 1709... Line 1771...
1709
	return 0;
1771
	return 0;
1710
}
1772
}
1711
 
1773
 
1712
static int valleyview_irq_postinstall(struct drm_device *dev)
1774
static int valleyview_irq_postinstall(struct drm_device *dev)
1713
{
-
 
1714
	drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
1775
{
1715
	u32 enable_mask;
1776
	drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
1716
	u32 hotplug_en = I915_READ(PORT_HOTPLUG_EN);
1777
	u32 enable_mask;
Line 1717... Line 1778...
1717
	u32 pipestat_enable = PLANE_FLIP_DONE_INT_EN_VLV;
1778
	u32 pipestat_enable = PLANE_FLIP_DONE_INT_EN_VLV;
Line 1740... Line 1801...
1740
//   pci_read_config_word(dev->pdev, 0x98, &msid);
1801
//   pci_read_config_word(dev->pdev, 0x98, &msid);
1741
//   msid &= 0xff; /* mask out delivery bits */
1802
//   msid &= 0xff; /* mask out delivery bits */
1742
//   msid |= (1<<14);
1803
//   msid |= (1<<14);
1743
//   pci_write_config_word(dev_priv->dev->pdev, 0x98, msid);
1804
//   pci_write_config_word(dev_priv->dev->pdev, 0x98, msid);
Line -... Line 1805...
-
 
1805
 
-
 
1806
	I915_WRITE(PORT_HOTPLUG_EN, 0);
-
 
1807
	POSTING_READ(PORT_HOTPLUG_EN);
1744
 
1808
 
1745
	I915_WRITE(VLV_IMR, dev_priv->irq_mask);
1809
	I915_WRITE(VLV_IMR, dev_priv->irq_mask);
1746
	I915_WRITE(VLV_IER, enable_mask);
1810
	I915_WRITE(VLV_IER, enable_mask);
1747
	I915_WRITE(VLV_IIR, 0xffffffff);
1811
	I915_WRITE(VLV_IIR, 0xffffffff);
1748
	I915_WRITE(PIPESTAT(0), 0xffff);
1812
	I915_WRITE(PIPESTAT(0), 0xffff);
1749
	I915_WRITE(PIPESTAT(1), 0xffff);
1813
	I915_WRITE(PIPESTAT(1), 0xffff);
Line 1750... Line 1814...
1750
	POSTING_READ(VLV_IER);
1814
	POSTING_READ(VLV_IER);
-
 
1815
 
1751
 
1816
	i915_enable_pipestat(dev_priv, 0, pipestat_enable);
Line 1752... Line 1817...
1752
	i915_enable_pipestat(dev_priv, 0, pipestat_enable);
1817
	i915_enable_pipestat(dev_priv, 0, PIPE_GMBUS_EVENT_ENABLE);
1753
	i915_enable_pipestat(dev_priv, 1, pipestat_enable);
1818
	i915_enable_pipestat(dev_priv, 1, pipestat_enable);
Line 1768... Line 1833...
1768
	I915_WRITE(DPINVGTT, DPINVGTT_STATUS_MASK);
1833
	I915_WRITE(DPINVGTT, DPINVGTT_STATUS_MASK);
1769
	I915_WRITE(DPINVGTT, DPINVGTT_EN_MASK);
1834
	I915_WRITE(DPINVGTT, DPINVGTT_EN_MASK);
1770
#endif
1835
#endif
Line 1771... Line 1836...
1771
 
1836
 
-
 
1837
	I915_WRITE(VLV_MASTER_IER, MASTER_INTERRUPT_ENABLE);
-
 
1838
 
-
 
1839
	return 0;
-
 
1840
}
1772
	I915_WRITE(VLV_MASTER_IER, MASTER_INTERRUPT_ENABLE);
1841
 
-
 
1842
static void valleyview_hpd_irq_setup(struct drm_device *dev)
-
 
1843
{
-
 
1844
	drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
-
 
1845
	u32 hotplug_en = I915_READ(PORT_HOTPLUG_EN);
1773
#if 0 /* FIXME: check register definitions; some have moved */
1846
 
1774
	/* Note HDMI and DP share bits */
1847
	/* Note HDMI and DP share bits */
1775
	if (dev_priv->hotplug_supported_mask & HDMIB_HOTPLUG_INT_STATUS)
1848
	if (dev_priv->hotplug_supported_mask & PORTB_HOTPLUG_INT_STATUS)
1776
		hotplug_en |= HDMIB_HOTPLUG_INT_EN;
1849
		hotplug_en |= PORTB_HOTPLUG_INT_EN;
1777
	if (dev_priv->hotplug_supported_mask & HDMIC_HOTPLUG_INT_STATUS)
1850
	if (dev_priv->hotplug_supported_mask & PORTC_HOTPLUG_INT_STATUS)
1778
		hotplug_en |= HDMIC_HOTPLUG_INT_EN;
1851
		hotplug_en |= PORTC_HOTPLUG_INT_EN;
1779
	if (dev_priv->hotplug_supported_mask & HDMID_HOTPLUG_INT_STATUS)
1852
	if (dev_priv->hotplug_supported_mask & PORTD_HOTPLUG_INT_STATUS)
1780
		hotplug_en |= HDMID_HOTPLUG_INT_EN;
1853
		hotplug_en |= PORTD_HOTPLUG_INT_EN;
1781
	if (dev_priv->hotplug_supported_mask & SDVOC_HOTPLUG_INT_STATUS_I915)
1854
	if (dev_priv->hotplug_supported_mask & SDVOC_HOTPLUG_INT_STATUS_I915)
1782
		hotplug_en |= SDVOC_HOTPLUG_INT_EN;
1855
		hotplug_en |= SDVOC_HOTPLUG_INT_EN;
1783
	if (dev_priv->hotplug_supported_mask & SDVOB_HOTPLUG_INT_STATUS_I915)
1856
	if (dev_priv->hotplug_supported_mask & SDVOB_HOTPLUG_INT_STATUS_I915)
1784
		hotplug_en |= SDVOB_HOTPLUG_INT_EN;
1857
		hotplug_en |= SDVOB_HOTPLUG_INT_EN;
1785
	if (dev_priv->hotplug_supported_mask & CRT_HOTPLUG_INT_STATUS) {
1858
	if (dev_priv->hotplug_supported_mask & CRT_HOTPLUG_INT_STATUS) {
1786
		hotplug_en |= CRT_HOTPLUG_INT_EN;
1859
		hotplug_en |= CRT_HOTPLUG_INT_EN;
1787
		hotplug_en |= CRT_HOTPLUG_VOLTAGE_COMPARE_50;
1860
		hotplug_en |= CRT_HOTPLUG_VOLTAGE_COMPARE_50;
1788
	}
-
 
Line 1789... Line 1861...
1789
#endif
1861
	}
1790
 
-
 
1791
	I915_WRITE(PORT_HOTPLUG_EN, hotplug_en);
-
 
1792
 
1862
 
Line 1793... Line 1863...
1793
	return 0;
1863
	I915_WRITE(PORT_HOTPLUG_EN, hotplug_en);
1794
}
1864
}
1795
 
1865
 
Line 2020... Line 2090...
2020
		I915_ASLE_INTERRUPT |
2090
		I915_ASLE_INTERRUPT |
2021
		I915_DISPLAY_PIPE_A_EVENT_INTERRUPT |
2091
		I915_DISPLAY_PIPE_A_EVENT_INTERRUPT |
2022
		I915_DISPLAY_PIPE_B_EVENT_INTERRUPT |
2092
		I915_DISPLAY_PIPE_B_EVENT_INTERRUPT |
2023
		I915_RENDER_COMMAND_PARSER_ERROR_INTERRUPT |
2093
		I915_RENDER_COMMAND_PARSER_ERROR_INTERRUPT |
2024
		I915_USER_INTERRUPT;
2094
		I915_USER_INTERRUPT;
2025
#if 0
2095
 
2026
	if (I915_HAS_HOTPLUG(dev)) {
2096
	if (I915_HAS_HOTPLUG(dev)) {
-
 
2097
		I915_WRITE(PORT_HOTPLUG_EN, 0);
-
 
2098
		POSTING_READ(PORT_HOTPLUG_EN);
-
 
2099
 
2027
		/* Enable in IER... */
2100
		/* Enable in IER... */
2028
		enable_mask |= I915_DISPLAY_PORT_INTERRUPT;
2101
		enable_mask |= I915_DISPLAY_PORT_INTERRUPT;
2029
		/* and unmask in IMR */
2102
		/* and unmask in IMR */
2030
		dev_priv->irq_mask &= ~I915_DISPLAY_PORT_INTERRUPT;
2103
		dev_priv->irq_mask &= ~I915_DISPLAY_PORT_INTERRUPT;
2031
	}
2104
	}
2032
#endif
-
 
Line 2033... Line 2105...
2033
 
2105
 
2034
	I915_WRITE(IMR, dev_priv->irq_mask);
2106
	I915_WRITE(IMR, dev_priv->irq_mask);
2035
	I915_WRITE(IER, enable_mask);
2107
	I915_WRITE(IER, enable_mask);
Line -... Line 2108...
-
 
2108
	POSTING_READ(IER);
-
 
2109
 
-
 
2110
//	intel_opregion_enable_asle(dev);
-
 
2111
 
-
 
2112
	return 0;
-
 
2113
}
-
 
2114
 
-
 
2115
static void i915_hpd_irq_setup(struct drm_device *dev)
-
 
2116
{
-
 
2117
	drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
2036
	POSTING_READ(IER);
2118
	u32 hotplug_en;
2037
 
2119
 
2038
	if (I915_HAS_HOTPLUG(dev)) {
2120
	if (I915_HAS_HOTPLUG(dev)) {
2039
		u32 hotplug_en = I915_READ(PORT_HOTPLUG_EN);
2121
		hotplug_en = I915_READ(PORT_HOTPLUG_EN);
2040
#if 0
2122
 
2041
		if (dev_priv->hotplug_supported_mask & HDMIB_HOTPLUG_INT_STATUS)
2123
		if (dev_priv->hotplug_supported_mask & PORTB_HOTPLUG_INT_STATUS)
2042
			hotplug_en |= HDMIB_HOTPLUG_INT_EN;
2124
			hotplug_en |= PORTB_HOTPLUG_INT_EN;
2043
		if (dev_priv->hotplug_supported_mask & HDMIC_HOTPLUG_INT_STATUS)
2125
		if (dev_priv->hotplug_supported_mask & PORTC_HOTPLUG_INT_STATUS)
2044
			hotplug_en |= HDMIC_HOTPLUG_INT_EN;
2126
			hotplug_en |= PORTC_HOTPLUG_INT_EN;
2045
		if (dev_priv->hotplug_supported_mask & HDMID_HOTPLUG_INT_STATUS)
2127
		if (dev_priv->hotplug_supported_mask & PORTD_HOTPLUG_INT_STATUS)
2046
			hotplug_en |= HDMID_HOTPLUG_INT_EN;
2128
			hotplug_en |= PORTD_HOTPLUG_INT_EN;
2047
		if (dev_priv->hotplug_supported_mask & SDVOC_HOTPLUG_INT_STATUS_I915)
2129
		if (dev_priv->hotplug_supported_mask & SDVOC_HOTPLUG_INT_STATUS_I915)
2048
			hotplug_en |= SDVOC_HOTPLUG_INT_EN;
2130
			hotplug_en |= SDVOC_HOTPLUG_INT_EN;
2049
		if (dev_priv->hotplug_supported_mask & SDVOB_HOTPLUG_INT_STATUS_I915)
2131
		if (dev_priv->hotplug_supported_mask & SDVOB_HOTPLUG_INT_STATUS_I915)
2050
			hotplug_en |= SDVOB_HOTPLUG_INT_EN;
2132
			hotplug_en |= SDVOB_HOTPLUG_INT_EN;
2051
		if (dev_priv->hotplug_supported_mask & CRT_HOTPLUG_INT_STATUS) {
2133
		if (dev_priv->hotplug_supported_mask & CRT_HOTPLUG_INT_STATUS) {
2052
			hotplug_en |= CRT_HOTPLUG_INT_EN;
2134
			hotplug_en |= CRT_HOTPLUG_INT_EN;
2053
			hotplug_en |= CRT_HOTPLUG_VOLTAGE_COMPARE_50;
2135
			hotplug_en |= CRT_HOTPLUG_VOLTAGE_COMPARE_50;
2054
		}
2136
		}
Line 2055... Line 2137...
2055
#endif
2137
 
2056
		/* Ignore TV since it's buggy */
2138
		/* Ignore TV since it's buggy */
2057
 
-
 
2058
		I915_WRITE(PORT_HOTPLUG_EN, hotplug_en);
-
 
2059
	}
-
 
2060
 
-
 
2061
//	intel_opregion_enable_asle(dev);
2139
 
Line 2062... Line 2140...
2062
 
2140
		I915_WRITE(PORT_HOTPLUG_EN, hotplug_en);
2063
	return 0;
2141
	}
2064
}
2142
}
Line 2117... Line 2195...
2117
		    (iir & I915_DISPLAY_PORT_INTERRUPT)) {
2195
		    (iir & I915_DISPLAY_PORT_INTERRUPT)) {
2118
			u32 hotplug_status = I915_READ(PORT_HOTPLUG_STAT);
2196
			u32 hotplug_status = I915_READ(PORT_HOTPLUG_STAT);
Line 2119... Line 2197...
2119
 
2197
 
2120
			DRM_DEBUG_DRIVER("hotplug event received, stat 0x%08x\n",
2198
			DRM_DEBUG_DRIVER("hotplug event received, stat 0x%08x\n",
2121
				  hotplug_status);
2199
				  hotplug_status);
2122
//			if (hotplug_status & dev_priv->hotplug_supported_mask)
2200
			if (hotplug_status & dev_priv->hotplug_supported_mask)
2123
//				queue_work(dev_priv->wq,
2201
				queue_work(dev_priv->wq,
Line 2124... Line 2202...
2124
//					   &dev_priv->hotplug_work);
2202
					   &dev_priv->hotplug_work);
2125
 
2203
 
2126
			I915_WRITE(PORT_HOTPLUG_STAT, hotplug_status);
2204
			I915_WRITE(PORT_HOTPLUG_STAT, hotplug_status);
Line 2218... Line 2296...
2218
}
2296
}
Line 2219... Line 2297...
2219
 
2297
 
2220
static int i965_irq_postinstall(struct drm_device *dev)
2298
static int i965_irq_postinstall(struct drm_device *dev)
2221
{
2299
{
2222
	drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
-
 
2223
	u32 hotplug_en;
2300
	drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
2224
	u32 enable_mask;
2301
	u32 enable_mask;
Line 2225... Line 2302...
2225
	u32 error_mask;
2302
	u32 error_mask;
2226
 
2303
 
Line 2239... Line 2316...
2239
	if (IS_G4X(dev))
2316
	if (IS_G4X(dev))
2240
		enable_mask |= I915_BSD_USER_INTERRUPT;
2317
		enable_mask |= I915_BSD_USER_INTERRUPT;
Line 2241... Line 2318...
2241
 
2318
 
2242
	dev_priv->pipestat[0] = 0;
2319
	dev_priv->pipestat[0] = 0;
-
 
2320
	dev_priv->pipestat[1] = 0;
Line 2243... Line 2321...
2243
	dev_priv->pipestat[1] = 0;
2321
	i915_enable_pipestat(dev_priv, 0, PIPE_GMBUS_EVENT_ENABLE);
2244
 
2322
 
2245
	/*
2323
	/*
2246
	 * Enable some error detection, note the instruction error mask
2324
	 * Enable some error detection, note the instruction error mask
Line 2259... Line 2337...
2259
 
2337
 
2260
	I915_WRITE(IMR, dev_priv->irq_mask);
2338
	I915_WRITE(IMR, dev_priv->irq_mask);
2261
	I915_WRITE(IER, enable_mask);
2339
	I915_WRITE(IER, enable_mask);
Line -... Line 2340...
-
 
2340
	POSTING_READ(IER);
-
 
2341
 
-
 
2342
	I915_WRITE(PORT_HOTPLUG_EN, 0);
-
 
2343
	POSTING_READ(PORT_HOTPLUG_EN);
-
 
2344
 
-
 
2345
//	intel_opregion_enable_asle(dev);
-
 
2346
 
-
 
2347
	return 0;
-
 
2348
}
-
 
2349
 
-
 
2350
static void i965_hpd_irq_setup(struct drm_device *dev)
-
 
2351
{
-
 
2352
	drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
2262
	POSTING_READ(IER);
2353
	u32 hotplug_en;
2263
 
2354
 
2264
	/* Note HDMI and DP share hotplug bits */
-
 
2265
	hotplug_en = 0;
2355
	/* Note HDMI and DP share hotplug bits */
2266
#if 0
2356
	hotplug_en = 0;
2267
	if (dev_priv->hotplug_supported_mask & HDMIB_HOTPLUG_INT_STATUS)
2357
	if (dev_priv->hotplug_supported_mask & PORTB_HOTPLUG_INT_STATUS)
2268
		hotplug_en |= HDMIB_HOTPLUG_INT_EN;
2358
		hotplug_en |= PORTB_HOTPLUG_INT_EN;
2269
	if (dev_priv->hotplug_supported_mask & HDMIC_HOTPLUG_INT_STATUS)
2359
	if (dev_priv->hotplug_supported_mask & PORTC_HOTPLUG_INT_STATUS)
2270
		hotplug_en |= HDMIC_HOTPLUG_INT_EN;
2360
		hotplug_en |= PORTC_HOTPLUG_INT_EN;
2271
	if (dev_priv->hotplug_supported_mask & HDMID_HOTPLUG_INT_STATUS)
2361
	if (dev_priv->hotplug_supported_mask & PORTD_HOTPLUG_INT_STATUS)
2272
		hotplug_en |= HDMID_HOTPLUG_INT_EN;
2362
		hotplug_en |= PORTD_HOTPLUG_INT_EN;
2273
	if (IS_G4X(dev)) {
2363
	if (IS_G4X(dev)) {
2274
		if (dev_priv->hotplug_supported_mask & SDVOC_HOTPLUG_INT_STATUS_G4X)
2364
		if (dev_priv->hotplug_supported_mask & SDVOC_HOTPLUG_INT_STATUS_G4X)
2275
			hotplug_en |= SDVOC_HOTPLUG_INT_EN;
2365
			hotplug_en |= SDVOC_HOTPLUG_INT_EN;
Line 2290... Line 2380...
2290
		   */
2380
		   */
2291
		if (IS_G4X(dev))
2381
		if (IS_G4X(dev))
2292
			hotplug_en |= CRT_HOTPLUG_ACTIVATION_PERIOD_64;
2382
			hotplug_en |= CRT_HOTPLUG_ACTIVATION_PERIOD_64;
2293
		hotplug_en |= CRT_HOTPLUG_VOLTAGE_COMPARE_50;
2383
		hotplug_en |= CRT_HOTPLUG_VOLTAGE_COMPARE_50;
2294
	}
2384
	}
2295
#endif
2385
 
2296
	/* Ignore TV since it's buggy */
2386
	/* Ignore TV since it's buggy */
Line 2297... Line 2387...
2297
 
2387
 
2298
	I915_WRITE(PORT_HOTPLUG_EN, hotplug_en);
-
 
2299
 
-
 
2300
//	intel_opregion_enable_asle(dev);
-
 
2301
 
-
 
2302
	return 0;
2388
	I915_WRITE(PORT_HOTPLUG_EN, hotplug_en);
Line 2303... Line 2389...
2303
}
2389
}
2304
 
2390
 
2305
static irqreturn_t i965_irq_handler(int irq, void *arg)
2391
static irqreturn_t i965_irq_handler(int irq, void *arg)
Line 2356... Line 2442...
2356
		if (iir & I915_DISPLAY_PORT_INTERRUPT) {
2442
		if (iir & I915_DISPLAY_PORT_INTERRUPT) {
2357
			u32 hotplug_status = I915_READ(PORT_HOTPLUG_STAT);
2443
			u32 hotplug_status = I915_READ(PORT_HOTPLUG_STAT);
Line 2358... Line 2444...
2358
 
2444
 
2359
			DRM_DEBUG_DRIVER("hotplug event received, stat 0x%08x\n",
2445
			DRM_DEBUG_DRIVER("hotplug event received, stat 0x%08x\n",
2360
				  hotplug_status);
2446
				  hotplug_status);
2361
//			if (hotplug_status & dev_priv->hotplug_supported_mask)
2447
			if (hotplug_status & dev_priv->hotplug_supported_mask)
2362
//				queue_work(dev_priv->wq,
2448
				queue_work(dev_priv->wq,
Line 2363... Line 2449...
2363
//					   &dev_priv->hotplug_work);
2449
					   &dev_priv->hotplug_work);
2364
 
2450
 
2365
			I915_WRITE(PORT_HOTPLUG_STAT, hotplug_status);
2451
			I915_WRITE(PORT_HOTPLUG_STAT, hotplug_status);
Line 2393... Line 2479...
2393
 
2479
 
2394
 
2480
 
Line -... Line 2481...
-
 
2481
//		if (blc_event || (iir & I915_ASLE_INTERRUPT))
-
 
2482
//			intel_opregion_asle_intr(dev);
-
 
2483
 
2395
//		if (blc_event || (iir & I915_ASLE_INTERRUPT))
2484
		if (pipe_stats[0] & PIPE_GMBUS_INTERRUPT_STATUS)
2396
//			intel_opregion_asle_intr(dev);
2485
			gmbus_irq_handler(dev);
2397
 
2486
 
2398
		/* With MSI, interrupts are only generated when iir
2487
		/* With MSI, interrupts are only generated when iir
2399
		 * transitions from zero to nonzero.  If another bit got
2488
		 * transitions from zero to nonzero.  If another bit got
Line 2443... Line 2532...
2443
 
2532
 
2444
void intel_irq_init(struct drm_device *dev)
2533
void intel_irq_init(struct drm_device *dev)
2445
{
2534
{
Line -... Line 2535...
-
 
2535
	struct drm_i915_private *dev_priv = dev->dev_private;
-
 
2536
 
-
 
2537
	INIT_WORK(&dev_priv->hotplug_work, i915_hotplug_work_func);
-
 
2538
 
-
 
2539
//	pm_qos_add_request(&dev_priv->pm_qos, PM_QOS_CPU_DMA_LATENCY, PM_QOS_DEFAULT_VALUE);
-
 
2540
 
2446
	struct drm_i915_private *dev_priv = dev->dev_private;
2541
 
2447
 
2542
 
2448
	if (IS_VALLEYVIEW(dev)) {
2543
	if (IS_VALLEYVIEW(dev)) {
2449
		dev->driver->irq_handler = valleyview_irq_handler;
2544
		dev->driver->irq_handler = valleyview_irq_handler;
-
 
2545
		dev->driver->irq_preinstall = valleyview_irq_preinstall;
2450
		dev->driver->irq_preinstall = valleyview_irq_preinstall;
2546
		dev->driver->irq_postinstall = valleyview_irq_postinstall;
2451
		dev->driver->irq_postinstall = valleyview_irq_postinstall;
2547
		dev_priv->display.hpd_irq_setup = valleyview_hpd_irq_setup;
2452
	} else if (IS_IVYBRIDGE(dev)) {
2548
	} else if (IS_IVYBRIDGE(dev) || IS_HASWELL(dev)) {
2453
		/* Share pre & uninstall handlers with ILK/SNB */
2549
		/* Share pre & uninstall handlers with ILK/SNB */
2454
		dev->driver->irq_handler = ivybridge_irq_handler;
2550
		dev->driver->irq_handler = ivybridge_irq_handler;
2455
		dev->driver->irq_preinstall = ironlake_irq_preinstall;
-
 
2456
		dev->driver->irq_postinstall = ivybridge_irq_postinstall;
-
 
2457
	} else if (IS_HASWELL(dev)) {
-
 
2458
		/* Share interrupts handling with IVB */
-
 
2459
		dev->driver->irq_handler = ivybridge_irq_handler;
-
 
2460
		dev->driver->irq_preinstall = ironlake_irq_preinstall;
2551
		dev->driver->irq_preinstall = ironlake_irq_preinstall;
2461
		dev->driver->irq_postinstall = ivybridge_irq_postinstall;
2552
		dev->driver->irq_postinstall = ivybridge_irq_postinstall;
2462
	} else if (HAS_PCH_SPLIT(dev)) {
2553
	} else if (HAS_PCH_SPLIT(dev)) {
2463
		dev->driver->irq_handler = ironlake_irq_handler;
2554
		dev->driver->irq_handler = ironlake_irq_handler;
2464
		dev->driver->irq_preinstall = ironlake_irq_preinstall;
2555
		dev->driver->irq_preinstall = ironlake_irq_preinstall;
2465
		dev->driver->irq_postinstall = ironlake_irq_postinstall;
2556
		dev->driver->irq_postinstall = ironlake_irq_postinstall;
2466
	} else {
2557
	} else {
2467
		if (INTEL_INFO(dev)->gen == 2) {
2558
		if (INTEL_INFO(dev)->gen == 2) {
2468
		} else if (INTEL_INFO(dev)->gen == 3) {
2559
		} else if (INTEL_INFO(dev)->gen == 3) {
2469
			dev->driver->irq_preinstall = i915_irq_preinstall;
2560
			dev->driver->irq_preinstall = i915_irq_preinstall;
-
 
2561
			dev->driver->irq_postinstall = i915_irq_postinstall;
2470
			dev->driver->irq_postinstall = i915_irq_postinstall;
2562
			dev->driver->irq_handler = i915_irq_handler;
2471
			dev->driver->irq_handler = i915_irq_handler;
2563
			dev_priv->display.hpd_irq_setup = i915_hpd_irq_setup;
2472
		} else {
2564
		} else {
2473
			dev->driver->irq_preinstall = i965_irq_preinstall;
2565
			dev->driver->irq_preinstall = i965_irq_preinstall;
-
 
2566
			dev->driver->irq_postinstall = i965_irq_postinstall;
-
 
2567
			dev->driver->irq_handler = i965_irq_handler;
2474
			dev->driver->irq_postinstall = i965_irq_postinstall;
2568
			dev_priv->display.hpd_irq_setup = i965_hpd_irq_setup;
2475
			dev->driver->irq_handler = i965_irq_handler;
2569
		}
Line -... Line 2570...
-
 
2570
	}
-
 
2571
}
2476
		}
2572
 
-
 
2573
void intel_hpd_init(struct drm_device *dev)
-
 
2574
{
-
 
2575
	struct drm_i915_private *dev_priv = dev->dev_private;
2477
	}
2576
 
Line -... Line 2577...
-
 
2577
	if (dev_priv->display.hpd_irq_setup)
2478
 
2578
		dev_priv->display.hpd_irq_setup(dev);
2479
//    printf("device %p driver %p handler %p\n", dev, dev->driver, dev->driver->irq_handler) ;
2579
}
Line 2480... Line 2580...
2480
}
2580