drm/i915: Compartmentalize i915_gem_init_ggtt
Continuing on the theme of better logical organization of our code, make the first step towards making the ggtt code better isolated from wider struct drm_i915_private. v2: * Bring the ickle onion unwind back. (Chris) * Rename to i915_init_ggtt. (Chris) Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com> Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk> Link: https://patchwork.freedesktop.org/patch/msgid/20190621070811.7006-27-tvrtko.ursulin@linux.intel.com
This commit is contained in:
@@ -1510,7 +1510,7 @@ int i915_gem_init(struct drm_i915_private *dev_priv)
|
|||||||
mutex_lock(&dev_priv->drm.struct_mutex);
|
mutex_lock(&dev_priv->drm.struct_mutex);
|
||||||
intel_uncore_forcewake_get(&dev_priv->uncore, FORCEWAKE_ALL);
|
intel_uncore_forcewake_get(&dev_priv->uncore, FORCEWAKE_ALL);
|
||||||
|
|
||||||
ret = i915_gem_init_ggtt(dev_priv);
|
ret = i915_init_ggtt(dev_priv);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
GEM_BUG_ON(ret == -EIO);
|
GEM_BUG_ON(ret == -EIO);
|
||||||
goto err_unlock;
|
goto err_unlock;
|
||||||
|
|||||||
@@ -2816,7 +2816,13 @@ static void ggtt_release_guc_top(struct i915_ggtt *ggtt)
|
|||||||
drm_mm_remove_node(&ggtt->uc_fw);
|
drm_mm_remove_node(&ggtt->uc_fw);
|
||||||
}
|
}
|
||||||
|
|
||||||
int i915_gem_init_ggtt(struct drm_i915_private *dev_priv)
|
static void cleanup_init_ggtt(struct i915_ggtt *ggtt)
|
||||||
|
{
|
||||||
|
ggtt_release_guc_top(ggtt);
|
||||||
|
drm_mm_remove_node(&ggtt->error_capture);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int init_ggtt(struct i915_ggtt *ggtt)
|
||||||
{
|
{
|
||||||
/* Let GEM Manage all of the aperture.
|
/* Let GEM Manage all of the aperture.
|
||||||
*
|
*
|
||||||
@@ -2827,7 +2833,6 @@ int i915_gem_init_ggtt(struct drm_i915_private *dev_priv)
|
|||||||
* aperture. One page should be enough to keep any prefetching inside
|
* aperture. One page should be enough to keep any prefetching inside
|
||||||
* of the aperture.
|
* of the aperture.
|
||||||
*/
|
*/
|
||||||
struct i915_ggtt *ggtt = &dev_priv->ggtt;
|
|
||||||
unsigned long hole_start, hole_end;
|
unsigned long hole_start, hole_end;
|
||||||
struct drm_mm_node *entry;
|
struct drm_mm_node *entry;
|
||||||
int ret;
|
int ret;
|
||||||
@@ -2839,7 +2844,7 @@ int i915_gem_init_ggtt(struct drm_i915_private *dev_priv)
|
|||||||
* why.
|
* why.
|
||||||
*/
|
*/
|
||||||
ggtt->pin_bias = max_t(u32, I915_GTT_PAGE_SIZE,
|
ggtt->pin_bias = max_t(u32, I915_GTT_PAGE_SIZE,
|
||||||
intel_wopcm_guc_size(&dev_priv->wopcm));
|
intel_wopcm_guc_size(&ggtt->vm.i915->wopcm));
|
||||||
|
|
||||||
ret = intel_vgt_balloon(ggtt);
|
ret = intel_vgt_balloon(ggtt);
|
||||||
if (ret)
|
if (ret)
|
||||||
@@ -2860,7 +2865,7 @@ int i915_gem_init_ggtt(struct drm_i915_private *dev_priv)
|
|||||||
*/
|
*/
|
||||||
ret = ggtt_reserve_guc_top(ggtt);
|
ret = ggtt_reserve_guc_top(ggtt);
|
||||||
if (ret)
|
if (ret)
|
||||||
goto err_reserve;
|
goto err;
|
||||||
|
|
||||||
/* Clear any non-preallocated blocks */
|
/* Clear any non-preallocated blocks */
|
||||||
drm_mm_for_each_hole(entry, &ggtt->vm.mm, hole_start, hole_end) {
|
drm_mm_for_each_hole(entry, &ggtt->vm.mm, hole_start, hole_end) {
|
||||||
@@ -2873,19 +2878,28 @@ int i915_gem_init_ggtt(struct drm_i915_private *dev_priv)
|
|||||||
/* And finally clear the reserved guard page */
|
/* And finally clear the reserved guard page */
|
||||||
ggtt->vm.clear_range(&ggtt->vm, ggtt->vm.total - PAGE_SIZE, PAGE_SIZE);
|
ggtt->vm.clear_range(&ggtt->vm, ggtt->vm.total - PAGE_SIZE, PAGE_SIZE);
|
||||||
|
|
||||||
if (INTEL_PPGTT(dev_priv) == INTEL_PPGTT_ALIASING) {
|
return 0;
|
||||||
ret = init_aliasing_ppgtt(dev_priv);
|
|
||||||
|
err:
|
||||||
|
cleanup_init_ggtt(ggtt);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
int i915_init_ggtt(struct drm_i915_private *i915)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
ret = init_ggtt(&i915->ggtt);
|
||||||
if (ret)
|
if (ret)
|
||||||
goto err_appgtt;
|
return ret;
|
||||||
|
|
||||||
|
if (INTEL_PPGTT(i915) == INTEL_PPGTT_ALIASING) {
|
||||||
|
ret = init_aliasing_ppgtt(i915);
|
||||||
|
if (ret)
|
||||||
|
cleanup_init_ggtt(&i915->ggtt);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
err_appgtt:
|
|
||||||
ggtt_release_guc_top(ggtt);
|
|
||||||
err_reserve:
|
|
||||||
drm_mm_remove_node(&ggtt->error_capture);
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ggtt_cleanup_hw(struct i915_ggtt *ggtt)
|
static void ggtt_cleanup_hw(struct i915_ggtt *ggtt)
|
||||||
|
|||||||
@@ -655,7 +655,7 @@ int i915_ggtt_init_hw(struct drm_i915_private *dev_priv);
|
|||||||
int i915_ggtt_enable_hw(struct drm_i915_private *dev_priv);
|
int i915_ggtt_enable_hw(struct drm_i915_private *dev_priv);
|
||||||
void i915_ggtt_enable_guc(struct drm_i915_private *i915);
|
void i915_ggtt_enable_guc(struct drm_i915_private *i915);
|
||||||
void i915_ggtt_disable_guc(struct drm_i915_private *i915);
|
void i915_ggtt_disable_guc(struct drm_i915_private *i915);
|
||||||
int i915_gem_init_ggtt(struct drm_i915_private *dev_priv);
|
int i915_init_ggtt(struct drm_i915_private *dev_priv);
|
||||||
void i915_ggtt_cleanup_hw(struct drm_i915_private *dev_priv);
|
void i915_ggtt_cleanup_hw(struct drm_i915_private *dev_priv);
|
||||||
|
|
||||||
int i915_ppgtt_init_hw(struct intel_gt *gt);
|
int i915_ppgtt_init_hw(struct intel_gt *gt);
|
||||||
|
|||||||
Reference in New Issue
Block a user