aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/i915_gem_gtt.h
diff options
context:
space:
mode:
authorMichel Thierry <michel.thierry@intel.com>2015-03-16 12:00:54 -0400
committerDaniel Vetter <daniel.vetter@ffwll.ch>2015-03-20 06:48:17 -0400
commit07749ef32c4fd60334c2451739460dd1cf600281 (patch)
treedd743b70522044e23424e22c603f62f446e55f7c /drivers/gpu/drm/i915/i915_gem_gtt.h
parentd2d9cbbd224f5fc9254c9952a78bd8cfed3b96f9 (diff)
drm/i915: page table generalizations
No functional changes, but will improve code clarity and removed some duplicated defines. Signed-off-by: Michel Thierry <michel.thierry@intel.com> Reviewed-by: Mika Kuoppala <mika.kuoppala@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.h28
1 files changed, 16 insertions, 12 deletions
diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.h b/drivers/gpu/drm/i915/i915_gem_gtt.h
index c9e93f5070bc..5ca7c5eff88b 100644
--- a/drivers/gpu/drm/i915/i915_gem_gtt.h
+++ b/drivers/gpu/drm/i915/i915_gem_gtt.h
@@ -36,13 +36,13 @@
36 36
37struct drm_i915_file_private; 37struct drm_i915_file_private;
38 38
39typedef uint32_t gen6_gtt_pte_t; 39typedef uint32_t gen6_pte_t;
40typedef uint64_t gen8_gtt_pte_t; 40typedef uint64_t gen8_pte_t;
41typedef gen8_gtt_pte_t gen8_ppgtt_pde_t; 41typedef uint64_t gen8_pde_t;
42 42
43#define gtt_total_entries(gtt) ((gtt).base.total >> PAGE_SHIFT) 43#define gtt_total_entries(gtt) ((gtt).base.total >> PAGE_SHIFT)
44 44
45#define I915_PPGTT_PT_ENTRIES (PAGE_SIZE / sizeof(gen6_gtt_pte_t)) 45
46/* gen6-hsw has bit 11-4 for physical addr bit 39-32 */ 46/* gen6-hsw has bit 11-4 for physical addr bit 39-32 */
47#define GEN6_GTT_ADDR_ENCODE(addr) ((addr) | (((addr) >> 28) & 0xff0)) 47#define GEN6_GTT_ADDR_ENCODE(addr) ((addr) | (((addr) >> 28) & 0xff0))
48#define GEN6_PTE_ADDR_ENCODE(addr) GEN6_GTT_ADDR_ENCODE(addr) 48#define GEN6_PTE_ADDR_ENCODE(addr) GEN6_GTT_ADDR_ENCODE(addr)
@@ -51,8 +51,13 @@ typedef gen8_gtt_pte_t gen8_ppgtt_pde_t;
51#define GEN6_PTE_UNCACHED (1 << 1) 51#define GEN6_PTE_UNCACHED (1 << 1)
52#define GEN6_PTE_VALID (1 << 0) 52#define GEN6_PTE_VALID (1 << 0)
53 53
54#define GEN6_PPGTT_PD_ENTRIES 512 54#define I915_PTES(pte_len) (PAGE_SIZE / (pte_len))
55#define GEN6_PD_SIZE (GEN6_PPGTT_PD_ENTRIES * PAGE_SIZE) 55#define I915_PTE_MASK(pte_len) (I915_PTES(pte_len) - 1)
56#define I915_PDES 512
57#define I915_PDE_MASK (I915_PDES - 1)
58
59#define GEN6_PTES I915_PTES(sizeof(gen6_pte_t))
60#define GEN6_PD_SIZE (I915_PDES * PAGE_SIZE)
56#define GEN6_PD_ALIGN (PAGE_SIZE * 16) 61#define GEN6_PD_ALIGN (PAGE_SIZE * 16)
57#define GEN6_PDE_VALID (1 << 0) 62#define GEN6_PDE_VALID (1 << 0)
58 63
@@ -89,8 +94,7 @@ typedef gen8_gtt_pte_t gen8_ppgtt_pde_t;
89#define GEN8_PTE_SHIFT 12 94#define GEN8_PTE_SHIFT 12
90#define GEN8_PTE_MASK 0x1ff 95#define GEN8_PTE_MASK 0x1ff
91#define GEN8_LEGACY_PDPES 4 96#define GEN8_LEGACY_PDPES 4
92#define GEN8_PTES_PER_PAGE (PAGE_SIZE / sizeof(gen8_gtt_pte_t)) 97#define GEN8_PTES I915_PTES(sizeof(gen8_pte_t))
93#define GEN8_PDES_PER_PAGE (PAGE_SIZE / sizeof(gen8_ppgtt_pde_t))
94 98
95#define PPAT_UNCACHED_INDEX (_PAGE_PWT | _PAGE_PCD) 99#define PPAT_UNCACHED_INDEX (_PAGE_PWT | _PAGE_PCD)
96#define PPAT_CACHED_PDE_INDEX 0 /* WB LLC */ 100#define PPAT_CACHED_PDE_INDEX 0 /* WB LLC */
@@ -199,7 +203,7 @@ struct i915_page_directory_entry {
199 dma_addr_t daddr; 203 dma_addr_t daddr;
200 }; 204 };
201 205
202 struct i915_page_table_entry *page_table[GEN6_PPGTT_PD_ENTRIES]; /* PDEs */ 206 struct i915_page_table_entry *page_table[I915_PDES]; /* PDEs */
203}; 207};
204 208
205struct i915_page_directory_pointer_entry { 209struct i915_page_directory_pointer_entry {
@@ -243,9 +247,9 @@ struct i915_address_space {
243 struct list_head inactive_list; 247 struct list_head inactive_list;
244 248
245 /* FIXME: Need a more generic return type */ 249 /* FIXME: Need a more generic return type */
246 gen6_gtt_pte_t (*pte_encode)(dma_addr_t addr, 250 gen6_pte_t (*pte_encode)(dma_addr_t addr,
247 enum i915_cache_level level, 251 enum i915_cache_level level,
248 bool valid, u32 flags); /* Create a valid PTE */ 252 bool valid, u32 flags); /* Create a valid PTE */
249 void (*clear_range)(struct i915_address_space *vm, 253 void (*clear_range)(struct i915_address_space *vm,
250 uint64_t start, 254 uint64_t start,
251 uint64_t length, 255 uint64_t length,