aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/gpu/drm/i915/i915_irq.c28
-rw-r--r--drivers/gpu/drm/i915/intel_bios.c3
-rw-r--r--drivers/gpu/drm/i915/intel_i2c.c4
-rw-r--r--drivers/gpu/drm/i915/intel_pm.c3
4 files changed, 29 insertions, 9 deletions
diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
index 4c5bdd037388..b4e237d9927d 100644
--- a/drivers/gpu/drm/i915/i915_irq.c
+++ b/drivers/gpu/drm/i915/i915_irq.c
@@ -758,7 +758,7 @@ static irqreturn_t ivybridge_irq_handler(int irq, void *arg)
758{ 758{
759 struct drm_device *dev = (struct drm_device *) arg; 759 struct drm_device *dev = (struct drm_device *) arg;
760 drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private; 760 drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
761 u32 de_iir, gt_iir, de_ier, pm_iir, sde_ier; 761 u32 de_iir, gt_iir, de_ier, pm_iir, sde_ier = 0;
762 irqreturn_t ret = IRQ_NONE; 762 irqreturn_t ret = IRQ_NONE;
763 int i; 763 int i;
764 764
@@ -773,9 +773,11 @@ static irqreturn_t ivybridge_irq_handler(int irq, void *arg)
773 * able to process them after we restore SDEIER (as soon as we restore 773 * able to process them after we restore SDEIER (as soon as we restore
774 * it, we'll get an interrupt if SDEIIR still has something to process 774 * it, we'll get an interrupt if SDEIIR still has something to process
775 * due to its back queue). */ 775 * due to its back queue). */
776 sde_ier = I915_READ(SDEIER); 776 if (!HAS_PCH_NOP(dev)) {
777 I915_WRITE(SDEIER, 0); 777 sde_ier = I915_READ(SDEIER);
778 POSTING_READ(SDEIER); 778 I915_WRITE(SDEIER, 0);
779 POSTING_READ(SDEIER);
780 }
779 781
780 gt_iir = I915_READ(GTIIR); 782 gt_iir = I915_READ(GTIIR);
781 if (gt_iir) { 783 if (gt_iir) {
@@ -802,7 +804,7 @@ static irqreturn_t ivybridge_irq_handler(int irq, void *arg)
802 } 804 }
803 805
804 /* check event from PCH */ 806 /* check event from PCH */
805 if (de_iir & DE_PCH_EVENT_IVB) { 807 if (!HAS_PCH_NOP(dev) && (de_iir & DE_PCH_EVENT_IVB)) {
806 u32 pch_iir = I915_READ(SDEIIR); 808 u32 pch_iir = I915_READ(SDEIIR);
807 809
808 cpt_irq_handler(dev, pch_iir); 810 cpt_irq_handler(dev, pch_iir);
@@ -825,8 +827,10 @@ static irqreturn_t ivybridge_irq_handler(int irq, void *arg)
825 827
826 I915_WRITE(DEIER, de_ier); 828 I915_WRITE(DEIER, de_ier);
827 POSTING_READ(DEIER); 829 POSTING_READ(DEIER);
828 I915_WRITE(SDEIER, sde_ier); 830 if (!HAS_PCH_NOP(dev)) {
829 POSTING_READ(SDEIER); 831 I915_WRITE(SDEIER, sde_ier);
832 POSTING_READ(SDEIER);
833 }
830 834
831 return ret; 835 return ret;
832} 836}
@@ -2027,6 +2031,9 @@ static void ironlake_irq_preinstall(struct drm_device *dev)
2027 I915_WRITE(GTIER, 0x0); 2031 I915_WRITE(GTIER, 0x0);
2028 POSTING_READ(GTIER); 2032 POSTING_READ(GTIER);
2029 2033
2034 if (HAS_PCH_NOP(dev))
2035 return;
2036
2030 /* south display irq */ 2037 /* south display irq */
2031 I915_WRITE(SDEIMR, 0xffffffff); 2038 I915_WRITE(SDEIMR, 0xffffffff);
2032 /* 2039 /*
@@ -2112,6 +2119,10 @@ static void ibx_irq_postinstall(struct drm_device *dev)
2112 mask = SDE_GMBUS | SDE_AUX_MASK; 2119 mask = SDE_GMBUS | SDE_AUX_MASK;
2113 else 2120 else
2114 mask = SDE_GMBUS_CPT | SDE_AUX_MASK_CPT; 2121 mask = SDE_GMBUS_CPT | SDE_AUX_MASK_CPT;
2122
2123 if (HAS_PCH_NOP(dev))
2124 return;
2125
2115 I915_WRITE(SDEIIR, I915_READ(SDEIIR)); 2126 I915_WRITE(SDEIIR, I915_READ(SDEIIR));
2116 I915_WRITE(SDEIMR, ~mask); 2127 I915_WRITE(SDEIMR, ~mask);
2117} 2128}
@@ -2306,6 +2317,9 @@ static void ironlake_irq_uninstall(struct drm_device *dev)
2306 I915_WRITE(GTIER, 0x0); 2317 I915_WRITE(GTIER, 0x0);
2307 I915_WRITE(GTIIR, I915_READ(GTIIR)); 2318 I915_WRITE(GTIIR, I915_READ(GTIIR));
2308 2319
2320 if (HAS_PCH_NOP(dev))
2321 return;
2322
2309 I915_WRITE(SDEIMR, 0xffffffff); 2323 I915_WRITE(SDEIMR, 0xffffffff);
2310 I915_WRITE(SDEIER, 0x0); 2324 I915_WRITE(SDEIER, 0x0);
2311 I915_WRITE(SDEIIR, I915_READ(SDEIIR)); 2325 I915_WRITE(SDEIIR, I915_READ(SDEIIR));
diff --git a/drivers/gpu/drm/i915/intel_bios.c b/drivers/gpu/drm/i915/intel_bios.c
index 55ffba1f5818..194df27c89eb 100644
--- a/drivers/gpu/drm/i915/intel_bios.c
+++ b/drivers/gpu/drm/i915/intel_bios.c
@@ -692,6 +692,9 @@ intel_parse_bios(struct drm_device *dev)
692 struct bdb_header *bdb = NULL; 692 struct bdb_header *bdb = NULL;
693 u8 __iomem *bios = NULL; 693 u8 __iomem *bios = NULL;
694 694
695 if (HAS_PCH_NOP(dev))
696 return -ENODEV;
697
695 init_vbt_defaults(dev_priv); 698 init_vbt_defaults(dev_priv);
696 699
697 /* XXX Should this validation be moved to intel_opregion.c? */ 700 /* XXX Should this validation be moved to intel_opregion.c? */
diff --git a/drivers/gpu/drm/i915/intel_i2c.c b/drivers/gpu/drm/i915/intel_i2c.c
index ef4744e1bf0b..5d245031e391 100644
--- a/drivers/gpu/drm/i915/intel_i2c.c
+++ b/drivers/gpu/drm/i915/intel_i2c.c
@@ -522,7 +522,9 @@ int intel_setup_gmbus(struct drm_device *dev)
522 struct drm_i915_private *dev_priv = dev->dev_private; 522 struct drm_i915_private *dev_priv = dev->dev_private;
523 int ret, i; 523 int ret, i;
524 524
525 if (HAS_PCH_SPLIT(dev)) 525 if (HAS_PCH_NOP(dev))
526 return 0;
527 else if (HAS_PCH_SPLIT(dev))
526 dev_priv->gpio_mmio_base = PCH_GPIOA - GPIOA; 528 dev_priv->gpio_mmio_base = PCH_GPIOA - GPIOA;
527 else if (IS_VALLEYVIEW(dev)) 529 else if (IS_VALLEYVIEW(dev))
528 dev_priv->gpio_mmio_base = VLV_DISPLAY_BASE; 530 dev_priv->gpio_mmio_base = VLV_DISPLAY_BASE;
diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c
index 13a0666a53b4..17f157a7b640 100644
--- a/drivers/gpu/drm/i915/intel_pm.c
+++ b/drivers/gpu/drm/i915/intel_pm.c
@@ -3890,7 +3890,8 @@ static void ivybridge_init_clock_gating(struct drm_device *dev)
3890 snpcr |= GEN6_MBC_SNPCR_MED; 3890 snpcr |= GEN6_MBC_SNPCR_MED;
3891 I915_WRITE(GEN6_MBCUNIT_SNPCR, snpcr); 3891 I915_WRITE(GEN6_MBCUNIT_SNPCR, snpcr);
3892 3892
3893 cpt_init_clock_gating(dev); 3893 if (!HAS_PCH_NOP(dev))
3894 cpt_init_clock_gating(dev);
3894 3895
3895 gen6_check_mch_setup(dev); 3896 gen6_check_mch_setup(dev);
3896} 3897}