summary refs log tree commit diff
path: root/drivers/char
diff options
context:
space:
mode:
authorDavid Woodhouse <David.Woodhouse@intel.com>2009-07-27 16:44:32 +0100
committerDavid Woodhouse <David.Woodhouse@intel.com>2009-08-03 09:04:52 +0100
commit56ec4c1e72865c6d99f643b6574e6e074c3e8823 (patch)
tree92b34c18f1d5d343d5997ee01cc786016d7f1785 /drivers/char
parent176616814d700f19914d8509d9f65dec51a6ebf7 (diff)
downloadlinux-56ec4c1e72865c6d99f643b6574e6e074c3e8823.tar.gz
agp: tidy up handling of scratch pages w.r.t. DMA API
Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
Diffstat (limited to 'drivers/char')
-rw-r--r--drivers/char/agp/backend.c23
-rw-r--r--drivers/char/agp/intel-agp.c8
2 files changed, 15 insertions, 16 deletions
diff --git a/drivers/char/agp/backend.c b/drivers/char/agp/backend.c
index 19ac3663acdc..3c3a487f7b9d 100644
--- a/drivers/char/agp/backend.c
+++ b/drivers/char/agp/backend.c
@@ -150,17 +150,20 @@ static int agp_backend_initialize(struct agp_bridge_data *bridge)
 		}
 
 		bridge->scratch_page_real = phys_to_gart(page_to_phys(page));
-		bridge->scratch_page = bridge->driver->mask_memory(bridge,
-					   phys_to_gart(page_to_phys(page)), 0);
-
-		if (bridge->driver->agp_map_page &&
-		    bridge->driver->agp_map_page(phys_to_virt(page_to_phys(page)),
-						&bridge->scratch_page_dma)) {
-			dev_err(&bridge->dev->dev,
-				"unable to dma-map scratch page\n");
-			rc = -ENOMEM;
-			goto err_out_nounmap;
+		if (bridge->driver->agp_map_page) {
+			if (bridge->driver->agp_map_page(phys_to_virt(page_to_phys(page)),
+							 &bridge->scratch_page_dma)) {
+				dev_err(&bridge->dev->dev,
+					"unable to dma-map scratch page\n");
+				rc = -ENOMEM;
+				goto err_out_nounmap;
+			}
+		} else {
+			bridge->scratch_page_dma = phys_to_gart(page_to_phys(page));
 		}
+
+		bridge->scratch_page = bridge->driver->mask_memory(bridge,
+						   bridge->scratch_page_dma, 0);
 	}
 
 	size_value = bridge->driver->fetch_size();
diff --git a/drivers/char/agp/intel-agp.c b/drivers/char/agp/intel-agp.c
index 20fe82b99fdb..b8f2c75b98d1 100644
--- a/drivers/char/agp/intel-agp.c
+++ b/drivers/char/agp/intel-agp.c
@@ -1138,13 +1138,9 @@ static int intel_i915_configure(void)
 	writel(agp_bridge->gatt_bus_addr|I810_PGETBL_ENABLED, intel_private.registers+I810_PGETBL_CTL);
 	readl(intel_private.registers+I810_PGETBL_CTL);	/* PCI Posting. */
 
-#ifndef USE_PCI_DMA_API
-	agp_bridge->scratch_page_dma = agp_bridge->scratch_page;
-#endif
-
 	if (agp_bridge->driver->needs_scratch_page) {
 		for (i = intel_private.gtt_entries; i < current_size->num_entries; i++) {
-			writel(agp_bridge->scratch_page_dma, intel_private.gtt+i);
+			writel(agp_bridge->scratch_page, intel_private.gtt+i);
 		}
 		readl(intel_private.gtt+i-1);	/* PCI Posting. */
 	}
@@ -1242,7 +1238,7 @@ static int intel_i915_remove_entries(struct agp_memory *mem, off_t pg_start,
 	}
 
 	for (i = pg_start; i < (mem->page_count + pg_start); i++)
-		writel(agp_bridge->scratch_page_dma, intel_private.gtt+i);
+		writel(agp_bridge->scratch_page, intel_private.gtt+i);
 
 	readl(intel_private.gtt+i-1);