agp: tidy up handling of scratch pages w.r.t. DMA API

Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
diff --git a/drivers/char/agp/backend.c b/drivers/char/agp/backend.c
index 19ac366..3c3a487 100644
--- a/drivers/char/agp/backend.c
+++ b/drivers/char/agp/backend.c
@@ -150,17 +150,20 @@
 		}
 
 		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();