aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu
diff options
context:
space:
mode:
authorEric Anholt <eric@anholt.net>2009-10-22 19:11:14 -0400
committerEric Anholt <eric@anholt.net>2010-02-26 16:23:17 -0500
commitbad720ff3e8e47a04bd88d9bbc8317e7d7e049d3 (patch)
treef799c660fbe0530398366f46da0fb25381b78978 /drivers/gpu
parent1089e3009572e07a1fe12c3408828f27c96453be (diff)
drm/i915: Add initial bits for VGA modesetting bringup on Sandybridge.
Signed-off-by: Eric Anholt <eric@anholt.net>
Diffstat (limited to 'drivers/gpu')
-rw-r--r--drivers/gpu/drm/i915/i915_debugfs.c2
-rw-r--r--drivers/gpu/drm/i915/i915_dma.c16
-rw-r--r--drivers/gpu/drm/i915/i915_drv.h26
-rw-r--r--drivers/gpu/drm/i915/i915_gem.c2
-rw-r--r--drivers/gpu/drm/i915/i915_gem_tiling.c2
-rw-r--r--drivers/gpu/drm/i915/i915_irq.c18
-rw-r--r--drivers/gpu/drm/i915/intel_bios.c3
-rw-r--r--drivers/gpu/drm/i915/intel_crt.c14
-rw-r--r--drivers/gpu/drm/i915/intel_display.c56
-rw-r--r--drivers/gpu/drm/i915/intel_lvds.c2
-rw-r--r--drivers/gpu/drm/i915/intel_overlay.c2
11 files changed, 87 insertions, 56 deletions
diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c
index 5eed46312442..1376dfe44c95 100644
--- a/drivers/gpu/drm/i915/i915_debugfs.c
+++ b/drivers/gpu/drm/i915/i915_debugfs.c
@@ -162,7 +162,7 @@ static int i915_interrupt_info(struct seq_file *m, void *data)
162 struct drm_device *dev = node->minor->dev; 162 struct drm_device *dev = node->minor->dev;
163 drm_i915_private_t *dev_priv = dev->dev_private; 163 drm_i915_private_t *dev_priv = dev->dev_private;
164 164
165 if (!IS_IRONLAKE(dev)) { 165 if (!HAS_PCH_SPLIT(dev)) {
166 seq_printf(m, "Interrupt enable: %08x\n", 166 seq_printf(m, "Interrupt enable: %08x\n",
167 I915_READ(IER)); 167 I915_READ(IER));
168 seq_printf(m, "Interrupt identity: %08x\n", 168 seq_printf(m, "Interrupt identity: %08x\n",
diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c
index dbfe07c90cbc..7bfded5e90bb 100644
--- a/drivers/gpu/drm/i915/i915_dma.c
+++ b/drivers/gpu/drm/i915/i915_dma.c
@@ -1094,15 +1094,21 @@ static int i915_probe_agp(struct drm_device *dev, uint32_t *aperture_size,
1094 * Some of the preallocated space is taken by the GTT 1094 * Some of the preallocated space is taken by the GTT
1095 * and popup. GTT is 1K per MB of aperture size, and popup is 4K. 1095 * and popup. GTT is 1K per MB of aperture size, and popup is 4K.
1096 */ 1096 */
1097 if (IS_G4X(dev) || IS_PINEVIEW(dev) || IS_IRONLAKE(dev)) 1097 if (IS_G4X(dev) || IS_PINEVIEW(dev) || IS_IRONLAKE(dev) || IS_GEN6(dev))
1098 overhead = 4096; 1098 overhead = 4096;
1099 else 1099 else
1100 overhead = (*aperture_size / 1024) + 4096; 1100 overhead = (*aperture_size / 1024) + 4096;
1101 1101
1102 switch (tmp & INTEL_GMCH_GMS_MASK) { 1102 switch (tmp & INTEL_GMCH_GMS_MASK) {
1103 case INTEL_855_GMCH_GMS_DISABLED: 1103 case INTEL_855_GMCH_GMS_DISABLED:
1104 DRM_ERROR("video memory is disabled\n"); 1104 /* XXX: This is what my A1 silicon has. */
1105 return -1; 1105 if (IS_GEN6(dev)) {
1106 stolen = 64 * 1024 * 1024;
1107 } else {
1108 DRM_ERROR("video memory is disabled\n");
1109 return -1;
1110 }
1111 break;
1106 case INTEL_855_GMCH_GMS_STOLEN_1M: 1112 case INTEL_855_GMCH_GMS_STOLEN_1M:
1107 stolen = 1 * 1024 * 1024; 1113 stolen = 1 * 1024 * 1024;
1108 break; 1114 break;
@@ -1180,7 +1186,7 @@ static unsigned long i915_gtt_to_phys(struct drm_device *dev,
1180 int gtt_offset, gtt_size; 1186 int gtt_offset, gtt_size;
1181 1187
1182 if (IS_I965G(dev)) { 1188 if (IS_I965G(dev)) {
1183 if (IS_G4X(dev) || IS_IRONLAKE(dev)) { 1189 if (IS_G4X(dev) || IS_IRONLAKE(dev) || IS_GEN6(dev)) {
1184 gtt_offset = 2*1024*1024; 1190 gtt_offset = 2*1024*1024;
1185 gtt_size = 2*1024*1024; 1191 gtt_size = 2*1024*1024;
1186 } else { 1192 } else {
@@ -1563,7 +1569,7 @@ int i915_driver_load(struct drm_device *dev, unsigned long flags)
1563 1569
1564 dev->driver->get_vblank_counter = i915_get_vblank_counter; 1570 dev->driver->get_vblank_counter = i915_get_vblank_counter;
1565 dev->max_vblank_count = 0xffffff; /* only 24 bits of frame count */ 1571 dev->max_vblank_count = 0xffffff; /* only 24 bits of frame count */
1566 if (IS_G4X(dev) || IS_IRONLAKE(dev)) { 1572 if (IS_G4X(dev) || IS_IRONLAKE(dev) || IS_GEN6(dev)) {
1567 dev->max_vblank_count = 0xffffffff; /* full 32 bit counter */ 1573 dev->max_vblank_count = 0xffffffff; /* full 32 bit counter */
1568 dev->driver->get_vblank_counter = gm45_get_vblank_counter; 1574 dev->driver->get_vblank_counter = gm45_get_vblank_counter;
1569 } 1575 }
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index ec06d4865a5f..f97592609da4 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -1065,7 +1065,7 @@ extern int i915_wait_ring(struct drm_device * dev, int n, const char *caller);
1065#define IS_845G(dev) ((dev)->pci_device == 0x2562) 1065#define IS_845G(dev) ((dev)->pci_device == 0x2562)
1066#define IS_I85X(dev) ((dev)->pci_device == 0x3582) 1066#define IS_I85X(dev) ((dev)->pci_device == 0x3582)
1067#define IS_I865G(dev) ((dev)->pci_device == 0x2572) 1067#define IS_I865G(dev) ((dev)->pci_device == 0x2572)
1068#define IS_I8XX(dev) (INTEL_INFO(dev)->is_i8xx) 1068#define IS_GEN2(dev) (INTEL_INFO(dev)->is_i8xx)
1069#define IS_I915G(dev) (INTEL_INFO(dev)->is_i915g) 1069#define IS_I915G(dev) (INTEL_INFO(dev)->is_i915g)
1070#define IS_I915GM(dev) ((dev)->pci_device == 0x2592) 1070#define IS_I915GM(dev) ((dev)->pci_device == 0x2592)
1071#define IS_I945G(dev) ((dev)->pci_device == 0x2772) 1071#define IS_I945G(dev) ((dev)->pci_device == 0x2772)
@@ -1084,8 +1084,29 @@ extern int i915_wait_ring(struct drm_device * dev, int n, const char *caller);
1084#define IS_I9XX(dev) (INTEL_INFO(dev)->is_i9xx) 1084#define IS_I9XX(dev) (INTEL_INFO(dev)->is_i9xx)
1085#define IS_MOBILE(dev) (INTEL_INFO(dev)->is_mobile) 1085#define IS_MOBILE(dev) (INTEL_INFO(dev)->is_mobile)
1086 1086
1087#define IS_GEN3(dev) (IS_I915G(dev) || \
1088 IS_I915GM(dev) || \
1089 IS_I945G(dev) || \
1090 IS_I945GM(dev) || \
1091 IS_G33(dev) || \
1092 IS_PINEVIEW(dev))
1093#define IS_GEN4(dev) ((dev)->pci_device == 0x2972 || \
1094 (dev)->pci_device == 0x2982 || \
1095 (dev)->pci_device == 0x2992 || \
1096 (dev)->pci_device == 0x29A2 || \
1097 (dev)->pci_device == 0x2A02 || \
1098 (dev)->pci_device == 0x2A12 || \
1099 (dev)->pci_device == 0x2E02 || \
1100 (dev)->pci_device == 0x2E12 || \
1101 (dev)->pci_device == 0x2E22 || \
1102 (dev)->pci_device == 0x2E32 || \
1103 (dev)->pci_device == 0x2A42 || \
1104 (dev)->pci_device == 0x2E42)
1105
1087#define I915_NEED_GFX_HWS(dev) (INTEL_INFO(dev)->need_gfx_hws) 1106#define I915_NEED_GFX_HWS(dev) (INTEL_INFO(dev)->need_gfx_hws)
1088 1107
1108#define IS_GEN6(dev) ((dev)->pci_device == 0x0102)
1109
1089/* With the 945 and later, Y tiling got adjusted so that it was 32 128-byte 1110/* With the 945 and later, Y tiling got adjusted so that it was 32 128-byte
1090 * rows, which changed the alignment requirements and fence programming. 1111 * rows, which changed the alignment requirements and fence programming.
1091 */ 1112 */
@@ -1106,6 +1127,9 @@ extern int i915_wait_ring(struct drm_device * dev, int n, const char *caller);
1106#define I915_HAS_FBC(dev) (INTEL_INFO(dev)->has_fbc) 1127#define I915_HAS_FBC(dev) (INTEL_INFO(dev)->has_fbc)
1107#define I915_HAS_RC6(dev) (INTEL_INFO(dev)->has_rc6) 1128#define I915_HAS_RC6(dev) (INTEL_INFO(dev)->has_rc6)
1108 1129
1130#define HAS_PCH_SPLIT(dev) (IS_IRONLAKE(dev) || \
1131 IS_GEN6(dev))
1132
1109#define PRIMARY_RINGBUFFER_SIZE (128*1024) 1133#define PRIMARY_RINGBUFFER_SIZE (128*1024)
1110 1134
1111#endif 1135#endif
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index b5df30ca0fa2..a35dc8c0882b 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -1818,7 +1818,7 @@ i915_do_wait_request(struct drm_device *dev, uint32_t seqno, int interruptible)
1818 return -EIO; 1818 return -EIO;
1819 1819
1820 if (!i915_seqno_passed(i915_get_gem_seqno(dev), seqno)) { 1820 if (!i915_seqno_passed(i915_get_gem_seqno(dev), seqno)) {
1821 if (IS_IRONLAKE(dev)) 1821 if (HAS_PCH_SPLIT(dev))
1822 ier = I915_READ(DEIER) | I915_READ(GTIER); 1822 ier = I915_READ(DEIER) | I915_READ(GTIER);
1823 else 1823 else
1824 ier = I915_READ(IER); 1824 ier = I915_READ(IER);
diff --git a/drivers/gpu/drm/i915/i915_gem_tiling.c b/drivers/gpu/drm/i915/i915_gem_tiling.c
index 20653776965a..b5c55d88ff76 100644
--- a/drivers/gpu/drm/i915/i915_gem_tiling.c
+++ b/drivers/gpu/drm/i915/i915_gem_tiling.c
@@ -92,7 +92,7 @@ i915_gem_detect_bit_6_swizzle(struct drm_device *dev)
92 uint32_t swizzle_x = I915_BIT_6_SWIZZLE_UNKNOWN; 92 uint32_t swizzle_x = I915_BIT_6_SWIZZLE_UNKNOWN;
93 uint32_t swizzle_y = I915_BIT_6_SWIZZLE_UNKNOWN; 93 uint32_t swizzle_y = I915_BIT_6_SWIZZLE_UNKNOWN;
94 94
95 if (IS_IRONLAKE(dev)) { 95 if (IS_IRONLAKE(dev) || IS_GEN6(dev)) {
96 /* On Ironlake whatever DRAM config, GPU always do 96 /* On Ironlake whatever DRAM config, GPU always do
97 * same swizzling setup. 97 * same swizzling setup.
98 */ 98 */
diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
index ba1d8314c1ce..ef79d9423f0a 100644
--- a/drivers/gpu/drm/i915/i915_irq.c
+++ b/drivers/gpu/drm/i915/i915_irq.c
@@ -842,7 +842,7 @@ irqreturn_t i915_driver_irq_handler(DRM_IRQ_ARGS)
842 842
843 atomic_inc(&dev_priv->irq_received); 843 atomic_inc(&dev_priv->irq_received);
844 844
845 if (IS_IRONLAKE(dev)) 845 if (HAS_PCH_SPLIT(dev))
846 return ironlake_irq_handler(dev); 846 return ironlake_irq_handler(dev);
847 847
848 iir = I915_READ(IIR); 848 iir = I915_READ(IIR);
@@ -1003,7 +1003,7 @@ void i915_user_irq_get(struct drm_device *dev)
1003 1003
1004 spin_lock_irqsave(&dev_priv->user_irq_lock, irqflags); 1004 spin_lock_irqsave(&dev_priv->user_irq_lock, irqflags);
1005 if (dev->irq_enabled && (++dev_priv->user_irq_refcount == 1)) { 1005 if (dev->irq_enabled && (++dev_priv->user_irq_refcount == 1)) {
1006 if (IS_IRONLAKE(dev)) 1006 if (HAS_PCH_SPLIT(dev))
1007 ironlake_enable_graphics_irq(dev_priv, GT_USER_INTERRUPT); 1007 ironlake_enable_graphics_irq(dev_priv, GT_USER_INTERRUPT);
1008 else 1008 else
1009 i915_enable_irq(dev_priv, I915_USER_INTERRUPT); 1009 i915_enable_irq(dev_priv, I915_USER_INTERRUPT);
@@ -1019,7 +1019,7 @@ void i915_user_irq_put(struct drm_device *dev)
1019 spin_lock_irqsave(&dev_priv->user_irq_lock, irqflags); 1019 spin_lock_irqsave(&dev_priv->user_irq_lock, irqflags);
1020 BUG_ON(dev->irq_enabled && dev_priv->user_irq_refcount <= 0); 1020 BUG_ON(dev->irq_enabled && dev_priv->user_irq_refcount <= 0);
1021 if (dev->irq_enabled && (--dev_priv->user_irq_refcount == 0)) { 1021 if (dev->irq_enabled && (--dev_priv->user_irq_refcount == 0)) {
1022 if (IS_IRONLAKE(dev)) 1022 if (HAS_PCH_SPLIT(dev))
1023 ironlake_disable_graphics_irq(dev_priv, GT_USER_INTERRUPT); 1023 ironlake_disable_graphics_irq(dev_priv, GT_USER_INTERRUPT);
1024 else 1024 else
1025 i915_disable_irq(dev_priv, I915_USER_INTERRUPT); 1025 i915_disable_irq(dev_priv, I915_USER_INTERRUPT);
@@ -1127,7 +1127,7 @@ int i915_enable_vblank(struct drm_device *dev, int pipe)
1127 return -EINVAL; 1127 return -EINVAL;
1128 1128
1129 spin_lock_irqsave(&dev_priv->user_irq_lock, irqflags); 1129 spin_lock_irqsave(&dev_priv->user_irq_lock, irqflags);
1130 if (IS_IRONLAKE(dev)) 1130 if (HAS_PCH_SPLIT(dev))
1131 ironlake_enable_display_irq(dev_priv, (pipe == 0) ? 1131 ironlake_enable_display_irq(dev_priv, (pipe == 0) ?
1132 DE_PIPEA_VBLANK: DE_PIPEB_VBLANK); 1132 DE_PIPEA_VBLANK: DE_PIPEB_VBLANK);
1133 else if (IS_I965G(dev)) 1133 else if (IS_I965G(dev))
@@ -1149,7 +1149,7 @@ void i915_disable_vblank(struct drm_device *dev, int pipe)
1149 unsigned long irqflags; 1149 unsigned long irqflags;
1150 1150
1151 spin_lock_irqsave(&dev_priv->user_irq_lock, irqflags); 1151 spin_lock_irqsave(&dev_priv->user_irq_lock, irqflags);
1152 if (IS_IRONLAKE(dev)) 1152 if (HAS_PCH_SPLIT(dev))
1153 ironlake_disable_display_irq(dev_priv, (pipe == 0) ? 1153 ironlake_disable_display_irq(dev_priv, (pipe == 0) ?
1154 DE_PIPEA_VBLANK: DE_PIPEB_VBLANK); 1154 DE_PIPEA_VBLANK: DE_PIPEB_VBLANK);
1155 else 1155 else
@@ -1163,7 +1163,7 @@ void i915_enable_interrupt (struct drm_device *dev)
1163{ 1163{
1164 struct drm_i915_private *dev_priv = dev->dev_private; 1164 struct drm_i915_private *dev_priv = dev->dev_private;
1165 1165
1166 if (!IS_IRONLAKE(dev)) 1166 if (!HAS_PCH_SPLIT(dev))
1167 opregion_enable_asle(dev); 1167 opregion_enable_asle(dev);
1168 dev_priv->irq_enabled = 1; 1168 dev_priv->irq_enabled = 1;
1169} 1169}
@@ -1349,7 +1349,7 @@ void i915_driver_irq_preinstall(struct drm_device * dev)
1349 INIT_WORK(&dev_priv->hotplug_work, i915_hotplug_work_func); 1349 INIT_WORK(&dev_priv->hotplug_work, i915_hotplug_work_func);
1350 INIT_WORK(&dev_priv->error_work, i915_error_work_func); 1350 INIT_WORK(&dev_priv->error_work, i915_error_work_func);
1351 1351
1352 if (IS_IRONLAKE(dev)) { 1352 if (HAS_PCH_SPLIT(dev)) {
1353 ironlake_irq_preinstall(dev); 1353 ironlake_irq_preinstall(dev);
1354 return; 1354 return;
1355 } 1355 }
@@ -1381,7 +1381,7 @@ int i915_driver_irq_postinstall(struct drm_device *dev)
1381 1381
1382 dev_priv->vblank_pipe = DRM_I915_VBLANK_PIPE_A | DRM_I915_VBLANK_PIPE_B; 1382 dev_priv->vblank_pipe = DRM_I915_VBLANK_PIPE_A | DRM_I915_VBLANK_PIPE_B;
1383 1383
1384 if (IS_IRONLAKE(dev)) 1384 if (HAS_PCH_SPLIT(dev))
1385 return ironlake_irq_postinstall(dev); 1385 return ironlake_irq_postinstall(dev);
1386 1386
1387 /* Unmask the interrupts that we always want on. */ 1387 /* Unmask the interrupts that we always want on. */
@@ -1469,7 +1469,7 @@ void i915_driver_irq_uninstall(struct drm_device * dev)
1469 1469
1470 dev_priv->vblank_pipe = 0; 1470 dev_priv->vblank_pipe = 0;
1471 1471
1472 if (IS_IRONLAKE(dev)) { 1472 if (HAS_PCH_SPLIT(dev)) {
1473 ironlake_irq_uninstall(dev); 1473 ironlake_irq_uninstall(dev);
1474 return; 1474 return;
1475 } 1475 }
diff --git a/drivers/gpu/drm/i915/intel_bios.c b/drivers/gpu/drm/i915/intel_bios.c
index 15fbc1b5a83e..70c9d4ba7042 100644
--- a/drivers/gpu/drm/i915/intel_bios.c
+++ b/drivers/gpu/drm/i915/intel_bios.c
@@ -247,6 +247,7 @@ static void
247parse_general_features(struct drm_i915_private *dev_priv, 247parse_general_features(struct drm_i915_private *dev_priv,
248 struct bdb_header *bdb) 248 struct bdb_header *bdb)
249{ 249{
250 struct drm_device *dev = dev_priv->dev;
250 struct bdb_general_features *general; 251 struct bdb_general_features *general;
251 252
252 /* Set sensible defaults in case we can't find the general block */ 253 /* Set sensible defaults in case we can't find the general block */
@@ -263,7 +264,7 @@ parse_general_features(struct drm_i915_private *dev_priv,
263 if (IS_I85X(dev_priv->dev)) 264 if (IS_I85X(dev_priv->dev))
264 dev_priv->lvds_ssc_freq = 265 dev_priv->lvds_ssc_freq =
265 general->ssc_freq ? 66 : 48; 266 general->ssc_freq ? 66 : 48;
266 else if (IS_IRONLAKE(dev_priv->dev)) 267 else if (IS_IRONLAKE(dev_priv->dev) || IS_GEN6(dev))
267 dev_priv->lvds_ssc_freq = 268 dev_priv->lvds_ssc_freq =
268 general->ssc_freq ? 100 : 120; 269 general->ssc_freq ? 100 : 120;
269 else 270 else
diff --git a/drivers/gpu/drm/i915/intel_crt.c b/drivers/gpu/drm/i915/intel_crt.c
index 79dd4026586f..fccf07470c8f 100644
--- a/drivers/gpu/drm/i915/intel_crt.c
+++ b/drivers/gpu/drm/i915/intel_crt.c
@@ -39,7 +39,7 @@ static void intel_crt_dpms(struct drm_encoder *encoder, int mode)
39 struct drm_i915_private *dev_priv = dev->dev_private; 39 struct drm_i915_private *dev_priv = dev->dev_private;
40 u32 temp, reg; 40 u32 temp, reg;
41 41
42 if (IS_IRONLAKE(dev)) 42 if (HAS_PCH_SPLIT(dev))
43 reg = PCH_ADPA; 43 reg = PCH_ADPA;
44 else 44 else
45 reg = ADPA; 45 reg = ADPA;
@@ -113,7 +113,7 @@ static void intel_crt_mode_set(struct drm_encoder *encoder,
113 else 113 else
114 dpll_md_reg = DPLL_B_MD; 114 dpll_md_reg = DPLL_B_MD;
115 115
116 if (IS_IRONLAKE(dev)) 116 if (HAS_PCH_SPLIT(dev))
117 adpa_reg = PCH_ADPA; 117 adpa_reg = PCH_ADPA;
118 else 118 else
119 adpa_reg = ADPA; 119 adpa_reg = ADPA;
@@ -122,7 +122,7 @@ static void intel_crt_mode_set(struct drm_encoder *encoder,
122 * Disable separate mode multiplier used when cloning SDVO to CRT 122 * Disable separate mode multiplier used when cloning SDVO to CRT
123 * XXX this needs to be adjusted when we really are cloning 123 * XXX this needs to be adjusted when we really are cloning
124 */ 124 */
125 if (IS_I965G(dev) && !IS_IRONLAKE(dev)) { 125 if (IS_I965G(dev) && !HAS_PCH_SPLIT(dev)) {
126 dpll_md = I915_READ(dpll_md_reg); 126 dpll_md = I915_READ(dpll_md_reg);
127 I915_WRITE(dpll_md_reg, 127 I915_WRITE(dpll_md_reg,
128 dpll_md & ~DPLL_MD_UDI_MULTIPLIER_MASK); 128 dpll_md & ~DPLL_MD_UDI_MULTIPLIER_MASK);
@@ -136,11 +136,11 @@ static void intel_crt_mode_set(struct drm_encoder *encoder,
136 136
137 if (intel_crtc->pipe == 0) { 137 if (intel_crtc->pipe == 0) {
138 adpa |= ADPA_PIPE_A_SELECT; 138 adpa |= ADPA_PIPE_A_SELECT;
139 if (!IS_IRONLAKE(dev)) 139 if (!HAS_PCH_SPLIT(dev))
140 I915_WRITE(BCLRPAT_A, 0); 140 I915_WRITE(BCLRPAT_A, 0);
141 } else { 141 } else {
142 adpa |= ADPA_PIPE_B_SELECT; 142 adpa |= ADPA_PIPE_B_SELECT;
143 if (!IS_IRONLAKE(dev)) 143 if (!HAS_PCH_SPLIT(dev))
144 I915_WRITE(BCLRPAT_B, 0); 144 I915_WRITE(BCLRPAT_B, 0);
145 } 145 }
146 146
@@ -202,7 +202,7 @@ static bool intel_crt_detect_hotplug(struct drm_connector *connector)
202 u32 hotplug_en; 202 u32 hotplug_en;
203 int i, tries = 0; 203 int i, tries = 0;
204 204
205 if (IS_IRONLAKE(dev)) 205 if (HAS_PCH_SPLIT(dev))
206 return intel_ironlake_crt_detect_hotplug(connector); 206 return intel_ironlake_crt_detect_hotplug(connector);
207 207
208 /* 208 /*
@@ -524,7 +524,7 @@ void intel_crt_init(struct drm_device *dev)
524 &intel_output->enc); 524 &intel_output->enc);
525 525
526 /* Set up the DDC bus. */ 526 /* Set up the DDC bus. */
527 if (IS_IRONLAKE(dev)) 527 if (HAS_PCH_SPLIT(dev))
528 i2c_reg = PCH_GPIOA; 528 i2c_reg = PCH_GPIOA;
529 else { 529 else {
530 i2c_reg = GPIOA; 530 i2c_reg = GPIOA;
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index 1b5cd833bc70..ce28f18e0852 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -232,7 +232,7 @@ struct intel_limit {
232#define G4X_P2_DISPLAY_PORT_FAST 10 232#define G4X_P2_DISPLAY_PORT_FAST 10
233#define G4X_P2_DISPLAY_PORT_LIMIT 0 233#define G4X_P2_DISPLAY_PORT_LIMIT 0
234 234
235/* Ironlake */ 235/* Ironlake / Sandybridge */
236/* as we calculate clock using (register_value + 2) for 236/* as we calculate clock using (register_value + 2) for
237 N/M1/M2, so here the range value for them is (actual_value-2). 237 N/M1/M2, so here the range value for them is (actual_value-2).
238 */ 238 */
@@ -690,7 +690,7 @@ static const intel_limit_t *intel_limit(struct drm_crtc *crtc)
690 struct drm_device *dev = crtc->dev; 690 struct drm_device *dev = crtc->dev;
691 const intel_limit_t *limit; 691 const intel_limit_t *limit;
692 692
693 if (IS_IRONLAKE(dev)) 693 if (HAS_PCH_SPLIT(dev))
694 limit = intel_ironlake_limit(crtc); 694 limit = intel_ironlake_limit(crtc);
695 else if (IS_G4X(dev)) { 695 else if (IS_G4X(dev)) {
696 limit = intel_g4x_limit(crtc); 696 limit = intel_g4x_limit(crtc);
@@ -1371,7 +1371,7 @@ intel_pipe_set_base(struct drm_crtc *crtc, int x, int y,
1371 dspcntr &= ~DISPPLANE_TILED; 1371 dspcntr &= ~DISPPLANE_TILED;
1372 } 1372 }
1373 1373
1374 if (IS_IRONLAKE(dev)) 1374 if (HAS_PCH_SPLIT(dev))
1375 /* must disable */ 1375 /* must disable */
1376 dspcntr |= DISPPLANE_TRICKLE_FEED_DISABLE; 1376 dspcntr |= DISPPLANE_TRICKLE_FEED_DISABLE;
1377 1377
@@ -1432,7 +1432,7 @@ static void i915_disable_vga (struct drm_device *dev)
1432 u8 sr1; 1432 u8 sr1;
1433 u32 vga_reg; 1433 u32 vga_reg;
1434 1434
1435 if (IS_IRONLAKE(dev)) 1435 if (HAS_PCH_SPLIT(dev))
1436 vga_reg = CPU_VGACNTRL; 1436 vga_reg = CPU_VGACNTRL;
1437 else 1437 else
1438 vga_reg = VGACNTRL; 1438 vga_reg = VGACNTRL;
@@ -2116,7 +2116,7 @@ static bool intel_crtc_mode_fixup(struct drm_crtc *crtc,
2116 struct drm_display_mode *adjusted_mode) 2116 struct drm_display_mode *adjusted_mode)
2117{ 2117{
2118 struct drm_device *dev = crtc->dev; 2118 struct drm_device *dev = crtc->dev;
2119 if (IS_IRONLAKE(dev)) { 2119 if (HAS_PCH_SPLIT(dev)) {
2120 /* FDI link clock is fixed at 2.7G */ 2120 /* FDI link clock is fixed at 2.7G */
2121 if (mode->clock * 3 > 27000 * 4) 2121 if (mode->clock * 3 > 27000 * 4)
2122 return MODE_CLOCK_HIGH; 2122 return MODE_CLOCK_HIGH;
@@ -2983,7 +2983,7 @@ static int intel_crtc_mode_set(struct drm_crtc *crtc,
2983 refclk / 1000); 2983 refclk / 1000);
2984 } else if (IS_I9XX(dev)) { 2984 } else if (IS_I9XX(dev)) {
2985 refclk = 96000; 2985 refclk = 96000;
2986 if (IS_IRONLAKE(dev)) 2986 if (HAS_PCH_SPLIT(dev))
2987 refclk = 120000; /* 120Mhz refclk */ 2987 refclk = 120000; /* 120Mhz refclk */
2988 } else { 2988 } else {
2989 refclk = 48000; 2989 refclk = 48000;
@@ -3041,7 +3041,7 @@ static int intel_crtc_mode_set(struct drm_crtc *crtc,
3041 } 3041 }
3042 3042
3043 /* FDI link */ 3043 /* FDI link */
3044 if (IS_IRONLAKE(dev)) { 3044 if (HAS_PCH_SPLIT(dev)) {
3045 int lane, link_bw, bpp; 3045 int lane, link_bw, bpp;
3046 /* eDP doesn't require FDI link, so just set DP M/N 3046 /* eDP doesn't require FDI link, so just set DP M/N
3047 according to current link config */ 3047 according to current link config */
@@ -3118,7 +3118,7 @@ static int intel_crtc_mode_set(struct drm_crtc *crtc,
3118 * PCH B stepping, previous chipset stepping should be 3118 * PCH B stepping, previous chipset stepping should be
3119 * ignoring this setting. 3119 * ignoring this setting.
3120 */ 3120 */
3121 if (IS_IRONLAKE(dev)) { 3121 if (HAS_PCH_SPLIT(dev)) {
3122 temp = I915_READ(PCH_DREF_CONTROL); 3122 temp = I915_READ(PCH_DREF_CONTROL);
3123 /* Always enable nonspread source */ 3123 /* Always enable nonspread source */
3124 temp &= ~DREF_NONSPREAD_SOURCE_MASK; 3124 temp &= ~DREF_NONSPREAD_SOURCE_MASK;
@@ -3165,7 +3165,7 @@ static int intel_crtc_mode_set(struct drm_crtc *crtc,
3165 reduced_clock.m2; 3165 reduced_clock.m2;
3166 } 3166 }
3167 3167
3168 if (!IS_IRONLAKE(dev)) 3168 if (!HAS_PCH_SPLIT(dev))
3169 dpll = DPLL_VGA_MODE_DIS; 3169 dpll = DPLL_VGA_MODE_DIS;
3170 3170
3171 if (IS_I9XX(dev)) { 3171 if (IS_I9XX(dev)) {
@@ -3178,7 +3178,7 @@ static int intel_crtc_mode_set(struct drm_crtc *crtc,
3178 sdvo_pixel_multiply = adjusted_mode->clock / mode->clock; 3178 sdvo_pixel_multiply = adjusted_mode->clock / mode->clock;
3179 if (IS_I945G(dev) || IS_I945GM(dev) || IS_G33(dev)) 3179 if (IS_I945G(dev) || IS_I945GM(dev) || IS_G33(dev))
3180 dpll |= (sdvo_pixel_multiply - 1) << SDVO_MULTIPLIER_SHIFT_HIRES; 3180 dpll |= (sdvo_pixel_multiply - 1) << SDVO_MULTIPLIER_SHIFT_HIRES;
3181 else if (IS_IRONLAKE(dev)) 3181 else if (HAS_PCH_SPLIT(dev))
3182 dpll |= (sdvo_pixel_multiply - 1) << PLL_REF_SDVO_HDMI_MULTIPLIER_SHIFT; 3182 dpll |= (sdvo_pixel_multiply - 1) << PLL_REF_SDVO_HDMI_MULTIPLIER_SHIFT;
3183 } 3183 }
3184 if (is_dp) 3184 if (is_dp)
@@ -3190,7 +3190,7 @@ static int intel_crtc_mode_set(struct drm_crtc *crtc,
3190 else { 3190 else {
3191 dpll |= (1 << (clock.p1 - 1)) << DPLL_FPA01_P1_POST_DIV_SHIFT; 3191 dpll |= (1 << (clock.p1 - 1)) << DPLL_FPA01_P1_POST_DIV_SHIFT;
3192 /* also FPA1 */ 3192 /* also FPA1 */
3193 if (IS_IRONLAKE(dev)) 3193 if (HAS_PCH_SPLIT(dev))
3194 dpll |= (1 << (clock.p1 - 1)) << DPLL_FPA1_P1_POST_DIV_SHIFT; 3194 dpll |= (1 << (clock.p1 - 1)) << DPLL_FPA1_P1_POST_DIV_SHIFT;
3195 if (IS_G4X(dev) && has_reduced_clock) 3195 if (IS_G4X(dev) && has_reduced_clock)
3196 dpll |= (1 << (reduced_clock.p1 - 1)) << DPLL_FPA1_P1_POST_DIV_SHIFT; 3196 dpll |= (1 << (reduced_clock.p1 - 1)) << DPLL_FPA1_P1_POST_DIV_SHIFT;
@@ -3209,7 +3209,7 @@ static int intel_crtc_mode_set(struct drm_crtc *crtc,
3209 dpll |= DPLLB_LVDS_P2_CLOCK_DIV_14; 3209 dpll |= DPLLB_LVDS_P2_CLOCK_DIV_14;
3210 break; 3210 break;
3211 } 3211 }
3212 if (IS_I965G(dev) && !IS_IRONLAKE(dev)) 3212 if (IS_I965G(dev) && !HAS_PCH_SPLIT(dev))
3213 dpll |= (6 << PLL_LOAD_PULSE_PHASE_SHIFT); 3213 dpll |= (6 << PLL_LOAD_PULSE_PHASE_SHIFT);
3214 } else { 3214 } else {
3215 if (is_lvds) { 3215 if (is_lvds) {
@@ -3243,7 +3243,7 @@ static int intel_crtc_mode_set(struct drm_crtc *crtc,
3243 3243
3244 /* Ironlake's plane is forced to pipe, bit 24 is to 3244 /* Ironlake's plane is forced to pipe, bit 24 is to
3245 enable color space conversion */ 3245 enable color space conversion */
3246 if (!IS_IRONLAKE(dev)) { 3246 if (!HAS_PCH_SPLIT(dev)) {
3247 if (pipe == 0) 3247 if (pipe == 0)
3248 dspcntr &= ~DISPPLANE_SEL_PIPE_MASK; 3248 dspcntr &= ~DISPPLANE_SEL_PIPE_MASK;
3249 else 3249 else
@@ -3270,14 +3270,14 @@ static int intel_crtc_mode_set(struct drm_crtc *crtc,
3270 3270
3271 3271
3272 /* Disable the panel fitter if it was on our pipe */ 3272 /* Disable the panel fitter if it was on our pipe */
3273 if (!IS_IRONLAKE(dev) && intel_panel_fitter_pipe(dev) == pipe) 3273 if (!HAS_PCH_SPLIT(dev) && intel_panel_fitter_pipe(dev) == pipe)
3274 I915_WRITE(PFIT_CONTROL, 0); 3274 I915_WRITE(PFIT_CONTROL, 0);
3275 3275
3276 DRM_DEBUG_KMS("Mode for pipe %c:\n", pipe == 0 ? 'A' : 'B'); 3276 DRM_DEBUG_KMS("Mode for pipe %c:\n", pipe == 0 ? 'A' : 'B');
3277 drm_mode_debug_printmodeline(mode); 3277 drm_mode_debug_printmodeline(mode);
3278 3278
3279 /* assign to Ironlake registers */ 3279 /* assign to Ironlake registers */
3280 if (IS_IRONLAKE(dev)) { 3280 if (HAS_PCH_SPLIT(dev)) {
3281 fp_reg = pch_fp_reg; 3281 fp_reg = pch_fp_reg;
3282 dpll_reg = pch_dpll_reg; 3282 dpll_reg = pch_dpll_reg;
3283 } 3283 }
@@ -3298,7 +3298,7 @@ static int intel_crtc_mode_set(struct drm_crtc *crtc,
3298 if (is_lvds) { 3298 if (is_lvds) {
3299 u32 lvds; 3299 u32 lvds;
3300 3300
3301 if (IS_IRONLAKE(dev)) 3301 if (HAS_PCH_SPLIT(dev))
3302 lvds_reg = PCH_LVDS; 3302 lvds_reg = PCH_LVDS;
3303 3303
3304 lvds = I915_READ(lvds_reg); 3304 lvds = I915_READ(lvds_reg);
@@ -3344,7 +3344,7 @@ static int intel_crtc_mode_set(struct drm_crtc *crtc,
3344 /* Wait for the clocks to stabilize. */ 3344 /* Wait for the clocks to stabilize. */
3345 udelay(150); 3345 udelay(150);
3346 3346
3347 if (IS_I965G(dev) && !IS_IRONLAKE(dev)) { 3347 if (IS_I965G(dev) && !HAS_PCH_SPLIT(dev)) {
3348 if (is_sdvo) { 3348 if (is_sdvo) {
3349 sdvo_pixel_multiply = adjusted_mode->clock / mode->clock; 3349 sdvo_pixel_multiply = adjusted_mode->clock / mode->clock;
3350 I915_WRITE(dpll_md_reg, (0 << DPLL_MD_UDI_DIVIDER_SHIFT) | 3350 I915_WRITE(dpll_md_reg, (0 << DPLL_MD_UDI_DIVIDER_SHIFT) |
@@ -3391,14 +3391,14 @@ static int intel_crtc_mode_set(struct drm_crtc *crtc,
3391 /* pipesrc and dspsize control the size that is scaled from, which should 3391 /* pipesrc and dspsize control the size that is scaled from, which should
3392 * always be the user's requested size. 3392 * always be the user's requested size.
3393 */ 3393 */
3394 if (!IS_IRONLAKE(dev)) { 3394 if (!HAS_PCH_SPLIT(dev)) {
3395 I915_WRITE(dspsize_reg, ((mode->vdisplay - 1) << 16) | 3395 I915_WRITE(dspsize_reg, ((mode->vdisplay - 1) << 16) |
3396 (mode->hdisplay - 1)); 3396 (mode->hdisplay - 1));
3397 I915_WRITE(dsppos_reg, 0); 3397 I915_WRITE(dsppos_reg, 0);
3398 } 3398 }
3399 I915_WRITE(pipesrc_reg, ((mode->hdisplay - 1) << 16) | (mode->vdisplay - 1)); 3399 I915_WRITE(pipesrc_reg, ((mode->hdisplay - 1) << 16) | (mode->vdisplay - 1));
3400 3400
3401 if (IS_IRONLAKE(dev)) { 3401 if (HAS_PCH_SPLIT(dev)) {
3402 I915_WRITE(data_m1_reg, TU_SIZE(m_n.tu) | m_n.gmch_m); 3402 I915_WRITE(data_m1_reg, TU_SIZE(m_n.tu) | m_n.gmch_m);
3403 I915_WRITE(data_n1_reg, TU_SIZE(m_n.tu) | m_n.gmch_n); 3403 I915_WRITE(data_n1_reg, TU_SIZE(m_n.tu) | m_n.gmch_n);
3404 I915_WRITE(link_m1_reg, m_n.link_m); 3404 I915_WRITE(link_m1_reg, m_n.link_m);
@@ -3419,7 +3419,7 @@ static int intel_crtc_mode_set(struct drm_crtc *crtc,
3419 3419
3420 intel_wait_for_vblank(dev); 3420 intel_wait_for_vblank(dev);
3421 3421
3422 if (IS_IRONLAKE(dev)) { 3422 if (HAS_PCH_SPLIT(dev)) {
3423 /* enable address swizzle for tiling buffer */ 3423 /* enable address swizzle for tiling buffer */
3424 temp = I915_READ(DISP_ARB_CTL); 3424 temp = I915_READ(DISP_ARB_CTL);
3425 I915_WRITE(DISP_ARB_CTL, temp | DISP_TILE_SURFACE_SWIZZLING); 3425 I915_WRITE(DISP_ARB_CTL, temp | DISP_TILE_SURFACE_SWIZZLING);
@@ -3454,7 +3454,7 @@ void intel_crtc_load_lut(struct drm_crtc *crtc)
3454 return; 3454 return;
3455 3455
3456 /* use legacy palette for Ironlake */ 3456 /* use legacy palette for Ironlake */
3457 if (IS_IRONLAKE(dev)) 3457 if (HAS_PCH_SPLIT(dev))
3458 palreg = (intel_crtc->pipe == 0) ? LGC_PALETTE_A : 3458 palreg = (intel_crtc->pipe == 0) ? LGC_PALETTE_A :
3459 LGC_PALETTE_B; 3459 LGC_PALETTE_B;
3460 3460
@@ -3937,7 +3937,7 @@ static void intel_increase_pllclock(struct drm_crtc *crtc, bool schedule)
3937 int dpll_reg = (pipe == 0) ? DPLL_A : DPLL_B; 3937 int dpll_reg = (pipe == 0) ? DPLL_A : DPLL_B;
3938 int dpll = I915_READ(dpll_reg); 3938 int dpll = I915_READ(dpll_reg);
3939 3939
3940 if (IS_IRONLAKE(dev)) 3940 if (HAS_PCH_SPLIT(dev))
3941 return; 3941 return;
3942 3942
3943 if (!dev_priv->lvds_downclock_avail) 3943 if (!dev_priv->lvds_downclock_avail)
@@ -3976,7 +3976,7 @@ static void intel_decrease_pllclock(struct drm_crtc *crtc)
3976 int dpll_reg = (pipe == 0) ? DPLL_A : DPLL_B; 3976 int dpll_reg = (pipe == 0) ? DPLL_A : DPLL_B;
3977 int dpll = I915_READ(dpll_reg); 3977 int dpll = I915_READ(dpll_reg);
3978 3978
3979 if (IS_IRONLAKE(dev)) 3979 if (HAS_PCH_SPLIT(dev))
3980 return; 3980 return;
3981 3981
3982 if (!dev_priv->lvds_downclock_avail) 3982 if (!dev_priv->lvds_downclock_avail)
@@ -4418,7 +4418,7 @@ static void intel_setup_outputs(struct drm_device *dev)
4418 if (IS_MOBILE(dev) && !IS_I830(dev)) 4418 if (IS_MOBILE(dev) && !IS_I830(dev))
4419 intel_lvds_init(dev); 4419 intel_lvds_init(dev);
4420 4420
4421 if (IS_IRONLAKE(dev)) { 4421 if (HAS_PCH_SPLIT(dev)) {
4422 int found; 4422 int found;
4423 4423
4424 if (IS_MOBILE(dev) && (I915_READ(DP_A) & DP_DETECTED)) 4424 if (IS_MOBILE(dev) && (I915_READ(DP_A) & DP_DETECTED))
@@ -4487,7 +4487,7 @@ static void intel_setup_outputs(struct drm_device *dev)
4487 DRM_DEBUG_KMS("probing DP_D\n"); 4487 DRM_DEBUG_KMS("probing DP_D\n");
4488 intel_dp_init(dev, DP_D); 4488 intel_dp_init(dev, DP_D);
4489 } 4489 }
4490 } else if (IS_I8XX(dev)) 4490 } else if (IS_GEN2(dev))
4491 intel_dvo_init(dev); 4491 intel_dvo_init(dev);
4492 4492
4493 if (SUPPORTS_TV(dev)) 4493 if (SUPPORTS_TV(dev))
@@ -4716,7 +4716,7 @@ void intel_init_clock_gating(struct drm_device *dev)
4716 * Disable clock gating reported to work incorrectly according to the 4716 * Disable clock gating reported to work incorrectly according to the
4717 * specs, but enable as much else as we can. 4717 * specs, but enable as much else as we can.
4718 */ 4718 */
4719 if (IS_IRONLAKE(dev)) { 4719 if (HAS_PCH_SPLIT(dev)) {
4720 return; 4720 return;
4721 } else if (IS_G4X(dev)) { 4721 } else if (IS_G4X(dev)) {
4722 uint32_t dspclk_gate; 4722 uint32_t dspclk_gate;
@@ -4789,7 +4789,7 @@ static void intel_init_display(struct drm_device *dev)
4789 struct drm_i915_private *dev_priv = dev->dev_private; 4789 struct drm_i915_private *dev_priv = dev->dev_private;
4790 4790
4791 /* We always want a DPMS function */ 4791 /* We always want a DPMS function */
4792 if (IS_IRONLAKE(dev)) 4792 if (HAS_PCH_SPLIT(dev))
4793 dev_priv->display.dpms = ironlake_crtc_dpms; 4793 dev_priv->display.dpms = ironlake_crtc_dpms;
4794 else 4794 else
4795 dev_priv->display.dpms = i9xx_crtc_dpms; 4795 dev_priv->display.dpms = i9xx_crtc_dpms;
@@ -4832,7 +4832,7 @@ static void intel_init_display(struct drm_device *dev)
4832 i830_get_display_clock_speed; 4832 i830_get_display_clock_speed;
4833 4833
4834 /* For FIFO watermark updates */ 4834 /* For FIFO watermark updates */
4835 if (IS_IRONLAKE(dev)) 4835 if (HAS_PCH_SPLIT(dev))
4836 dev_priv->display.update_wm = NULL; 4836 dev_priv->display.update_wm = NULL;
4837 else if (IS_G4X(dev)) 4837 else if (IS_G4X(dev))
4838 dev_priv->display.update_wm = g4x_update_wm; 4838 dev_priv->display.update_wm = g4x_update_wm;
diff --git a/drivers/gpu/drm/i915/intel_lvds.c b/drivers/gpu/drm/i915/intel_lvds.c
index 93031a75d112..e91e81de5c71 100644
--- a/drivers/gpu/drm/i915/intel_lvds.c
+++ b/drivers/gpu/drm/i915/intel_lvds.c
@@ -661,7 +661,7 @@ static enum drm_connector_status intel_lvds_detect(struct drm_connector *connect
661 /* ACPI lid methods were generally unreliable in this generation, so 661 /* ACPI lid methods were generally unreliable in this generation, so
662 * don't even bother. 662 * don't even bother.
663 */ 663 */
664 if (IS_I8XX(dev)) 664 if (IS_GEN2(dev))
665 return connector_status_connected; 665 return connector_status_connected;
666 666
667 if (!dmi_check_system(bad_lid_status) && !acpi_lid_open()) 667 if (!dmi_check_system(bad_lid_status) && !acpi_lid_open())
diff --git a/drivers/gpu/drm/i915/intel_overlay.c b/drivers/gpu/drm/i915/intel_overlay.c
index c3fa406912b3..d355d1d527e7 100644
--- a/drivers/gpu/drm/i915/intel_overlay.c
+++ b/drivers/gpu/drm/i915/intel_overlay.c
@@ -172,7 +172,7 @@ struct overlay_registers {
172#define OFC_UPDATE 0x1 172#define OFC_UPDATE 0x1
173 173
174#define OVERLAY_NONPHYSICAL(dev) (IS_G33(dev) || IS_I965G(dev)) 174#define OVERLAY_NONPHYSICAL(dev) (IS_G33(dev) || IS_I965G(dev))
175#define OVERLAY_EXISTS(dev) (!IS_G4X(dev) && !IS_IRONLAKE(dev)) 175#define OVERLAY_EXISTS(dev) (!IS_G4X(dev) && !IS_IRONLAKE(dev) && !IS_GEN6(dev))
176 176
177 177
178static struct overlay_registers *intel_overlay_map_regs_atomic(struct intel_overlay *overlay) 178static struct overlay_registers *intel_overlay_map_regs_atomic(struct intel_overlay *overlay)