Browse Source

drm/i915: GEM on PAE has problems - disable it for now.

On PAE systems, GEM allocates pages using shmem, and passes these
pages to be bound into AGP, however the AGP interfaces + the x86
set_memory interfaces all take unsigned long not dma_addr_t.

The initial fix for this was a mess, so we need to do this correctly
for 2.6.29.

Signed-off-by: Dave Airlie <airlied@redhat.com>
Dave Airlie 16 years ago
parent
commit
ac5c4e7618
2 changed files with 11 additions and 1 deletions
  1. 9 1
      drivers/gpu/drm/i915/i915_dma.c
  2. 2 0
      drivers/gpu/drm/i915/i915_drv.h

+ 9 - 1
drivers/gpu/drm/i915/i915_dma.c

@@ -717,7 +717,7 @@ static int i915_getparam(struct drm_device *dev, void *data,
 		value = dev->pci_device;
 		value = dev->pci_device;
 		break;
 		break;
 	case I915_PARAM_HAS_GEM:
 	case I915_PARAM_HAS_GEM:
-		value = 1;
+		value = dev_priv->has_gem;
 		break;
 		break;
 	default:
 	default:
 		DRM_ERROR("Unknown parameter %d\n", param->param);
 		DRM_ERROR("Unknown parameter %d\n", param->param);
@@ -830,6 +830,14 @@ int i915_driver_load(struct drm_device *dev, unsigned long flags)
 
 
 	dev_priv->regs = ioremap(base, size);
 	dev_priv->regs = ioremap(base, size);
 
 
+#ifdef CONFIG_HIGHMEM64G
+	/* don't enable GEM on PAE - needs agp + set_memory_* interface fixes */
+	dev_priv->has_gem = 0;
+#else
+	/* enable GEM by default */
+	dev_priv->has_gem = 1;
+#endif
+
 	i915_gem_load(dev);
 	i915_gem_load(dev);
 
 
 	/* Init HWS */
 	/* Init HWS */

+ 2 - 0
drivers/gpu/drm/i915/i915_drv.h

@@ -106,6 +106,8 @@ struct intel_opregion {
 typedef struct drm_i915_private {
 typedef struct drm_i915_private {
 	struct drm_device *dev;
 	struct drm_device *dev;
 
 
+	int has_gem;
+
 	void __iomem *regs;
 	void __iomem *regs;
 	drm_local_map_t *sarea;
 	drm_local_map_t *sarea;