diff options
author | Ben Widawsky <benjamin.widawsky@intel.com> | 2013-04-08 21:43:48 -0400 |
---|---|---|
committer | Daniel Vetter <daniel.vetter@ffwll.ch> | 2013-04-18 03:43:12 -0400 |
commit | e7c2b58b700f467eedcbd1c8d7a3d4bada403439 (patch) | |
tree | 5f265ee9ea11f7c784e2a8a49605f63ddb56cf65 | |
parent | a93e41618ecf69a2ced005a13377d7903da4dd62 (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.c | 31 |
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 | ||
31 | typedef uint32_t gtt_pte_t; | 31 | typedef 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 | ||
47 | static inline gtt_pte_t gen6_pte_encode(struct drm_device *dev, | 47 | static 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", |