drm/i915: Track whether cursor needs physical address in intel_device_info

Signed-off-by: Kristian Høgsberg <krh@bitplanet.net>
Signed-off-by: Eric Anholt <eric@anholt.net>
This commit is contained in:
Kristian Høgsberg 2009-12-16 15:16:17 -05:00 committed by Eric Anholt
parent cfdf1fa23f
commit b295d1b6e3
4 changed files with 9 additions and 17 deletions

View File

@ -1200,14 +1200,6 @@ static int i915_load_modeset_init(struct drm_device *dev,
dev->mode_config.fb_base = drm_get_resource_start(dev, fb_bar) & dev->mode_config.fb_base = drm_get_resource_start(dev, fb_bar) &
0xff000000; 0xff000000;
if (IS_MOBILE(dev) || IS_I9XX(dev))
dev_priv->cursor_needs_physical = true;
else
dev_priv->cursor_needs_physical = false;
if (IS_I965G(dev) || IS_G33(dev))
dev_priv->cursor_needs_physical = false;
/* Basic memrange allocator for stolen space (aka vram) */ /* Basic memrange allocator for stolen space (aka vram) */
drm_mm_init(&dev_priv->vram, 0, prealloc_size); drm_mm_init(&dev_priv->vram, 0, prealloc_size);
DRM_INFO("set up %ldM of stolen space\n", prealloc_size / (1024*1024)); DRM_INFO("set up %ldM of stolen space\n", prealloc_size / (1024*1024));

View File

@ -57,7 +57,7 @@ static struct drm_driver driver;
.driver_data = (unsigned long) info } .driver_data = (unsigned long) info }
const static struct intel_device_info intel_i830_info = { const static struct intel_device_info intel_i830_info = {
.is_i8xx = 1, .is_mobile = 1, .is_i8xx = 1, .is_mobile = 1, .cursor_needs_physical = 1,
}; };
const static struct intel_device_info intel_845g_info = { const static struct intel_device_info intel_845g_info = {
@ -65,7 +65,7 @@ const static struct intel_device_info intel_845g_info = {
}; };
const static struct intel_device_info intel_i85x_info = { const static struct intel_device_info intel_i85x_info = {
.is_i8xx = 1, .is_mobile = 1, .is_i8xx = 1, .is_mobile = 1, .cursor_needs_physical = 1,
}; };
const static struct intel_device_info intel_i865g_info = { const static struct intel_device_info intel_i865g_info = {
@ -73,17 +73,18 @@ const static struct intel_device_info intel_i865g_info = {
}; };
const static struct intel_device_info intel_i915g_info = { const static struct intel_device_info intel_i915g_info = {
.is_i915g = 1, .is_i9xx = 1, .is_i915g = 1, .is_i9xx = 1, .cursor_needs_physical = 1,
}; };
const static struct intel_device_info intel_i915gm_info = { const static struct intel_device_info intel_i915gm_info = {
.is_i9xx = 1, .is_mobile = 1, .has_fbc = 1, .is_i9xx = 1, .is_mobile = 1, .has_fbc = 1,
.cursor_needs_physical = 1,
}; };
const static struct intel_device_info intel_i945g_info = { const static struct intel_device_info intel_i945g_info = {
.is_i9xx = 1, .has_hotplug = 1, .is_i9xx = 1, .has_hotplug = 1, .cursor_needs_physical = 1,
}; };
const static struct intel_device_info intel_i945gm_info = { const static struct intel_device_info intel_i945gm_info = {
.is_i945gm = 1, .is_i9xx = 1, .is_mobile = 1, .has_fbc = 1, .is_i945gm = 1, .is_i9xx = 1, .is_mobile = 1, .has_fbc = 1,
.has_hotplug = 1, .has_hotplug = 1, .cursor_needs_physical = 1,
}; };
const static struct intel_device_info intel_i965g_info = { const static struct intel_device_info intel_i965g_info = {

View File

@ -189,6 +189,7 @@ struct intel_device_info {
u8 has_rc6 : 1; u8 has_rc6 : 1;
u8 has_pipe_cxsr : 1; u8 has_pipe_cxsr : 1;
u8 has_hotplug : 1; u8 has_hotplug : 1;
u8 cursor_needs_physical : 1;
}; };
typedef struct drm_i915_private { typedef struct drm_i915_private {
@ -253,8 +254,6 @@ typedef struct drm_i915_private {
int hangcheck_count; int hangcheck_count;
uint32_t last_acthd; uint32_t last_acthd;
bool cursor_needs_physical;
struct drm_mm vram; struct drm_mm vram;
unsigned long cfb_size; unsigned long cfb_size;

View File

@ -3385,7 +3385,7 @@ static int intel_crtc_cursor_set(struct drm_crtc *crtc,
/* we only need to pin inside GTT if cursor is non-phy */ /* we only need to pin inside GTT if cursor is non-phy */
mutex_lock(&dev->struct_mutex); mutex_lock(&dev->struct_mutex);
if (!dev_priv->cursor_needs_physical) { if (!dev_priv->info->cursor_needs_physical) {
ret = i915_gem_object_pin(bo, PAGE_SIZE); ret = i915_gem_object_pin(bo, PAGE_SIZE);
if (ret) { if (ret) {
DRM_ERROR("failed to pin cursor bo\n"); DRM_ERROR("failed to pin cursor bo\n");
@ -3420,7 +3420,7 @@ static int intel_crtc_cursor_set(struct drm_crtc *crtc,
I915_WRITE(base, addr); I915_WRITE(base, addr);
if (intel_crtc->cursor_bo) { if (intel_crtc->cursor_bo) {
if (dev_priv->cursor_needs_physical) { if (dev_priv->info->cursor_needs_physical) {
if (intel_crtc->cursor_bo != bo) if (intel_crtc->cursor_bo != bo)
i915_gem_detach_phys_object(dev, intel_crtc->cursor_bo); i915_gem_detach_phys_object(dev, intel_crtc->cursor_bo);
} else } else