summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichel Thierry <michel.thierry@intel.com>2015-04-08 12:13:31 +0100
committerDaniel Vetter <daniel.vetter@ffwll.ch>2015-04-10 08:56:11 +0200
commitc488dbbaa7626e510c3d2560e9aa2ddc45fb1e99 (patch)
tree2f7a1f14ffc2c182858eb44437c0af48038864c2
parent09942c656b7f857e3fd875a20f5967d316a20c73 (diff)
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: 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>
-rw-r--r--drivers/gpu/drm/i915/i915_gem_gtt.c15
1 files changed, 7 insertions, 8 deletions
diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.c b/drivers/gpu/drm/i915/i915_gem_gtt.c
index c5ec35ac0733..539060b8b66a 100644
--- a/drivers/gpu/drm/i915/i915_gem_gtt.c
+++ b/drivers/gpu/drm/i915/i915_gem_gtt.c
@@ -716,12 +716,11 @@ unwind_out:
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;
@@ -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,
@@ -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,
@@ -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;
}
@@ -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;