aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/char/agp/intel-agp.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/char/agp/intel-agp.c')
-rw-r--r--drivers/char/agp/intel-agp.c21
1 files changed, 14 insertions, 7 deletions
diff --git a/drivers/char/agp/intel-agp.c b/drivers/char/agp/intel-agp.c
index 294cdbf4d44d..141ca176c397 100644
--- a/drivers/char/agp/intel-agp.c
+++ b/drivers/char/agp/intel-agp.c
@@ -506,7 +506,7 @@ static void intel_i830_init_gtt_entries(void)
506 break; 506 break;
507 } 507 }
508 } else { 508 } else {
509 switch (gmch_ctrl & I830_GMCH_GMS_MASK) { 509 switch (gmch_ctrl & I855_GMCH_GMS_MASK) {
510 case I855_GMCH_GMS_STOLEN_1M: 510 case I855_GMCH_GMS_STOLEN_1M:
511 gtt_entries = MB(1) - KB(size); 511 gtt_entries = MB(1) - KB(size);
512 break; 512 break;
@@ -914,6 +914,7 @@ static int intel_i915_create_gatt_table(struct agp_bridge_data *bridge)
914 struct aper_size_info_fixed *size; 914 struct aper_size_info_fixed *size;
915 int num_entries; 915 int num_entries;
916 u32 temp, temp2; 916 u32 temp, temp2;
917 int gtt_map_size = 256 * 1024;
917 918
918 size = agp_bridge->current_size; 919 size = agp_bridge->current_size;
919 page_order = size->page_order; 920 page_order = size->page_order;
@@ -923,15 +924,19 @@ static int intel_i915_create_gatt_table(struct agp_bridge_data *bridge)
923 pci_read_config_dword(intel_private.pcidev, I915_MMADDR, &temp); 924 pci_read_config_dword(intel_private.pcidev, I915_MMADDR, &temp);
924 pci_read_config_dword(intel_private.pcidev, I915_PTEADDR,&temp2); 925 pci_read_config_dword(intel_private.pcidev, I915_PTEADDR,&temp2);
925 926
926 intel_private.gtt = ioremap(temp2, 256 * 1024); 927 if (IS_G33)
928 gtt_map_size = 1024 * 1024; /* 1M on G33 */
929 intel_private.gtt = ioremap(temp2, gtt_map_size);
927 if (!intel_private.gtt) 930 if (!intel_private.gtt)
928 return -ENOMEM; 931 return -ENOMEM;
929 932
930 temp &= 0xfff80000; 933 temp &= 0xfff80000;
931 934
932 intel_private.registers = ioremap(temp,128 * 4096); 935 intel_private.registers = ioremap(temp,128 * 4096);
933 if (!intel_private.registers) 936 if (!intel_private.registers) {
937 iounmap(intel_private.gtt);
934 return -ENOMEM; 938 return -ENOMEM;
939 }
935 940
936 temp = readl(intel_private.registers+I810_PGETBL_CTL) & 0xfffff000; 941 temp = readl(intel_private.registers+I810_PGETBL_CTL) & 0xfffff000;
937 global_cache_flush(); /* FIXME: ? */ 942 global_cache_flush(); /* FIXME: ? */
@@ -985,13 +990,15 @@ static int intel_i965_create_gatt_table(struct agp_bridge_data *bridge)
985 temp &= 0xfff00000; 990 temp &= 0xfff00000;
986 intel_private.gtt = ioremap((temp + (512 * 1024)) , 512 * 1024); 991 intel_private.gtt = ioremap((temp + (512 * 1024)) , 512 * 1024);
987 992
988 if (!intel_private.gtt) 993 if (!intel_private.gtt)
989 return -ENOMEM; 994 return -ENOMEM;
990 995
991 996
992 intel_private.registers = ioremap(temp,128 * 4096); 997 intel_private.registers = ioremap(temp,128 * 4096);
993 if (!intel_private.registers) 998 if (!intel_private.registers) {
994 return -ENOMEM; 999 iounmap(intel_private.gtt);
1000 return -ENOMEM;
1001 }
995 1002
996 temp = readl(intel_private.registers+I810_PGETBL_CTL) & 0xfffff000; 1003 temp = readl(intel_private.registers+I810_PGETBL_CTL) & 0xfffff000;
997 global_cache_flush(); /* FIXME: ? */ 1004 global_cache_flush(); /* FIXME: ? */