drm/i915: Respect the other stolen memory sizes we know of.
authorEric Anholt <eric@anholt.net>
Sat, 3 Jan 2009 02:05:51 +0000 (18:05 -0800)
committerDave Airlie <airlied@linux.ie>
Wed, 7 Jan 2009 01:50:02 +0000 (11:50 +1000)
fd.o bug #19336.

Signed-off-by: Eric Anholt <eric@anholt.net>
Signed-off-by: Dave Airlie <airlied@linux.ie>
drivers/gpu/drm/i915/i915_dma.c
drivers/gpu/drm/i915/i915_reg.h

index 3d7082a..62a4bf7 100644 (file)
@@ -827,6 +827,7 @@ static int i915_probe_agp(struct drm_device *dev, unsigned long *aperture_size,
        struct pci_dev *bridge_dev;
        u16 tmp = 0;
        unsigned long overhead;
+       unsigned long stolen;
 
        bridge_dev = pci_get_bus_and_slot(0, PCI_DEVFN(0,0));
        if (!bridge_dev) {
@@ -866,36 +867,55 @@ static int i915_probe_agp(struct drm_device *dev, unsigned long *aperture_size,
        else
                overhead = (*aperture_size / 1024) + 4096;
 
-       switch (tmp & INTEL_855_GMCH_GMS_MASK) {
+       switch (tmp & INTEL_GMCH_GMS_MASK) {
+       case INTEL_855_GMCH_GMS_DISABLED:
+               DRM_ERROR("video memory is disabled\n");
+               return -1;
        case INTEL_855_GMCH_GMS_STOLEN_1M:
-               break; /* 1M already */
+               stolen = 1 * 1024 * 1024;
+               break;
        case INTEL_855_GMCH_GMS_STOLEN_4M:
-               *preallocated_size *= 4;
+               stolen = 4 * 1024 * 1024;
                break;
        case INTEL_855_GMCH_GMS_STOLEN_8M:
-               *preallocated_size *= 8;
+               stolen = 8 * 1024 * 1024;
                break;
        case INTEL_855_GMCH_GMS_STOLEN_16M:
-               *preallocated_size *= 16;
+               stolen = 16 * 1024 * 1024;
                break;
        case INTEL_855_GMCH_GMS_STOLEN_32M:
-               *preallocated_size *= 32;
+               stolen = 32 * 1024 * 1024;
                break;
        case INTEL_915G_GMCH_GMS_STOLEN_48M:
-               *preallocated_size *= 48;
+               stolen = 48 * 1024 * 1024;
                break;
        case INTEL_915G_GMCH_GMS_STOLEN_64M:
-               *preallocated_size *= 64;
+               stolen = 64 * 1024 * 1024;
+               break;
+       case INTEL_GMCH_GMS_STOLEN_128M:
+               stolen = 128 * 1024 * 1024;
+               break;
+       case INTEL_GMCH_GMS_STOLEN_256M:
+               stolen = 256 * 1024 * 1024;
+               break;
+       case INTEL_GMCH_GMS_STOLEN_96M:
+               stolen = 96 * 1024 * 1024;
+               break;
+       case INTEL_GMCH_GMS_STOLEN_160M:
+               stolen = 160 * 1024 * 1024;
+               break;
+       case INTEL_GMCH_GMS_STOLEN_224M:
+               stolen = 224 * 1024 * 1024;
+               break;
+       case INTEL_GMCH_GMS_STOLEN_352M:
+               stolen = 352 * 1024 * 1024;
                break;
-       case INTEL_855_GMCH_GMS_DISABLED:
-               DRM_ERROR("video memory is disabled\n");
-               return -1;
        default:
                DRM_ERROR("unexpected GMCH_GMS value: 0x%02x\n",
-                       tmp & INTEL_855_GMCH_GMS_MASK);
+                       tmp & INTEL_GMCH_GMS_MASK);
                return -1;
        }
-       *preallocated_size -= overhead;
+       *preallocated_size = stolen - overhead;
 
        return 0;
 }
index 1024315..2731625 100644 (file)
@@ -35,7 +35,7 @@
 #define INTEL_GMCH_MEM_64M     0x1
 #define INTEL_GMCH_MEM_128M    0
 
-#define INTEL_855_GMCH_GMS_MASK                (0x7 << 4)
+#define INTEL_GMCH_GMS_MASK            (0xf << 4)
 #define INTEL_855_GMCH_GMS_DISABLED    (0x0 << 4)
 #define INTEL_855_GMCH_GMS_STOLEN_1M   (0x1 << 4)
 #define INTEL_855_GMCH_GMS_STOLEN_4M   (0x2 << 4)
 
 #define INTEL_915G_GMCH_GMS_STOLEN_48M (0x6 << 4)
 #define INTEL_915G_GMCH_GMS_STOLEN_64M (0x7 << 4)
+#define INTEL_GMCH_GMS_STOLEN_128M     (0x8 << 4)
+#define INTEL_GMCH_GMS_STOLEN_256M     (0x9 << 4)
+#define INTEL_GMCH_GMS_STOLEN_96M      (0xa << 4)
+#define INTEL_GMCH_GMS_STOLEN_160M     (0xb << 4)
+#define INTEL_GMCH_GMS_STOLEN_224M     (0xc << 4)
+#define INTEL_GMCH_GMS_STOLEN_352M     (0xd << 4)
 
 /* PCI config space */