aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/i915_gem_gtt.h
diff options
context:
space:
mode:
authorMika Kuoppala <mika.kuoppala@linux.intel.com>2015-06-25 11:35:07 -0400
committerDaniel Vetter <daniel.vetter@ffwll.ch>2015-06-26 04:51:04 -0400
commit44159ddbeac3d34e5ca9037e151a242b7388df8e (patch)
tree0591f9ba7f1f3d8a84d14c6fa6fb388000efc09d /drivers/gpu/drm/i915/i915_gem_gtt.h
parentd852c7bf902aa36f37b6fd0bb1147c922e7bd0fb (diff)
drm/i915/gtt: Introduce struct i915_page_dma
All our paging structures have struct page and dma address for that page. Add struct for page/dma address pairs and use it to make the setup and teardown for different paging structures identical. Include the page directory offset also in the struct for legacy gens. Rename it to clearly point out that it is offset into the ggtt. v2: Add comment about ggtt_offset (Michel) Signed-off-by: Mika Kuoppala <mika.kuoppala@intel.com> Reviewed-by: Michel Thierry <michel.thierry@intel.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Diffstat (limited to 'drivers/gpu/drm/i915/i915_gem_gtt.h')
-rw-r--r--drivers/gpu/drm/i915/i915_gem_gtt.h25
1 files changed, 16 insertions, 9 deletions
diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.h b/drivers/gpu/drm/i915/i915_gem_gtt.h
index f368c7155223..c681573b4005 100644
--- a/drivers/gpu/drm/i915/i915_gem_gtt.h
+++ b/drivers/gpu/drm/i915/i915_gem_gtt.h
@@ -207,19 +207,26 @@ struct i915_vma {
207#define DRM_I915_GEM_OBJECT_MAX_PIN_COUNT 0xf 207#define DRM_I915_GEM_OBJECT_MAX_PIN_COUNT 0xf
208}; 208};
209 209
210struct i915_page_table { 210struct i915_page_dma {
211 struct page *page; 211 struct page *page;
212 dma_addr_t daddr; 212 union {
213 dma_addr_t daddr;
214
215 /* For gen6/gen7 only. This is the offset in the GGTT
216 * where the page directory entries for PPGTT begin
217 */
218 uint32_t ggtt_offset;
219 };
220};
221
222struct i915_page_table {
223 struct i915_page_dma base;
213 224
214 unsigned long *used_ptes; 225 unsigned long *used_ptes;
215}; 226};
216 227
217struct i915_page_directory { 228struct i915_page_directory {
218 struct page *page; /* NULL for GEN6-GEN7 */ 229 struct i915_page_dma base;
219 union {
220 uint32_t pd_offset;
221 dma_addr_t daddr;
222 };
223 230
224 unsigned long *used_pdes; 231 unsigned long *used_pdes;
225 struct i915_page_table *page_table[I915_PDES]; /* PDEs */ 232 struct i915_page_table *page_table[I915_PDES]; /* PDEs */
@@ -474,8 +481,8 @@ static inline dma_addr_t
474i915_page_dir_dma_addr(const struct i915_hw_ppgtt *ppgtt, const unsigned n) 481i915_page_dir_dma_addr(const struct i915_hw_ppgtt *ppgtt, const unsigned n)
475{ 482{
476 return test_bit(n, ppgtt->pdp.used_pdpes) ? 483 return test_bit(n, ppgtt->pdp.used_pdpes) ?
477 ppgtt->pdp.page_directory[n]->daddr : 484 ppgtt->pdp.page_directory[n]->base.daddr :
478 ppgtt->scratch_pd->daddr; 485 ppgtt->scratch_pd->base.daddr;
479} 486}
480 487
481int i915_gem_gtt_init(struct drm_device *dev); 488int i915_gem_gtt_init(struct drm_device *dev);