[Intel-gfx] [PATCH 5/5] drm/i915: Move the remaining gtt code

2012-11-04 Thread Ben Widawsky
It's pretty much all consolidated now that we've killed AGP. We can move
the one outlier, and defines too.

(Kill some unused defines in the process)

Signed-off-by: Ben Widawsky b...@bwidawsk.net
Reviewed-by: Chris Wilson ch...@chris-wilson.co.uk
---
 drivers/gpu/drm/i915/i915_gem.c | 62 --
 drivers/gpu/drm/i915/i915_gem_gtt.c | 76 +
 drivers/gpu/drm/i915/i915_reg.h | 17 -
 3 files changed, 76 insertions(+), 79 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index 859ac4f..b6a0c74 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -3875,68 +3875,6 @@ void i915_gem_init_swizzling(struct drm_device *dev)
I915_WRITE(ARB_MODE, _MASKED_BIT_ENABLE(ARB_MODE_SWIZZLE_IVB));
 }
 
-void i915_gem_init_ppgtt(struct drm_device *dev)
-{
-   drm_i915_private_t *dev_priv = dev-dev_private;
-   uint32_t pd_offset;
-   struct intel_ring_buffer *ring;
-   struct i915_hw_ppgtt *ppgtt = dev_priv-mm.aliasing_ppgtt;
-   uint32_t __iomem *pd_addr;
-   uint32_t pd_entry;
-   int i;
-
-   if (!dev_priv-mm.aliasing_ppgtt)
-   return;
-
-
-   pd_addr = dev_priv-mm.gtt-gtt + ppgtt-pd_offset/sizeof(uint32_t);
-   for (i = 0; i  ppgtt-num_pd_entries; i++) {
-   dma_addr_t pt_addr;
-
-   if (dev_priv-mm.gtt-needs_dmar)
-   pt_addr = ppgtt-pt_dma_addr[i];
-   else
-   pt_addr = page_to_phys(ppgtt-pt_pages[i]);
-
-   pd_entry = GEN6_PDE_ADDR_ENCODE(pt_addr);
-   pd_entry |= GEN6_PDE_VALID;
-
-   writel(pd_entry, pd_addr + i);
-   }
-   readl(pd_addr);
-
-   pd_offset = ppgtt-pd_offset;
-   pd_offset /= 64; /* in cachelines, */
-   pd_offset = 16;
-
-   if (INTEL_INFO(dev)-gen == 6) {
-   uint32_t ecochk, gab_ctl, ecobits;
-
-   ecobits = I915_READ(GAC_ECO_BITS); 
-   I915_WRITE(GAC_ECO_BITS, ecobits | ECOBITS_PPGTT_CACHE64B);
-
-   gab_ctl = I915_READ(GAB_CTL);
-   I915_WRITE(GAB_CTL, gab_ctl | GAB_CTL_CONT_AFTER_PAGEFAULT);
-
-   ecochk = I915_READ(GAM_ECOCHK);
-   I915_WRITE(GAM_ECOCHK, ecochk | ECOCHK_SNB_BIT |
-  ECOCHK_PPGTT_CACHE64B);
-   I915_WRITE(GFX_MODE, _MASKED_BIT_ENABLE(GFX_PPGTT_ENABLE));
-   } else if (INTEL_INFO(dev)-gen = 7) {
-   I915_WRITE(GAM_ECOCHK, ECOCHK_PPGTT_CACHE64B);
-   /* GFX_MODE is per-ring on gen7+ */
-   }
-
-   for_each_ring(ring, dev_priv, i) {
-   if (INTEL_INFO(dev)-gen = 7)
-   I915_WRITE(RING_MODE_GEN7(ring),
-  _MASKED_BIT_ENABLE(GFX_PPGTT_ENABLE));
-
-   I915_WRITE(RING_PP_DIR_DCLV(ring), PP_DIR_DCLV_2G);
-   I915_WRITE(RING_PP_DIR_BASE(ring), pd_offset);
-   }
-}
-
 static bool
 intel_enable_blt(struct drm_device *dev)
 {
diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.c 
b/drivers/gpu/drm/i915/i915_gem_gtt.c
index 9a5b035..4d62f32 100644
--- a/drivers/gpu/drm/i915/i915_gem_gtt.c
+++ b/drivers/gpu/drm/i915/i915_gem_gtt.c
@@ -30,6 +30,20 @@
 
 typedef uint32_t gtt_pte_t;
 
+/* PPGTT stuff */
+#define GEN6_GTT_ADDR_ENCODE(addr) ((addr) | (((addr)  28)  0xff0))
+
+#define GEN6_PDE_VALID (1  0)
+/* gen6+ has bit 11-4 for physical addr bit 39-32 */
+#define GEN6_PDE_ADDR_ENCODE(addr) GEN6_GTT_ADDR_ENCODE(addr)
+
+#define GEN6_PTE_VALID (1  0)
+#define GEN6_PTE_UNCACHED  (1  1)
+#define HSW_PTE_UNCACHED   (0)
+#define GEN6_PTE_CACHE_LLC (2  1)
+#define GEN6_PTE_CACHE_LLC_MLC (3  1)
+#define GEN6_PTE_ADDR_ENCODE(addr) GEN6_GTT_ADDR_ENCODE(addr)
+
 static inline gtt_pte_t pte_encode(struct drm_device *dev,
   dma_addr_t addr,
   enum i915_cache_level level)
@@ -262,6 +276,68 @@ void i915_ppgtt_unbind_object(struct i915_hw_ppgtt *ppgtt,
   obj-base.size  PAGE_SHIFT);
 }
 
+void i915_gem_init_ppgtt(struct drm_device *dev)
+{
+   drm_i915_private_t *dev_priv = dev-dev_private;
+   uint32_t pd_offset;
+   struct intel_ring_buffer *ring;
+   struct i915_hw_ppgtt *ppgtt = dev_priv-mm.aliasing_ppgtt;
+   uint32_t __iomem *pd_addr;
+   uint32_t pd_entry;
+   int i;
+
+   if (!dev_priv-mm.aliasing_ppgtt)
+   return;
+
+
+   pd_addr = dev_priv-mm.gtt-gtt + ppgtt-pd_offset/sizeof(uint32_t);
+   for (i = 0; i  ppgtt-num_pd_entries; i++) {
+   dma_addr_t pt_addr;
+
+   if (dev_priv-mm.gtt-needs_dmar)
+   pt_addr = ppgtt-pt_dma_addr[i];
+   else
+   pt_addr = page_to_phys(ppgtt-pt_pages[i]);
+
+   

Re: [Intel-gfx] [PATCH 5/5] drm/i915: Move the remaining gtt code

2012-11-04 Thread Daniel Vetter
On Sun, Nov 04, 2012 at 09:21:31AM -0800, Ben Widawsky wrote:
 It's pretty much all consolidated now that we've killed AGP. We can move
 the one outlier, and defines too.
 
 (Kill some unused defines in the process)
 
 Signed-off-by: Ben Widawsky b...@bwidawsk.net
 Reviewed-by: Chris Wilson ch...@chris-wilson.co.uk

Entire series merged, with Chris' irc r-b added for patch 3.

Thanks, Daniel
-- 
Daniel Vetter
Software Engineer, Intel Corporation
+41 (0) 79 365 57 48 - http://blog.ffwll.ch
___
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx


Re: [Intel-gfx] [PATCH 5/5] drm/i915: Move the remaining gtt code

2012-11-02 Thread Chris Wilson
Only spotted the one issue in the patchset, so other than patch 3,
Reviewed-by: Chris Wilson ch...@chris-wilson.co.uk
-Chris

-- 
Chris Wilson, Intel Open Source Technology Centre
___
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx


[Intel-gfx] [PATCH 5/5] drm/i915: Move the remaining gtt code

2012-11-01 Thread Ben Widawsky
It's pretty much all consolidated now that we've killed AGP. We can move
the one outlier, and defines too.

(Kill some unused defines in the process)

Signed-off-by: Ben Widawsky b...@bwidawsk.net
---
 drivers/gpu/drm/i915/i915_gem.c | 62 --
 drivers/gpu/drm/i915/i915_gem_gtt.c | 76 +
 drivers/gpu/drm/i915/i915_reg.h | 17 -
 3 files changed, 76 insertions(+), 79 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index 859ac4f..b6a0c74 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -3875,68 +3875,6 @@ void i915_gem_init_swizzling(struct drm_device *dev)
I915_WRITE(ARB_MODE, _MASKED_BIT_ENABLE(ARB_MODE_SWIZZLE_IVB));
 }
 
-void i915_gem_init_ppgtt(struct drm_device *dev)
-{
-   drm_i915_private_t *dev_priv = dev-dev_private;
-   uint32_t pd_offset;
-   struct intel_ring_buffer *ring;
-   struct i915_hw_ppgtt *ppgtt = dev_priv-mm.aliasing_ppgtt;
-   uint32_t __iomem *pd_addr;
-   uint32_t pd_entry;
-   int i;
-
-   if (!dev_priv-mm.aliasing_ppgtt)
-   return;
-
-
-   pd_addr = dev_priv-mm.gtt-gtt + ppgtt-pd_offset/sizeof(uint32_t);
-   for (i = 0; i  ppgtt-num_pd_entries; i++) {
-   dma_addr_t pt_addr;
-
-   if (dev_priv-mm.gtt-needs_dmar)
-   pt_addr = ppgtt-pt_dma_addr[i];
-   else
-   pt_addr = page_to_phys(ppgtt-pt_pages[i]);
-
-   pd_entry = GEN6_PDE_ADDR_ENCODE(pt_addr);
-   pd_entry |= GEN6_PDE_VALID;
-
-   writel(pd_entry, pd_addr + i);
-   }
-   readl(pd_addr);
-
-   pd_offset = ppgtt-pd_offset;
-   pd_offset /= 64; /* in cachelines, */
-   pd_offset = 16;
-
-   if (INTEL_INFO(dev)-gen == 6) {
-   uint32_t ecochk, gab_ctl, ecobits;
-
-   ecobits = I915_READ(GAC_ECO_BITS); 
-   I915_WRITE(GAC_ECO_BITS, ecobits | ECOBITS_PPGTT_CACHE64B);
-
-   gab_ctl = I915_READ(GAB_CTL);
-   I915_WRITE(GAB_CTL, gab_ctl | GAB_CTL_CONT_AFTER_PAGEFAULT);
-
-   ecochk = I915_READ(GAM_ECOCHK);
-   I915_WRITE(GAM_ECOCHK, ecochk | ECOCHK_SNB_BIT |
-  ECOCHK_PPGTT_CACHE64B);
-   I915_WRITE(GFX_MODE, _MASKED_BIT_ENABLE(GFX_PPGTT_ENABLE));
-   } else if (INTEL_INFO(dev)-gen = 7) {
-   I915_WRITE(GAM_ECOCHK, ECOCHK_PPGTT_CACHE64B);
-   /* GFX_MODE is per-ring on gen7+ */
-   }
-
-   for_each_ring(ring, dev_priv, i) {
-   if (INTEL_INFO(dev)-gen = 7)
-   I915_WRITE(RING_MODE_GEN7(ring),
-  _MASKED_BIT_ENABLE(GFX_PPGTT_ENABLE));
-
-   I915_WRITE(RING_PP_DIR_DCLV(ring), PP_DIR_DCLV_2G);
-   I915_WRITE(RING_PP_DIR_BASE(ring), pd_offset);
-   }
-}
-
 static bool
 intel_enable_blt(struct drm_device *dev)
 {
diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.c 
b/drivers/gpu/drm/i915/i915_gem_gtt.c
index 052b439..d9cc245 100644
--- a/drivers/gpu/drm/i915/i915_gem_gtt.c
+++ b/drivers/gpu/drm/i915/i915_gem_gtt.c
@@ -30,6 +30,20 @@
 
 typedef uint32_t gtt_pte_t;
 
+/* PPGTT stuff */
+#define GEN6_GTT_ADDR_ENCODE(addr) ((addr) | (((addr)  28)  0xff0))
+
+#define GEN6_PDE_VALID (1  0)
+/* gen6+ has bit 11-4 for physical addr bit 39-32 */
+#define GEN6_PDE_ADDR_ENCODE(addr) GEN6_GTT_ADDR_ENCODE(addr)
+
+#define GEN6_PTE_VALID (1  0)
+#define GEN6_PTE_UNCACHED  (1  1)
+#define HSW_PTE_UNCACHED   (0)
+#define GEN6_PTE_CACHE_LLC (2  1)
+#define GEN6_PTE_CACHE_LLC_MLC (3  1)
+#define GEN6_PTE_ADDR_ENCODE(addr) GEN6_GTT_ADDR_ENCODE(addr)
+
 static inline gtt_pte_t pte_encode(struct drm_device *dev,
   dma_addr_t addr,
   enum i915_cache_level level)
@@ -262,6 +276,68 @@ void i915_ppgtt_unbind_object(struct i915_hw_ppgtt *ppgtt,
   obj-base.size  PAGE_SHIFT);
 }
 
+void i915_gem_init_ppgtt(struct drm_device *dev)
+{
+   drm_i915_private_t *dev_priv = dev-dev_private;
+   uint32_t pd_offset;
+   struct intel_ring_buffer *ring;
+   struct i915_hw_ppgtt *ppgtt = dev_priv-mm.aliasing_ppgtt;
+   uint32_t __iomem *pd_addr;
+   uint32_t pd_entry;
+   int i;
+
+   if (!dev_priv-mm.aliasing_ppgtt)
+   return;
+
+
+   pd_addr = dev_priv-mm.gtt-gtt + ppgtt-pd_offset/sizeof(uint32_t);
+   for (i = 0; i  ppgtt-num_pd_entries; i++) {
+   dma_addr_t pt_addr;
+
+   if (dev_priv-mm.gtt-needs_dmar)
+   pt_addr = ppgtt-pt_dma_addr[i];
+   else
+   pt_addr = page_to_phys(ppgtt-pt_pages[i]);
+
+   pd_entry = GEN6_PDE_ADDR_ENCODE(pt_addr);
+