Commit a6c45cf0 authored by Chris Wilson's avatar Chris Wilson

drm/i915: INTEL_INFO->gen supercedes i8xx, i9xx, i965g

Avoid confusion between i965g meaning broadwater and the gen4+ chipset
families.
Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
parent 219adae1
...@@ -58,13 +58,9 @@ static int i915_capabilities(struct seq_file *m, void *data) ...@@ -58,13 +58,9 @@ static int i915_capabilities(struct seq_file *m, void *data)
seq_printf(m, "gen: %d\n", info->gen); seq_printf(m, "gen: %d\n", info->gen);
#define B(x) seq_printf(m, #x ": %s\n", yesno(info->x)) #define B(x) seq_printf(m, #x ": %s\n", yesno(info->x))
B(is_mobile); B(is_mobile);
B(is_i8xx);
B(is_i85x); B(is_i85x);
B(is_i915g); B(is_i915g);
B(is_i9xx);
B(is_i945gm); B(is_i945gm);
B(is_i965g);
B(is_i965gm);
B(is_g33); B(is_g33);
B(need_gfx_hws); B(need_gfx_hws);
B(is_g4x); B(is_g4x);
...@@ -79,6 +75,7 @@ static int i915_capabilities(struct seq_file *m, void *data) ...@@ -79,6 +75,7 @@ static int i915_capabilities(struct seq_file *m, void *data)
B(cursor_needs_physical); B(cursor_needs_physical);
B(has_overlay); B(has_overlay);
B(overlay_needs_physical); B(overlay_needs_physical);
B(supports_tv);
#undef B #undef B
return 0; return 0;
...@@ -473,7 +470,7 @@ static int i915_ringbuffer_info(struct seq_file *m, void *data) ...@@ -473,7 +470,7 @@ static int i915_ringbuffer_info(struct seq_file *m, void *data)
seq_printf(m, "RingHead : %08x\n", head); seq_printf(m, "RingHead : %08x\n", head);
seq_printf(m, "RingTail : %08x\n", tail); seq_printf(m, "RingTail : %08x\n", tail);
seq_printf(m, "RingSize : %08lx\n", dev_priv->render_ring.size); seq_printf(m, "RingSize : %08lx\n", dev_priv->render_ring.size);
seq_printf(m, "Acthd : %08x\n", I915_READ(IS_I965G(dev) ? ACTHD_I965 : ACTHD)); seq_printf(m, "Acthd : %08x\n", I915_READ(INTEL_INFO(dev)->gen >= 4 ? ACTHD_I965 : ACTHD));
return 0; return 0;
} }
...@@ -535,7 +532,7 @@ static int i915_error_state(struct seq_file *m, void *unused) ...@@ -535,7 +532,7 @@ static int i915_error_state(struct seq_file *m, void *unused)
seq_printf(m, " IPEHR: 0x%08x\n", error->ipehr); seq_printf(m, " IPEHR: 0x%08x\n", error->ipehr);
seq_printf(m, " INSTDONE: 0x%08x\n", error->instdone); seq_printf(m, " INSTDONE: 0x%08x\n", error->instdone);
seq_printf(m, " ACTHD: 0x%08x\n", error->acthd); seq_printf(m, " ACTHD: 0x%08x\n", error->acthd);
if (IS_I965G(dev)) { if (INTEL_INFO(dev)->gen >= 4) {
seq_printf(m, " INSTPS: 0x%08x\n", error->instps); seq_printf(m, " INSTPS: 0x%08x\n", error->instps);
seq_printf(m, " INSTDONE1: 0x%08x\n", error->instdone1); seq_printf(m, " INSTDONE1: 0x%08x\n", error->instdone1);
} }
...@@ -757,7 +754,7 @@ static int i915_sr_status(struct seq_file *m, void *unused) ...@@ -757,7 +754,7 @@ static int i915_sr_status(struct seq_file *m, void *unused)
if (IS_IRONLAKE(dev)) if (IS_IRONLAKE(dev))
sr_enabled = I915_READ(WM1_LP_ILK) & WM1_LP_SR_EN; sr_enabled = I915_READ(WM1_LP_ILK) & WM1_LP_SR_EN;
else if (IS_I965GM(dev) || IS_I945G(dev) || IS_I945GM(dev)) else if (IS_CRESTLINE(dev) || IS_I945G(dev) || IS_I945GM(dev))
sr_enabled = I915_READ(FW_BLC_SELF) & FW_BLC_SELF_EN; sr_enabled = I915_READ(FW_BLC_SELF) & FW_BLC_SELF_EN;
else if (IS_I915GM(dev)) else if (IS_I915GM(dev))
sr_enabled = I915_READ(INSTPM) & INSTPM_SELF_EN; sr_enabled = I915_READ(INSTPM) & INSTPM_SELF_EN;
......
...@@ -63,7 +63,7 @@ static int i915_init_phys_hws(struct drm_device *dev) ...@@ -63,7 +63,7 @@ static int i915_init_phys_hws(struct drm_device *dev)
memset(dev_priv->render_ring.status_page.page_addr, 0, PAGE_SIZE); memset(dev_priv->render_ring.status_page.page_addr, 0, PAGE_SIZE);
if (IS_I965G(dev)) if (INTEL_INFO(dev)->gen >= 4)
dev_priv->dma_status_page |= (dev_priv->dma_status_page >> 28) & dev_priv->dma_status_page |= (dev_priv->dma_status_page >> 28) &
0xf0; 0xf0;
...@@ -376,7 +376,7 @@ i915_emit_box(struct drm_device *dev, ...@@ -376,7 +376,7 @@ i915_emit_box(struct drm_device *dev,
return -EINVAL; return -EINVAL;
} }
if (IS_I965G(dev)) { if (INTEL_INFO(dev)->gen >= 4) {
BEGIN_LP_RING(4); BEGIN_LP_RING(4);
OUT_RING(GFX_OP_DRAWRECT_INFO_I965); OUT_RING(GFX_OP_DRAWRECT_INFO_I965);
OUT_RING((box.x1 & 0xffff) | (box.y1 << 16)); OUT_RING((box.x1 & 0xffff) | (box.y1 << 16));
...@@ -480,7 +480,7 @@ static int i915_dispatch_batchbuffer(struct drm_device * dev, ...@@ -480,7 +480,7 @@ static int i915_dispatch_batchbuffer(struct drm_device * dev,
if (!IS_I830(dev) && !IS_845G(dev)) { if (!IS_I830(dev) && !IS_845G(dev)) {
BEGIN_LP_RING(2); BEGIN_LP_RING(2);
if (IS_I965G(dev)) { if (INTEL_INFO(dev)->gen >= 4) {
OUT_RING(MI_BATCH_BUFFER_START | (2 << 6) | MI_BATCH_NON_SECURE_I965); OUT_RING(MI_BATCH_BUFFER_START | (2 << 6) | MI_BATCH_NON_SECURE_I965);
OUT_RING(batch->start); OUT_RING(batch->start);
} else { } else {
...@@ -887,12 +887,12 @@ static int ...@@ -887,12 +887,12 @@ static int
intel_alloc_mchbar_resource(struct drm_device *dev) intel_alloc_mchbar_resource(struct drm_device *dev)
{ {
drm_i915_private_t *dev_priv = dev->dev_private; drm_i915_private_t *dev_priv = dev->dev_private;
int reg = IS_I965G(dev) ? MCHBAR_I965 : MCHBAR_I915; int reg = INTEL_INFO(dev)->gen >= 4 ? MCHBAR_I965 : MCHBAR_I915;
u32 temp_lo, temp_hi = 0; u32 temp_lo, temp_hi = 0;
u64 mchbar_addr; u64 mchbar_addr;
int ret; int ret;
if (IS_I965G(dev)) if (INTEL_INFO(dev)->gen >= 4)
pci_read_config_dword(dev_priv->bridge_dev, reg + 4, &temp_hi); pci_read_config_dword(dev_priv->bridge_dev, reg + 4, &temp_hi);
pci_read_config_dword(dev_priv->bridge_dev, reg, &temp_lo); pci_read_config_dword(dev_priv->bridge_dev, reg, &temp_lo);
mchbar_addr = ((u64)temp_hi << 32) | temp_lo; mchbar_addr = ((u64)temp_hi << 32) | temp_lo;
...@@ -919,7 +919,7 @@ intel_alloc_mchbar_resource(struct drm_device *dev) ...@@ -919,7 +919,7 @@ intel_alloc_mchbar_resource(struct drm_device *dev)
return ret; return ret;
} }
if (IS_I965G(dev)) if (INTEL_INFO(dev)->gen >= 4)
pci_write_config_dword(dev_priv->bridge_dev, reg + 4, pci_write_config_dword(dev_priv->bridge_dev, reg + 4,
upper_32_bits(dev_priv->mch_res.start)); upper_32_bits(dev_priv->mch_res.start));
...@@ -933,7 +933,7 @@ static void ...@@ -933,7 +933,7 @@ static void
intel_setup_mchbar(struct drm_device *dev) intel_setup_mchbar(struct drm_device *dev)
{ {
drm_i915_private_t *dev_priv = dev->dev_private; drm_i915_private_t *dev_priv = dev->dev_private;
int mchbar_reg = IS_I965G(dev) ? MCHBAR_I965 : MCHBAR_I915; int mchbar_reg = INTEL_INFO(dev)->gen >= 4 ? MCHBAR_I965 : MCHBAR_I915;
u32 temp; u32 temp;
bool enabled; bool enabled;
...@@ -970,7 +970,7 @@ static void ...@@ -970,7 +970,7 @@ static void
intel_teardown_mchbar(struct drm_device *dev) intel_teardown_mchbar(struct drm_device *dev)
{ {
drm_i915_private_t *dev_priv = dev->dev_private; drm_i915_private_t *dev_priv = dev->dev_private;
int mchbar_reg = IS_I965G(dev) ? MCHBAR_I965 : MCHBAR_I915; int mchbar_reg = INTEL_INFO(dev)->gen >= 4 ? MCHBAR_I965 : MCHBAR_I915;
u32 temp; u32 temp;
if (dev_priv->mchbar_need_disable) { if (dev_priv->mchbar_need_disable) {
...@@ -1012,11 +1012,11 @@ static unsigned long i915_gtt_to_phys(struct drm_device *dev, ...@@ -1012,11 +1012,11 @@ static unsigned long i915_gtt_to_phys(struct drm_device *dev,
{ {
unsigned long *gtt; unsigned long *gtt;
unsigned long entry, phys; unsigned long entry, phys;
int gtt_bar = IS_I9XX(dev) ? 0 : 1; int gtt_bar = IS_GEN2(dev) ? 1 : 0;
int gtt_offset, gtt_size; int gtt_offset, gtt_size;
if (IS_I965G(dev)) { if (INTEL_INFO(dev)->gen >= 4) {
if (IS_G4X(dev) || IS_IRONLAKE(dev) || IS_GEN6(dev)) { if (IS_G4X(dev) || INTEL_INFO(dev)->gen > 4) {
gtt_offset = 2*1024*1024; gtt_offset = 2*1024*1024;
gtt_size = 2*1024*1024; gtt_size = 2*1024*1024;
} else { } else {
...@@ -1041,10 +1041,8 @@ static unsigned long i915_gtt_to_phys(struct drm_device *dev, ...@@ -1041,10 +1041,8 @@ static unsigned long i915_gtt_to_phys(struct drm_device *dev,
DRM_DEBUG_DRIVER("GTT addr: 0x%08lx, PTE: 0x%08lx\n", gtt_addr, entry); DRM_DEBUG_DRIVER("GTT addr: 0x%08lx, PTE: 0x%08lx\n", gtt_addr, entry);
/* Mask out these reserved bits on this hardware. */ /* Mask out these reserved bits on this hardware. */
if (!IS_I9XX(dev) || IS_I915G(dev) || IS_I915GM(dev) || if (INTEL_INFO(dev)->gen < 4 && !IS_G33(dev))
IS_I945G(dev) || IS_I945GM(dev)) {
entry &= ~PTE_ADDRESS_MASK_HIGH; entry &= ~PTE_ADDRESS_MASK_HIGH;
}
/* If it's not a mapping type we know, then bail. */ /* If it's not a mapping type we know, then bail. */
if ((entry & PTE_MAPPING_TYPE_MASK) != PTE_MAPPING_TYPE_UNCACHED && if ((entry & PTE_MAPPING_TYPE_MASK) != PTE_MAPPING_TYPE_UNCACHED &&
...@@ -1899,7 +1897,7 @@ int i915_driver_load(struct drm_device *dev, unsigned long flags) ...@@ -1899,7 +1897,7 @@ int i915_driver_load(struct drm_device *dev, unsigned long flags)
dev_priv->info = (struct intel_device_info *) flags; dev_priv->info = (struct intel_device_info *) flags;
/* Add register map (needed for suspend/resume) */ /* Add register map (needed for suspend/resume) */
mmio_bar = IS_I9XX(dev) ? 0 : 1; mmio_bar = IS_GEN2(dev) ? 1 : 0;
base = pci_resource_start(dev->pdev, mmio_bar); base = pci_resource_start(dev->pdev, mmio_bar);
size = pci_resource_len(dev->pdev, mmio_bar); size = pci_resource_len(dev->pdev, mmio_bar);
......
...@@ -61,97 +61,101 @@ extern int intel_agp_enabled; ...@@ -61,97 +61,101 @@ extern int intel_agp_enabled;
.driver_data = (unsigned long) info } .driver_data = (unsigned long) info }
static const struct intel_device_info intel_i830_info = { static const struct intel_device_info intel_i830_info = {
.gen = 2, .is_i8xx = 1, .is_mobile = 1, .cursor_needs_physical = 1, .gen = 2, .is_mobile = 1, .cursor_needs_physical = 1,
.has_overlay = 1, .overlay_needs_physical = 1, .has_overlay = 1, .overlay_needs_physical = 1,
}; };
static const struct intel_device_info intel_845g_info = { static const struct intel_device_info intel_845g_info = {
.gen = 2, .is_i8xx = 1, .gen = 2,
.has_overlay = 1, .overlay_needs_physical = 1, .has_overlay = 1, .overlay_needs_physical = 1,
}; };
static const struct intel_device_info intel_i85x_info = { static const struct intel_device_info intel_i85x_info = {
.gen = 2, .is_i8xx = 1, .is_i85x = 1, .is_mobile = 1, .gen = 2, .is_i85x = 1, .is_mobile = 1,
.cursor_needs_physical = 1, .cursor_needs_physical = 1,
.has_overlay = 1, .overlay_needs_physical = 1, .has_overlay = 1, .overlay_needs_physical = 1,
}; };
static const struct intel_device_info intel_i865g_info = { static const struct intel_device_info intel_i865g_info = {
.gen = 2, .is_i8xx = 1, .gen = 2,
.has_overlay = 1, .overlay_needs_physical = 1, .has_overlay = 1, .overlay_needs_physical = 1,
}; };
static const struct intel_device_info intel_i915g_info = { static const struct intel_device_info intel_i915g_info = {
.gen = 3, .is_i915g = 1, .is_i9xx = 1, .cursor_needs_physical = 1, .gen = 3, .is_i915g = 1, .cursor_needs_physical = 1,
.has_overlay = 1, .overlay_needs_physical = 1, .has_overlay = 1, .overlay_needs_physical = 1,
}; };
static const struct intel_device_info intel_i915gm_info = { static const struct intel_device_info intel_i915gm_info = {
.gen = 3, .is_i9xx = 1, .is_mobile = 1, .gen = 3, .is_mobile = 1,
.cursor_needs_physical = 1, .cursor_needs_physical = 1,
.has_overlay = 1, .overlay_needs_physical = 1, .has_overlay = 1, .overlay_needs_physical = 1,
.supports_tv = 1,
}; };
static const struct intel_device_info intel_i945g_info = { static const struct intel_device_info intel_i945g_info = {
.gen = 3, .is_i9xx = 1, .has_hotplug = 1, .cursor_needs_physical = 1, .gen = 3, .has_hotplug = 1, .cursor_needs_physical = 1,
.has_overlay = 1, .overlay_needs_physical = 1, .has_overlay = 1, .overlay_needs_physical = 1,
}; };
static const struct intel_device_info intel_i945gm_info = { static const struct intel_device_info intel_i945gm_info = {
.gen = 3, .is_i945gm = 1, .is_i9xx = 1, .is_mobile = 1, .gen = 3, .is_i945gm = 1, .is_mobile = 1,
.has_hotplug = 1, .cursor_needs_physical = 1, .has_hotplug = 1, .cursor_needs_physical = 1,
.has_overlay = 1, .overlay_needs_physical = 1, .has_overlay = 1, .overlay_needs_physical = 1,
.supports_tv = 1,
}; };
static const struct intel_device_info intel_i965g_info = { static const struct intel_device_info intel_i965g_info = {
.gen = 4, .is_broadwater = 1, .is_i965g = 1, .is_i9xx = 1, .gen = 4, .is_broadwater = 1,
.has_hotplug = 1, .has_hotplug = 1,
.has_overlay = 1, .has_overlay = 1,
}; };
static const struct intel_device_info intel_i965gm_info = { static const struct intel_device_info intel_i965gm_info = {
.gen = 4, .is_crestline = 1, .is_i965g = 1, .is_i965gm = 1, .is_i9xx = 1, .gen = 4, .is_crestline = 1,
.is_mobile = 1, .has_fbc = 1, .has_rc6 = 1, .has_hotplug = 1, .is_mobile = 1, .has_fbc = 1, .has_rc6 = 1, .has_hotplug = 1,
.has_overlay = 1, .has_overlay = 1,
.supports_tv = 1,
}; };
static const struct intel_device_info intel_g33_info = { static const struct intel_device_info intel_g33_info = {
.gen = 3, .is_g33 = 1, .is_i9xx = 1, .gen = 3, .is_g33 = 1,
.need_gfx_hws = 1, .has_hotplug = 1, .need_gfx_hws = 1, .has_hotplug = 1,
.has_overlay = 1, .has_overlay = 1,
}; };
static const struct intel_device_info intel_g45_info = { static const struct intel_device_info intel_g45_info = {
.gen = 4, .is_i965g = 1, .is_g4x = 1, .is_i9xx = 1, .need_gfx_hws = 1, .gen = 4, .is_g4x = 1, .need_gfx_hws = 1,
.has_pipe_cxsr = 1, .has_hotplug = 1, .has_pipe_cxsr = 1, .has_hotplug = 1,
}; };
static const struct intel_device_info intel_gm45_info = { static const struct intel_device_info intel_gm45_info = {
.gen = 4, .is_i965g = 1, .is_g4x = 1, .is_i9xx = 1, .gen = 4, .is_g4x = 1,
.is_mobile = 1, .need_gfx_hws = 1, .has_fbc = 1, .has_rc6 = 1, .is_mobile = 1, .need_gfx_hws = 1, .has_fbc = 1, .has_rc6 = 1,
.has_pipe_cxsr = 1, .has_hotplug = 1, .has_pipe_cxsr = 1, .has_hotplug = 1,
.supports_tv = 1,
}; };
static const struct intel_device_info intel_pineview_info = { static const struct intel_device_info intel_pineview_info = {
.gen = 3, .is_g33 = 1, .is_pineview = 1, .is_mobile = 1, .is_i9xx = 1, .gen = 3, .is_g33 = 1, .is_pineview = 1, .is_mobile = 1,
.need_gfx_hws = 1, .has_hotplug = 1, .need_gfx_hws = 1, .has_hotplug = 1,
.has_overlay = 1, .has_overlay = 1,
}; };
static const struct intel_device_info intel_ironlake_d_info = { static const struct intel_device_info intel_ironlake_d_info = {
.gen = 5, .is_ironlake = 1, .is_i965g = 1, .is_i9xx = 1, .gen = 5, .is_ironlake = 1,
.need_gfx_hws = 1, .has_pipe_cxsr = 1, .has_hotplug = 1, .need_gfx_hws = 1, .has_pipe_cxsr = 1, .has_hotplug = 1,
}; };
static const struct intel_device_info intel_ironlake_m_info = { static const struct intel_device_info intel_ironlake_m_info = {
.gen = 5, .is_ironlake = 1, .is_mobile = 1, .is_i965g = 1, .is_i9xx = 1, .gen = 5, .is_ironlake = 1, .is_mobile = 1,
.need_gfx_hws = 1, .has_fbc = 1, .has_rc6 = 1, .has_hotplug = 1, .need_gfx_hws = 1, .has_fbc = 1, .has_rc6 = 1, .has_hotplug = 1,
}; };
static const struct intel_device_info intel_sandybridge_d_info = { static const struct intel_device_info intel_sandybridge_d_info = {
.gen = 6, .is_i965g = 1, .is_i9xx = 1, .gen = 6,
.need_gfx_hws = 1, .has_hotplug = 1, .need_gfx_hws = 1, .has_hotplug = 1,
}; };
static const struct intel_device_info intel_sandybridge_m_info = { static const struct intel_device_info intel_sandybridge_m_info = {
.gen = 6, .is_i965g = 1, .is_mobile = 1, .is_i9xx = 1, .gen = 6, .is_mobile = 1,
.need_gfx_hws = 1, .has_hotplug = 1, .need_gfx_hws = 1, .has_hotplug = 1,
}; };
...@@ -359,33 +363,27 @@ int i965_reset(struct drm_device *dev, u8 flags) ...@@ -359,33 +363,27 @@ int i965_reset(struct drm_device *dev, u8 flags)
if (need_display) if (need_display)
i915_save_display(dev); i915_save_display(dev);
if (IS_I965G(dev) || IS_G4X(dev)) { /*
/* * Set the domains we want to reset, then the reset bit (bit 0).
* Set the domains we want to reset, then the reset bit (bit 0). * Clear the reset bit after a while and wait for hardware status
* Clear the reset bit after a while and wait for hardware status * bit (bit 1) to be set
* bit (bit 1) to be set */
*/ pci_read_config_byte(dev->pdev, GDRST, &gdrst);
pci_write_config_byte(dev->pdev, GDRST, gdrst | flags | ((flags == GDRST_FULL) ? 0x1 : 0x0));
udelay(50);
pci_write_config_byte(dev->pdev, GDRST, gdrst & 0xfe);
/* ...we don't want to loop forever though, 500ms should be plenty */
timeout = jiffies + msecs_to_jiffies(500);
do {
udelay(100);
pci_read_config_byte(dev->pdev, GDRST, &gdrst); pci_read_config_byte(dev->pdev, GDRST, &gdrst);
pci_write_config_byte(dev->pdev, GDRST, gdrst | flags | ((flags == GDRST_FULL) ? 0x1 : 0x0)); } while ((gdrst & 0x1) && time_after(timeout, jiffies));
udelay(50);
pci_write_config_byte(dev->pdev, GDRST, gdrst & 0xfe); if (gdrst & 0x1) {
WARN(true, "i915: Failed to reset chip\n");
/* ...we don't want to loop forever though, 500ms should be plenty */
timeout = jiffies + msecs_to_jiffies(500);
do {
udelay(100);
pci_read_config_byte(dev->pdev, GDRST, &gdrst);
} while ((gdrst & 0x1) && time_after(timeout, jiffies));
if (gdrst & 0x1) {
WARN(true, "i915: Failed to reset chip\n");
mutex_unlock(&dev->struct_mutex);
return -EIO;
}
} else {
DRM_ERROR("Error occurred. Don't know how to reset this chip.\n");
mutex_unlock(&dev->struct_mutex); mutex_unlock(&dev->struct_mutex);
return -ENODEV; return -EIO;
} }
/* Ok, now get things going again... */ /* Ok, now get things going again... */
......
...@@ -196,13 +196,9 @@ struct drm_i915_display_funcs { ...@@ -196,13 +196,9 @@ struct drm_i915_display_funcs {
struct intel_device_info { struct intel_device_info {
u8 gen; u8 gen;
u8 is_mobile : 1; u8 is_mobile : 1;
u8 is_i8xx : 1;
u8 is_i85x : 1; u8 is_i85x : 1;
u8 is_i915g : 1; u8 is_i915g : 1;
u8 is_i9xx : 1;
u8 is_i945gm : 1; u8 is_i945gm : 1;
u8 is_i965g : 1;
u8 is_i965gm : 1;
u8 is_g33 : 1; u8 is_g33 : 1;
u8 need_gfx_hws : 1; u8 need_gfx_hws : 1;
u8 is_g4x : 1; u8 is_g4x : 1;
...@@ -217,6 +213,7 @@ struct intel_device_info { ...@@ -217,6 +213,7 @@ struct intel_device_info {
u8 cursor_needs_physical : 1; u8 cursor_needs_physical : 1;
u8 has_overlay : 1; u8 has_overlay : 1;
u8 overlay_needs_physical : 1; u8 overlay_needs_physical : 1;
u8 supports_tv : 1;
}; };
enum no_fbc_reason { enum no_fbc_reason {
...@@ -1220,8 +1217,6 @@ static inline void i915_write(struct drm_i915_private *dev_priv, u32 reg, ...@@ -1220,8 +1217,6 @@ static inline void i915_write(struct drm_i915_private *dev_priv, u32 reg,
#define IS_I915GM(dev) ((dev)->pci_device == 0x2592) #define IS_I915GM(dev) ((dev)->pci_device == 0x2592)
#define IS_I945G(dev) ((dev)->pci_device == 0x2772) #define IS_I945G(dev) ((dev)->pci_device == 0x2772)
#define IS_I945GM(dev) (INTEL_INFO(dev)->is_i945gm) #define IS_I945GM(dev) (INTEL_INFO(dev)->is_i945gm)
#define IS_I965G(dev) (INTEL_INFO(dev)->is_i965g)
#define IS_I965GM(dev) (INTEL_INFO(dev)->is_i965gm)
#define IS_BROADWATER(dev) (INTEL_INFO(dev)->is_broadwater) #define IS_BROADWATER(dev) (INTEL_INFO(dev)->is_broadwater)
#define IS_CRESTLINE(dev) (INTEL_INFO(dev)->is_crestline) #define IS_CRESTLINE(dev) (INTEL_INFO(dev)->is_crestline)
#define IS_GM45(dev) ((dev)->pci_device == 0x2A42) #define IS_GM45(dev) ((dev)->pci_device == 0x2A42)
...@@ -1233,7 +1228,6 @@ static inline void i915_write(struct drm_i915_private *dev_priv, u32 reg, ...@@ -1233,7 +1228,6 @@ static inline void i915_write(struct drm_i915_private *dev_priv, u32 reg,
#define IS_IRONLAKE_D(dev) ((dev)->pci_device == 0x0042) #define IS_IRONLAKE_D(dev) ((dev)->pci_device == 0x0042)
#define IS_IRONLAKE_M(dev) ((dev)->pci_device == 0x0046) #define IS_IRONLAKE_M(dev) ((dev)->pci_device == 0x0046)
#define IS_IRONLAKE(dev) (INTEL_INFO(dev)->is_ironlake) #define IS_IRONLAKE(dev) (INTEL_INFO(dev)->is_ironlake)
#define IS_I9XX(dev) (INTEL_INFO(dev)->is_i9xx)
#define IS_MOBILE(dev) (INTEL_INFO(dev)->is_mobile) #define IS_MOBILE(dev) (INTEL_INFO(dev)->is_mobile)
#define IS_GEN2(dev) (INTEL_INFO(dev)->gen == 2) #define IS_GEN2(dev) (INTEL_INFO(dev)->gen == 2)
...@@ -1251,20 +1245,18 @@ static inline void i915_write(struct drm_i915_private *dev_priv, u32 reg, ...@@ -1251,20 +1245,18 @@ static inline void i915_write(struct drm_i915_private *dev_priv, u32 reg,
/* With the 945 and later, Y tiling got adjusted so that it was 32 128-byte /* With the 945 and later, Y tiling got adjusted so that it was 32 128-byte
* rows, which changed the alignment requirements and fence programming. * rows, which changed the alignment requirements and fence programming.
*/ */
#define HAS_128_BYTE_Y_TILING(dev) (IS_I9XX(dev) && !(IS_I915G(dev) || \ #define HAS_128_BYTE_Y_TILING(dev) (!IS_GEN2(dev) && !(IS_I915G(dev) || \
IS_I915GM(dev))) IS_I915GM(dev)))
#define SUPPORTS_DIGITAL_OUTPUTS(dev) (IS_I9XX(dev) && !IS_PINEVIEW(dev)) #define SUPPORTS_DIGITAL_OUTPUTS(dev) (!IS_GEN2(dev) && !IS_PINEVIEW(dev))
#define SUPPORTS_INTEGRATED_HDMI(dev) (IS_G4X(dev) || IS_IRONLAKE(dev)) #define SUPPORTS_INTEGRATED_HDMI(dev) (IS_G4X(dev) || IS_IRONLAKE(dev))
#define SUPPORTS_INTEGRATED_DP(dev) (IS_G4X(dev) || IS_IRONLAKE(dev)) #define SUPPORTS_INTEGRATED_DP(dev) (IS_G4X(dev) || IS_IRONLAKE(dev))
#define SUPPORTS_EDP(dev) (IS_IRONLAKE_M(dev)) #define SUPPORTS_EDP(dev) (IS_IRONLAKE_M(dev))
#define SUPPORTS_TV(dev) (IS_I9XX(dev) && IS_MOBILE(dev) && \ #define SUPPORTS_TV(dev) (INTEL_INFO(dev)->supports_tv)
!IS_IRONLAKE(dev) && !IS_PINEVIEW(dev) && \
!IS_GEN6(dev))
#define I915_HAS_HOTPLUG(dev) (INTEL_INFO(dev)->has_hotplug) #define I915_HAS_HOTPLUG(dev) (INTEL_INFO(dev)->has_hotplug)
/* dsparb controlled by hw only */ /* dsparb controlled by hw only */
#define DSPARB_HWCONTROL(dev) (IS_G4X(dev) || IS_IRONLAKE(dev)) #define DSPARB_HWCONTROL(dev) (IS_G4X(dev) || IS_IRONLAKE(dev))
#define HAS_FW_BLC(dev) (IS_I9XX(dev) || IS_G4X(dev) || IS_IRONLAKE(dev)) #define HAS_FW_BLC(dev) (INTEL_INFO(dev)->gen > 2)
#define HAS_PIPE_CXSR(dev) (INTEL_INFO(dev)->has_pipe_cxsr) #define HAS_PIPE_CXSR(dev) (INTEL_INFO(dev)->has_pipe_cxsr)
#define I915_HAS_FBC(dev) (INTEL_INFO(dev)->has_fbc) #define I915_HAS_FBC(dev) (INTEL_INFO(dev)->has_fbc)
#define I915_HAS_RC6(dev) (INTEL_INFO(dev)->has_rc6) #define I915_HAS_RC6(dev) (INTEL_INFO(dev)->has_rc6)
......
...@@ -1346,14 +1346,14 @@ i915_gem_get_gtt_alignment(struct drm_gem_object *obj) ...@@ -1346,14 +1346,14 @@ i915_gem_get_gtt_alignment(struct drm_gem_object *obj)
* Minimum alignment is 4k (GTT page size), but might be greater * Minimum alignment is 4k (GTT page size), but might be greater
* if a fence register is needed for the object. * if a fence register is needed for the object.
*/ */
if (IS_I965G(dev) || obj_priv->tiling_mode == I915_TILING_NONE) if (INTEL_INFO(dev)->gen >= 4 || obj_priv->tiling_mode == I915_TILING_NONE)
return 4096; return 4096;
/* /*
* Previous chips need to be aligned to the size of the smallest * Previous chips need to be aligned to the size of the smallest
* fence register that can contain the object. * fence register that can contain the object.
*/ */
if (IS_I9XX(dev)) if (INTEL_INFO(dev)->gen == 3)
start = 1024*1024; start = 1024*1024;
else else
start = 512*1024; start = 512*1024;
...@@ -1660,7 +1660,7 @@ i915_retire_commands(struct drm_device *dev, struct intel_ring_buffer *ring) ...@@ -1660,7 +1660,7 @@ i915_retire_commands(struct drm_device *dev, struct intel_ring_buffer *ring)
uint32_t flush_domains = 0; uint32_t flush_domains = 0;
/* The sampler always gets flushed on i965 (sigh) */ /* The sampler always gets flushed on i965 (sigh) */
if (IS_I965G(dev)) if (INTEL_INFO(dev)->gen >= 4)
flush_domains |= I915_GEM_DOMAIN_SAMPLER; flush_domains |= I915_GEM_DOMAIN_SAMPLER;
ring->flush(dev, ring, ring->flush(dev, ring,
...@@ -2443,7 +2443,7 @@ i915_gem_object_put_fence_reg(struct drm_gem_object *obj, ...@@ -2443,7 +2443,7 @@ i915_gem_object_put_fence_reg(struct drm_gem_object *obj,
* therefore we must wait for any outstanding access to complete * therefore we must wait for any outstanding access to complete
* before clearing the fence. * before clearing the fence.
*/ */
if (!IS_I965G(dev)) { if (INTEL_INFO(dev)->gen < 4) {
int ret; int ret;
ret = i915_gem_object_flush_gpu_write_domain(obj, true); ret = i915_gem_object_flush_gpu_write_domain(obj, true);
...@@ -3893,7 +3893,7 @@ i915_gem_execbuffer(struct drm_device *dev, void *data, ...@@ -3893,7 +3893,7 @@ i915_gem_execbuffer(struct drm_device *dev, void *data,
exec2_list[i].relocs_ptr = exec_list[i].relocs_ptr; exec2_list[i].relocs_ptr = exec_list[i].relocs_ptr;
exec2_list[i].alignment = exec_list[i].alignment; exec2_list[i].alignment = exec_list[i].alignment;
exec2_list[i].offset = exec_list[i].offset; exec2_list[i].offset = exec_list[i].offset;
if (!IS_I965G(dev)) if (INTEL_INFO(dev)->gen < 4)
exec2_list[i].flags = EXEC_OBJECT_NEEDS_FENCE; exec2_list[i].flags = EXEC_OBJECT_NEEDS_FENCE;
else else
exec2_list[i].flags = 0; exec2_list[i].flags = 0;
...@@ -4614,21 +4614,30 @@ i915_gem_load(struct drm_device *dev) ...@@ -4614,21 +4614,30 @@ i915_gem_load(struct drm_device *dev)
if (!drm_core_check_feature(dev, DRIVER_MODESET)) if (!drm_core_check_feature(dev, DRIVER_MODESET))
dev_priv->fence_reg_start = 3; dev_priv->fence_reg_start = 3;
if (IS_I965G(dev) || IS_I945G(dev) || IS_I945GM(dev) || IS_G33(dev)) if (INTEL_INFO(dev)->gen >= 4 || IS_I945G(dev) || IS_I945GM(dev) || IS_G33(dev))
dev_priv->num_fence_regs = 16; dev_priv->num_fence_regs = 16;
else else
dev_priv->num_fence_regs = 8; dev_priv->num_fence_regs = 8;
/* Initialize fence registers to zero */ /* Initialize fence registers to zero */
if (IS_I965G(dev)) { switch (INTEL_INFO(dev)->gen) {
case 6:
for (i = 0; i < 16; i++)
I915_WRITE64(FENCE_REG_SANDYBRIDGE_0 + (i * 8), 0);
break;
case 5:
case 4:
for (i = 0; i < 16; i++) for (i = 0; i < 16; i++)
I915_WRITE64(FENCE_REG_965_0 + (i * 8), 0); I915_WRITE64(FENCE_REG_965_0 + (i * 8), 0);
} else { break;
for (i = 0; i < 8; i++) case 3:
I915_WRITE(FENCE_REG_830_0 + (i * 4), 0);
if (IS_I945G(dev) || IS_I945GM(dev) || IS_G33(dev)) if (IS_I945G(dev) || IS_I945GM(dev) || IS_G33(dev))
for (i = 0; i < 8; i++) for (i = 0; i < 8; i++)
I915_WRITE(FENCE_REG_945_8 + (i * 4), 0); I915_WRITE(FENCE_REG_945_8 + (i * 4), 0);
case 2:
for (i = 0; i < 8; i++)
I915_WRITE(FENCE_REG_830_0 + (i * 4), 0);
break;
} }
i915_gem_detect_bit_6_swizzle(dev); i915_gem_detect_bit_6_swizzle(dev);
init_waitqueue_head(&dev_priv->pending_flip_queue); init_waitqueue_head(&dev_priv->pending_flip_queue);
......
...@@ -98,7 +98,7 @@ i915_gem_detect_bit_6_swizzle(struct drm_device *dev) ...@@ -98,7 +98,7 @@ i915_gem_detect_bit_6_swizzle(struct drm_device *dev)
*/ */
swizzle_x = I915_BIT_6_SWIZZLE_9_10; swizzle_x = I915_BIT_6_SWIZZLE_9_10;
swizzle_y = I915_BIT_6_SWIZZLE_9; swizzle_y = I915_BIT_6_SWIZZLE_9;
} else if (!IS_I9XX(dev)) { } else if (IS_GEN2(dev)) {
/* As far as we know, the 865 doesn't have these bit 6 /* As far as we know, the 865 doesn't have these bit 6
* swizzling issues. * swizzling issues.
*/ */
...@@ -190,19 +190,19 @@ i915_tiling_ok(struct drm_device *dev, int stride, int size, int tiling_mode) ...@@ -190,19 +190,19 @@ i915_tiling_ok(struct drm_device *dev, int stride, int size, int tiling_mode)
if (tiling_mode == I915_TILING_NONE) if (tiling_mode == I915_TILING_NONE)
return true; return true;
if (!IS_I9XX(dev) || if (IS_GEN2(dev) ||
(tiling_mode == I915_TILING_Y && HAS_128_BYTE_Y_TILING(dev))) (tiling_mode == I915_TILING_Y && HAS_128_BYTE_Y_TILING(dev)))
tile_width = 128; tile_width = 128;
else else
tile_width = 512; tile_width = 512;
/* check maximum stride & object size */ /* check maximum stride & object size */
if (IS_I965G(dev)) { if (INTEL_INFO(dev)->gen >= 4) {
/* i965 stores the end address of the gtt mapping in the fence /* i965 stores the end address of the gtt mapping in the fence
* reg, so dont bother to check the size */ * reg, so dont bother to check the size */
if (stride / 128 > I965_FENCE_MAX_PITCH_VAL) if (stride / 128 > I965_FENCE_MAX_PITCH_VAL)
return false; return false;
} else if (IS_GEN3(dev) || IS_GEN2(dev)) { } else {
if (stride > 8192) if (stride > 8192)
return false; return false;
...@@ -216,7 +216,7 @@ i915_tiling_ok(struct drm_device *dev, int stride, int size, int tiling_mode) ...@@ -216,7 +216,7 @@ i915_tiling_ok(struct drm_device *dev, int stride, int size, int tiling_mode)
} }
/* 965+ just needs multiples of tile width */ /* 965+ just needs multiples of tile width */
if (IS_I965G(dev)) { if (INTEL_INFO(dev)->gen >= 4) {
if (stride & (tile_width - 1)) if (stride & (tile_width - 1))
return false; return false;
return true; return true;
...@@ -244,16 +244,18 @@ i915_gem_object_fence_offset_ok(struct drm_gem_object *obj, int tiling_mode) ...@@ -244,16 +244,18 @@ i915_gem_object_fence_offset_ok(struct drm_gem_object *obj, int tiling_mode)
if (tiling_mode == I915_TILING_NONE) if (tiling_mode == I915_TILING_NONE)
return true; return true;
if (!IS_I965G(dev)) { if (INTEL_INFO(dev)->gen >= 4)
if (obj_priv->gtt_offset & (obj->size - 1)) return true;
if (obj_priv->gtt_offset & (obj->size - 1))
return false;
if (IS_GEN3(dev)) {
if (obj_priv->gtt_offset & ~I915_FENCE_START_MASK)
return false;
} else {
if (obj_priv->gtt_offset & ~I830_FENCE_START_MASK)
return false; return false;
if (IS_I9XX(dev)) {
if (obj_priv->gtt_offset & ~I915_FENCE_START_MASK)
return false;
} else {
if (obj_priv->gtt_offset & ~I830_FENCE_START_MASK)
return false;
}
} }
return true; return true;
......
...@@ -172,7 +172,7 @@ void intel_enable_asle (struct drm_device *dev) ...@@ -172,7 +172,7 @@ void intel_enable_asle (struct drm_device *dev)
else { else {
i915_enable_pipestat(dev_priv, 1, i915_enable_pipestat(dev_priv, 1,
PIPE_LEGACY_BLC_EVENT_ENABLE); PIPE_LEGACY_BLC_EVENT_ENABLE);
if (IS_I965G(dev)) if (INTEL_INFO(dev)->gen >= 4)
i915_enable_pipestat(dev_priv, 0, i915_enable_pipestat(dev_priv, 0,
PIPE_LEGACY_BLC_EVENT_ENABLE); PIPE_LEGACY_BLC_EVENT_ENABLE);
} }
...@@ -397,15 +397,18 @@ static void i915_error_work_func(struct work_struct *work) ...@@ -397,15 +397,18 @@ static void i915_error_work_func(struct work_struct *work)
kobject_uevent_env(&dev->primary->kdev.kobj, KOBJ_CHANGE, error_event); kobject_uevent_env(&dev->primary->kdev.kobj, KOBJ_CHANGE, error_event);
if (atomic_read(&dev_priv->mm.wedged)) { if (atomic_read(&dev_priv->mm.wedged)) {
if (IS_I965G(dev)) { switch (INTEL_INFO(dev)->gen) {
case 4:
DRM_DEBUG_DRIVER("resetting chip\n"); DRM_DEBUG_DRIVER("resetting chip\n");
kobject_uevent_env(&dev->primary->kdev.kobj, KOBJ_CHANGE, reset_event); kobject_uevent_env(&dev->primary->kdev.kobj, KOBJ_CHANGE, reset_event);
if (!i965_reset(dev, GDRST_RENDER)) { if (!i965_reset(dev, GDRST_RENDER)) {
atomic_set(&dev_priv->mm.wedged, 0); atomic_set(&dev_priv->mm.wedged, 0);
kobject_uevent_env(&dev->primary->kdev.kobj, KOBJ_CHANGE, reset_done_event); kobject_uevent_env(&dev->primary->kdev.kobj, KOBJ_CHANGE, reset_done_event);
} }
} else { break;
default:
DRM_DEBUG_DRIVER("reboot required\n"); DRM_DEBUG_DRIVER("reboot required\n");
break;
} }
} }
} }
...@@ -501,7 +504,7 @@ i915_get_bbaddr(struct drm_device *dev, u32 *ring) ...@@ -501,7 +504,7 @@ i915_get_bbaddr(struct drm_device *dev, u32 *ring)
if (IS_I830(dev) || IS_845G(dev)) if (IS_I830(dev) || IS_845G(dev))
cmd = MI_BATCH_BUFFER; cmd = MI_BATCH_BUFFER;
else if (IS_I965G(dev)) else if (INTEL_INFO(dev)->gen >= 4)
cmd = (MI_BATCH_BUFFER_START | (2 << 6) | cmd = (MI_BATCH_BUFFER_START | (2 << 6) |
MI_BATCH_NON_SECURE_I965); MI_BATCH_NON_SECURE_I965);
else else
...@@ -580,7 +583,7 @@ static void i915_capture_error_state(struct drm_device *dev) ...@@ -580,7 +583,7 @@ static void i915_capture_error_state(struct drm_device *dev)
error->pipeastat = I915_READ(PIPEASTAT); error->pipeastat = I915_READ(PIPEASTAT);
error->pipebstat = I915_READ(PIPEBSTAT); error->pipebstat = I915_READ(PIPEBSTAT);
error->instpm = I915_READ(INSTPM); error->instpm = I915_READ(INSTPM);
if (!IS_I965G(dev)) { if (INTEL_INFO(dev)->gen < 4) {
error->ipeir = I915_READ(IPEIR); error->ipeir = I915_READ(IPEIR);
error->ipehr = I915_READ(IPEHR); error->ipehr = I915_READ(IPEHR);
error->instdone = I915_READ(INSTDONE); error->instdone = I915_READ(INSTDONE);
...@@ -778,7 +781,7 @@ static void i915_report_and_clear_eir(struct drm_device *dev) ...@@ -778,7 +781,7 @@ static void i915_report_and_clear_eir(struct drm_device *dev)
} }
} }
if (IS_I9XX(dev)) { if (!IS_GEN2(dev)) {
if (eir & I915_ERROR_PAGE_TABLE) { if (eir & I915_ERROR_PAGE_TABLE) {
u32 pgtbl_err = I915_READ(PGTBL_ER); u32 pgtbl_err = I915_READ(PGTBL_ER);
printk(KERN_ERR "page table error\n"); printk(KERN_ERR "page table error\n");
...@@ -804,7 +807,7 @@ static void i915_report_and_clear_eir(struct drm_device *dev) ...@@ -804,7 +807,7 @@ static void i915_report_and_clear_eir(struct drm_device *dev)
printk(KERN_ERR "instruction error\n"); printk(KERN_ERR "instruction error\n");
printk(KERN_ERR " INSTPM: 0x%08x\n", printk(KERN_ERR " INSTPM: 0x%08x\n",
I915_READ(INSTPM)); I915_READ(INSTPM));
if (!IS_I965G(dev)) { if (INTEL_INFO(dev)->gen < 4) {
u32 ipeir = I915_READ(IPEIR); u32 ipeir = I915_READ(IPEIR);
printk(KERN_ERR " IPEIR: 0x%08x\n", printk(KERN_ERR " IPEIR: 0x%08x\n",
...@@ -905,7 +908,7 @@ static void i915_pageflip_stall_check(struct drm_device *dev, int pipe) ...@@ -905,7 +908,7 @@ static void i915_pageflip_stall_check(struct drm_device *dev, int pipe)
/* Potential stall - if we see that the flip has happened, assume a missed interrupt */ /* Potential stall - if we see that the flip has happened, assume a missed interrupt */
obj_priv = to_intel_bo(work->pending_flip_obj); obj_priv = to_intel_bo(work->pending_flip_obj);
if(IS_I965G(dev)) { if (INTEL_INFO(dev)->gen >= 4) {
int dspsurf = intel_crtc->plane == 0 ? DSPASURF : DSPBSURF; int dspsurf = intel_crtc->plane == 0 ? DSPASURF : DSPBSURF;
stall_detected = I915_READ(dspsurf) == obj_priv->gtt_offset; stall_detected = I915_READ(dspsurf) == obj_priv->gtt_offset;
} else { } else {
...@@ -944,7 +947,7 @@ irqreturn_t i915_driver_irq_handler(DRM_IRQ_ARGS) ...@@ -944,7 +947,7 @@ irqreturn_t i915_driver_irq_handler(DRM_IRQ_ARGS)
iir = I915_READ(IIR); iir = I915_READ(IIR);
if (IS_I965G(dev)) if (INTEL_INFO(dev)->gen >= 4)
vblank_status = PIPE_START_VBLANK_INTERRUPT_STATUS; vblank_status = PIPE_START_VBLANK_INTERRUPT_STATUS;
else else
vblank_status = PIPE_VBLANK_INTERRUPT_STATUS; vblank_status = PIPE_VBLANK_INTERRUPT_STATUS;
...@@ -1209,7 +1212,7 @@ int i915_enable_vblank(struct drm_device *dev, int pipe) ...@@ -1209,7 +1212,7 @@ int i915_enable_vblank(struct drm_device *dev, int pipe)
if (HAS_PCH_SPLIT(dev)) if (HAS_PCH_SPLIT(dev))
ironlake_enable_display_irq(dev_priv, (pipe == 0) ? ironlake_enable_display_irq(dev_priv, (pipe == 0) ?
DE_PIPEA_VBLANK: DE_PIPEB_VBLANK); DE_PIPEA_VBLANK: DE_PIPEB_VBLANK);
else if (IS_I965G(dev)) else if (INTEL_INFO(dev)->gen >= 4)
i915_enable_pipestat(dev_priv, pipe, i915_enable_pipestat(dev_priv, pipe,
PIPE_START_VBLANK_INTERRUPT_ENABLE); PIPE_START_VBLANK_INTERRUPT_ENABLE);
else else
...@@ -1322,11 +1325,7 @@ void i915_hangcheck_elapsed(unsigned long data) ...@@ -1322,11 +1325,7 @@ void i915_hangcheck_elapsed(unsigned long data)
drm_i915_private_t *dev_priv = dev->dev_private; drm_i915_private_t *dev_priv = dev->dev_private;
uint32_t acthd, instdone, instdone1; uint32_t acthd, instdone, instdone1;
/* No reset support on this chip yet. */ if (INTEL_INFO(dev)->gen < 4) {
if (IS_GEN6(dev))
return;
if (!IS_I965G(dev)) {
acthd = I915_READ(ACTHD); acthd = I915_READ(ACTHD);
instdone = I915_READ(INSTDONE); instdone = I915_READ(INSTDONE);
instdone1 = 0; instdone1 = 0;
......
...@@ -256,7 +256,7 @@ static void i915_save_modeset_reg(struct drm_device *dev) ...@@ -256,7 +256,7 @@ static void i915_save_modeset_reg(struct drm_device *dev)
dev_priv->saveFPA1 = I915_READ(FPA1); dev_priv->saveFPA1 = I915_READ(FPA1);
dev_priv->saveDPLL_A = I915_READ(DPLL_A); dev_priv->saveDPLL_A = I915_READ(DPLL_A);
} }
if (IS_I965G(dev) && !HAS_PCH_SPLIT(dev)) if (INTEL_INFO(dev)->gen >= 4 && !HAS_PCH_SPLIT(dev))
dev_priv->saveDPLL_A_MD = I915_READ(DPLL_A_MD); dev_priv->saveDPLL_A_MD = I915_READ(DPLL_A_MD);
dev_priv->saveHTOTAL_A = I915_READ(HTOTAL_A); dev_priv->saveHTOTAL_A = I915_READ(HTOTAL_A);
dev_priv->saveHBLANK_A = I915_READ(HBLANK_A); dev_priv->saveHBLANK_A = I915_READ(HBLANK_A);
...@@ -294,7 +294,7 @@ static void i915_save_modeset_reg(struct drm_device *dev) ...@@ -294,7 +294,7 @@ static void i915_save_modeset_reg(struct drm_device *dev)
dev_priv->saveDSPASIZE = I915_READ(DSPASIZE); dev_priv->saveDSPASIZE = I915_READ(DSPASIZE);
dev_priv->saveDSPAPOS = I915_READ(DSPAPOS); dev_priv->saveDSPAPOS = I915_READ(DSPAPOS);
dev_priv->saveDSPAADDR = I915_READ(DSPAADDR); dev_priv->saveDSPAADDR = I915_READ(DSPAADDR);
if (IS_I965G(dev)) { if (INTEL_INFO(dev)->gen >= 4) {
dev_priv->saveDSPASURF = I915_READ(DSPASURF); dev_priv->saveDSPASURF = I915_READ(DSPASURF);
dev_priv->saveDSPATILEOFF = I915_READ(DSPATILEOFF); dev_priv->saveDSPATILEOFF = I915_READ(DSPATILEOFF);
} }
...@@ -313,7 +313,7 @@ static void i915_save_modeset_reg(struct drm_device *dev) ...@@ -313,7 +313,7 @@ static void i915_save_modeset_reg(struct drm_device *dev)
dev_priv->saveFPB1 = I915_READ(FPB1); dev_priv->saveFPB1 = I915_READ(FPB1);
dev_priv->saveDPLL_B = I915_READ(DPLL_B); dev_priv->saveDPLL_B = I915_READ(DPLL_B);
} }
if (IS_I965G(dev) && !HAS_PCH_SPLIT(dev)) if (INTEL_INFO(dev)->gen >= 4 && !HAS_PCH_SPLIT(dev))
dev_priv->saveDPLL_B_MD = I915_READ(DPLL_B_MD); dev_priv->saveDPLL_B_MD = I915_READ(DPLL_B_MD);
dev_priv->saveHTOTAL_B = I915_READ(HTOTAL_B); dev_priv->saveHTOTAL_B = I915_READ(HTOTAL_B);
dev_priv->saveHBLANK_B = I915_READ(HBLANK_B); dev_priv->saveHBLANK_B = I915_READ(HBLANK_B);
...@@ -351,7 +351,7 @@ static void i915_save_modeset_reg(struct drm_device *dev) ...@@ -351,7 +351,7 @@ static void i915_save_modeset_reg(struct drm_device *dev)
dev_priv->saveDSPBSIZE = I915_READ(DSPBSIZE); dev_priv->saveDSPBSIZE = I915_READ(DSPBSIZE);
dev_priv->saveDSPBPOS = I915_READ(DSPBPOS); dev_priv->saveDSPBPOS = I915_READ(DSPBPOS);
dev_priv->saveDSPBADDR = I915_READ(DSPBADDR); dev_priv->saveDSPBADDR = I915_READ(DSPBADDR);
if (IS_I965GM(dev) || IS_GM45(dev)) { if (INTEL_INFO(dev)->gen >= 4) {
dev_priv->saveDSPBSURF = I915_READ(DSPBSURF); dev_priv->saveDSPBSURF = I915_READ(DSPBSURF);
dev_priv->saveDSPBTILEOFF = I915_READ(DSPBTILEOFF); dev_priv->saveDSPBTILEOFF = I915_READ(DSPBTILEOFF);
} }
...@@ -404,7 +404,7 @@ static void i915_restore_modeset_reg(struct drm_device *dev) ...@@ -404,7 +404,7 @@ static void i915_restore_modeset_reg(struct drm_device *dev)
I915_WRITE(dpll_a_reg, dev_priv->saveDPLL_A); I915_WRITE(dpll_a_reg, dev_priv->saveDPLL_A);
POSTING_READ(dpll_a_reg); POSTING_READ(dpll_a_reg);
udelay(150); udelay(150);
if (IS_I965G(dev) && !HAS_PCH_SPLIT(dev)) { if (INTEL_INFO(dev)->gen >= 4 && !HAS_PCH_SPLIT(dev)) {
I915_WRITE(DPLL_A_MD, dev_priv->saveDPLL_A_MD); I915_WRITE(DPLL_A_MD, dev_priv->saveDPLL_A_MD);
POSTING_READ(DPLL_A_MD); POSTING_READ(DPLL_A_MD);
} }
...@@ -448,7 +448,7 @@ static void i915_restore_modeset_reg(struct drm_device *dev) ...@@ -448,7 +448,7 @@ static void i915_restore_modeset_reg(struct drm_device *dev)
I915_WRITE(PIPEASRC, dev_priv->savePIPEASRC); I915_WRITE(PIPEASRC, dev_priv->savePIPEASRC);
I915_WRITE(DSPAADDR, dev_priv->saveDSPAADDR); I915_WRITE(DSPAADDR, dev_priv->saveDSPAADDR);
I915_WRITE(DSPASTRIDE, dev_priv->saveDSPASTRIDE); I915_WRITE(DSPASTRIDE, dev_priv->saveDSPASTRIDE);
if (IS_I965G(dev)) { if (INTEL_INFO(dev)->gen >= 4) {
I915_WRITE(DSPASURF, dev_priv->saveDSPASURF); I915_WRITE(DSPASURF, dev_priv->saveDSPASURF);
I915_WRITE(DSPATILEOFF, dev_priv->saveDSPATILEOFF); I915_WRITE(DSPATILEOFF, dev_priv->saveDSPATILEOFF);
} }
...@@ -473,7 +473,7 @@ static void i915_restore_modeset_reg(struct drm_device *dev) ...@@ -473,7 +473,7 @@ static void i915_restore_modeset_reg(struct drm_device *dev)
I915_WRITE(dpll_b_reg, dev_priv->saveDPLL_B); I915_WRITE(dpll_b_reg, dev_priv->saveDPLL_B);
POSTING_READ(dpll_b_reg); POSTING_READ(dpll_b_reg);
udelay(150); udelay(150);
if (IS_I965G(dev) && !HAS_PCH_SPLIT(dev)) { if (INTEL_INFO(dev)->gen >= 4 && !HAS_PCH_SPLIT(dev)) {
I915_WRITE(DPLL_B_MD, dev_priv->saveDPLL_B_MD); I915_WRITE(DPLL_B_MD, dev_priv->saveDPLL_B_MD);
POSTING_READ(DPLL_B_MD); POSTING_READ(DPLL_B_MD);
} }
...@@ -517,7 +517,7 @@ static void i915_restore_modeset_reg(struct drm_device *dev) ...@@ -517,7 +517,7 @@ static void i915_restore_modeset_reg(struct drm_device *dev)
I915_WRITE(PIPEBSRC, dev_priv->savePIPEBSRC); I915_WRITE(PIPEBSRC, dev_priv->savePIPEBSRC);
I915_WRITE(DSPBADDR, dev_priv->saveDSPBADDR); I915_WRITE(DSPBADDR, dev_priv->saveDSPBADDR);
I915_WRITE(DSPBSTRIDE, dev_priv->saveDSPBSTRIDE); I915_WRITE(DSPBSTRIDE, dev_priv->saveDSPBSTRIDE);
if (IS_I965G(dev)) { if (INTEL_INFO(dev)->gen >= 4) {
I915_WRITE(DSPBSURF, dev_priv->saveDSPBSURF); I915_WRITE(DSPBSURF, dev_priv->saveDSPBSURF);
I915_WRITE(DSPBTILEOFF, dev_priv->saveDSPBTILEOFF); I915_WRITE(DSPBTILEOFF, dev_priv->saveDSPBTILEOFF);
} }
...@@ -550,7 +550,7 @@ void i915_save_display(struct drm_device *dev) ...@@ -550,7 +550,7 @@ void i915_save_display(struct drm_device *dev)
dev_priv->saveCURBCNTR = I915_READ(CURBCNTR); dev_priv->saveCURBCNTR = I915_READ(CURBCNTR);
dev_priv->saveCURBPOS = I915_READ(CURBPOS); dev_priv->saveCURBPOS = I915_READ(CURBPOS);
dev_priv->saveCURBBASE = I915_READ(CURBBASE); dev_priv->saveCURBBASE = I915_READ(CURBBASE);
if (!IS_I9XX(dev)) if (IS_GEN2(dev))
dev_priv->saveCURSIZE = I915_READ(CURSIZE); dev_priv->saveCURSIZE = I915_READ(CURSIZE);
/* CRT state */ /* CRT state */
...@@ -573,7 +573,7 @@ void i915_save_display(struct drm_device *dev) ...@@ -573,7 +573,7 @@ void i915_save_display(struct drm_device *dev)
dev_priv->savePFIT_PGM_RATIOS = I915_READ(PFIT_PGM_RATIOS); dev_priv->savePFIT_PGM_RATIOS = I915_READ(PFIT_PGM_RATIOS);
dev_priv->saveBLC_PWM_CTL = I915_READ(BLC_PWM_CTL); dev_priv->saveBLC_PWM_CTL = I915_READ(BLC_PWM_CTL);
dev_priv->saveBLC_HIST_CTL = I915_READ(BLC_HIST_CTL); dev_priv->saveBLC_HIST_CTL = I915_READ(BLC_HIST_CTL);
if (IS_I965G(dev)) if (INTEL_INFO(dev)->gen >= 4)
dev_priv->saveBLC_PWM_CTL2 = I915_READ(BLC_PWM_CTL2); dev_priv->saveBLC_PWM_CTL2 = I915_READ(BLC_PWM_CTL2);
if (IS_MOBILE(dev) && !IS_I830(dev)) if (IS_MOBILE(dev) && !IS_I830(dev))
dev_priv->saveLVDS = I915_READ(LVDS); dev_priv->saveLVDS = I915_READ(LVDS);
...@@ -664,7 +664,7 @@ void i915_restore_display(struct drm_device *dev) ...@@ -664,7 +664,7 @@ void i915_restore_display(struct drm_device *dev)
I915_WRITE(CURBPOS, dev_priv->saveCURBPOS); I915_WRITE(CURBPOS, dev_priv->saveCURBPOS);
I915_WRITE(CURBCNTR, dev_priv->saveCURBCNTR); I915_WRITE(CURBCNTR, dev_priv->saveCURBCNTR);
I915_WRITE(CURBBASE, dev_priv->saveCURBBASE); I915_WRITE(CURBBASE, dev_priv->saveCURBBASE);
if (!IS_I9XX(dev)) if (IS_GEN2(dev))
I915_WRITE(CURSIZE, dev_priv->saveCURSIZE); I915_WRITE(CURSIZE, dev_priv->saveCURSIZE);
/* CRT state */ /* CRT state */
...@@ -674,7 +674,7 @@ void i915_restore_display(struct drm_device *dev) ...@@ -674,7 +674,7 @@ void i915_restore_display(struct drm_device *dev)
I915_WRITE(ADPA, dev_priv->saveADPA); I915_WRITE(ADPA, dev_priv->saveADPA);
/* LVDS state */ /* LVDS state */
if (IS_I965G(dev) && !HAS_PCH_SPLIT(dev)) if (INTEL_INFO(dev)->gen >= 4 && !HAS_PCH_SPLIT(dev))
I915_WRITE(BLC_PWM_CTL2, dev_priv->saveBLC_PWM_CTL2); I915_WRITE(BLC_PWM_CTL2, dev_priv->saveBLC_PWM_CTL2);
if (HAS_PCH_SPLIT(dev)) { if (HAS_PCH_SPLIT(dev)) {
......
...@@ -79,7 +79,7 @@ static int intel_crt_mode_valid(struct drm_connector *connector, ...@@ -79,7 +79,7 @@ static int intel_crt_mode_valid(struct drm_connector *connector,
if (mode->clock < 25000) if (mode->clock < 25000)
return MODE_CLOCK_LOW; return MODE_CLOCK_LOW;
if (!IS_I9XX(dev)) if (IS_GEN2(dev))
max_clock = 350000; max_clock = 350000;
else else
max_clock = 400000; max_clock = 400000;
...@@ -123,7 +123,7 @@ static void intel_crt_mode_set(struct drm_encoder *encoder, ...@@ -123,7 +123,7 @@ static void intel_crt_mode_set(struct drm_encoder *encoder,
* Disable separate mode multiplier used when cloning SDVO to CRT * Disable separate mode multiplier used when cloning SDVO to CRT
* XXX this needs to be adjusted when we really are cloning * XXX this needs to be adjusted when we really are cloning
*/ */
if (IS_I965G(dev) && !HAS_PCH_SPLIT(dev)) { if (INTEL_INFO(dev)->gen >= 4 && !HAS_PCH_SPLIT(dev)) {
dpll_md = I915_READ(dpll_md_reg); dpll_md = I915_READ(dpll_md_reg);
I915_WRITE(dpll_md_reg, I915_WRITE(dpll_md_reg,
dpll_md & ~DPLL_MD_UDI_MULTIPLIER_MASK); dpll_md & ~DPLL_MD_UDI_MULTIPLIER_MASK);
...@@ -325,7 +325,7 @@ intel_crt_load_detect(struct drm_crtc *crtc, struct intel_encoder *intel_encoder ...@@ -325,7 +325,7 @@ intel_crt_load_detect(struct drm_crtc *crtc, struct intel_encoder *intel_encoder
/* Set the border color to purple. */ /* Set the border color to purple. */
I915_WRITE(bclrpat_reg, 0x500050); I915_WRITE(bclrpat_reg, 0x500050);
if (IS_I9XX(dev)) { if (!IS_GEN2(dev)) {
uint32_t pipeconf = I915_READ(pipeconf_reg); uint32_t pipeconf = I915_READ(pipeconf_reg);
I915_WRITE(pipeconf_reg, pipeconf | PIPECONF_FORCE_BORDER); I915_WRITE(pipeconf_reg, pipeconf | PIPECONF_FORCE_BORDER);
POSTING_READ(pipeconf_reg); POSTING_READ(pipeconf_reg);
...@@ -411,7 +411,7 @@ intel_crt_detect(struct drm_connector *connector, bool force) ...@@ -411,7 +411,7 @@ intel_crt_detect(struct drm_connector *connector, bool force)
int dpms_mode; int dpms_mode;
enum drm_connector_status status; enum drm_connector_status status;
if (IS_I9XX(dev) && !IS_I915G(dev) && !IS_I915GM(dev)) { if (I915_HAS_HOTPLUG(dev)) {
if (intel_crt_detect_hotplug(connector)) if (intel_crt_detect_hotplug(connector))
return connector_status_connected; return connector_status_connected;
else else
......
...@@ -708,16 +708,16 @@ static const intel_limit_t *intel_limit(struct drm_crtc *crtc) ...@@ -708,16 +708,16 @@ static const intel_limit_t *intel_limit(struct drm_crtc *crtc)
limit = intel_ironlake_limit(crtc); limit = intel_ironlake_limit(crtc);
else if (IS_G4X(dev)) { else if (IS_G4X(dev)) {
limit = intel_g4x_limit(crtc); limit = intel_g4x_limit(crtc);
} else if (IS_I9XX(dev) && !IS_PINEVIEW(dev)) {
if (intel_pipe_has_type(crtc, INTEL_OUTPUT_LVDS))
limit = &intel_limits_i9xx_lvds;
else
limit = &intel_limits_i9xx_sdvo;
} else if (IS_PINEVIEW(dev)) { } else if (IS_PINEVIEW(dev)) {
if (intel_pipe_has_type(crtc, INTEL_OUTPUT_LVDS)) if (intel_pipe_has_type(crtc, INTEL_OUTPUT_LVDS))
limit = &intel_limits_pineview_lvds; limit = &intel_limits_pineview_lvds;
else else
limit = &intel_limits_pineview_sdvo; limit = &intel_limits_pineview_sdvo;
} else if (!IS_GEN2(dev)) {
if (intel_pipe_has_type(crtc, INTEL_OUTPUT_LVDS))
limit = &intel_limits_i9xx_lvds;
else
limit = &intel_limits_i9xx_sdvo;
} else { } else {
if (intel_pipe_has_type(crtc, INTEL_OUTPUT_LVDS)) if (intel_pipe_has_type(crtc, INTEL_OUTPUT_LVDS))
limit = &intel_limits_i8xx_lvds; limit = &intel_limits_i8xx_lvds;
...@@ -1429,7 +1429,7 @@ intel_pin_and_fence_fb_obj(struct drm_device *dev, ...@@ -1429,7 +1429,7 @@ intel_pin_and_fence_fb_obj(struct drm_device *dev,
case I915_TILING_NONE: case I915_TILING_NONE:
if (IS_BROADWATER(dev) || IS_CRESTLINE(dev)) if (IS_BROADWATER(dev) || IS_CRESTLINE(dev))
alignment = 128 * 1024; alignment = 128 * 1024;
else if (IS_I965G(dev)) else if (INTEL_INFO(dev)->gen >= 4)
alignment = 4 * 1024; alignment = 4 * 1024;
else else
alignment = 64 * 1024; alignment = 64 * 1024;
...@@ -1524,7 +1524,7 @@ intel_pipe_set_base_atomic(struct drm_crtc *crtc, struct drm_framebuffer *fb, ...@@ -1524,7 +1524,7 @@ intel_pipe_set_base_atomic(struct drm_crtc *crtc, struct drm_framebuffer *fb,
DRM_ERROR("Unknown color depth\n"); DRM_ERROR("Unknown color depth\n");
return -EINVAL; return -EINVAL;
} }
if (IS_I965G(dev)) { if (INTEL_INFO(dev)->gen >= 4) {
if (obj_priv->tiling_mode != I915_TILING_NONE) if (obj_priv->tiling_mode != I915_TILING_NONE)
dspcntr |= DISPPLANE_TILED; dspcntr |= DISPPLANE_TILED;
else else
...@@ -1543,7 +1543,7 @@ intel_pipe_set_base_atomic(struct drm_crtc *crtc, struct drm_framebuffer *fb, ...@@ -1543,7 +1543,7 @@ intel_pipe_set_base_atomic(struct drm_crtc *crtc, struct drm_framebuffer *fb,
DRM_DEBUG_KMS("Writing base %08lX %08lX %d %d %d\n", DRM_DEBUG_KMS("Writing base %08lX %08lX %d %d %d\n",
Start, Offset, x, y, fb->pitch); Start, Offset, x, y, fb->pitch);
I915_WRITE(DSPSTRIDE(plane), fb->pitch); I915_WRITE(DSPSTRIDE(plane), fb->pitch);
if (IS_I965G(dev)) { if (INTEL_INFO(dev)->gen >= 4) {
I915_WRITE(DSPSURF(plane), Start); I915_WRITE(DSPSURF(plane), Start);
I915_WRITE(DSPTILEOFF(plane), (y << 16) | x); I915_WRITE(DSPTILEOFF(plane), (y << 16) | x);
I915_WRITE(DSPADDR(plane), Offset); I915_WRITE(DSPADDR(plane), Offset);
...@@ -2388,7 +2388,7 @@ static void i9xx_crtc_disable(struct drm_crtc *crtc) ...@@ -2388,7 +2388,7 @@ static void i9xx_crtc_disable(struct drm_crtc *crtc)
intel_flush_display_plane(dev, plane); intel_flush_display_plane(dev, plane);
/* Wait for vblank for the disable to take effect */ /* Wait for vblank for the disable to take effect */
if (!IS_I9XX(dev)) if (IS_GEN2(dev))
intel_wait_for_vblank_off(dev, pipe); intel_wait_for_vblank_off(dev, pipe);
} }
...@@ -3181,11 +3181,11 @@ static void i965_update_wm(struct drm_device *dev, int planea_clock, ...@@ -3181,11 +3181,11 @@ static void i965_update_wm(struct drm_device *dev, int planea_clock,
DRM_DEBUG_KMS("self-refresh watermark: display plane %d " DRM_DEBUG_KMS("self-refresh watermark: display plane %d "
"cursor %d\n", srwm, cursor_sr); "cursor %d\n", srwm, cursor_sr);
if (IS_I965GM(dev)) if (IS_CRESTLINE(dev))
I915_WRITE(FW_BLC_SELF, FW_BLC_SELF_EN); I915_WRITE(FW_BLC_SELF, FW_BLC_SELF_EN);
} else { } else {
/* Turn off self refresh if both pipes are enabled */ /* Turn off self refresh if both pipes are enabled */
if (IS_I965GM(dev)) if (IS_CRESTLINE(dev))
I915_WRITE(FW_BLC_SELF, I915_READ(FW_BLC_SELF) I915_WRITE(FW_BLC_SELF, I915_READ(FW_BLC_SELF)
& ~FW_BLC_SELF_EN); & ~FW_BLC_SELF_EN);
} }
...@@ -3215,9 +3215,9 @@ static void i9xx_update_wm(struct drm_device *dev, int planea_clock, ...@@ -3215,9 +3215,9 @@ static void i9xx_update_wm(struct drm_device *dev, int planea_clock,
int sr_clock, sr_entries = 0; int sr_clock, sr_entries = 0;
/* Create copies of the base settings for each pipe */ /* Create copies of the base settings for each pipe */
if (IS_I965GM(dev) || IS_I945GM(dev)) if (IS_CRESTLINE(dev) || IS_I945GM(dev))
planea_params = planeb_params = i945_wm_info; planea_params = planeb_params = i945_wm_info;
else if (IS_I9XX(dev)) else if (!IS_GEN2(dev))
planea_params = planeb_params = i915_wm_info; planea_params = planeb_params = i915_wm_info;
else else
planea_params = planeb_params = i855_wm_info; planea_params = planeb_params = i855_wm_info;
...@@ -3576,7 +3576,7 @@ static int intel_crtc_mode_set(struct drm_crtc *crtc, ...@@ -3576,7 +3576,7 @@ static int intel_crtc_mode_set(struct drm_crtc *crtc,
refclk = dev_priv->lvds_ssc_freq * 1000; refclk = dev_priv->lvds_ssc_freq * 1000;
DRM_DEBUG_KMS("using SSC reference clock of %d MHz\n", DRM_DEBUG_KMS("using SSC reference clock of %d MHz\n",
refclk / 1000); refclk / 1000);
} else if (IS_I9XX(dev)) { } else if (!IS_GEN2(dev)) {
refclk = 96000; refclk = 96000;
if (HAS_PCH_SPLIT(dev)) if (HAS_PCH_SPLIT(dev))
refclk = 120000; /* 120Mhz refclk */ refclk = 120000; /* 120Mhz refclk */
...@@ -3775,7 +3775,7 @@ static int intel_crtc_mode_set(struct drm_crtc *crtc, ...@@ -3775,7 +3775,7 @@ static int intel_crtc_mode_set(struct drm_crtc *crtc,
if (!HAS_PCH_SPLIT(dev)) if (!HAS_PCH_SPLIT(dev))
dpll = DPLL_VGA_MODE_DIS; dpll = DPLL_VGA_MODE_DIS;
if (IS_I9XX(dev)) { if (!IS_GEN2(dev)) {
if (is_lvds) if (is_lvds)
dpll |= DPLLB_MODE_LVDS; dpll |= DPLLB_MODE_LVDS;
else else
...@@ -3818,7 +3818,7 @@ static int intel_crtc_mode_set(struct drm_crtc *crtc, ...@@ -3818,7 +3818,7 @@ static int intel_crtc_mode_set(struct drm_crtc *crtc,
dpll |= DPLLB_LVDS_P2_CLOCK_DIV_14; dpll |= DPLLB_LVDS_P2_CLOCK_DIV_14;
break; break;
} }
if (IS_I965G(dev) && !HAS_PCH_SPLIT(dev)) if (INTEL_INFO(dev)->gen >= 4 && !HAS_PCH_SPLIT(dev))
dpll |= (6 << PLL_LOAD_PULSE_PHASE_SHIFT); dpll |= (6 << PLL_LOAD_PULSE_PHASE_SHIFT);
} else { } else {
if (is_lvds) { if (is_lvds) {
...@@ -3859,7 +3859,7 @@ static int intel_crtc_mode_set(struct drm_crtc *crtc, ...@@ -3859,7 +3859,7 @@ static int intel_crtc_mode_set(struct drm_crtc *crtc,
dspcntr |= DISPPLANE_SEL_PIPE_B; dspcntr |= DISPPLANE_SEL_PIPE_B;
} }
if (pipe == 0 && !IS_I965G(dev)) { if (pipe == 0 && INTEL_INFO(dev)->gen < 4) {
/* Enable pixel doubling when the dot clock is > 90% of the (display) /* Enable pixel doubling when the dot clock is > 90% of the (display)
* core speed. * core speed.
* *
...@@ -3947,7 +3947,7 @@ static int intel_crtc_mode_set(struct drm_crtc *crtc, ...@@ -3947,7 +3947,7 @@ static int intel_crtc_mode_set(struct drm_crtc *crtc,
* panels behave in the two modes. * panels behave in the two modes.
*/ */
/* set the dithering flag on non-PCH LVDS as needed */ /* set the dithering flag on non-PCH LVDS as needed */
if (IS_I965G(dev) && !HAS_PCH_SPLIT(dev)) { if (INTEL_INFO(dev)->gen >= 4 && !HAS_PCH_SPLIT(dev)) {
if (dev_priv->lvds_dither) if (dev_priv->lvds_dither)
temp |= LVDS_ENABLE_DITHER; temp |= LVDS_ENABLE_DITHER;
else else
...@@ -3991,7 +3991,7 @@ static int intel_crtc_mode_set(struct drm_crtc *crtc, ...@@ -3991,7 +3991,7 @@ static int intel_crtc_mode_set(struct drm_crtc *crtc,
POSTING_READ(dpll_reg); POSTING_READ(dpll_reg);
udelay(150); udelay(150);
if (IS_I965G(dev) && !HAS_PCH_SPLIT(dev)) { if (INTEL_INFO(dev)->gen >= 4 && !HAS_PCH_SPLIT(dev)) {
temp = 0; temp = 0;
if (is_sdvo) { if (is_sdvo) {
temp = intel_mode_get_pixel_multiplier(adjusted_mode); temp = intel_mode_get_pixel_multiplier(adjusted_mode);
...@@ -4334,7 +4334,7 @@ static int intel_crtc_cursor_set(struct drm_crtc *crtc, ...@@ -4334,7 +4334,7 @@ static int intel_crtc_cursor_set(struct drm_crtc *crtc,
addr = obj_priv->phys_obj->handle->busaddr; addr = obj_priv->phys_obj->handle->busaddr;
} }
if (!IS_I9XX(dev)) if (IS_GEN2(dev))
I915_WRITE(CURSIZE, (height << 12) | width); I915_WRITE(CURSIZE, (height << 12) | width);
finish: finish:
...@@ -4569,7 +4569,7 @@ static int intel_crtc_clock_get(struct drm_device *dev, struct drm_crtc *crtc) ...@@ -4569,7 +4569,7 @@ static int intel_crtc_clock_get(struct drm_device *dev, struct drm_crtc *crtc)
clock.m2 = (fp & FP_M2_DIV_MASK) >> FP_M2_DIV_SHIFT; clock.m2 = (fp & FP_M2_DIV_MASK) >> FP_M2_DIV_SHIFT;
} }
if (IS_I9XX(dev)) { if (!IS_GEN2(dev)) {
if (IS_PINEVIEW(dev)) if (IS_PINEVIEW(dev))
clock.p1 = ffs((dpll & DPLL_FPA01_P1_POST_DIV_MASK_PINEVIEW) >> clock.p1 = ffs((dpll & DPLL_FPA01_P1_POST_DIV_MASK_PINEVIEW) >>
DPLL_FPA01_P1_POST_DIV_SHIFT_PINEVIEW); DPLL_FPA01_P1_POST_DIV_SHIFT_PINEVIEW);
...@@ -5768,20 +5768,20 @@ void intel_init_clock_gating(struct drm_device *dev) ...@@ -5768,20 +5768,20 @@ void intel_init_clock_gating(struct drm_device *dev)
if (IS_GM45(dev)) if (IS_GM45(dev))
dspclk_gate |= DSSUNIT_CLOCK_GATE_DISABLE; dspclk_gate |= DSSUNIT_CLOCK_GATE_DISABLE;
I915_WRITE(DSPCLK_GATE_D, dspclk_gate); I915_WRITE(DSPCLK_GATE_D, dspclk_gate);
} else if (IS_I965GM(dev)) { } else if (IS_CRESTLINE(dev)) {
I915_WRITE(RENCLK_GATE_D1, I965_RCC_CLOCK_GATE_DISABLE); I915_WRITE(RENCLK_GATE_D1, I965_RCC_CLOCK_GATE_DISABLE);
I915_WRITE(RENCLK_GATE_D2, 0); I915_WRITE(RENCLK_GATE_D2, 0);
I915_WRITE(DSPCLK_GATE_D, 0); I915_WRITE(DSPCLK_GATE_D, 0);
I915_WRITE(RAMCLK_GATE_D, 0); I915_WRITE(RAMCLK_GATE_D, 0);
I915_WRITE16(DEUC, 0); I915_WRITE16(DEUC, 0);
} else if (IS_I965G(dev)) { } else if (IS_BROADWATER(dev)) {
I915_WRITE(RENCLK_GATE_D1, I965_RCZ_CLOCK_GATE_DISABLE | I915_WRITE(RENCLK_GATE_D1, I965_RCZ_CLOCK_GATE_DISABLE |
I965_RCC_CLOCK_GATE_DISABLE | I965_RCC_CLOCK_GATE_DISABLE |
I965_RCPB_CLOCK_GATE_DISABLE | I965_RCPB_CLOCK_GATE_DISABLE |
I965_ISC_CLOCK_GATE_DISABLE | I965_ISC_CLOCK_GATE_DISABLE |
I965_FBC_CLOCK_GATE_DISABLE); I965_FBC_CLOCK_GATE_DISABLE);
I915_WRITE(RENCLK_GATE_D2, 0); I915_WRITE(RENCLK_GATE_D2, 0);
} else if (IS_I9XX(dev)) { } else if (IS_GEN3(dev)) {
u32 dstate = I915_READ(D_STATE); u32 dstate = I915_READ(D_STATE);
dstate |= DSTATE_PLL_D3_OFF | DSTATE_GFX_CLOCK_GATING | dstate |= DSTATE_PLL_D3_OFF | DSTATE_GFX_CLOCK_GATING |
...@@ -5863,7 +5863,7 @@ static void intel_init_display(struct drm_device *dev) ...@@ -5863,7 +5863,7 @@ static void intel_init_display(struct drm_device *dev)
dev_priv->display.fbc_enabled = g4x_fbc_enabled; dev_priv->display.fbc_enabled = g4x_fbc_enabled;
dev_priv->display.enable_fbc = g4x_enable_fbc; dev_priv->display.enable_fbc = g4x_enable_fbc;
dev_priv->display.disable_fbc = g4x_disable_fbc; dev_priv->display.disable_fbc = g4x_disable_fbc;
} else if (IS_I965GM(dev)) { } else if (IS_CRESTLINE(dev)) {
dev_priv->display.fbc_enabled = i8xx_fbc_enabled; dev_priv->display.fbc_enabled = i8xx_fbc_enabled;
dev_priv->display.enable_fbc = i8xx_enable_fbc; dev_priv->display.enable_fbc = i8xx_enable_fbc;
dev_priv->display.disable_fbc = i8xx_disable_fbc; dev_priv->display.disable_fbc = i8xx_disable_fbc;
...@@ -5923,9 +5923,9 @@ static void intel_init_display(struct drm_device *dev) ...@@ -5923,9 +5923,9 @@ static void intel_init_display(struct drm_device *dev)
dev_priv->display.update_wm = pineview_update_wm; dev_priv->display.update_wm = pineview_update_wm;
} else if (IS_G4X(dev)) } else if (IS_G4X(dev))
dev_priv->display.update_wm = g4x_update_wm; dev_priv->display.update_wm = g4x_update_wm;
else if (IS_I965G(dev)) else if (IS_GEN4(dev))
dev_priv->display.update_wm = i965_update_wm; dev_priv->display.update_wm = i965_update_wm;
else if (IS_I9XX(dev)) { else if (IS_GEN3(dev)) {
dev_priv->display.update_wm = i9xx_update_wm; dev_priv->display.update_wm = i9xx_update_wm;
dev_priv->display.get_fifo_size = i9xx_get_fifo_size; dev_priv->display.get_fifo_size = i9xx_get_fifo_size;
} else if (IS_I85X(dev)) { } else if (IS_I85X(dev)) {
...@@ -6039,24 +6039,24 @@ void intel_modeset_init(struct drm_device *dev) ...@@ -6039,24 +6039,24 @@ void intel_modeset_init(struct drm_device *dev)
intel_init_display(dev); intel_init_display(dev);
if (IS_I965G(dev)) { if (IS_GEN2(dev)) {
dev->mode_config.max_width = 8192; dev->mode_config.max_width = 2048;
dev->mode_config.max_height = 8192; dev->mode_config.max_height = 2048;
} else if (IS_I9XX(dev)) { } else if (IS_GEN3(dev)) {
dev->mode_config.max_width = 4096; dev->mode_config.max_width = 4096;
dev->mode_config.max_height = 4096; dev->mode_config.max_height = 4096;
} else { } else {
dev->mode_config.max_width = 2048; dev->mode_config.max_width = 8192;
dev->mode_config.max_height = 2048; dev->mode_config.max_height = 8192;
} }
/* set memory base */ /* set memory base */
if (IS_I9XX(dev)) if (IS_GEN2(dev))
dev->mode_config.fb_base = pci_resource_start(dev->pdev, 2);
else
dev->mode_config.fb_base = pci_resource_start(dev->pdev, 0); dev->mode_config.fb_base = pci_resource_start(dev->pdev, 0);
else
dev->mode_config.fb_base = pci_resource_start(dev->pdev, 2);
if (IS_MOBILE(dev) || IS_I9XX(dev)) if (IS_MOBILE(dev) || !IS_GEN2(dev))
dev_priv->num_pipe = 2; dev_priv->num_pipe = 2;
else else
dev_priv->num_pipe = 1; dev_priv->num_pipe = 1;
......
...@@ -68,7 +68,7 @@ static int intelfb_create(struct intel_fbdev *ifbdev, ...@@ -68,7 +68,7 @@ static int intelfb_create(struct intel_fbdev *ifbdev,
struct drm_gem_object *fbo = NULL; struct drm_gem_object *fbo = NULL;
struct drm_i915_gem_object *obj_priv; struct drm_i915_gem_object *obj_priv;
struct device *device = &dev->pdev->dev; struct device *device = &dev->pdev->dev;
int size, ret, mmio_bar = IS_I9XX(dev) ? 0 : 1; int size, ret, mmio_bar = IS_GEN2(dev) ? 1 : 0;
/* we don't do packed 24bpp */ /* we don't do packed 24bpp */
if (sizes->surface_bpp == 24) if (sizes->surface_bpp == 24)
...@@ -129,7 +129,7 @@ static int intelfb_create(struct intel_fbdev *ifbdev, ...@@ -129,7 +129,7 @@ static int intelfb_create(struct intel_fbdev *ifbdev,
goto out_unpin; goto out_unpin;
} }
info->apertures->ranges[0].base = dev->mode_config.fb_base; info->apertures->ranges[0].base = dev->mode_config.fb_base;
if (IS_I9XX(dev)) if (!IS_GEN2(dev))
info->apertures->ranges[0].size = pci_resource_len(dev->pdev, 2); info->apertures->ranges[0].size = pci_resource_len(dev->pdev, 2);
else else
info->apertures->ranges[0].size = pci_resource_len(dev->pdev, 0); info->apertures->ranges[0].size = pci_resource_len(dev->pdev, 0);
......
...@@ -198,7 +198,7 @@ static bool intel_lvds_mode_fixup(struct drm_encoder *encoder, ...@@ -198,7 +198,7 @@ static bool intel_lvds_mode_fixup(struct drm_encoder *encoder,
u32 pfit_control = 0, pfit_pgm_ratios = 0, border = 0; u32 pfit_control = 0, pfit_pgm_ratios = 0, border = 0;
/* Should never happen!! */ /* Should never happen!! */
if (!IS_I965G(dev) && intel_crtc->pipe == 0) { if (INTEL_INFO(dev)->gen < 4 && intel_crtc->pipe == 0) {
DRM_ERROR("Can't support LVDS on pipe A\n"); DRM_ERROR("Can't support LVDS on pipe A\n");
return false; return false;
} }
...@@ -227,7 +227,7 @@ static bool intel_lvds_mode_fixup(struct drm_encoder *encoder, ...@@ -227,7 +227,7 @@ static bool intel_lvds_mode_fixup(struct drm_encoder *encoder,
} }
/* Make sure pre-965s set dither correctly */ /* Make sure pre-965s set dither correctly */
if (!IS_I965G(dev)) { if (INTEL_INFO(dev)->gen < 4) {
if (dev_priv->panel_wants_dither || dev_priv->lvds_dither) if (dev_priv->panel_wants_dither || dev_priv->lvds_dither)
pfit_control |= PANEL_8TO6_DITHER_ENABLE; pfit_control |= PANEL_8TO6_DITHER_ENABLE;
} }
...@@ -238,7 +238,7 @@ static bool intel_lvds_mode_fixup(struct drm_encoder *encoder, ...@@ -238,7 +238,7 @@ static bool intel_lvds_mode_fixup(struct drm_encoder *encoder,
goto out; goto out;
/* 965+ wants fuzzy fitting */ /* 965+ wants fuzzy fitting */
if (IS_I965G(dev)) if (INTEL_INFO(dev)->gen >= 4)
pfit_control |= ((intel_crtc->pipe << PFIT_PIPE_SHIFT) | pfit_control |= ((intel_crtc->pipe << PFIT_PIPE_SHIFT) |
PFIT_FILTER_FUZZY); PFIT_FILTER_FUZZY);
...@@ -264,7 +264,7 @@ static bool intel_lvds_mode_fixup(struct drm_encoder *encoder, ...@@ -264,7 +264,7 @@ static bool intel_lvds_mode_fixup(struct drm_encoder *encoder,
case DRM_MODE_SCALE_ASPECT: case DRM_MODE_SCALE_ASPECT:
/* Scale but preserve the aspect ratio */ /* Scale but preserve the aspect ratio */
if (IS_I965G(dev)) { if (INTEL_INFO(dev)->gen >= 4) {
u32 scaled_width = adjusted_mode->hdisplay * mode->vdisplay; u32 scaled_width = adjusted_mode->hdisplay * mode->vdisplay;
u32 scaled_height = mode->hdisplay * adjusted_mode->vdisplay; u32 scaled_height = mode->hdisplay * adjusted_mode->vdisplay;
...@@ -323,7 +323,7 @@ static bool intel_lvds_mode_fixup(struct drm_encoder *encoder, ...@@ -323,7 +323,7 @@ static bool intel_lvds_mode_fixup(struct drm_encoder *encoder,
* Fortunately this is all done for us in hw. * Fortunately this is all done for us in hw.
*/ */
pfit_control |= PFIT_ENABLE; pfit_control |= PFIT_ENABLE;
if (IS_I965G(dev)) if (INTEL_INFO(dev)->gen >= 4)
pfit_control |= PFIT_SCALING_AUTO; pfit_control |= PFIT_SCALING_AUTO;
else else
pfit_control |= (VERT_AUTO_SCALE | HORIZ_AUTO_SCALE | pfit_control |= (VERT_AUTO_SCALE | HORIZ_AUTO_SCALE |
......
...@@ -552,15 +552,15 @@ static int uv_vsubsampling(u32 format) ...@@ -552,15 +552,15 @@ static int uv_vsubsampling(u32 format)
static u32 calc_swidthsw(struct drm_device *dev, u32 offset, u32 width) static u32 calc_swidthsw(struct drm_device *dev, u32 offset, u32 width)
{ {
u32 mask, shift, ret; u32 mask, shift, ret;
if (IS_I9XX(dev)) { if (IS_GEN2(dev)) {
mask = 0x3f;
shift = 6;
} else {
mask = 0x1f; mask = 0x1f;
shift = 5; shift = 5;
} else {
mask = 0x3f;
shift = 6;
} }
ret = ((offset + width + mask) >> shift) - (offset >> shift); ret = ((offset + width + mask) >> shift) - (offset >> shift);
if (IS_I9XX(dev)) if (!IS_GEN2(dev))
ret <<= 1; ret <<= 1;
ret -=1; ret -=1;
return ret << 2; return ret << 2;
...@@ -768,7 +768,7 @@ static int intel_overlay_do_put_image(struct intel_overlay *overlay, ...@@ -768,7 +768,7 @@ static int intel_overlay_do_put_image(struct intel_overlay *overlay,
goto out_unpin; goto out_unpin;
} }
regs->OCONFIG = OCONF_CC_OUT_8BIT; regs->OCONFIG = OCONF_CC_OUT_8BIT;
if (IS_I965GM(overlay->dev)) if (IS_GEN4(overlay->dev))
regs->OCONFIG |= OCONF_CSC_MODE_BT709; regs->OCONFIG |= OCONF_CSC_MODE_BT709;
regs->OCONFIG |= overlay->crtc->pipe == 0 ? regs->OCONFIG |= overlay->crtc->pipe == 0 ?
OCONF_PIPE_A : OCONF_PIPE_B; OCONF_PIPE_A : OCONF_PIPE_B;
...@@ -880,7 +880,7 @@ static int check_overlay_possible_on_crtc(struct intel_overlay *overlay, ...@@ -880,7 +880,7 @@ static int check_overlay_possible_on_crtc(struct intel_overlay *overlay,
return -EINVAL; return -EINVAL;
/* can't use the overlay with double wide pipe */ /* can't use the overlay with double wide pipe */
if (!IS_I965G(overlay->dev) && if (INTEL_INFO(overlay->dev)->gen < 4 &&
(I915_READ(PIPECONF(crtc->pipe)) & (PIPECONF_DOUBLE_WIDE | PIPECONF_ENABLE)) != PIPECONF_ENABLE) (I915_READ(PIPECONF(crtc->pipe)) & (PIPECONF_DOUBLE_WIDE | PIPECONF_ENABLE)) != PIPECONF_ENABLE)
return -EINVAL; return -EINVAL;
...@@ -897,14 +897,15 @@ static void update_pfit_vscale_ratio(struct intel_overlay *overlay) ...@@ -897,14 +897,15 @@ static void update_pfit_vscale_ratio(struct intel_overlay *overlay)
/* XXX: This is not the same logic as in the xorg driver, but more in /* XXX: This is not the same logic as in the xorg driver, but more in
* line with the intel documentation for the i965 * line with the intel documentation for the i965
*/ */
if (!IS_I965G(dev)) { if (INTEL_INFO(dev)->gen >= 4) {
/* on i965 use the PGM reg to read out the autoscaler values */
ratio = I915_READ(PFIT_PGM_RATIOS) >> PFIT_VERT_SCALE_SHIFT_965;
} else {
if (pfit_control & VERT_AUTO_SCALE) if (pfit_control & VERT_AUTO_SCALE)
ratio = I915_READ(PFIT_AUTO_RATIOS); ratio = I915_READ(PFIT_AUTO_RATIOS);
else else
ratio = I915_READ(PFIT_PGM_RATIOS); ratio = I915_READ(PFIT_PGM_RATIOS);
ratio >>= PFIT_VERT_SCALE_SHIFT; ratio >>= PFIT_VERT_SCALE_SHIFT;
} else { /* on i965 use the PGM reg to read out the autoscaler values */
ratio = I915_READ(PFIT_PGM_RATIOS) >> PFIT_VERT_SCALE_SHIFT_965;
} }
overlay->pfit_vscale_ratio = ratio; overlay->pfit_vscale_ratio = ratio;
...@@ -1007,7 +1008,7 @@ static int check_overlay_src(struct drm_device *dev, ...@@ -1007,7 +1008,7 @@ static int check_overlay_src(struct drm_device *dev,
if (rec->stride_Y & stride_mask || rec->stride_UV & stride_mask) if (rec->stride_Y & stride_mask || rec->stride_UV & stride_mask)
return -EINVAL; return -EINVAL;
if (IS_I965G(dev) && rec->stride_Y < 512) if (IS_GEN4(dev) && rec->stride_Y < 512)
return -EINVAL; return -EINVAL;
tmp = (rec->flags & I915_OVERLAY_TYPE_MASK) == I915_OVERLAY_YUV_PLANAR ? tmp = (rec->flags & I915_OVERLAY_TYPE_MASK) == I915_OVERLAY_YUV_PLANAR ?
...@@ -1068,7 +1069,7 @@ static int intel_panel_fitter_pipe(struct drm_device *dev) ...@@ -1068,7 +1069,7 @@ static int intel_panel_fitter_pipe(struct drm_device *dev)
return -1; return -1;
/* 965 can place panel fitter on either pipe */ /* 965 can place panel fitter on either pipe */
if (IS_I965G(dev)) if (IS_GEN4(dev))
return (pfit_control >> 29) & 0x3; return (pfit_control >> 29) & 0x3;
/* older chips can only use pipe 1 */ /* older chips can only use pipe 1 */
...@@ -1302,7 +1303,7 @@ int intel_overlay_attrs(struct drm_device *dev, void *data, ...@@ -1302,7 +1303,7 @@ int intel_overlay_attrs(struct drm_device *dev, void *data,
attrs->contrast = overlay->contrast; attrs->contrast = overlay->contrast;
attrs->saturation = overlay->saturation; attrs->saturation = overlay->saturation;
if (IS_I9XX(dev)) { if (!IS_GEN2(dev)) {
attrs->gamma0 = I915_READ(OGAMC0); attrs->gamma0 = I915_READ(OGAMC0);
attrs->gamma1 = I915_READ(OGAMC1); attrs->gamma1 = I915_READ(OGAMC1);
attrs->gamma2 = I915_READ(OGAMC2); attrs->gamma2 = I915_READ(OGAMC2);
...@@ -1334,7 +1335,7 @@ int intel_overlay_attrs(struct drm_device *dev, void *data, ...@@ -1334,7 +1335,7 @@ int intel_overlay_attrs(struct drm_device *dev, void *data,
intel_overlay_unmap_regs(overlay, regs); intel_overlay_unmap_regs(overlay, regs);
if (attrs->flags & I915_OVERLAY_UPDATE_GAMMA) { if (attrs->flags & I915_OVERLAY_UPDATE_GAMMA) {
if (!IS_I9XX(dev)) if (IS_GEN2(dev))
goto out_unlock; goto out_unlock;
if (overlay->active) { if (overlay->active) {
......
...@@ -116,7 +116,7 @@ static int is_backlight_combination_mode(struct drm_device *dev) ...@@ -116,7 +116,7 @@ static int is_backlight_combination_mode(struct drm_device *dev)
{ {
struct drm_i915_private *dev_priv = dev->dev_private; struct drm_i915_private *dev_priv = dev->dev_private;
if (IS_I965G(dev)) if (INTEL_INFO(dev)->gen >= 4)
return I915_READ(BLC_PWM_CTL2) & BLM_COMBINATION_MODE; return I915_READ(BLC_PWM_CTL2) & BLM_COMBINATION_MODE;
if (IS_GEN2(dev)) if (IS_GEN2(dev))
...@@ -138,7 +138,7 @@ u32 intel_panel_get_max_backlight(struct drm_device *dev) ...@@ -138,7 +138,7 @@ u32 intel_panel_get_max_backlight(struct drm_device *dev)
max >>= 17; max >>= 17;
} else { } else {
max >>= 16; max >>= 16;
if (!IS_I965G(dev)) if (INTEL_INFO(dev)->gen < 4)
max &= ~1; max &= ~1;
} }
......
...@@ -97,7 +97,7 @@ render_ring_flush(struct drm_device *dev, ...@@ -97,7 +97,7 @@ render_ring_flush(struct drm_device *dev,
if ((invalidate_domains|flush_domains) & if ((invalidate_domains|flush_domains) &
I915_GEM_DOMAIN_RENDER) I915_GEM_DOMAIN_RENDER)
cmd &= ~MI_NO_WRITE_FLUSH; cmd &= ~MI_NO_WRITE_FLUSH;
if (!IS_I965G(dev)) { if (INTEL_INFO(dev)->gen < 4) {
/* /*
* On the 965, the sampler cache always gets flushed * On the 965, the sampler cache always gets flushed
* and this bit is reserved. * and this bit is reserved.
...@@ -138,7 +138,7 @@ static unsigned int render_ring_get_active_head(struct drm_device *dev, ...@@ -138,7 +138,7 @@ static unsigned int render_ring_get_active_head(struct drm_device *dev,
struct intel_ring_buffer *ring) struct intel_ring_buffer *ring)
{ {
drm_i915_private_t *dev_priv = dev->dev_private; drm_i915_private_t *dev_priv = dev->dev_private;
u32 acthd_reg = IS_I965G(dev) ? ACTHD_I965 : ACTHD; u32 acthd_reg = INTEL_INFO(dev)->gen ? ACTHD_I965 : ACTHD;
return I915_READ(acthd_reg); return I915_READ(acthd_reg);
} }
...@@ -224,7 +224,7 @@ static int init_render_ring(struct drm_device *dev, ...@@ -224,7 +224,7 @@ static int init_render_ring(struct drm_device *dev,
int ret = init_ring_common(dev, ring); int ret = init_ring_common(dev, ring);
int mode; int mode;
if (IS_I9XX(dev) && !IS_GEN3(dev)) { if (INTEL_INFO(dev)->gen > 3) {
mode = VS_TIMER_DISPATCH << 16 | VS_TIMER_DISPATCH; mode = VS_TIMER_DISPATCH << 16 | VS_TIMER_DISPATCH;
if (IS_GEN6(dev)) if (IS_GEN6(dev))
mode |= MI_FLUSH_ENABLE << 16 | MI_FLUSH_ENABLE; mode |= MI_FLUSH_ENABLE << 16 | MI_FLUSH_ENABLE;
...@@ -528,7 +528,7 @@ render_ring_dispatch_gem_execbuffer(struct drm_device *dev, ...@@ -528,7 +528,7 @@ render_ring_dispatch_gem_execbuffer(struct drm_device *dev,
intel_ring_emit(dev, ring, 0); intel_ring_emit(dev, ring, 0);
} else { } else {
intel_ring_begin(dev, ring, 4); intel_ring_begin(dev, ring, 4);
if (IS_I965G(dev)) { if (INTEL_INFO(dev)->gen >= 4) {
intel_ring_emit(dev, ring, intel_ring_emit(dev, ring,
MI_BATCH_BUFFER_START | (2 << 6) MI_BATCH_BUFFER_START | (2 << 6)
| MI_BATCH_NON_SECURE_I965); | MI_BATCH_NON_SECURE_I965);
......
...@@ -1162,7 +1162,7 @@ static void intel_sdvo_mode_set(struct drm_encoder *encoder, ...@@ -1162,7 +1162,7 @@ static void intel_sdvo_mode_set(struct drm_encoder *encoder,
return; return;
/* Set the SDVO control regs. */ /* Set the SDVO control regs. */
if (IS_I965G(dev)) { if (INTEL_INFO(dev)->gen >= 4) {
sdvox = SDVO_BORDER_ENABLE; sdvox = SDVO_BORDER_ENABLE;
if (adjusted_mode->flags & DRM_MODE_FLAG_PVSYNC) if (adjusted_mode->flags & DRM_MODE_FLAG_PVSYNC)
sdvox |= SDVO_VSYNC_ACTIVE_HIGH; sdvox |= SDVO_VSYNC_ACTIVE_HIGH;
...@@ -1185,7 +1185,7 @@ static void intel_sdvo_mode_set(struct drm_encoder *encoder, ...@@ -1185,7 +1185,7 @@ static void intel_sdvo_mode_set(struct drm_encoder *encoder,
if (intel_sdvo->is_hdmi) if (intel_sdvo->is_hdmi)
sdvox |= SDVO_AUDIO_ENABLE; sdvox |= SDVO_AUDIO_ENABLE;
if (IS_I965G(dev)) { if (INTEL_INFO(dev)->gen >= 4) {
/* done in crtc_mode_set as the dpll_md reg must be written early */ /* done in crtc_mode_set as the dpll_md reg must be written early */
} else if (IS_I945G(dev) || IS_I945GM(dev) || IS_G33(dev)) { } else if (IS_I945G(dev) || IS_I945GM(dev) || IS_G33(dev)) {
/* done in crtc_mode_set as it lives inside the dpll register */ /* done in crtc_mode_set as it lives inside the dpll register */
......
...@@ -1139,7 +1139,7 @@ intel_tv_mode_set(struct drm_encoder *encoder, struct drm_display_mode *mode, ...@@ -1139,7 +1139,7 @@ intel_tv_mode_set(struct drm_encoder *encoder, struct drm_display_mode *mode,
color_conversion->av); color_conversion->av);
} }
if (IS_I965G(dev)) if (INTEL_INFO(dev)->gen >= 4)
I915_WRITE(TV_CLR_KNOBS, 0x00404000); I915_WRITE(TV_CLR_KNOBS, 0x00404000);
else else
I915_WRITE(TV_CLR_KNOBS, 0x00606000); I915_WRITE(TV_CLR_KNOBS, 0x00606000);
...@@ -1165,7 +1165,7 @@ intel_tv_mode_set(struct drm_encoder *encoder, struct drm_display_mode *mode, ...@@ -1165,7 +1165,7 @@ intel_tv_mode_set(struct drm_encoder *encoder, struct drm_display_mode *mode,
I915_WRITE(dspbase_reg, I915_READ(dspbase_reg)); I915_WRITE(dspbase_reg, I915_READ(dspbase_reg));
/* Wait for vblank for the disable to take effect */ /* Wait for vblank for the disable to take effect */
if (!IS_I9XX(dev)) if (IS_GEN2(dev))
intel_wait_for_vblank(dev, intel_crtc->pipe); intel_wait_for_vblank(dev, intel_crtc->pipe);
I915_WRITE(pipeconf_reg, pipeconf & ~PIPECONF_ENABLE); I915_WRITE(pipeconf_reg, pipeconf & ~PIPECONF_ENABLE);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment