Commit 50a4c4a9 authored by Daniel Vetter's avatar Daniel Vetter

agp/intel-gtt: export the scratch page dma address

To implement a PPGTT for drm/i915 that fully aliases the GTT, we also
need to properly alias the scratch page.
Reviewed-by: default avatarBen Widawsky <ben@bwidawsk.net>
Tested-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Tested-by: default avatarEugeni Dodonov <eugeni.dodonov@intel.com>
Reviewed-by: default avatarEugeni Dodonov <eugeni.dodonov@intel.com>
Signed-Off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
parent 7e3b8737
...@@ -76,7 +76,6 @@ static struct _intel_private { ...@@ -76,7 +76,6 @@ static struct _intel_private {
struct resource ifp_resource; struct resource ifp_resource;
int resource_valid; int resource_valid;
struct page *scratch_page; struct page *scratch_page;
dma_addr_t scratch_page_dma;
} intel_private; } intel_private;
#define INTEL_GTT_GEN intel_private.driver->gen #define INTEL_GTT_GEN intel_private.driver->gen
...@@ -306,9 +305,9 @@ static int intel_gtt_setup_scratch_page(void) ...@@ -306,9 +305,9 @@ static int intel_gtt_setup_scratch_page(void)
if (pci_dma_mapping_error(intel_private.pcidev, dma_addr)) if (pci_dma_mapping_error(intel_private.pcidev, dma_addr))
return -EINVAL; return -EINVAL;
intel_private.scratch_page_dma = dma_addr; intel_private.base.scratch_page_dma = dma_addr;
} else } else
intel_private.scratch_page_dma = page_to_phys(page); intel_private.base.scratch_page_dma = page_to_phys(page);
intel_private.scratch_page = page; intel_private.scratch_page = page;
...@@ -631,7 +630,7 @@ static unsigned int intel_gtt_mappable_entries(void) ...@@ -631,7 +630,7 @@ static unsigned int intel_gtt_mappable_entries(void)
static void intel_gtt_teardown_scratch_page(void) static void intel_gtt_teardown_scratch_page(void)
{ {
set_pages_wb(intel_private.scratch_page, 1); set_pages_wb(intel_private.scratch_page, 1);
pci_unmap_page(intel_private.pcidev, intel_private.scratch_page_dma, pci_unmap_page(intel_private.pcidev, intel_private.base.scratch_page_dma,
PAGE_SIZE, PCI_DMA_BIDIRECTIONAL); PAGE_SIZE, PCI_DMA_BIDIRECTIONAL);
put_page(intel_private.scratch_page); put_page(intel_private.scratch_page);
__free_page(intel_private.scratch_page); __free_page(intel_private.scratch_page);
...@@ -975,7 +974,7 @@ void intel_gtt_clear_range(unsigned int first_entry, unsigned int num_entries) ...@@ -975,7 +974,7 @@ void intel_gtt_clear_range(unsigned int first_entry, unsigned int num_entries)
unsigned int i; unsigned int i;
for (i = first_entry; i < (first_entry + num_entries); i++) { for (i = first_entry; i < (first_entry + num_entries); i++) {
intel_private.driver->write_entry(intel_private.scratch_page_dma, intel_private.driver->write_entry(intel_private.base.scratch_page_dma,
i, 0); i, 0);
} }
readl(intel_private.gtt+i-1); readl(intel_private.gtt+i-1);
......
...@@ -15,6 +15,8 @@ const struct intel_gtt { ...@@ -15,6 +15,8 @@ const struct intel_gtt {
unsigned int needs_dmar : 1; unsigned int needs_dmar : 1;
/* Whether we idle the gpu before mapping/unmapping */ /* Whether we idle the gpu before mapping/unmapping */
unsigned int do_idle_maps : 1; unsigned int do_idle_maps : 1;
/* Share the scratch page dma with ppgtts. */
dma_addr_t scratch_page_dma;
} *intel_gtt_get(void); } *intel_gtt_get(void);
void intel_gtt_chipset_flush(void); void intel_gtt_chipset_flush(void);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment