drm/i915: Initialize MMIO access for each GT
In a multi-GT system we need to initialize MMIO access for each GT, not just the primary GT. Cc: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com> Signed-off-by: Matt Roper <matthew.d.roper@intel.com> Reviewed-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20220906234934.3655440-9-matthew.d.roper@intel.com Signed-off-by: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
This commit is contained in:
parent
6438452de4
commit
cfb0fa4241
@ -431,7 +431,8 @@ static void i915_driver_late_release(struct drm_i915_private *dev_priv)
|
||||
*/
|
||||
static int i915_driver_mmio_probe(struct drm_i915_private *dev_priv)
|
||||
{
|
||||
int ret;
|
||||
struct intel_gt *gt;
|
||||
int ret, i;
|
||||
|
||||
if (i915_inject_probe_failure(dev_priv))
|
||||
return -ENODEV;
|
||||
@ -440,17 +441,27 @@ static int i915_driver_mmio_probe(struct drm_i915_private *dev_priv)
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
ret = intel_uncore_init_mmio(&dev_priv->uncore);
|
||||
if (ret)
|
||||
return ret;
|
||||
for_each_gt(gt, dev_priv, i) {
|
||||
ret = intel_uncore_init_mmio(gt->uncore);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
ret = drmm_add_action_or_reset(&dev_priv->drm,
|
||||
intel_uncore_fini_mmio,
|
||||
gt->uncore);
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Try to make sure MCHBAR is enabled before poking at it */
|
||||
intel_setup_mchbar(dev_priv);
|
||||
intel_device_info_runtime_init(dev_priv);
|
||||
|
||||
ret = intel_gt_init_mmio(to_gt(dev_priv));
|
||||
if (ret)
|
||||
goto err_uncore;
|
||||
for_each_gt(gt, dev_priv, i) {
|
||||
ret = intel_gt_init_mmio(gt);
|
||||
if (ret)
|
||||
goto err_uncore;
|
||||
}
|
||||
|
||||
/* As early as possible, scrub existing GPU state before clobbering */
|
||||
sanitize_gpu(dev_priv);
|
||||
@ -459,7 +470,6 @@ static int i915_driver_mmio_probe(struct drm_i915_private *dev_priv)
|
||||
|
||||
err_uncore:
|
||||
intel_teardown_mchbar(dev_priv);
|
||||
intel_uncore_fini_mmio(&dev_priv->uncore);
|
||||
|
||||
return ret;
|
||||
}
|
||||
@ -471,7 +481,6 @@ err_uncore:
|
||||
static void i915_driver_mmio_release(struct drm_i915_private *dev_priv)
|
||||
{
|
||||
intel_teardown_mchbar(dev_priv);
|
||||
intel_uncore_fini_mmio(&dev_priv->uncore);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -2455,8 +2455,11 @@ void intel_uncore_prune_engine_fw_domains(struct intel_uncore *uncore,
|
||||
}
|
||||
}
|
||||
|
||||
void intel_uncore_fini_mmio(struct intel_uncore *uncore)
|
||||
/* Called via drm-managed action */
|
||||
void intel_uncore_fini_mmio(struct drm_device *dev, void *data)
|
||||
{
|
||||
struct intel_uncore *uncore = data;
|
||||
|
||||
if (intel_uncore_has_forcewake(uncore)) {
|
||||
iosf_mbi_punit_acquire();
|
||||
iosf_mbi_unregister_pmic_bus_access_notifier_unlocked(
|
||||
|
@ -33,6 +33,7 @@
|
||||
|
||||
#include "i915_reg_defs.h"
|
||||
|
||||
struct drm_device;
|
||||
struct drm_i915_private;
|
||||
struct intel_runtime_pm;
|
||||
struct intel_uncore;
|
||||
@ -220,7 +221,7 @@ void intel_uncore_prune_engine_fw_domains(struct intel_uncore *uncore,
|
||||
bool intel_uncore_unclaimed_mmio(struct intel_uncore *uncore);
|
||||
bool intel_uncore_arm_unclaimed_mmio_detection(struct intel_uncore *uncore);
|
||||
void intel_uncore_cleanup_mmio(struct intel_uncore *uncore);
|
||||
void intel_uncore_fini_mmio(struct intel_uncore *uncore);
|
||||
void intel_uncore_fini_mmio(struct drm_device *dev, void *data);
|
||||
void intel_uncore_suspend(struct intel_uncore *uncore);
|
||||
void intel_uncore_resume_early(struct intel_uncore *uncore);
|
||||
void intel_uncore_runtime_resume(struct intel_uncore *uncore);
|
||||
|
Loading…
x
Reference in New Issue
Block a user