diff options
-rw-r--r-- | drivers/gpu/drm/i915/i915_irq.c | 28 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_bios.c | 3 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_i2c.c | 4 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_pm.c | 3 |
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 | } |