|
|
|
@ -1794,22 +1794,21 @@ static int gen6_mm_switch(struct i915_hw_ppgtt *ppgtt, |
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void gen8_ppgtt_enable(struct drm_device *dev) |
|
|
|
|
static void gen8_ppgtt_enable(struct drm_i915_private *dev_priv) |
|
|
|
|
{ |
|
|
|
|
struct drm_i915_private *dev_priv = to_i915(dev); |
|
|
|
|
struct intel_engine_cs *engine; |
|
|
|
|
enum intel_engine_id id; |
|
|
|
|
|
|
|
|
|
for_each_engine(engine, dev_priv, id) { |
|
|
|
|
u32 four_level = USES_FULL_48BIT_PPGTT(dev) ? GEN8_GFX_PPGTT_48B : 0; |
|
|
|
|
u32 four_level = USES_FULL_48BIT_PPGTT(dev_priv) ? |
|
|
|
|
GEN8_GFX_PPGTT_48B : 0; |
|
|
|
|
I915_WRITE(RING_MODE_GEN7(engine), |
|
|
|
|
_MASKED_BIT_ENABLE(GFX_PPGTT_ENABLE | four_level)); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void gen7_ppgtt_enable(struct drm_device *dev) |
|
|
|
|
static void gen7_ppgtt_enable(struct drm_i915_private *dev_priv) |
|
|
|
|
{ |
|
|
|
|
struct drm_i915_private *dev_priv = to_i915(dev); |
|
|
|
|
struct intel_engine_cs *engine; |
|
|
|
|
uint32_t ecochk, ecobits; |
|
|
|
|
enum intel_engine_id id; |
|
|
|
@ -1833,9 +1832,8 @@ static void gen7_ppgtt_enable(struct drm_device *dev) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void gen6_ppgtt_enable(struct drm_device *dev) |
|
|
|
|
static void gen6_ppgtt_enable(struct drm_i915_private *dev_priv) |
|
|
|
|
{ |
|
|
|
|
struct drm_i915_private *dev_priv = to_i915(dev); |
|
|
|
|
uint32_t ecochk, gab_ctl, ecobits; |
|
|
|
|
|
|
|
|
|
ecobits = I915_READ(GAC_ECO_BITS); |
|
|
|
@ -2193,10 +2191,8 @@ static void i915_address_space_init(struct i915_address_space *vm, |
|
|
|
|
list_add_tail(&vm->global_link, &dev_priv->vm_list); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void gtt_write_workarounds(struct drm_device *dev) |
|
|
|
|
static void gtt_write_workarounds(struct drm_i915_private *dev_priv) |
|
|
|
|
{ |
|
|
|
|
struct drm_i915_private *dev_priv = to_i915(dev); |
|
|
|
|
|
|
|
|
|
/* This function is for gtt related workarounds. This function is
|
|
|
|
|
* called on driver load and after a GPU reset, so you can place |
|
|
|
|
* workarounds here even if they get overwritten by GPU reset. |
|
|
|
@ -2229,11 +2225,9 @@ static int i915_ppgtt_init(struct i915_hw_ppgtt *ppgtt, |
|
|
|
|
return ret; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
int i915_ppgtt_init_hw(struct drm_device *dev) |
|
|
|
|
int i915_ppgtt_init_hw(struct drm_i915_private *dev_priv) |
|
|
|
|
{ |
|
|
|
|
struct drm_i915_private *dev_priv = to_i915(dev); |
|
|
|
|
|
|
|
|
|
gtt_write_workarounds(dev); |
|
|
|
|
gtt_write_workarounds(dev_priv); |
|
|
|
|
|
|
|
|
|
/* In the case of execlists, PPGTT is enabled by the context descriptor
|
|
|
|
|
* and the PDPs are contained within the context itself. We don't |
|
|
|
@ -2241,17 +2235,17 @@ int i915_ppgtt_init_hw(struct drm_device *dev) |
|
|
|
|
if (i915.enable_execlists) |
|
|
|
|
return 0; |
|
|
|
|
|
|
|
|
|
if (!USES_PPGTT(dev)) |
|
|
|
|
if (!USES_PPGTT(dev_priv)) |
|
|
|
|
return 0; |
|
|
|
|
|
|
|
|
|
if (IS_GEN6(dev_priv)) |
|
|
|
|
gen6_ppgtt_enable(dev); |
|
|
|
|
gen6_ppgtt_enable(dev_priv); |
|
|
|
|
else if (IS_GEN7(dev_priv)) |
|
|
|
|
gen7_ppgtt_enable(dev); |
|
|
|
|
else if (INTEL_INFO(dev)->gen >= 8) |
|
|
|
|
gen8_ppgtt_enable(dev); |
|
|
|
|
gen7_ppgtt_enable(dev_priv); |
|
|
|
|
else if (INTEL_GEN(dev_priv) >= 8) |
|
|
|
|
gen8_ppgtt_enable(dev_priv); |
|
|
|
|
else |
|
|
|
|
MISSING_CASE(INTEL_INFO(dev)->gen); |
|
|
|
|
MISSING_CASE(INTEL_GEN(dev_priv)); |
|
|
|
|
|
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|