diff options
author | Daniel Vetter <daniel.vetter@ffwll.ch> | 2010-09-08 15:20:12 -0400 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2010-09-08 16:20:14 -0400 |
commit | ccc4e67be5ac1bd38c4bfd61aca38366597e8afb (patch) | |
tree | 04c661214c09dd31114ab36f34ef431711b38da9 /drivers/char/agp | |
parent | 1a997ff2a0089a07a5494545d31f4366742dea43 (diff) |
intel-gtt: i915: use detected gtt size for mapping
Slight reordering of the init sequence required.
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Diffstat (limited to 'drivers/char/agp')
-rw-r--r-- | drivers/char/agp/intel-gtt.c | 58 |
1 files changed, 8 insertions, 50 deletions
diff --git a/drivers/char/agp/intel-gtt.c b/drivers/char/agp/intel-gtt.c index 831f3c527bdf..3d93cd0acc01 100644 --- a/drivers/char/agp/intel-gtt.c +++ b/drivers/char/agp/intel-gtt.c | |||
@@ -708,7 +708,6 @@ static unsigned int intel_gtt_stolen_entries(void) | |||
708 | return stolen_entries; | 708 | return stolen_entries; |
709 | } | 709 | } |
710 | 710 | ||
711 | #if 0 /* extracted code in bad shape, needs some cleaning before use */ | ||
712 | static unsigned int intel_gtt_total_entries(void) | 711 | static unsigned int intel_gtt_total_entries(void) |
713 | { | 712 | { |
714 | int size; | 713 | int size; |
@@ -750,7 +749,6 @@ static unsigned int intel_gtt_total_entries(void) | |||
750 | return intel_private.base.gtt_mappable_entries; | 749 | return intel_private.base.gtt_mappable_entries; |
751 | } | 750 | } |
752 | } | 751 | } |
753 | #endif | ||
754 | 752 | ||
755 | static unsigned int intel_gtt_mappable_entries(void) | 753 | static unsigned int intel_gtt_mappable_entries(void) |
756 | { | 754 | { |
@@ -1248,45 +1246,6 @@ static int intel_i915_remove_entries(struct agp_memory *mem, off_t pg_start, | |||
1248 | return 0; | 1246 | return 0; |
1249 | } | 1247 | } |
1250 | 1248 | ||
1251 | /* Return the aperture size by just checking the resource length. The effect | ||
1252 | * described in the spec of the MSAC registers is just changing of the | ||
1253 | * resource size. | ||
1254 | */ | ||
1255 | static int intel_i915_get_gtt_size(void) | ||
1256 | { | ||
1257 | int size; | ||
1258 | |||
1259 | if (IS_G33) { | ||
1260 | u16 gmch_ctrl; | ||
1261 | |||
1262 | /* G33's GTT size defined in gmch_ctrl */ | ||
1263 | pci_read_config_word(intel_private.bridge_dev, I830_GMCH_CTRL, &gmch_ctrl); | ||
1264 | switch (gmch_ctrl & I830_GMCH_GMS_MASK) { | ||
1265 | case I830_GMCH_GMS_STOLEN_512: | ||
1266 | size = 512; | ||
1267 | break; | ||
1268 | case I830_GMCH_GMS_STOLEN_1024: | ||
1269 | size = 1024; | ||
1270 | break; | ||
1271 | case I830_GMCH_GMS_STOLEN_8192: | ||
1272 | size = 8*1024; | ||
1273 | break; | ||
1274 | default: | ||
1275 | dev_info(&intel_private.bridge_dev->dev, | ||
1276 | "unknown page table size 0x%x, assuming 512KB\n", | ||
1277 | (gmch_ctrl & I830_GMCH_GMS_MASK)); | ||
1278 | size = 512; | ||
1279 | } | ||
1280 | } else { | ||
1281 | /* On previous hardware, the GTT size was just what was | ||
1282 | * required to map the aperture. | ||
1283 | */ | ||
1284 | size = agp_bridge->driver->fetch_size(); | ||
1285 | } | ||
1286 | |||
1287 | return KB(size); | ||
1288 | } | ||
1289 | |||
1290 | /* The intel i915 automatically initializes the agp aperture during POST. | 1249 | /* The intel i915 automatically initializes the agp aperture during POST. |
1291 | * Use the memory already set aside for in the GTT. | 1250 | * Use the memory already set aside for in the GTT. |
1292 | */ | 1251 | */ |
@@ -1306,19 +1265,18 @@ static int intel_i915_create_gatt_table(struct agp_bridge_data *bridge) | |||
1306 | pci_read_config_dword(intel_private.pcidev, I915_MMADDR, &temp); | 1265 | pci_read_config_dword(intel_private.pcidev, I915_MMADDR, &temp); |
1307 | pci_read_config_dword(intel_private.pcidev, I915_PTEADDR, &temp2); | 1266 | pci_read_config_dword(intel_private.pcidev, I915_PTEADDR, &temp2); |
1308 | 1267 | ||
1309 | gtt_map_size = intel_i915_get_gtt_size(); | 1268 | temp &= 0xfff80000; |
1310 | 1269 | ||
1311 | intel_private.gtt = ioremap(temp2, gtt_map_size); | 1270 | intel_private.registers = ioremap(temp, 128 * 4096); |
1312 | if (!intel_private.gtt) | 1271 | if (!intel_private.registers) |
1313 | return -ENOMEM; | 1272 | return -ENOMEM; |
1314 | 1273 | ||
1315 | intel_private.base.gtt_total_entries = gtt_map_size / 4; | 1274 | intel_private.base.gtt_total_entries = intel_gtt_total_entries(); |
1316 | 1275 | gtt_map_size = intel_private.base.gtt_total_entries * 4; | |
1317 | temp &= 0xfff80000; | ||
1318 | 1276 | ||
1319 | intel_private.registers = ioremap(temp, 128 * 4096); | 1277 | intel_private.gtt = ioremap(temp2, gtt_map_size); |
1320 | if (!intel_private.registers) { | 1278 | if (!intel_private.gtt) { |
1321 | iounmap(intel_private.gtt); | 1279 | iounmap(intel_private.registers); |
1322 | return -ENOMEM; | 1280 | return -ENOMEM; |
1323 | } | 1281 | } |
1324 | 1282 | ||