Skip to content

Commit

Permalink
drm/i915: Extract PPGTT param from page_directory alloc
Browse files Browse the repository at this point in the history
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: Ben Widawsky <ben@bwidawsk.net>
Signed-off-by: Michel Thierry <michel.thierry@intel.com> (v2)
Reviewed-by: Mika Kuoppala <mika.kuoppala@intel.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
  • Loading branch information
Michel Thierry authored and Daniel Vetter committed Apr 10, 2015
1 parent 09942c6 commit c488dbb
Showing 1 changed file with 7 additions and 8 deletions.
15 changes: 7 additions & 8 deletions drivers/gpu/drm/i915/i915_gem_gtt.c
Original file line number Diff line number Diff line change
Expand Up @@ -716,12 +716,11 @@ static int gen8_ppgtt_alloc_pagetabs(struct i915_page_directory *pd,
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 length)
{
struct i915_hw_ppgtt *ppgtt =
container_of(pdp, struct i915_hw_ppgtt, pdp);
struct i915_page_directory *unused;
uint64_t temp;
uint32_t pdpe;
Expand All @@ -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) {
WARN_ON(unused);
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;

gen8_initialize_pd(&ppgtt->base,
Expand All @@ -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.
*/
while (pdpe < GEN8_LEGACY_PDPES) {
ppgtt->pdp.page_directory[pdpe] = alloc_pd_single();
if (IS_ERR(ppgtt->pdp.page_directory[pdpe]))
pdp->page_directory[pdpe] = alloc_pd_single();
if (IS_ERR(pdp->page_directory[pdpe]))
goto unwind_out;

gen8_initialize_pd(&ppgtt->base,
Expand All @@ -756,7 +755,7 @@ static int gen8_ppgtt_alloc_page_directories(struct i915_page_directory_pointer

unwind_out:
while (pdpe--)
unmap_and_free_pd(ppgtt->pdp.page_directory[pdpe]);
unmap_and_free_pd(pdp->page_directory[pdpe]);

return -ENOMEM;
}
Expand All @@ -770,7 +769,7 @@ static int gen8_ppgtt_alloc(struct i915_hw_ppgtt *ppgtt,
uint32_t pdpe;
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)
return ret;

Expand Down

0 comments on commit c488dbb

Please sign in to comment.