Commit c488dbba authored by Michel Thierry's avatar Michel Thierry Committed by Daniel Vetter

drm/i915: Extract PPGTT param from page_directory alloc

This will be useful for when we move to 48b addressing, and the PDP isn't
the root of the page table structure.

v2: Rebase after changes for Gen8+ systems with less than 4GB of memory.
v3: Rebase after Mika's code review.
Signed-off-by: default avatarBen Widawsky <ben@bwidawsk.net>
Signed-off-by: Michel Thierry <michel.thierry@intel.com> (v2)
Reviewed-by: default avatarMika Kuoppala <mika.kuoppala@intel.com>
Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
parent 09942c65
...@@ -716,12 +716,11 @@ static int gen8_ppgtt_alloc_pagetabs(struct i915_page_directory *pd, ...@@ -716,12 +716,11 @@ static int gen8_ppgtt_alloc_pagetabs(struct i915_page_directory *pd,
return -ENOMEM; return -ENOMEM;
} }
static int gen8_ppgtt_alloc_page_directories(struct i915_page_directory_pointer *pdp, static int gen8_ppgtt_alloc_page_directories(struct i915_hw_ppgtt *ppgtt,
struct i915_page_directory_pointer *pdp,
uint64_t start, uint64_t start,
uint64_t length) uint64_t length)
{ {
struct i915_hw_ppgtt *ppgtt =
container_of(pdp, struct i915_hw_ppgtt, pdp);
struct i915_page_directory *unused; struct i915_page_directory *unused;
uint64_t temp; uint64_t temp;
uint32_t pdpe; uint32_t pdpe;
...@@ -732,7 +731,7 @@ static int gen8_ppgtt_alloc_page_directories(struct i915_page_directory_pointer ...@@ -732,7 +731,7 @@ static int gen8_ppgtt_alloc_page_directories(struct i915_page_directory_pointer
gen8_for_each_pdpe(unused, pdp, start, length, temp, pdpe) { gen8_for_each_pdpe(unused, pdp, start, length, temp, pdpe) {
WARN_ON(unused); WARN_ON(unused);
pdp->page_directory[pdpe] = alloc_pd_single(); pdp->page_directory[pdpe] = alloc_pd_single();
if (IS_ERR(ppgtt->pdp.page_directory[pdpe])) if (IS_ERR(pdp->page_directory[pdpe]))
goto unwind_out; goto unwind_out;
gen8_initialize_pd(&ppgtt->base, gen8_initialize_pd(&ppgtt->base,
...@@ -743,8 +742,8 @@ static int gen8_ppgtt_alloc_page_directories(struct i915_page_directory_pointer ...@@ -743,8 +742,8 @@ static int gen8_ppgtt_alloc_page_directories(struct i915_page_directory_pointer
* 4GB of memory. This won't be needed after a subsequent patch. * 4GB of memory. This won't be needed after a subsequent patch.
*/ */
while (pdpe < GEN8_LEGACY_PDPES) { while (pdpe < GEN8_LEGACY_PDPES) {
ppgtt->pdp.page_directory[pdpe] = alloc_pd_single(); pdp->page_directory[pdpe] = alloc_pd_single();
if (IS_ERR(ppgtt->pdp.page_directory[pdpe])) if (IS_ERR(pdp->page_directory[pdpe]))
goto unwind_out; goto unwind_out;
gen8_initialize_pd(&ppgtt->base, gen8_initialize_pd(&ppgtt->base,
...@@ -756,7 +755,7 @@ static int gen8_ppgtt_alloc_page_directories(struct i915_page_directory_pointer ...@@ -756,7 +755,7 @@ static int gen8_ppgtt_alloc_page_directories(struct i915_page_directory_pointer
unwind_out: unwind_out:
while (pdpe--) while (pdpe--)
unmap_and_free_pd(ppgtt->pdp.page_directory[pdpe]); unmap_and_free_pd(pdp->page_directory[pdpe]);
return -ENOMEM; return -ENOMEM;
} }
...@@ -770,7 +769,7 @@ static int gen8_ppgtt_alloc(struct i915_hw_ppgtt *ppgtt, ...@@ -770,7 +769,7 @@ static int gen8_ppgtt_alloc(struct i915_hw_ppgtt *ppgtt,
uint32_t pdpe; uint32_t pdpe;
int ret; int ret;
ret = gen8_ppgtt_alloc_page_directories(&ppgtt->pdp, start, length); ret = gen8_ppgtt_alloc_page_directories(ppgtt, &ppgtt->pdp, start, length);
if (ret) if (ret)
return ret; return ret;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment