aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorEric Anholt <eric@anholt.net>2009-01-02 21:05:51 -0500
committerDave Airlie <airlied@linux.ie>2009-01-06 20:50:02 -0500
commit241fa85b2bb655224357d713c251077dee3585ce (patch)
treee123a21d974a8737a47835a077396630718bdf65 /drivers
parent1fc45d84d616cec00566152c1080903c461eb537 (diff)
drm/i915: Respect the other stolen memory sizes we know of.
fd.o bug #19336. Signed-off-by: Eric Anholt <eric@anholt.net> Signed-off-by: Dave Airlie <airlied@linux.ie>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/gpu/drm/i915/i915_dma.c46
-rw-r--r--drivers/gpu/drm/i915/i915_reg.h8
2 files changed, 40 insertions, 14 deletions
diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c
index 3d7082af5b72..62a4bf7b49df 100644
--- a/drivers/gpu/drm/i915/i915_dma.c
+++ b/drivers/gpu/drm/i915/i915_dma.c
@@ -827,6 +827,7 @@ static int i915_probe_agp(struct drm_device *dev, unsigned long *aperture_size,
827 struct pci_dev *bridge_dev; 827 struct pci_dev *bridge_dev;
828 u16 tmp = 0; 828 u16 tmp = 0;
829 unsigned long overhead; 829 unsigned long overhead;
830 unsigned long stolen;
830 831
831 bridge_dev = pci_get_bus_and_slot(0, PCI_DEVFN(0,0)); 832 bridge_dev = pci_get_bus_and_slot(0, PCI_DEVFN(0,0));
832 if (!bridge_dev) { 833 if (!bridge_dev) {
@@ -866,36 +867,55 @@ static int i915_probe_agp(struct drm_device *dev, unsigned long *aperture_size,
866 else 867 else
867 overhead = (*aperture_size / 1024) + 4096; 868 overhead = (*aperture_size / 1024) + 4096;
868 869
869 switch (tmp & INTEL_855_GMCH_GMS_MASK) { 870 switch (tmp & INTEL_GMCH_GMS_MASK) {
871 case INTEL_855_GMCH_GMS_DISABLED:
872 DRM_ERROR("video memory is disabled\n");
873 return -1;
870 case INTEL_855_GMCH_GMS_STOLEN_1M: 874 case INTEL_855_GMCH_GMS_STOLEN_1M:
871 break; /* 1M already */ 875 stolen = 1 * 1024 * 1024;
876 break;
872 case INTEL_855_GMCH_GMS_STOLEN_4M: 877 case INTEL_855_GMCH_GMS_STOLEN_4M:
873 *preallocated_size *= 4; 878 stolen = 4 * 1024 * 1024;
874 break; 879 break;
875 case INTEL_855_GMCH_GMS_STOLEN_8M: 880 case INTEL_855_GMCH_GMS_STOLEN_8M:
876 *preallocated_size *= 8; 881 stolen = 8 * 1024 * 1024;
877 break; 882 break;
878 case INTEL_855_GMCH_GMS_STOLEN_16M: 883 case INTEL_855_GMCH_GMS_STOLEN_16M:
879 *preallocated_size *= 16; 884 stolen = 16 * 1024 * 1024;
880 break; 885 break;
881 case INTEL_855_GMCH_GMS_STOLEN_32M: 886 case INTEL_855_GMCH_GMS_STOLEN_32M:
882 *preallocated_size *= 32; 887 stolen = 32 * 1024 * 1024;
883 break; 888 break;
884 case INTEL_915G_GMCH_GMS_STOLEN_48M: 889 case INTEL_915G_GMCH_GMS_STOLEN_48M:
885 *preallocated_size *= 48; 890 stolen = 48 * 1024 * 1024;
886 break; 891 break;
887 case INTEL_915G_GMCH_GMS_STOLEN_64M: 892 case INTEL_915G_GMCH_GMS_STOLEN_64M:
888 *preallocated_size *= 64; 893 stolen = 64 * 1024 * 1024;
894 break;
895 case INTEL_GMCH_GMS_STOLEN_128M:
896 stolen = 128 * 1024 * 1024;
897 break;
898 case INTEL_GMCH_GMS_STOLEN_256M:
899 stolen = 256 * 1024 * 1024;
900 break;
901 case INTEL_GMCH_GMS_STOLEN_96M:
902 stolen = 96 * 1024 * 1024;
903 break;
904 case INTEL_GMCH_GMS_STOLEN_160M:
905 stolen = 160 * 1024 * 1024;
906 break;
907 case INTEL_GMCH_GMS_STOLEN_224M:
908 stolen = 224 * 1024 * 1024;
909 break;
910 case INTEL_GMCH_GMS_STOLEN_352M:
911 stolen = 352 * 1024 * 1024;
889 break; 912 break;
890 case INTEL_855_GMCH_GMS_DISABLED:
891 DRM_ERROR("video memory is disabled\n");
892 return -1;
893 default: 913 default:
894 DRM_ERROR("unexpected GMCH_GMS value: 0x%02x\n", 914 DRM_ERROR("unexpected GMCH_GMS value: 0x%02x\n",
895 tmp & INTEL_855_GMCH_GMS_MASK); 915 tmp & INTEL_GMCH_GMS_MASK);
896 return -1; 916 return -1;
897 } 917 }
898 *preallocated_size -= overhead; 918 *preallocated_size = stolen - overhead;
899 919
900 return 0; 920 return 0;
901} 921}
diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
index 102431577dbb..273162579e1b 100644
--- a/drivers/gpu/drm/i915/i915_reg.h
+++ b/drivers/gpu/drm/i915/i915_reg.h
@@ -35,7 +35,7 @@
35#define INTEL_GMCH_MEM_64M 0x1 35#define INTEL_GMCH_MEM_64M 0x1
36#define INTEL_GMCH_MEM_128M 0 36#define INTEL_GMCH_MEM_128M 0
37 37
38#define INTEL_855_GMCH_GMS_MASK (0x7 << 4) 38#define INTEL_GMCH_GMS_MASK (0xf << 4)
39#define INTEL_855_GMCH_GMS_DISABLED (0x0 << 4) 39#define INTEL_855_GMCH_GMS_DISABLED (0x0 << 4)
40#define INTEL_855_GMCH_GMS_STOLEN_1M (0x1 << 4) 40#define INTEL_855_GMCH_GMS_STOLEN_1M (0x1 << 4)
41#define INTEL_855_GMCH_GMS_STOLEN_4M (0x2 << 4) 41#define INTEL_855_GMCH_GMS_STOLEN_4M (0x2 << 4)
@@ -45,6 +45,12 @@
45 45
46#define INTEL_915G_GMCH_GMS_STOLEN_48M (0x6 << 4) 46#define INTEL_915G_GMCH_GMS_STOLEN_48M (0x6 << 4)
47#define INTEL_915G_GMCH_GMS_STOLEN_64M (0x7 << 4) 47#define INTEL_915G_GMCH_GMS_STOLEN_64M (0x7 << 4)
48#define INTEL_GMCH_GMS_STOLEN_128M (0x8 << 4)
49#define INTEL_GMCH_GMS_STOLEN_256M (0x9 << 4)
50#define INTEL_GMCH_GMS_STOLEN_96M (0xa << 4)
51#define INTEL_GMCH_GMS_STOLEN_160M (0xb << 4)
52#define INTEL_GMCH_GMS_STOLEN_224M (0xc << 4)
53#define INTEL_GMCH_GMS_STOLEN_352M (0xd << 4)
48 54
49/* PCI config space */ 55/* PCI config space */
50 56