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/intel-gtt.c | |
| 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/intel-gtt.c')
| -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 831f3c527bd..3d93cd0acc0 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 | ||
