aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBen Widawsky <benjamin.widawsky@intel.com>2013-04-08 21:43:48 -0400
committerDaniel Vetter <daniel.vetter@ffwll.ch>2013-04-18 03:43:12 -0400
commite7c2b58b700f467eedcbd1c8d7a3d4bada403439 (patch)
tree5f265ee9ea11f7c784e2a8a49605f63ddb56cf65
parenta93e41618ecf69a2ced005a13377d7903da4dd62 (diff)
drm/i915: Call out GEN6 PTE specificity
We can assume that the PTE layout, and size changes for future generations. To avoid confusion with the existing GEN6 PTE typedef, give it a GEN6_ prefix. v2: Fixup checkpatch warning and bikeshed commit message slightly. v3: Rebase on top of Imre's for_each_sg_pages rework. v4: Fixup conflicts in patch series reordering. Signed-off-by: Ben Widawsky <ben@bwidawsk.net> (v1) Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
-rw-r--r--drivers/gpu/drm/i915/i915_gem_gtt.c31
1 files changed, 15 insertions, 16 deletions
diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.c b/drivers/gpu/drm/i915/i915_gem_gtt.c
index 215d72ce3f67..091b2709cdeb 100644
--- a/drivers/gpu/drm/i915/i915_gem_gtt.c
+++ b/drivers/gpu/drm/i915/i915_gem_gtt.c
@@ -28,7 +28,7 @@
28#include "i915_trace.h" 28#include "i915_trace.h"
29#include "intel_drv.h" 29#include "intel_drv.h"
30 30
31typedef uint32_t gtt_pte_t; 31typedef uint32_t gen6_gtt_pte_t;
32 32
33/* PPGTT stuff */ 33/* PPGTT stuff */
34#define GEN6_GTT_ADDR_ENCODE(addr) ((addr) | (((addr) >> 28) & 0xff0)) 34#define GEN6_GTT_ADDR_ENCODE(addr) ((addr) | (((addr) >> 28) & 0xff0))
@@ -44,11 +44,11 @@ typedef uint32_t gtt_pte_t;
44#define GEN6_PTE_CACHE_LLC_MLC (3 << 1) 44#define GEN6_PTE_CACHE_LLC_MLC (3 << 1)
45#define GEN6_PTE_ADDR_ENCODE(addr) GEN6_GTT_ADDR_ENCODE(addr) 45#define GEN6_PTE_ADDR_ENCODE(addr) GEN6_GTT_ADDR_ENCODE(addr)
46 46
47static inline gtt_pte_t gen6_pte_encode(struct drm_device *dev, 47static inline gen6_gtt_pte_t gen6_pte_encode(struct drm_device *dev,
48 dma_addr_t addr, 48 dma_addr_t addr,
49 enum i915_cache_level level) 49 enum i915_cache_level level)
50{ 50{
51 gtt_pte_t pte = GEN6_PTE_VALID; 51 gen6_gtt_pte_t pte = GEN6_PTE_VALID;
52 pte |= GEN6_PTE_ADDR_ENCODE(addr); 52 pte |= GEN6_PTE_ADDR_ENCODE(addr);
53 53
54 switch (level) { 54 switch (level) {
@@ -72,7 +72,6 @@ static inline gtt_pte_t gen6_pte_encode(struct drm_device *dev,
72 BUG(); 72 BUG();
73 } 73 }
74 74
75
76 return pte; 75 return pte;
77} 76}
78 77
@@ -81,8 +80,7 @@ static void gen6_ppgtt_clear_range(struct i915_hw_ppgtt *ppgtt,
81 unsigned first_entry, 80 unsigned first_entry,
82 unsigned num_entries) 81 unsigned num_entries)
83{ 82{
84 gtt_pte_t *pt_vaddr; 83 gen6_gtt_pte_t *pt_vaddr, scratch_pte;
85 gtt_pte_t scratch_pte;
86 unsigned act_pt = first_entry / I915_PPGTT_PT_ENTRIES; 84 unsigned act_pt = first_entry / I915_PPGTT_PT_ENTRIES;
87 unsigned first_pte = first_entry % I915_PPGTT_PT_ENTRIES; 85 unsigned first_pte = first_entry % I915_PPGTT_PT_ENTRIES;
88 unsigned last_pte, i; 86 unsigned last_pte, i;
@@ -114,7 +112,7 @@ static void gen6_ppgtt_insert_entries(struct i915_hw_ppgtt *ppgtt,
114 unsigned first_entry, 112 unsigned first_entry,
115 enum i915_cache_level cache_level) 113 enum i915_cache_level cache_level)
116{ 114{
117 gtt_pte_t *pt_vaddr; 115 gen6_gtt_pte_t *pt_vaddr;
118 unsigned act_pt = first_entry / I915_PPGTT_PT_ENTRIES; 116 unsigned act_pt = first_entry / I915_PPGTT_PT_ENTRIES;
119 unsigned act_pte = first_entry % I915_PPGTT_PT_ENTRIES; 117 unsigned act_pte = first_entry % I915_PPGTT_PT_ENTRIES;
120 struct sg_page_iter sg_iter; 118 struct sg_page_iter sg_iter;
@@ -208,7 +206,7 @@ static int gen6_ppgtt_init(struct i915_hw_ppgtt *ppgtt)
208 ppgtt->clear_range(ppgtt, 0, 206 ppgtt->clear_range(ppgtt, 0,
209 ppgtt->num_pd_entries*I915_PPGTT_PT_ENTRIES); 207 ppgtt->num_pd_entries*I915_PPGTT_PT_ENTRIES);
210 208
211 ppgtt->pd_offset = (first_pd_entry_in_global_pt)*sizeof(gtt_pte_t); 209 ppgtt->pd_offset = first_pd_entry_in_global_pt * sizeof(gen6_gtt_pte_t);
212 210
213 return 0; 211 return 0;
214 212
@@ -284,7 +282,7 @@ void i915_gem_init_ppgtt(struct drm_device *dev)
284 uint32_t pd_offset; 282 uint32_t pd_offset;
285 struct intel_ring_buffer *ring; 283 struct intel_ring_buffer *ring;
286 struct i915_hw_ppgtt *ppgtt = dev_priv->mm.aliasing_ppgtt; 284 struct i915_hw_ppgtt *ppgtt = dev_priv->mm.aliasing_ppgtt;
287 gtt_pte_t __iomem *pd_addr; 285 gen6_gtt_pte_t __iomem *pd_addr;
288 uint32_t pd_entry; 286 uint32_t pd_entry;
289 int i; 287 int i;
290 288
@@ -292,7 +290,8 @@ void i915_gem_init_ppgtt(struct drm_device *dev)
292 return; 290 return;
293 291
294 292
295 pd_addr = (gtt_pte_t __iomem*)dev_priv->gtt.gsm + ppgtt->pd_offset/sizeof(gtt_pte_t); 293 pd_addr = (gen6_gtt_pte_t __iomem *)dev_priv->gtt.gsm +
294 ppgtt->pd_offset / sizeof(gen6_gtt_pte_t);
296 for (i = 0; i < ppgtt->num_pd_entries; i++) { 295 for (i = 0; i < ppgtt->num_pd_entries; i++) {
297 dma_addr_t pt_addr; 296 dma_addr_t pt_addr;
298 297
@@ -416,8 +415,8 @@ static void gen6_ggtt_insert_entries(struct drm_device *dev,
416 enum i915_cache_level level) 415 enum i915_cache_level level)
417{ 416{
418 struct drm_i915_private *dev_priv = dev->dev_private; 417 struct drm_i915_private *dev_priv = dev->dev_private;
419 gtt_pte_t __iomem *gtt_entries = 418 gen6_gtt_pte_t __iomem *gtt_entries =
420 (gtt_pte_t __iomem *)dev_priv->gtt.gsm + first_entry; 419 (gen6_gtt_pte_t __iomem *)dev_priv->gtt.gsm + first_entry;
421 int i = 0; 420 int i = 0;
422 struct sg_page_iter sg_iter; 421 struct sg_page_iter sg_iter;
423 dma_addr_t addr; 422 dma_addr_t addr;
@@ -451,8 +450,8 @@ static void gen6_ggtt_clear_range(struct drm_device *dev,
451 unsigned int num_entries) 450 unsigned int num_entries)
452{ 451{
453 struct drm_i915_private *dev_priv = dev->dev_private; 452 struct drm_i915_private *dev_priv = dev->dev_private;
454 gtt_pte_t scratch_pte; 453 gen6_gtt_pte_t scratch_pte, __iomem *gtt_base =
455 gtt_pte_t __iomem *gtt_base = (gtt_pte_t __iomem *) dev_priv->gtt.gsm + first_entry; 454 (gen6_gtt_pte_t __iomem *) dev_priv->gtt.gsm + first_entry;
456 const int max_entries = gtt_total_entries(dev_priv->gtt) - first_entry; 455 const int max_entries = gtt_total_entries(dev_priv->gtt) - first_entry;
457 int i; 456 int i;
458 457
@@ -736,7 +735,7 @@ static int gen6_gmch_probe(struct drm_device *dev,
736 else 735 else
737 *stolen = gen6_get_stolen_size(snb_gmch_ctl); 736 *stolen = gen6_get_stolen_size(snb_gmch_ctl);
738 737
739 *gtt_total = (gtt_size / sizeof(gtt_pte_t)) << PAGE_SHIFT; 738 *gtt_total = (gtt_size / sizeof(gen6_gtt_pte_t)) << PAGE_SHIFT;
740 739
741 /* For Modern GENs the PTEs and register space are split in the BAR */ 740 /* For Modern GENs the PTEs and register space are split in the BAR */
742 gtt_bus_addr = pci_resource_start(dev->pdev, 0) + 741 gtt_bus_addr = pci_resource_start(dev->pdev, 0) +
@@ -816,7 +815,7 @@ int i915_gem_gtt_init(struct drm_device *dev)
816 if (ret) 815 if (ret)
817 return ret; 816 return ret;
818 817
819 gtt_size = (dev_priv->gtt.total >> PAGE_SHIFT) * sizeof(gtt_pte_t); 818 gtt_size = (dev_priv->gtt.total >> PAGE_SHIFT) * sizeof(gen6_gtt_pte_t);
820 819
821 /* GMADR is the PCI mmio aperture into the global GTT. */ 820 /* GMADR is the PCI mmio aperture into the global GTT. */
822 DRM_INFO("Memory usable by graphics device = %zdM\n", 821 DRM_INFO("Memory usable by graphics device = %zdM\n",