提交 9f273d48 编写于 作者: B Ben Widawsky 提交者: Daniel Vetter

drm/i915: Write PDEs at init instead of enable

We won't be calling enable() for all PPGTTs. We do need to write PDEs
for all PPGTTs however. By moving the writing to init (which is called
for all PPGTTs) we should accomplish this.

ADD NOTE ABOUT PDE restore

TODO: Eventually, we should allocate the page tables on demand.

v2: Rebased on BDW. Only do PDEs for pre-gen8
Signed-off-by: NBen Widawsky <ben@bwidawsk.net>
Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
上级 c7c48dfd
...@@ -631,8 +631,6 @@ static int gen7_ppgtt_enable(struct i915_hw_ppgtt *ppgtt) ...@@ -631,8 +631,6 @@ static int gen7_ppgtt_enable(struct i915_hw_ppgtt *ppgtt)
uint32_t ecochk, ecobits; uint32_t ecochk, ecobits;
int i; int i;
gen6_write_pdes(ppgtt);
ecobits = I915_READ(GAC_ECO_BITS); ecobits = I915_READ(GAC_ECO_BITS);
I915_WRITE(GAC_ECO_BITS, ecobits | ECOBITS_PPGTT_CACHE64B); I915_WRITE(GAC_ECO_BITS, ecobits | ECOBITS_PPGTT_CACHE64B);
...@@ -666,8 +664,6 @@ static int gen6_ppgtt_enable(struct i915_hw_ppgtt *ppgtt) ...@@ -666,8 +664,6 @@ static int gen6_ppgtt_enable(struct i915_hw_ppgtt *ppgtt)
uint32_t ecochk, gab_ctl, ecobits; uint32_t ecochk, gab_ctl, ecobits;
int i; int i;
gen6_write_pdes(ppgtt);
ecobits = I915_READ(GAC_ECO_BITS); ecobits = I915_READ(GAC_ECO_BITS);
I915_WRITE(GAC_ECO_BITS, ecobits | ECOBITS_SNB_BIT | I915_WRITE(GAC_ECO_BITS, ecobits | ECOBITS_SNB_BIT |
ECOBITS_PPGTT_CACHE64B); ECOBITS_PPGTT_CACHE64B);
...@@ -906,6 +902,8 @@ int i915_gem_init_ppgtt(struct drm_device *dev, struct i915_hw_ppgtt *ppgtt) ...@@ -906,6 +902,8 @@ int i915_gem_init_ppgtt(struct drm_device *dev, struct i915_hw_ppgtt *ppgtt)
kref_init(&ppgtt->ref); kref_init(&ppgtt->ref);
drm_mm_init(&ppgtt->base.mm, ppgtt->base.start, drm_mm_init(&ppgtt->base.mm, ppgtt->base.start,
ppgtt->base.total); ppgtt->base.total);
if (INTEL_INFO(dev)->gen < 8)
gen6_write_pdes(ppgtt);
} }
return ret; return ret;
...@@ -1059,6 +1057,9 @@ void i915_gem_restore_gtt_mappings(struct drm_device *dev) ...@@ -1059,6 +1057,9 @@ void i915_gem_restore_gtt_mappings(struct drm_device *dev)
vma->bind_vma(vma, obj->cache_level, GLOBAL_BIND); vma->bind_vma(vma, obj->cache_level, GLOBAL_BIND);
} }
if (dev_priv->mm.aliasing_ppgtt)
gen6_write_pdes(dev_priv->mm.aliasing_ppgtt);
i915_gem_chipset_flush(dev); i915_gem_chipset_flush(dev);
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册