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>
This commit is contained in:
Dave Airlie 2008-12-19 15:38:34 +10:00
parent c4de0a5d67
commit ac5c4e7618
2 changed files with 11 additions and 1 deletions

View File

@ -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 */

View File

@ -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;