From: Matthew Auld <matthew.auld@intel.com>
To: intel-gfx@lists.freedesktop.org
Subject: [PATCH 13/17] drm/i915: support inserting 1G pages into the 48b PPGTT
Date: Tue, 16 May 2017 09:29:44 +0100 [thread overview]
Message-ID: <20170516082948.28090-14-matthew.auld@intel.com> (raw)
In-Reply-To: <20170516082948.28090-1-matthew.auld@intel.com>
To enable 1G pages we set the PS bit in the PDPE, aka PDPE[7] to
indicate a 1G page, and not a PD.
Signed-off-by: Matthew Auld <matthew.auld@intel.com>
Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
---
drivers/gpu/drm/i915/i915_gem_gtt.c | 47 +++++++++++++++++++++++++++++++++++++
drivers/gpu/drm/i915/i915_gem_gtt.h | 2 ++
2 files changed, 49 insertions(+)
diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.c b/drivers/gpu/drm/i915/i915_gem_gtt.c
index 3dadb501daa6..e81c78ffbea5 100644
--- a/drivers/gpu/drm/i915/i915_gem_gtt.c
+++ b/drivers/gpu/drm/i915/i915_gem_gtt.c
@@ -854,6 +854,50 @@ static __always_inline struct gen8_insert_pte gen8_insert_pte(u64 start)
}
static __always_inline bool
+gen8_ppgtt_insert_1G_pdpe_entries(struct i915_hw_ppgtt *ppgtt,
+ struct i915_page_directory_pointer *pdp,
+ struct sgt_dma *iter,
+ struct gen8_insert_pte *idx,
+ enum i915_cache_level cache_level)
+{
+ const gen8_pte_t pdpe_encode = gen8_pte_encode(GEN8_PDPE_PS_1G,
+ cache_level);
+ gen8_pte_t *vaddr;
+ bool ret;
+
+ GEM_BUG_ON(idx->pte);
+ GEM_BUG_ON(idx->pde);
+ GEM_BUG_ON(idx->pdpe >= i915_pdpes_per_pdp(&ppgtt->base));
+ vaddr = kmap_atomic_px(pdp);
+ do {
+ vaddr[idx->pdpe] = pdpe_encode | iter->dma;
+ iter->dma += I915_GTT_PAGE_SIZE_1G;
+ if (iter->dma >= iter->max) {
+ iter->sg = __sg_next(iter->sg);
+ if (!iter->sg) {
+ ret = false;
+ break;
+ }
+
+ iter->dma = sg_dma_address(iter->sg);
+ iter->max = iter->dma + iter->sg->length;
+ }
+
+ if (++idx->pdpe == GEN8_PML4ES_PER_PML4) {
+ idx->pdpe = 0;
+ ret = true;
+ break;
+ }
+
+ } while (1);
+ kunmap_atomic(vaddr);
+
+ mark_tlbs_dirty(ppgtt);
+
+ return ret;
+}
+
+static __always_inline bool
gen8_ppgtt_insert_2M_pde_entries(struct i915_hw_ppgtt *ppgtt,
struct i915_page_directory_pointer *pdp,
struct sgt_dma *iter,
@@ -1081,6 +1125,9 @@ static void gen8_ppgtt_insert_4lvl(struct i915_address_space *vm,
case I915_GTT_PAGE_SIZE_2M:
insert_entries = gen8_ppgtt_insert_2M_pde_entries;
break;
+ case I915_GTT_PAGE_SIZE_1G:
+ insert_entries = gen8_ppgtt_insert_1G_pdpe_entries;
+ break;
default:
MISSING_CASE(page_size);
return;
diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.h b/drivers/gpu/drm/i915/i915_gem_gtt.h
index 840d08be8fa3..1517cfdbd5ce 100644
--- a/drivers/gpu/drm/i915/i915_gem_gtt.h
+++ b/drivers/gpu/drm/i915/i915_gem_gtt.h
@@ -152,6 +152,8 @@ typedef u64 gen8_ppgtt_pml4e_t;
#define GEN8_PDE_IPS_64K BIT(11)
#define GEN8_PDE_PS_2M BIT(7)
+#define GEN8_PDPE_PS_1G BIT(7)
+
struct sg_table;
struct intel_rotation_info {
--
2.9.4
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
next prev parent reply other threads:[~2017-05-16 8:30 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-05-16 8:29 [PATCH 00/17] add support for huge-gtt-pages Matthew Auld
2017-05-16 8:29 ` [PATCH 01/17] drm/i915: introduce page_size_mask to dev_info Matthew Auld
2017-05-16 8:29 ` [PATCH 02/17] drm/i915: introduce gtt page size Matthew Auld
2017-05-16 8:41 ` Chris Wilson
2017-05-16 9:59 ` Chris Wilson
2017-05-23 12:42 ` Matthew Auld
2017-05-23 12:54 ` Chris Wilson
2017-05-23 13:57 ` Matthew Auld
2017-05-23 14:30 ` Chris Wilson
2017-05-16 8:29 ` [PATCH 03/17] drm/i915: align the vma start to the " Matthew Auld
2017-05-16 8:40 ` Chris Wilson
2017-05-16 8:29 ` [PATCH 04/17] drm/i915: align 64K objects to 2M Matthew Auld
2017-05-16 8:29 ` [PATCH 05/17] drm/i915: fallback to normal pages on vma insert failure Matthew Auld
2017-05-16 8:39 ` Chris Wilson
2017-05-16 8:29 ` [PATCH 06/17] mm/shmem: expose driver overridable huge option Matthew Auld
2017-05-16 10:02 ` Kirill A. Shutemov
2017-05-16 8:29 ` [PATCH 07/17] drm/i915: request THP for shmem backed objects Matthew Auld
2017-05-16 8:29 ` Matthew Auld
2017-05-16 8:29 ` [PATCH 08/17] drm/i915: pass gtt page size to insert_entries Matthew Auld
2017-05-16 8:29 ` [PATCH 09/17] drm/i915: enable IPS bit for 64K pages Matthew Auld
2017-05-16 8:29 ` [PATCH 10/17] drm/i915: support inserting 64K pages into the 48b PPGTT Matthew Auld
2017-05-16 8:29 ` [PATCH 11/17] drm/i915: disable GTT cache for 2M/1G pages Matthew Auld
2017-05-16 10:04 ` Ville Syrjälä
2017-05-16 10:11 ` Chris Wilson
2017-05-16 8:29 ` [PATCH 12/17] drm/i915: support inserting 2M pages into the 48b PPGTT Matthew Auld
2017-05-16 8:29 ` Matthew Auld [this message]
2017-05-16 8:29 ` [PATCH 14/17] drm/i915/debugfs: include some gtt_page_size metrics Matthew Auld
2017-05-19 10:48 ` Chris Wilson
2017-05-19 10:51 ` Chris Wilson
2017-05-16 8:29 ` [PATCH 15/17] drm/i915: enable platform support for 64K pages Matthew Auld
2017-05-16 8:29 ` [PATCH 16/17] drm/i915: enable platform support for 2M pages Matthew Auld
2017-05-16 8:29 ` [PATCH 17/17] drm/i915: enable platform support for 1G pages Matthew Auld
2017-05-16 8:49 ` ✓ Fi.CI.BAT: success for add support for huge-gtt-pages Patchwork
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20170516082948.28090-14-matthew.auld@intel.com \
--to=matthew.auld@intel.com \
--cc=intel-gfx@lists.freedesktop.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.