Commit 56ec4c1e authored by David Woodhouse's avatar David Woodhouse
Browse files

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

parent 17661681
Loading
Loading
Loading
Loading
+13 −10
Original line number Diff line number Diff line
@@ -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)),
		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();
+2 −6
Original line number Diff line number Diff line
@@ -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);