mirror of
https://github.com/torvalds/linux.git
synced 2024-11-05 03:21:32 +00:00
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:
parent
cfdf1fa23f
commit
b295d1b6e3
@ -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));
|
||||||
|
@ -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 = {
|
||||||
|
@ -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;
|
||||||
|
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user