Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

authored by

Eric Anholt and committed by
Dave Airlie
241fa85b 1fc45d84

+50 -24
+43 -23
drivers/gpu/drm/i915/i915_dma.c
··· 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) { ··· 867 866 else 868 867 overhead = (*aperture_size / 1024) + 4096; 869 868 870 - switch (tmp & INTEL_855_GMCH_GMS_MASK) { 871 - case INTEL_855_GMCH_GMS_STOLEN_1M: 872 - break; /* 1M already */ 873 - case INTEL_855_GMCH_GMS_STOLEN_4M: 874 - *preallocated_size *= 4; 875 - break; 876 - case INTEL_855_GMCH_GMS_STOLEN_8M: 877 - *preallocated_size *= 8; 878 - break; 879 - case INTEL_855_GMCH_GMS_STOLEN_16M: 880 - *preallocated_size *= 16; 881 - break; 882 - case INTEL_855_GMCH_GMS_STOLEN_32M: 883 - *preallocated_size *= 32; 884 - break; 885 - case INTEL_915G_GMCH_GMS_STOLEN_48M: 886 - *preallocated_size *= 48; 887 - break; 888 - case INTEL_915G_GMCH_GMS_STOLEN_64M: 889 - *preallocated_size *= 64; 890 - break; 869 + switch (tmp & INTEL_GMCH_GMS_MASK) { 891 870 case INTEL_855_GMCH_GMS_DISABLED: 892 871 DRM_ERROR("video memory is disabled\n"); 893 872 return -1; 873 + case INTEL_855_GMCH_GMS_STOLEN_1M: 874 + stolen = 1 * 1024 * 1024; 875 + break; 876 + case INTEL_855_GMCH_GMS_STOLEN_4M: 877 + stolen = 4 * 1024 * 1024; 878 + break; 879 + case INTEL_855_GMCH_GMS_STOLEN_8M: 880 + stolen = 8 * 1024 * 1024; 881 + break; 882 + case INTEL_855_GMCH_GMS_STOLEN_16M: 883 + stolen = 16 * 1024 * 1024; 884 + break; 885 + case INTEL_855_GMCH_GMS_STOLEN_32M: 886 + stolen = 32 * 1024 * 1024; 887 + break; 888 + case INTEL_915G_GMCH_GMS_STOLEN_48M: 889 + stolen = 48 * 1024 * 1024; 890 + break; 891 + case INTEL_915G_GMCH_GMS_STOLEN_64M: 892 + stolen = 64 * 1024 * 1024; 893 + break; 894 + case INTEL_GMCH_GMS_STOLEN_128M: 895 + stolen = 128 * 1024 * 1024; 896 + break; 897 + case INTEL_GMCH_GMS_STOLEN_256M: 898 + stolen = 256 * 1024 * 1024; 899 + break; 900 + case INTEL_GMCH_GMS_STOLEN_96M: 901 + stolen = 96 * 1024 * 1024; 902 + break; 903 + case INTEL_GMCH_GMS_STOLEN_160M: 904 + stolen = 160 * 1024 * 1024; 905 + break; 906 + case INTEL_GMCH_GMS_STOLEN_224M: 907 + stolen = 224 * 1024 * 1024; 908 + break; 909 + case INTEL_GMCH_GMS_STOLEN_352M: 910 + stolen = 352 * 1024 * 1024; 911 + break; 894 912 default: 895 913 DRM_ERROR("unexpected GMCH_GMS value: 0x%02x\n", 896 - tmp & INTEL_855_GMCH_GMS_MASK); 914 + tmp & INTEL_GMCH_GMS_MASK); 897 915 return -1; 898 916 } 899 - *preallocated_size -= overhead; 917 + *preallocated_size = stolen - overhead; 900 918 901 919 return 0; 902 920 }
+7 -1
drivers/gpu/drm/i915/i915_reg.h
··· 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 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