summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDave Airlie <airlied@linux.ie>2008-04-22 16:08:17 +1000
committerDave Airlie <airlied@linux.ie>2008-04-22 16:08:17 +1000
commitce8c8425185cfe0390230b7b537f2e0514c721c6 (patch)
treed05aaddbac70a333be72d1bbc370263bc72fd02a
parentf0e38f521790becbf9ca13ef5c579d12c6985d52 (diff)
i915: gfx hw and i945gme fixes from upstream
From Jesse and Zhenyu originally.
-rw-r--r--shared-core/i915_dma.c5
-rw-r--r--shared-core/i915_drv.h6
2 files changed, 8 insertions, 3 deletions
diff --git a/shared-core/i915_dma.c b/shared-core/i915_dma.c
index 1e493e38..7ccd185c 100644
--- a/shared-core/i915_dma.c
+++ b/shared-core/i915_dma.c
@@ -245,7 +245,7 @@ static int i915_initialize(struct drm_device * dev,
dev_priv->vblank_pipe = DRM_I915_VBLANK_PIPE_A;
/* Program Hardware Status Page */
- if (!IS_G33(dev)) {
+ if (!I915_NEED_GFX_HWS(dev)) {
dev_priv->status_page_dmah =
drm_pci_alloc(dev, PAGE_SIZE, PAGE_SIZE, 0xffffffff);
@@ -970,6 +970,9 @@ static int i915_set_status_page(struct drm_device *dev, void *data,
drm_i915_private_t *dev_priv = dev->dev_private;
drm_i915_hws_addr_t *hws = data;
+ if (!I915_NEED_GFX_HWS(dev))
+ return -EINVAL;
+
if (!dev_priv) {
DRM_ERROR("called with no initialization\n");
return -EINVAL;
diff --git a/shared-core/i915_drv.h b/shared-core/i915_drv.h
index 3fd416c6..412a2594 100644
--- a/shared-core/i915_drv.h
+++ b/shared-core/i915_drv.h
@@ -1274,8 +1274,8 @@ extern int i915_wait_ring(struct drm_device * dev, int n, const char *caller);
#define IS_I915G(dev) ((dev)->pci_device == 0x2582 || (dev)->pci_device == 0x258a)
#define IS_I915GM(dev) ((dev)->pci_device == 0x2592)
#define IS_I945G(dev) ((dev)->pci_device == 0x2772)
-#define IS_I945GM(dev) ((dev)->pci_device == 0x27A2)
-
+#define IS_I945GM(dev) ((dev)->pci_device == 0x27A2 ||\
+ (dev)->pci_device == 0x27AE)
#define IS_I965G(dev) ((dev)->pci_device == 0x2972 || \
(dev)->pci_device == 0x2982 || \
(dev)->pci_device == 0x2992 || \
@@ -1298,6 +1298,8 @@ extern int i915_wait_ring(struct drm_device * dev, int n, const char *caller);
#define IS_MOBILE(dev) (IS_I830(dev) || IS_I85X(dev) || IS_I915GM(dev) || \
IS_I945GM(dev) || IS_I965GM(dev) || IS_IGD_GM(dev))
+#define I915_NEED_GFX_HWS(dev) (IS_G33(dev) || IS_IGD_GM(dev))
+
#define PRIMARY_RINGBUFFER_SIZE (128*1024)
#endif