agp: tidy up handling of scratch pages w.r.t. DMA API
Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
This commit is contained in:
@@ -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_real = phys_to_gart(page_to_phys(page));
|
||||||
bridge->scratch_page = bridge->driver->mask_memory(bridge,
|
if (bridge->driver->agp_map_page) {
|
||||||
phys_to_gart(page_to_phys(page)), 0);
|
if (bridge->driver->agp_map_page(phys_to_virt(page_to_phys(page)),
|
||||||
|
&bridge->scratch_page_dma)) {
|
||||||
if (bridge->driver->agp_map_page &&
|
dev_err(&bridge->dev->dev,
|
||||||
bridge->driver->agp_map_page(phys_to_virt(page_to_phys(page)),
|
"unable to dma-map scratch page\n");
|
||||||
&bridge->scratch_page_dma)) {
|
rc = -ENOMEM;
|
||||||
dev_err(&bridge->dev->dev,
|
goto err_out_nounmap;
|
||||||
"unable to dma-map scratch page\n");
|
}
|
||||||
rc = -ENOMEM;
|
} else {
|
||||||
goto err_out_nounmap;
|
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();
|
size_value = bridge->driver->fetch_size();
|
||||||
|
@@ -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);
|
writel(agp_bridge->gatt_bus_addr|I810_PGETBL_ENABLED, intel_private.registers+I810_PGETBL_CTL);
|
||||||
readl(intel_private.registers+I810_PGETBL_CTL); /* PCI Posting. */
|
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) {
|
if (agp_bridge->driver->needs_scratch_page) {
|
||||||
for (i = intel_private.gtt_entries; i < current_size->num_entries; i++) {
|
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. */
|
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++)
|
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);
|
readl(intel_private.gtt+i-1);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user