diff options
Diffstat (limited to 'drivers/char/agp/intel-agp.c')
-rw-r--r-- | drivers/char/agp/intel-agp.c | 21 |
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: ? */ |