mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-27 06:34:11 +08:00
drm/i915: INTEL_INFO->gen supercedes i8xx, i9xx, i965g
Avoid confusion between i965g meaning broadwater and the gen4+ chipset families. Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
This commit is contained in:
parent
219adae138
commit
a6c45cf013
@ -58,13 +58,9 @@ static int i915_capabilities(struct seq_file *m, void *data)
|
||||
seq_printf(m, "gen: %d\n", info->gen);
|
||||
#define B(x) seq_printf(m, #x ": %s\n", yesno(info->x))
|
||||
B(is_mobile);
|
||||
B(is_i8xx);
|
||||
B(is_i85x);
|
||||
B(is_i915g);
|
||||
B(is_i9xx);
|
||||
B(is_i945gm);
|
||||
B(is_i965g);
|
||||
B(is_i965gm);
|
||||
B(is_g33);
|
||||
B(need_gfx_hws);
|
||||
B(is_g4x);
|
||||
@ -79,6 +75,7 @@ static int i915_capabilities(struct seq_file *m, void *data)
|
||||
B(cursor_needs_physical);
|
||||
B(has_overlay);
|
||||
B(overlay_needs_physical);
|
||||
B(supports_tv);
|
||||
#undef B
|
||||
|
||||
return 0;
|
||||
@ -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, "RingTail : %08x\n", tail);
|
||||
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;
|
||||
}
|
||||
@ -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, " INSTDONE: 0x%08x\n", error->instdone);
|
||||
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, " INSTDONE1: 0x%08x\n", error->instdone1);
|
||||
}
|
||||
@ -757,7 +754,7 @@ static int i915_sr_status(struct seq_file *m, void *unused)
|
||||
|
||||
if (IS_IRONLAKE(dev))
|
||||
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;
|
||||
else if (IS_I915GM(dev))
|
||||
sr_enabled = I915_READ(INSTPM) & INSTPM_SELF_EN;
|
||||
|
@ -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);
|
||||
|
||||
if (IS_I965G(dev))
|
||||
if (INTEL_INFO(dev)->gen >= 4)
|
||||
dev_priv->dma_status_page |= (dev_priv->dma_status_page >> 28) &
|
||||
0xf0;
|
||||
|
||||
@ -376,7 +376,7 @@ i915_emit_box(struct drm_device *dev,
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (IS_I965G(dev)) {
|
||||
if (INTEL_INFO(dev)->gen >= 4) {
|
||||
BEGIN_LP_RING(4);
|
||||
OUT_RING(GFX_OP_DRAWRECT_INFO_I965);
|
||||
OUT_RING((box.x1 & 0xffff) | (box.y1 << 16));
|
||||
@ -480,7 +480,7 @@ static int i915_dispatch_batchbuffer(struct drm_device * dev,
|
||||
|
||||
if (!IS_I830(dev) && !IS_845G(dev)) {
|
||||
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(batch->start);
|
||||
} else {
|
||||
@ -887,12 +887,12 @@ static int
|
||||
intel_alloc_mchbar_resource(struct drm_device *dev)
|
||||
{
|
||||
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;
|
||||
u64 mchbar_addr;
|
||||
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, &temp_lo);
|
||||
mchbar_addr = ((u64)temp_hi << 32) | temp_lo;
|
||||
@ -919,7 +919,7 @@ intel_alloc_mchbar_resource(struct drm_device *dev)
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (IS_I965G(dev))
|
||||
if (INTEL_INFO(dev)->gen >= 4)
|
||||
pci_write_config_dword(dev_priv->bridge_dev, reg + 4,
|
||||
upper_32_bits(dev_priv->mch_res.start));
|
||||
|
||||
@ -933,7 +933,7 @@ static void
|
||||
intel_setup_mchbar(struct drm_device *dev)
|
||||
{
|
||||
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;
|
||||
bool enabled;
|
||||
|
||||
@ -970,7 +970,7 @@ static void
|
||||
intel_teardown_mchbar(struct drm_device *dev)
|
||||
{
|
||||
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;
|
||||
|
||||
if (dev_priv->mchbar_need_disable) {
|
||||
@ -1012,11 +1012,11 @@ static unsigned long i915_gtt_to_phys(struct drm_device *dev,
|
||||
{
|
||||
unsigned long *gtt;
|
||||
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;
|
||||
|
||||
if (IS_I965G(dev)) {
|
||||
if (IS_G4X(dev) || IS_IRONLAKE(dev) || IS_GEN6(dev)) {
|
||||
if (INTEL_INFO(dev)->gen >= 4) {
|
||||
if (IS_G4X(dev) || INTEL_INFO(dev)->gen > 4) {
|
||||
gtt_offset = 2*1024*1024;
|
||||
gtt_size = 2*1024*1024;
|
||||
} else {
|
||||
@ -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);
|
||||
|
||||
/* Mask out these reserved bits on this hardware. */
|
||||
if (!IS_I9XX(dev) || IS_I915G(dev) || IS_I915GM(dev) ||
|
||||
IS_I945G(dev) || IS_I945GM(dev)) {
|
||||
if (INTEL_INFO(dev)->gen < 4 && !IS_G33(dev))
|
||||
entry &= ~PTE_ADDRESS_MASK_HIGH;
|
||||
}
|
||||
|
||||
/* If it's not a mapping type we know, then bail. */
|
||||
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)
|
||||
dev_priv->info = (struct intel_device_info *) flags;
|
||||
|
||||
/* 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);
|
||||
size = pci_resource_len(dev->pdev, mmio_bar);
|
||||
|
||||
|
@ -61,97 +61,101 @@ extern int intel_agp_enabled;
|
||||
.driver_data = (unsigned long) 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,
|
||||
};
|
||||
|
||||
static const struct intel_device_info intel_845g_info = {
|
||||
.gen = 2, .is_i8xx = 1,
|
||||
.gen = 2,
|
||||
.has_overlay = 1, .overlay_needs_physical = 1,
|
||||
};
|
||||
|
||||
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,
|
||||
.has_overlay = 1, .overlay_needs_physical = 1,
|
||||
};
|
||||
|
||||
static const struct intel_device_info intel_i865g_info = {
|
||||
.gen = 2, .is_i8xx = 1,
|
||||
.gen = 2,
|
||||
.has_overlay = 1, .overlay_needs_physical = 1,
|
||||
};
|
||||
|
||||
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,
|
||||
};
|
||||
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,
|
||||
.has_overlay = 1, .overlay_needs_physical = 1,
|
||||
.supports_tv = 1,
|
||||
};
|
||||
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,
|
||||
};
|
||||
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_overlay = 1, .overlay_needs_physical = 1,
|
||||
.supports_tv = 1,
|
||||
};
|
||||
|
||||
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_overlay = 1,
|
||||
};
|
||||
|
||||
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,
|
||||
.has_overlay = 1,
|
||||
.supports_tv = 1,
|
||||
};
|
||||
|
||||
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,
|
||||
.has_overlay = 1,
|
||||
};
|
||||
|
||||
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,
|
||||
};
|
||||
|
||||
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,
|
||||
.has_pipe_cxsr = 1, .has_hotplug = 1,
|
||||
.supports_tv = 1,
|
||||
};
|
||||
|
||||
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,
|
||||
.has_overlay = 1,
|
||||
};
|
||||
|
||||
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,
|
||||
};
|
||||
|
||||
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,
|
||||
};
|
||||
|
||||
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,
|
||||
};
|
||||
|
||||
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,
|
||||
};
|
||||
|
||||
@ -359,33 +363,27 @@ int i965_reset(struct drm_device *dev, u8 flags)
|
||||
if (need_display)
|
||||
i915_save_display(dev);
|
||||
|
||||
if (IS_I965G(dev) || IS_G4X(dev)) {
|
||||
/*
|
||||
* 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
|
||||
* bit (bit 1) to be set
|
||||
*/
|
||||
/*
|
||||
* 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
|
||||
* 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_write_config_byte(dev->pdev, GDRST, gdrst | flags | ((flags == GDRST_FULL) ? 0x1 : 0x0));
|
||||
udelay(50);
|
||||
pci_write_config_byte(dev->pdev, GDRST, gdrst & 0xfe);
|
||||
} while ((gdrst & 0x1) && time_after(timeout, jiffies));
|
||||
|
||||
/* ...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");
|
||||
if (gdrst & 0x1) {
|
||||
WARN(true, "i915: Failed to reset chip\n");
|
||||
mutex_unlock(&dev->struct_mutex);
|
||||
return -ENODEV;
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
/* Ok, now get things going again... */
|
||||
|
@ -196,13 +196,9 @@ struct drm_i915_display_funcs {
|
||||
struct intel_device_info {
|
||||
u8 gen;
|
||||
u8 is_mobile : 1;
|
||||
u8 is_i8xx : 1;
|
||||
u8 is_i85x : 1;
|
||||
u8 is_i915g : 1;
|
||||
u8 is_i9xx : 1;
|
||||
u8 is_i945gm : 1;
|
||||
u8 is_i965g : 1;
|
||||
u8 is_i965gm : 1;
|
||||
u8 is_g33 : 1;
|
||||
u8 need_gfx_hws : 1;
|
||||
u8 is_g4x : 1;
|
||||
@ -217,6 +213,7 @@ struct intel_device_info {
|
||||
u8 cursor_needs_physical : 1;
|
||||
u8 has_overlay : 1;
|
||||
u8 overlay_needs_physical : 1;
|
||||
u8 supports_tv : 1;
|
||||
};
|
||||
|
||||
enum no_fbc_reason {
|
||||
@ -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_I945G(dev) ((dev)->pci_device == 0x2772)
|
||||
#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_CRESTLINE(dev) (INTEL_INFO(dev)->is_crestline)
|
||||
#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,
|
||||
#define IS_IRONLAKE_D(dev) ((dev)->pci_device == 0x0042)
|
||||
#define IS_IRONLAKE_M(dev) ((dev)->pci_device == 0x0046)
|
||||
#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_GEN2(dev) (INTEL_INFO(dev)->gen == 2)
|
||||
@ -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
|
||||
* 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)))
|
||||
#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_DP(dev) (IS_G4X(dev) || IS_IRONLAKE(dev))
|
||||
#define SUPPORTS_EDP(dev) (IS_IRONLAKE_M(dev))
|
||||
#define SUPPORTS_TV(dev) (IS_I9XX(dev) && IS_MOBILE(dev) && \
|
||||
!IS_IRONLAKE(dev) && !IS_PINEVIEW(dev) && \
|
||||
!IS_GEN6(dev))
|
||||
#define SUPPORTS_TV(dev) (INTEL_INFO(dev)->supports_tv)
|
||||
#define I915_HAS_HOTPLUG(dev) (INTEL_INFO(dev)->has_hotplug)
|
||||
/* dsparb controlled by hw only */
|
||||
#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 I915_HAS_FBC(dev) (INTEL_INFO(dev)->has_fbc)
|
||||
#define I915_HAS_RC6(dev) (INTEL_INFO(dev)->has_rc6)
|
||||
|
@ -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
|
||||
* 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;
|
||||
|
||||
/*
|
||||
* Previous chips need to be aligned to the size of the smallest
|
||||
* fence register that can contain the object.
|
||||
*/
|
||||
if (IS_I9XX(dev))
|
||||
if (INTEL_INFO(dev)->gen == 3)
|
||||
start = 1024*1024;
|
||||
else
|
||||
start = 512*1024;
|
||||
@ -1660,7 +1660,7 @@ i915_retire_commands(struct drm_device *dev, struct intel_ring_buffer *ring)
|
||||
uint32_t flush_domains = 0;
|
||||
|
||||
/* The sampler always gets flushed on i965 (sigh) */
|
||||
if (IS_I965G(dev))
|
||||
if (INTEL_INFO(dev)->gen >= 4)
|
||||
flush_domains |= I915_GEM_DOMAIN_SAMPLER;
|
||||
|
||||
ring->flush(dev, ring,
|
||||
@ -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
|
||||
* before clearing the fence.
|
||||
*/
|
||||
if (!IS_I965G(dev)) {
|
||||
if (INTEL_INFO(dev)->gen < 4) {
|
||||
int ret;
|
||||
|
||||
ret = i915_gem_object_flush_gpu_write_domain(obj, true);
|
||||
@ -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].alignment = exec_list[i].alignment;
|
||||
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;
|
||||
else
|
||||
exec2_list[i].flags = 0;
|
||||
@ -4614,21 +4614,30 @@ i915_gem_load(struct drm_device *dev)
|
||||
if (!drm_core_check_feature(dev, DRIVER_MODESET))
|
||||
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;
|
||||
else
|
||||
dev_priv->num_fence_regs = 8;
|
||||
|
||||
/* 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++)
|
||||
I915_WRITE64(FENCE_REG_965_0 + (i * 8), 0);
|
||||
} else {
|
||||
for (i = 0; i < 8; i++)
|
||||
I915_WRITE(FENCE_REG_830_0 + (i * 4), 0);
|
||||
break;
|
||||
case 3:
|
||||
if (IS_I945G(dev) || IS_I945GM(dev) || IS_G33(dev))
|
||||
for (i = 0; i < 8; i++)
|
||||
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);
|
||||
init_waitqueue_head(&dev_priv->pending_flip_queue);
|
||||
|
@ -98,7 +98,7 @@ i915_gem_detect_bit_6_swizzle(struct drm_device *dev)
|
||||
*/
|
||||
swizzle_x = I915_BIT_6_SWIZZLE_9_10;
|
||||
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
|
||||
* swizzling issues.
|
||||
*/
|
||||
@ -190,19 +190,19 @@ i915_tiling_ok(struct drm_device *dev, int stride, int size, int tiling_mode)
|
||||
if (tiling_mode == I915_TILING_NONE)
|
||||
return true;
|
||||
|
||||
if (!IS_I9XX(dev) ||
|
||||
if (IS_GEN2(dev) ||
|
||||
(tiling_mode == I915_TILING_Y && HAS_128_BYTE_Y_TILING(dev)))
|
||||
tile_width = 128;
|
||||
else
|
||||
tile_width = 512;
|
||||
|
||||
/* 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
|
||||
* reg, so dont bother to check the size */
|
||||
if (stride / 128 > I965_FENCE_MAX_PITCH_VAL)
|
||||
return false;
|
||||
} else if (IS_GEN3(dev) || IS_GEN2(dev)) {
|
||||
} else {
|
||||
if (stride > 8192)
|
||||
return false;
|
||||
|
||||
@ -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 */
|
||||
if (IS_I965G(dev)) {
|
||||
if (INTEL_INFO(dev)->gen >= 4) {
|
||||
if (stride & (tile_width - 1))
|
||||
return false;
|
||||
return true;
|
||||
@ -244,16 +244,18 @@ i915_gem_object_fence_offset_ok(struct drm_gem_object *obj, int tiling_mode)
|
||||
if (tiling_mode == I915_TILING_NONE)
|
||||
return true;
|
||||
|
||||
if (!IS_I965G(dev)) {
|
||||
if (obj_priv->gtt_offset & (obj->size - 1))
|
||||
if (INTEL_INFO(dev)->gen >= 4)
|
||||
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;
|
||||
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;
|
||||
|
@ -172,7 +172,7 @@ void intel_enable_asle (struct drm_device *dev)
|
||||
else {
|
||||
i915_enable_pipestat(dev_priv, 1,
|
||||
PIPE_LEGACY_BLC_EVENT_ENABLE);
|
||||
if (IS_I965G(dev))
|
||||
if (INTEL_INFO(dev)->gen >= 4)
|
||||
i915_enable_pipestat(dev_priv, 0,
|
||||
PIPE_LEGACY_BLC_EVENT_ENABLE);
|
||||
}
|
||||
@ -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);
|
||||
|
||||
if (atomic_read(&dev_priv->mm.wedged)) {
|
||||
if (IS_I965G(dev)) {
|
||||
switch (INTEL_INFO(dev)->gen) {
|
||||
case 4:
|
||||
DRM_DEBUG_DRIVER("resetting chip\n");
|
||||
kobject_uevent_env(&dev->primary->kdev.kobj, KOBJ_CHANGE, reset_event);
|
||||
if (!i965_reset(dev, GDRST_RENDER)) {
|
||||
atomic_set(&dev_priv->mm.wedged, 0);
|
||||
kobject_uevent_env(&dev->primary->kdev.kobj, KOBJ_CHANGE, reset_done_event);
|
||||
}
|
||||
} else {
|
||||
break;
|
||||
default:
|
||||
DRM_DEBUG_DRIVER("reboot required\n");
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -501,7 +504,7 @@ i915_get_bbaddr(struct drm_device *dev, u32 *ring)
|
||||
|
||||
if (IS_I830(dev) || IS_845G(dev))
|
||||
cmd = MI_BATCH_BUFFER;
|
||||
else if (IS_I965G(dev))
|
||||
else if (INTEL_INFO(dev)->gen >= 4)
|
||||
cmd = (MI_BATCH_BUFFER_START | (2 << 6) |
|
||||
MI_BATCH_NON_SECURE_I965);
|
||||
else
|
||||
@ -580,7 +583,7 @@ static void i915_capture_error_state(struct drm_device *dev)
|
||||
error->pipeastat = I915_READ(PIPEASTAT);
|
||||
error->pipebstat = I915_READ(PIPEBSTAT);
|
||||
error->instpm = I915_READ(INSTPM);
|
||||
if (!IS_I965G(dev)) {
|
||||
if (INTEL_INFO(dev)->gen < 4) {
|
||||
error->ipeir = I915_READ(IPEIR);
|
||||
error->ipehr = I915_READ(IPEHR);
|
||||
error->instdone = I915_READ(INSTDONE);
|
||||
@ -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) {
|
||||
u32 pgtbl_err = I915_READ(PGTBL_ER);
|
||||
printk(KERN_ERR "page table error\n");
|
||||
@ -804,7 +807,7 @@ static void i915_report_and_clear_eir(struct drm_device *dev)
|
||||
printk(KERN_ERR "instruction error\n");
|
||||
printk(KERN_ERR " INSTPM: 0x%08x\n",
|
||||
I915_READ(INSTPM));
|
||||
if (!IS_I965G(dev)) {
|
||||
if (INTEL_INFO(dev)->gen < 4) {
|
||||
u32 ipeir = I915_READ(IPEIR);
|
||||
|
||||
printk(KERN_ERR " IPEIR: 0x%08x\n",
|
||||
@ -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 */
|
||||
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;
|
||||
stall_detected = I915_READ(dspsurf) == obj_priv->gtt_offset;
|
||||
} else {
|
||||
@ -944,7 +947,7 @@ irqreturn_t i915_driver_irq_handler(DRM_IRQ_ARGS)
|
||||
|
||||
iir = I915_READ(IIR);
|
||||
|
||||
if (IS_I965G(dev))
|
||||
if (INTEL_INFO(dev)->gen >= 4)
|
||||
vblank_status = PIPE_START_VBLANK_INTERRUPT_STATUS;
|
||||
else
|
||||
vblank_status = PIPE_VBLANK_INTERRUPT_STATUS;
|
||||
@ -1209,7 +1212,7 @@ int i915_enable_vblank(struct drm_device *dev, int pipe)
|
||||
if (HAS_PCH_SPLIT(dev))
|
||||
ironlake_enable_display_irq(dev_priv, (pipe == 0) ?
|
||||
DE_PIPEA_VBLANK: DE_PIPEB_VBLANK);
|
||||
else if (IS_I965G(dev))
|
||||
else if (INTEL_INFO(dev)->gen >= 4)
|
||||
i915_enable_pipestat(dev_priv, pipe,
|
||||
PIPE_START_VBLANK_INTERRUPT_ENABLE);
|
||||
else
|
||||
@ -1322,11 +1325,7 @@ void i915_hangcheck_elapsed(unsigned long data)
|
||||
drm_i915_private_t *dev_priv = dev->dev_private;
|
||||
uint32_t acthd, instdone, instdone1;
|
||||
|
||||
/* No reset support on this chip yet. */
|
||||
if (IS_GEN6(dev))
|
||||
return;
|
||||
|
||||
if (!IS_I965G(dev)) {
|
||||
if (INTEL_INFO(dev)->gen < 4) {
|
||||
acthd = I915_READ(ACTHD);
|
||||
instdone = I915_READ(INSTDONE);
|
||||
instdone1 = 0;
|
||||
|
@ -256,7 +256,7 @@ static void i915_save_modeset_reg(struct drm_device *dev)
|
||||
dev_priv->saveFPA1 = I915_READ(FPA1);
|
||||
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->saveHTOTAL_A = I915_READ(HTOTAL_A);
|
||||
dev_priv->saveHBLANK_A = I915_READ(HBLANK_A);
|
||||
@ -294,7 +294,7 @@ static void i915_save_modeset_reg(struct drm_device *dev)
|
||||
dev_priv->saveDSPASIZE = I915_READ(DSPASIZE);
|
||||
dev_priv->saveDSPAPOS = I915_READ(DSPAPOS);
|
||||
dev_priv->saveDSPAADDR = I915_READ(DSPAADDR);
|
||||
if (IS_I965G(dev)) {
|
||||
if (INTEL_INFO(dev)->gen >= 4) {
|
||||
dev_priv->saveDSPASURF = I915_READ(DSPASURF);
|
||||
dev_priv->saveDSPATILEOFF = I915_READ(DSPATILEOFF);
|
||||
}
|
||||
@ -313,7 +313,7 @@ static void i915_save_modeset_reg(struct drm_device *dev)
|
||||
dev_priv->saveFPB1 = I915_READ(FPB1);
|
||||
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->saveHTOTAL_B = I915_READ(HTOTAL_B);
|
||||
dev_priv->saveHBLANK_B = I915_READ(HBLANK_B);
|
||||
@ -351,7 +351,7 @@ static void i915_save_modeset_reg(struct drm_device *dev)
|
||||
dev_priv->saveDSPBSIZE = I915_READ(DSPBSIZE);
|
||||
dev_priv->saveDSPBPOS = I915_READ(DSPBPOS);
|
||||
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->saveDSPBTILEOFF = I915_READ(DSPBTILEOFF);
|
||||
}
|
||||
@ -404,7 +404,7 @@ static void i915_restore_modeset_reg(struct drm_device *dev)
|
||||
I915_WRITE(dpll_a_reg, dev_priv->saveDPLL_A);
|
||||
POSTING_READ(dpll_a_reg);
|
||||
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);
|
||||
POSTING_READ(DPLL_A_MD);
|
||||
}
|
||||
@ -448,7 +448,7 @@ static void i915_restore_modeset_reg(struct drm_device *dev)
|
||||
I915_WRITE(PIPEASRC, dev_priv->savePIPEASRC);
|
||||
I915_WRITE(DSPAADDR, dev_priv->saveDSPAADDR);
|
||||
I915_WRITE(DSPASTRIDE, dev_priv->saveDSPASTRIDE);
|
||||
if (IS_I965G(dev)) {
|
||||
if (INTEL_INFO(dev)->gen >= 4) {
|
||||
I915_WRITE(DSPASURF, dev_priv->saveDSPASURF);
|
||||
I915_WRITE(DSPATILEOFF, dev_priv->saveDSPATILEOFF);
|
||||
}
|
||||
@ -473,7 +473,7 @@ static void i915_restore_modeset_reg(struct drm_device *dev)
|
||||
I915_WRITE(dpll_b_reg, dev_priv->saveDPLL_B);
|
||||
POSTING_READ(dpll_b_reg);
|
||||
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);
|
||||
POSTING_READ(DPLL_B_MD);
|
||||
}
|
||||
@ -517,7 +517,7 @@ static void i915_restore_modeset_reg(struct drm_device *dev)
|
||||
I915_WRITE(PIPEBSRC, dev_priv->savePIPEBSRC);
|
||||
I915_WRITE(DSPBADDR, dev_priv->saveDSPBADDR);
|
||||
I915_WRITE(DSPBSTRIDE, dev_priv->saveDSPBSTRIDE);
|
||||
if (IS_I965G(dev)) {
|
||||
if (INTEL_INFO(dev)->gen >= 4) {
|
||||
I915_WRITE(DSPBSURF, dev_priv->saveDSPBSURF);
|
||||
I915_WRITE(DSPBTILEOFF, dev_priv->saveDSPBTILEOFF);
|
||||
}
|
||||
@ -550,7 +550,7 @@ void i915_save_display(struct drm_device *dev)
|
||||
dev_priv->saveCURBCNTR = I915_READ(CURBCNTR);
|
||||
dev_priv->saveCURBPOS = I915_READ(CURBPOS);
|
||||
dev_priv->saveCURBBASE = I915_READ(CURBBASE);
|
||||
if (!IS_I9XX(dev))
|
||||
if (IS_GEN2(dev))
|
||||
dev_priv->saveCURSIZE = I915_READ(CURSIZE);
|
||||
|
||||
/* CRT state */
|
||||
@ -573,7 +573,7 @@ void i915_save_display(struct drm_device *dev)
|
||||
dev_priv->savePFIT_PGM_RATIOS = I915_READ(PFIT_PGM_RATIOS);
|
||||
dev_priv->saveBLC_PWM_CTL = I915_READ(BLC_PWM_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);
|
||||
if (IS_MOBILE(dev) && !IS_I830(dev))
|
||||
dev_priv->saveLVDS = I915_READ(LVDS);
|
||||
@ -664,7 +664,7 @@ void i915_restore_display(struct drm_device *dev)
|
||||
I915_WRITE(CURBPOS, dev_priv->saveCURBPOS);
|
||||
I915_WRITE(CURBCNTR, dev_priv->saveCURBCNTR);
|
||||
I915_WRITE(CURBBASE, dev_priv->saveCURBBASE);
|
||||
if (!IS_I9XX(dev))
|
||||
if (IS_GEN2(dev))
|
||||
I915_WRITE(CURSIZE, dev_priv->saveCURSIZE);
|
||||
|
||||
/* CRT state */
|
||||
@ -674,7 +674,7 @@ void i915_restore_display(struct drm_device *dev)
|
||||
I915_WRITE(ADPA, dev_priv->saveADPA);
|
||||
|
||||
/* 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);
|
||||
|
||||
if (HAS_PCH_SPLIT(dev)) {
|
||||
|
@ -79,7 +79,7 @@ static int intel_crt_mode_valid(struct drm_connector *connector,
|
||||
if (mode->clock < 25000)
|
||||
return MODE_CLOCK_LOW;
|
||||
|
||||
if (!IS_I9XX(dev))
|
||||
if (IS_GEN2(dev))
|
||||
max_clock = 350000;
|
||||
else
|
||||
max_clock = 400000;
|
||||
@ -123,7 +123,7 @@ static void intel_crt_mode_set(struct drm_encoder *encoder,
|
||||
* Disable separate mode multiplier used when cloning SDVO to CRT
|
||||
* 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);
|
||||
I915_WRITE(dpll_md_reg,
|
||||
dpll_md & ~DPLL_MD_UDI_MULTIPLIER_MASK);
|
||||
@ -325,7 +325,7 @@ intel_crt_load_detect(struct drm_crtc *crtc, struct intel_encoder *intel_encoder
|
||||
/* Set the border color to purple. */
|
||||
I915_WRITE(bclrpat_reg, 0x500050);
|
||||
|
||||
if (IS_I9XX(dev)) {
|
||||
if (!IS_GEN2(dev)) {
|
||||
uint32_t pipeconf = I915_READ(pipeconf_reg);
|
||||
I915_WRITE(pipeconf_reg, pipeconf | PIPECONF_FORCE_BORDER);
|
||||
POSTING_READ(pipeconf_reg);
|
||||
@ -411,7 +411,7 @@ intel_crt_detect(struct drm_connector *connector, bool force)
|
||||
int dpms_mode;
|
||||
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))
|
||||
return connector_status_connected;
|
||||
else
|
||||
|
@ -708,16 +708,16 @@ static const intel_limit_t *intel_limit(struct drm_crtc *crtc)
|
||||
limit = intel_ironlake_limit(crtc);
|
||||
else if (IS_G4X(dev)) {
|
||||
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)) {
|
||||
if (intel_pipe_has_type(crtc, INTEL_OUTPUT_LVDS))
|
||||
limit = &intel_limits_pineview_lvds;
|
||||
else
|
||||
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 {
|
||||
if (intel_pipe_has_type(crtc, INTEL_OUTPUT_LVDS))
|
||||
limit = &intel_limits_i8xx_lvds;
|
||||
@ -1429,7 +1429,7 @@ intel_pin_and_fence_fb_obj(struct drm_device *dev,
|
||||
case I915_TILING_NONE:
|
||||
if (IS_BROADWATER(dev) || IS_CRESTLINE(dev))
|
||||
alignment = 128 * 1024;
|
||||
else if (IS_I965G(dev))
|
||||
else if (INTEL_INFO(dev)->gen >= 4)
|
||||
alignment = 4 * 1024;
|
||||
else
|
||||
alignment = 64 * 1024;
|
||||
@ -1524,7 +1524,7 @@ intel_pipe_set_base_atomic(struct drm_crtc *crtc, struct drm_framebuffer *fb,
|
||||
DRM_ERROR("Unknown color depth\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
if (IS_I965G(dev)) {
|
||||
if (INTEL_INFO(dev)->gen >= 4) {
|
||||
if (obj_priv->tiling_mode != I915_TILING_NONE)
|
||||
dspcntr |= DISPPLANE_TILED;
|
||||
else
|
||||
@ -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",
|
||||
Start, Offset, x, y, 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(DSPTILEOFF(plane), (y << 16) | x);
|
||||
I915_WRITE(DSPADDR(plane), Offset);
|
||||
@ -2388,7 +2388,7 @@ static void i9xx_crtc_disable(struct drm_crtc *crtc)
|
||||
intel_flush_display_plane(dev, plane);
|
||||
|
||||
/* Wait for vblank for the disable to take effect */
|
||||
if (!IS_I9XX(dev))
|
||||
if (IS_GEN2(dev))
|
||||
intel_wait_for_vblank_off(dev, pipe);
|
||||
}
|
||||
|
||||
@ -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 "
|
||||
"cursor %d\n", srwm, cursor_sr);
|
||||
|
||||
if (IS_I965GM(dev))
|
||||
if (IS_CRESTLINE(dev))
|
||||
I915_WRITE(FW_BLC_SELF, FW_BLC_SELF_EN);
|
||||
} else {
|
||||
/* 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)
|
||||
& ~FW_BLC_SELF_EN);
|
||||
}
|
||||
@ -3215,9 +3215,9 @@ static void i9xx_update_wm(struct drm_device *dev, int planea_clock,
|
||||
int sr_clock, sr_entries = 0;
|
||||
|
||||
/* 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;
|
||||
else if (IS_I9XX(dev))
|
||||
else if (!IS_GEN2(dev))
|
||||
planea_params = planeb_params = i915_wm_info;
|
||||
else
|
||||
planea_params = planeb_params = i855_wm_info;
|
||||
@ -3576,7 +3576,7 @@ static int intel_crtc_mode_set(struct drm_crtc *crtc,
|
||||
refclk = dev_priv->lvds_ssc_freq * 1000;
|
||||
DRM_DEBUG_KMS("using SSC reference clock of %d MHz\n",
|
||||
refclk / 1000);
|
||||
} else if (IS_I9XX(dev)) {
|
||||
} else if (!IS_GEN2(dev)) {
|
||||
refclk = 96000;
|
||||
if (HAS_PCH_SPLIT(dev))
|
||||
refclk = 120000; /* 120Mhz refclk */
|
||||
@ -3775,7 +3775,7 @@ static int intel_crtc_mode_set(struct drm_crtc *crtc,
|
||||
if (!HAS_PCH_SPLIT(dev))
|
||||
dpll = DPLL_VGA_MODE_DIS;
|
||||
|
||||
if (IS_I9XX(dev)) {
|
||||
if (!IS_GEN2(dev)) {
|
||||
if (is_lvds)
|
||||
dpll |= DPLLB_MODE_LVDS;
|
||||
else
|
||||
@ -3818,7 +3818,7 @@ static int intel_crtc_mode_set(struct drm_crtc *crtc,
|
||||
dpll |= DPLLB_LVDS_P2_CLOCK_DIV_14;
|
||||
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);
|
||||
} else {
|
||||
if (is_lvds) {
|
||||
@ -3859,7 +3859,7 @@ static int intel_crtc_mode_set(struct drm_crtc *crtc,
|
||||
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)
|
||||
* core speed.
|
||||
*
|
||||
@ -3947,7 +3947,7 @@ static int intel_crtc_mode_set(struct drm_crtc *crtc,
|
||||
* panels behave in the two modes.
|
||||
*/
|
||||
/* 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)
|
||||
temp |= LVDS_ENABLE_DITHER;
|
||||
else
|
||||
@ -3991,7 +3991,7 @@ static int intel_crtc_mode_set(struct drm_crtc *crtc,
|
||||
POSTING_READ(dpll_reg);
|
||||
udelay(150);
|
||||
|
||||
if (IS_I965G(dev) && !HAS_PCH_SPLIT(dev)) {
|
||||
if (INTEL_INFO(dev)->gen >= 4 && !HAS_PCH_SPLIT(dev)) {
|
||||
temp = 0;
|
||||
if (is_sdvo) {
|
||||
temp = intel_mode_get_pixel_multiplier(adjusted_mode);
|
||||
@ -4334,7 +4334,7 @@ static int intel_crtc_cursor_set(struct drm_crtc *crtc,
|
||||
addr = obj_priv->phys_obj->handle->busaddr;
|
||||
}
|
||||
|
||||
if (!IS_I9XX(dev))
|
||||
if (IS_GEN2(dev))
|
||||
I915_WRITE(CURSIZE, (height << 12) | width);
|
||||
|
||||
finish:
|
||||
@ -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;
|
||||
}
|
||||
|
||||
if (IS_I9XX(dev)) {
|
||||
if (!IS_GEN2(dev)) {
|
||||
if (IS_PINEVIEW(dev))
|
||||
clock.p1 = ffs((dpll & DPLL_FPA01_P1_POST_DIV_MASK_PINEVIEW) >>
|
||||
DPLL_FPA01_P1_POST_DIV_SHIFT_PINEVIEW);
|
||||
@ -5768,20 +5768,20 @@ void intel_init_clock_gating(struct drm_device *dev)
|
||||
if (IS_GM45(dev))
|
||||
dspclk_gate |= DSSUNIT_CLOCK_GATE_DISABLE;
|
||||
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_D2, 0);
|
||||
I915_WRITE(DSPCLK_GATE_D, 0);
|
||||
I915_WRITE(RAMCLK_GATE_D, 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 |
|
||||
I965_RCC_CLOCK_GATE_DISABLE |
|
||||
I965_RCPB_CLOCK_GATE_DISABLE |
|
||||
I965_ISC_CLOCK_GATE_DISABLE |
|
||||
I965_FBC_CLOCK_GATE_DISABLE);
|
||||
I915_WRITE(RENCLK_GATE_D2, 0);
|
||||
} else if (IS_I9XX(dev)) {
|
||||
} else if (IS_GEN3(dev)) {
|
||||
u32 dstate = I915_READ(D_STATE);
|
||||
|
||||
dstate |= DSTATE_PLL_D3_OFF | DSTATE_GFX_CLOCK_GATING |
|
||||
@ -5863,7 +5863,7 @@ static void intel_init_display(struct drm_device *dev)
|
||||
dev_priv->display.fbc_enabled = g4x_fbc_enabled;
|
||||
dev_priv->display.enable_fbc = g4x_enable_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.enable_fbc = i8xx_enable_fbc;
|
||||
dev_priv->display.disable_fbc = i8xx_disable_fbc;
|
||||
@ -5923,9 +5923,9 @@ static void intel_init_display(struct drm_device *dev)
|
||||
dev_priv->display.update_wm = pineview_update_wm;
|
||||
} else if (IS_G4X(dev))
|
||||
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;
|
||||
else if (IS_I9XX(dev)) {
|
||||
else if (IS_GEN3(dev)) {
|
||||
dev_priv->display.update_wm = i9xx_update_wm;
|
||||
dev_priv->display.get_fifo_size = i9xx_get_fifo_size;
|
||||
} else if (IS_I85X(dev)) {
|
||||
@ -6039,24 +6039,24 @@ void intel_modeset_init(struct drm_device *dev)
|
||||
|
||||
intel_init_display(dev);
|
||||
|
||||
if (IS_I965G(dev)) {
|
||||
dev->mode_config.max_width = 8192;
|
||||
dev->mode_config.max_height = 8192;
|
||||
} else if (IS_I9XX(dev)) {
|
||||
if (IS_GEN2(dev)) {
|
||||
dev->mode_config.max_width = 2048;
|
||||
dev->mode_config.max_height = 2048;
|
||||
} else if (IS_GEN3(dev)) {
|
||||
dev->mode_config.max_width = 4096;
|
||||
dev->mode_config.max_height = 4096;
|
||||
} else {
|
||||
dev->mode_config.max_width = 2048;
|
||||
dev->mode_config.max_height = 2048;
|
||||
dev->mode_config.max_width = 8192;
|
||||
dev->mode_config.max_height = 8192;
|
||||
}
|
||||
|
||||
/* set memory base */
|
||||
if (IS_I9XX(dev))
|
||||
dev->mode_config.fb_base = pci_resource_start(dev->pdev, 2);
|
||||
else
|
||||
if (IS_GEN2(dev))
|
||||
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;
|
||||
else
|
||||
dev_priv->num_pipe = 1;
|
||||
|
@ -68,7 +68,7 @@ static int intelfb_create(struct intel_fbdev *ifbdev,
|
||||
struct drm_gem_object *fbo = NULL;
|
||||
struct drm_i915_gem_object *obj_priv;
|
||||
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 */
|
||||
if (sizes->surface_bpp == 24)
|
||||
@ -129,7 +129,7 @@ static int intelfb_create(struct intel_fbdev *ifbdev,
|
||||
goto out_unpin;
|
||||
}
|
||||
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);
|
||||
else
|
||||
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,
|
||||
u32 pfit_control = 0, pfit_pgm_ratios = 0, border = 0;
|
||||
|
||||
/* 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");
|
||||
return false;
|
||||
}
|
||||
@ -227,7 +227,7 @@ static bool intel_lvds_mode_fixup(struct drm_encoder *encoder,
|
||||
}
|
||||
|
||||
/* 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)
|
||||
pfit_control |= PANEL_8TO6_DITHER_ENABLE;
|
||||
}
|
||||
@ -238,7 +238,7 @@ static bool intel_lvds_mode_fixup(struct drm_encoder *encoder,
|
||||
goto out;
|
||||
|
||||
/* 965+ wants fuzzy fitting */
|
||||
if (IS_I965G(dev))
|
||||
if (INTEL_INFO(dev)->gen >= 4)
|
||||
pfit_control |= ((intel_crtc->pipe << PFIT_PIPE_SHIFT) |
|
||||
PFIT_FILTER_FUZZY);
|
||||
|
||||
@ -264,7 +264,7 @@ static bool intel_lvds_mode_fixup(struct drm_encoder *encoder,
|
||||
|
||||
case DRM_MODE_SCALE_ASPECT:
|
||||
/* 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_height = mode->hdisplay * adjusted_mode->vdisplay;
|
||||
|
||||
@ -323,7 +323,7 @@ static bool intel_lvds_mode_fixup(struct drm_encoder *encoder,
|
||||
* Fortunately this is all done for us in hw.
|
||||
*/
|
||||
pfit_control |= PFIT_ENABLE;
|
||||
if (IS_I965G(dev))
|
||||
if (INTEL_INFO(dev)->gen >= 4)
|
||||
pfit_control |= PFIT_SCALING_AUTO;
|
||||
else
|
||||
pfit_control |= (VERT_AUTO_SCALE | HORIZ_AUTO_SCALE |
|
||||
|
@ -552,15 +552,15 @@ static int uv_vsubsampling(u32 format)
|
||||
static u32 calc_swidthsw(struct drm_device *dev, u32 offset, u32 width)
|
||||
{
|
||||
u32 mask, shift, ret;
|
||||
if (IS_I9XX(dev)) {
|
||||
mask = 0x3f;
|
||||
shift = 6;
|
||||
} else {
|
||||
if (IS_GEN2(dev)) {
|
||||
mask = 0x1f;
|
||||
shift = 5;
|
||||
} else {
|
||||
mask = 0x3f;
|
||||
shift = 6;
|
||||
}
|
||||
ret = ((offset + width + mask) >> shift) - (offset >> shift);
|
||||
if (IS_I9XX(dev))
|
||||
if (!IS_GEN2(dev))
|
||||
ret <<= 1;
|
||||
ret -=1;
|
||||
return ret << 2;
|
||||
@ -768,7 +768,7 @@ static int intel_overlay_do_put_image(struct intel_overlay *overlay,
|
||||
goto out_unpin;
|
||||
}
|
||||
regs->OCONFIG = OCONF_CC_OUT_8BIT;
|
||||
if (IS_I965GM(overlay->dev))
|
||||
if (IS_GEN4(overlay->dev))
|
||||
regs->OCONFIG |= OCONF_CSC_MODE_BT709;
|
||||
regs->OCONFIG |= overlay->crtc->pipe == 0 ?
|
||||
OCONF_PIPE_A : OCONF_PIPE_B;
|
||||
@ -880,7 +880,7 @@ static int check_overlay_possible_on_crtc(struct intel_overlay *overlay,
|
||||
return -EINVAL;
|
||||
|
||||
/* 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)
|
||||
return -EINVAL;
|
||||
|
||||
@ -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
|
||||
* 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)
|
||||
ratio = I915_READ(PFIT_AUTO_RATIOS);
|
||||
else
|
||||
ratio = I915_READ(PFIT_PGM_RATIOS);
|
||||
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;
|
||||
@ -1007,7 +1008,7 @@ static int check_overlay_src(struct drm_device *dev,
|
||||
|
||||
if (rec->stride_Y & stride_mask || rec->stride_UV & stride_mask)
|
||||
return -EINVAL;
|
||||
if (IS_I965G(dev) && rec->stride_Y < 512)
|
||||
if (IS_GEN4(dev) && rec->stride_Y < 512)
|
||||
return -EINVAL;
|
||||
|
||||
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)
|
||||
return -1;
|
||||
|
||||
/* 965 can place panel fitter on either pipe */
|
||||
if (IS_I965G(dev))
|
||||
if (IS_GEN4(dev))
|
||||
return (pfit_control >> 29) & 0x3;
|
||||
|
||||
/* older chips can only use pipe 1 */
|
||||
@ -1302,7 +1303,7 @@ int intel_overlay_attrs(struct drm_device *dev, void *data,
|
||||
attrs->contrast = overlay->contrast;
|
||||
attrs->saturation = overlay->saturation;
|
||||
|
||||
if (IS_I9XX(dev)) {
|
||||
if (!IS_GEN2(dev)) {
|
||||
attrs->gamma0 = I915_READ(OGAMC0);
|
||||
attrs->gamma1 = I915_READ(OGAMC1);
|
||||
attrs->gamma2 = I915_READ(OGAMC2);
|
||||
@ -1334,7 +1335,7 @@ int intel_overlay_attrs(struct drm_device *dev, void *data,
|
||||
intel_overlay_unmap_regs(overlay, regs);
|
||||
|
||||
if (attrs->flags & I915_OVERLAY_UPDATE_GAMMA) {
|
||||
if (!IS_I9XX(dev))
|
||||
if (IS_GEN2(dev))
|
||||
goto out_unlock;
|
||||
|
||||
if (overlay->active) {
|
||||
|
@ -116,7 +116,7 @@ static int is_backlight_combination_mode(struct drm_device *dev)
|
||||
{
|
||||
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;
|
||||
|
||||
if (IS_GEN2(dev))
|
||||
@ -138,7 +138,7 @@ u32 intel_panel_get_max_backlight(struct drm_device *dev)
|
||||
max >>= 17;
|
||||
} else {
|
||||
max >>= 16;
|
||||
if (!IS_I965G(dev))
|
||||
if (INTEL_INFO(dev)->gen < 4)
|
||||
max &= ~1;
|
||||
}
|
||||
|
||||
|
@ -97,7 +97,7 @@ render_ring_flush(struct drm_device *dev,
|
||||
if ((invalidate_domains|flush_domains) &
|
||||
I915_GEM_DOMAIN_RENDER)
|
||||
cmd &= ~MI_NO_WRITE_FLUSH;
|
||||
if (!IS_I965G(dev)) {
|
||||
if (INTEL_INFO(dev)->gen < 4) {
|
||||
/*
|
||||
* On the 965, the sampler cache always gets flushed
|
||||
* and this bit is reserved.
|
||||
@ -138,7 +138,7 @@ static unsigned int render_ring_get_active_head(struct drm_device *dev,
|
||||
struct intel_ring_buffer *ring)
|
||||
{
|
||||
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);
|
||||
}
|
||||
@ -224,7 +224,7 @@ static int init_render_ring(struct drm_device *dev,
|
||||
int ret = init_ring_common(dev, ring);
|
||||
int mode;
|
||||
|
||||
if (IS_I9XX(dev) && !IS_GEN3(dev)) {
|
||||
if (INTEL_INFO(dev)->gen > 3) {
|
||||
mode = VS_TIMER_DISPATCH << 16 | VS_TIMER_DISPATCH;
|
||||
if (IS_GEN6(dev))
|
||||
mode |= MI_FLUSH_ENABLE << 16 | MI_FLUSH_ENABLE;
|
||||
@ -528,7 +528,7 @@ render_ring_dispatch_gem_execbuffer(struct drm_device *dev,
|
||||
intel_ring_emit(dev, ring, 0);
|
||||
} else {
|
||||
intel_ring_begin(dev, ring, 4);
|
||||
if (IS_I965G(dev)) {
|
||||
if (INTEL_INFO(dev)->gen >= 4) {
|
||||
intel_ring_emit(dev, ring,
|
||||
MI_BATCH_BUFFER_START | (2 << 6)
|
||||
| MI_BATCH_NON_SECURE_I965);
|
||||
|
@ -1162,7 +1162,7 @@ static void intel_sdvo_mode_set(struct drm_encoder *encoder,
|
||||
return;
|
||||
|
||||
/* Set the SDVO control regs. */
|
||||
if (IS_I965G(dev)) {
|
||||
if (INTEL_INFO(dev)->gen >= 4) {
|
||||
sdvox = SDVO_BORDER_ENABLE;
|
||||
if (adjusted_mode->flags & DRM_MODE_FLAG_PVSYNC)
|
||||
sdvox |= SDVO_VSYNC_ACTIVE_HIGH;
|
||||
@ -1185,7 +1185,7 @@ static void intel_sdvo_mode_set(struct drm_encoder *encoder,
|
||||
if (intel_sdvo->is_hdmi)
|
||||
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 */
|
||||
} else if (IS_I945G(dev) || IS_I945GM(dev) || IS_G33(dev)) {
|
||||
/* 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,
|
||||
color_conversion->av);
|
||||
}
|
||||
|
||||
if (IS_I965G(dev))
|
||||
if (INTEL_INFO(dev)->gen >= 4)
|
||||
I915_WRITE(TV_CLR_KNOBS, 0x00404000);
|
||||
else
|
||||
I915_WRITE(TV_CLR_KNOBS, 0x00606000);
|
||||
@ -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));
|
||||
|
||||
/* 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);
|
||||
|
||||
I915_WRITE(pipeconf_reg, pipeconf & ~PIPECONF_ENABLE);
|
||||
|
Loading…
Reference in New Issue
Block a user