Commit 241fa85b2bb655224357d713c251077dee3585ce

Authored by Eric Anholt
Committed by Dave Airlie
1 parent 1fc45d84d6

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>

Showing 2 changed files with 40 additions and 14 deletions Side-by-side Diff

drivers/gpu/drm/i915/i915_dma.c
... ... @@ -827,6 +827,7 @@
827 827 struct pci_dev *bridge_dev;
828 828 u16 tmp = 0;
829 829 unsigned long overhead;
  830 + unsigned long stolen;
830 831  
831 832 bridge_dev = pci_get_bus_and_slot(0, PCI_DEVFN(0,0));
832 833 if (!bridge_dev) {
833 834  
834 835  
835 836  
836 837  
837 838  
838 839  
839 840  
840 841  
841 842  
842 843  
... ... @@ -866,36 +867,55 @@
866 867 else
867 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 874 case INTEL_855_GMCH_GMS_STOLEN_1M:
871   - break; /* 1M already */
  875 + stolen = 1 * 1024 * 1024;
  876 + break;
872 877 case INTEL_855_GMCH_GMS_STOLEN_4M:
873   - *preallocated_size *= 4;
  878 + stolen = 4 * 1024 * 1024;
874 879 break;
875 880 case INTEL_855_GMCH_GMS_STOLEN_8M:
876   - *preallocated_size *= 8;
  881 + stolen = 8 * 1024 * 1024;
877 882 break;
878 883 case INTEL_855_GMCH_GMS_STOLEN_16M:
879   - *preallocated_size *= 16;
  884 + stolen = 16 * 1024 * 1024;
880 885 break;
881 886 case INTEL_855_GMCH_GMS_STOLEN_32M:
882   - *preallocated_size *= 32;
  887 + stolen = 32 * 1024 * 1024;
883 888 break;
884 889 case INTEL_915G_GMCH_GMS_STOLEN_48M:
885   - *preallocated_size *= 48;
  890 + stolen = 48 * 1024 * 1024;
886 891 break;
887 892 case INTEL_915G_GMCH_GMS_STOLEN_64M:
888   - *preallocated_size *= 64;
  893 + stolen = 64 * 1024 * 1024;
889 894 break;
890   - case INTEL_855_GMCH_GMS_DISABLED:
891   - DRM_ERROR("video memory is disabled\n");
892   - return -1;
  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;
  912 + break;
893 913 default:
894 914 DRM_ERROR("unexpected GMCH_GMS value: 0x%02x\n",
895   - tmp & INTEL_855_GMCH_GMS_MASK);
  915 + tmp & INTEL_GMCH_GMS_MASK);
896 916 return -1;
897 917 }
898   - *preallocated_size -= overhead;
  918 + *preallocated_size = stolen - overhead;
899 919  
900 920 return 0;
901 921 }
drivers/gpu/drm/i915/i915_reg.h
... ... @@ -35,7 +35,7 @@
35 35 #define INTEL_GMCH_MEM_64M 0x1
36 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 39 #define INTEL_855_GMCH_GMS_DISABLED (0x0 << 4)
40 40 #define INTEL_855_GMCH_GMS_STOLEN_1M (0x1 << 4)
41 41 #define INTEL_855_GMCH_GMS_STOLEN_4M (0x2 << 4)
... ... @@ -45,6 +45,12 @@
45 45  
46 46 #define INTEL_915G_GMCH_GMS_STOLEN_48M (0x6 << 4)
47 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 55 /* PCI config space */
50 56