Commit 241fa85b2bb655224357d713c251077dee3585ce
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 |