/* Applicable to VLV (gen8+ do not support RO in the GGTT) */
pte_flags = 0; if (vm->has_read_only && vma_res->bi.readonly)
pte_flags |= PTE_READ_ONLY; if (vma_res->bi.lmem)
pte_flags |= PTE_LM;
/* * Without aliasing PPGTT there's no difference between * GLOBAL/LOCAL_BIND, it's all the same ptes. Hence unconditionally * upgrade to both bound if we bind either to avoid double-binding.
*/
vma_res->bound_flags = I915_VMA_GLOBAL_BIND | I915_VMA_LOCAL_BIND;
}
/** * intel_dpt_resume - restore the memory mapping for all DPT FBs during system resume * @display: display device instance * * Restore the memory mapping during system resume for all framebuffers which * are mapped to HW via a GGTT->DPT page table. The content of these page * tables are not stored in the hibernation image during S4 and S3RST->S4 * transitions, so here we reprogram the PTE entries in those tables. * * This function must be called after the mappings in GGTT have been restored calling * i915_ggtt_resume().
*/ void intel_dpt_resume(struct intel_display *display)
{ struct drm_framebuffer *drm_fb;
if (fb->dpt_vm)
i915_ggtt_resume_vm(fb->dpt_vm, true);
}
mutex_unlock(&display->drm->mode_config.fb_lock);
}
/** * intel_dpt_suspend - suspend the memory mapping for all DPT FBs during system suspend * @display: display device instance * * Suspend the memory mapping during system suspend for all framebuffers which * are mapped to HW via a GGTT->DPT page table. * * This function must be called before the mappings in GGTT are suspended calling * i915_ggtt_suspend().
*/ void intel_dpt_suspend(struct intel_display *display)
{ struct drm_framebuffer *drm_fb;
dpt_obj = i915_gem_object_create_lmem(i915, size, I915_BO_ALLOC_CONTIGUOUS); if (IS_ERR(dpt_obj) && i915_ggtt_has_aperture(to_gt(i915)->ggtt))
dpt_obj = i915_gem_object_create_stolen(i915, size); if (IS_ERR(dpt_obj) && !HAS_LMEM(i915)) {
drm_dbg_kms(&i915->drm, "Allocating dpt from smem\n");
dpt_obj = i915_gem_object_create_shmem(i915, size);
} if (IS_ERR(dpt_obj)) return ERR_CAST(dpt_obj);
ret = i915_gem_object_lock_interruptible(dpt_obj, NULL); if (!ret) {
ret = i915_gem_object_set_cache_level(dpt_obj, I915_CACHE_NONE);
i915_gem_object_unlock(dpt_obj);
} if (ret) {
i915_gem_object_put(dpt_obj); return ERR_PTR(ret);
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.