drm/i915: Store backpointer to GT in uncore
We now support a per-gt uncore, yet we're not able to infer which GT we're operating upon. Let's store a backpointer for now. At this point the early initialization of the gt needs to be broken in two parts where the first is needed to assign to the gt the i915 private data pointer and the uncore. A temporary function has been made and the two parts are __intel_gt_init_early() and intel_gt_init_early(). This split will be fixed in the future with the multitile patch. Signed-off-by: Michał Winiarski <michal.winiarski@intel.com> Signed-off-by: Matt Roper <matthew.d.roper@intel.com> Reviewed-by: Andi Shyti <andi.shyti@linux.intel.com> Signed-off-by: Andi Shyti <andi.shyti@linux.intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20211214193346.21231-2-andi.shyti@linux.intel.com
This commit is contained in:
Родитель
0013f5f5c0
Коммит
030def2cc9
|
@ -23,11 +23,8 @@
|
||||||
#include "shmem_utils.h"
|
#include "shmem_utils.h"
|
||||||
#include "pxp/intel_pxp.h"
|
#include "pxp/intel_pxp.h"
|
||||||
|
|
||||||
void intel_gt_init_early(struct intel_gt *gt, struct drm_i915_private *i915)
|
void __intel_gt_init_early(struct intel_gt *gt, struct drm_i915_private *i915)
|
||||||
{
|
{
|
||||||
gt->i915 = i915;
|
|
||||||
gt->uncore = &i915->uncore;
|
|
||||||
|
|
||||||
spin_lock_init(>->irq_lock);
|
spin_lock_init(>->irq_lock);
|
||||||
|
|
||||||
INIT_LIST_HEAD(>->closed_vma);
|
INIT_LIST_HEAD(>->closed_vma);
|
||||||
|
@ -46,6 +43,12 @@ void intel_gt_init_early(struct intel_gt *gt, struct drm_i915_private *i915)
|
||||||
intel_rps_init_early(>->rps);
|
intel_rps_init_early(>->rps);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void intel_gt_init_early(struct intel_gt *gt, struct drm_i915_private *i915)
|
||||||
|
{
|
||||||
|
gt->i915 = i915;
|
||||||
|
gt->uncore = &i915->uncore;
|
||||||
|
}
|
||||||
|
|
||||||
int intel_gt_probe_lmem(struct intel_gt *gt)
|
int intel_gt_probe_lmem(struct intel_gt *gt)
|
||||||
{
|
{
|
||||||
struct drm_i915_private *i915 = gt->i915;
|
struct drm_i915_private *i915 = gt->i915;
|
||||||
|
|
|
@ -35,6 +35,7 @@ static inline struct intel_gt *huc_to_gt(struct intel_huc *huc)
|
||||||
}
|
}
|
||||||
|
|
||||||
void intel_gt_init_early(struct intel_gt *gt, struct drm_i915_private *i915);
|
void intel_gt_init_early(struct intel_gt *gt, struct drm_i915_private *i915);
|
||||||
|
void __intel_gt_init_early(struct intel_gt *gt, struct drm_i915_private *i915);
|
||||||
void intel_gt_init_hw_early(struct intel_gt *gt, struct i915_ggtt *ggtt);
|
void intel_gt_init_hw_early(struct intel_gt *gt, struct i915_ggtt *ggtt);
|
||||||
int intel_gt_probe_lmem(struct intel_gt *gt);
|
int intel_gt_probe_lmem(struct intel_gt *gt);
|
||||||
int intel_gt_init_mmio(struct intel_gt *gt);
|
int intel_gt_init_mmio(struct intel_gt *gt);
|
||||||
|
|
|
@ -312,8 +312,9 @@ static int i915_driver_early_probe(struct drm_i915_private *dev_priv)
|
||||||
intel_device_info_subplatform_init(dev_priv);
|
intel_device_info_subplatform_init(dev_priv);
|
||||||
intel_step_init(dev_priv);
|
intel_step_init(dev_priv);
|
||||||
|
|
||||||
|
intel_gt_init_early(&dev_priv->gt, dev_priv);
|
||||||
intel_uncore_mmio_debug_init_early(&dev_priv->mmio_debug);
|
intel_uncore_mmio_debug_init_early(&dev_priv->mmio_debug);
|
||||||
intel_uncore_init_early(&dev_priv->uncore, dev_priv);
|
intel_uncore_init_early(&dev_priv->uncore, &dev_priv->gt);
|
||||||
|
|
||||||
spin_lock_init(&dev_priv->irq_lock);
|
spin_lock_init(&dev_priv->irq_lock);
|
||||||
spin_lock_init(&dev_priv->gpu_error.lock);
|
spin_lock_init(&dev_priv->gpu_error.lock);
|
||||||
|
@ -344,7 +345,7 @@ static int i915_driver_early_probe(struct drm_i915_private *dev_priv)
|
||||||
|
|
||||||
intel_wopcm_init_early(&dev_priv->wopcm);
|
intel_wopcm_init_early(&dev_priv->wopcm);
|
||||||
|
|
||||||
intel_gt_init_early(&dev_priv->gt, dev_priv);
|
__intel_gt_init_early(&dev_priv->gt, dev_priv);
|
||||||
|
|
||||||
i915_gem_init_early(dev_priv);
|
i915_gem_init_early(dev_priv);
|
||||||
|
|
||||||
|
|
|
@ -2061,12 +2061,13 @@ void intel_uncore_cleanup_mmio(struct intel_uncore *uncore)
|
||||||
}
|
}
|
||||||
|
|
||||||
void intel_uncore_init_early(struct intel_uncore *uncore,
|
void intel_uncore_init_early(struct intel_uncore *uncore,
|
||||||
struct drm_i915_private *i915)
|
struct intel_gt *gt)
|
||||||
{
|
{
|
||||||
spin_lock_init(&uncore->lock);
|
spin_lock_init(&uncore->lock);
|
||||||
uncore->i915 = i915;
|
uncore->i915 = gt->i915;
|
||||||
uncore->rpm = &i915->runtime_pm;
|
uncore->gt = gt;
|
||||||
uncore->debug = &i915->mmio_debug;
|
uncore->rpm = >->i915->runtime_pm;
|
||||||
|
uncore->debug = >->i915->mmio_debug;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void uncore_raw_init(struct intel_uncore *uncore)
|
static void uncore_raw_init(struct intel_uncore *uncore)
|
||||||
|
|
|
@ -129,6 +129,7 @@ struct intel_uncore {
|
||||||
void __iomem *regs;
|
void __iomem *regs;
|
||||||
|
|
||||||
struct drm_i915_private *i915;
|
struct drm_i915_private *i915;
|
||||||
|
struct intel_gt *gt;
|
||||||
struct intel_runtime_pm *rpm;
|
struct intel_runtime_pm *rpm;
|
||||||
|
|
||||||
spinlock_t lock; /** lock is also taken in irq contexts. */
|
spinlock_t lock; /** lock is also taken in irq contexts. */
|
||||||
|
@ -217,7 +218,7 @@ u32 intel_uncore_read_with_mcr_steering(struct intel_uncore *uncore,
|
||||||
void
|
void
|
||||||
intel_uncore_mmio_debug_init_early(struct intel_uncore_mmio_debug *mmio_debug);
|
intel_uncore_mmio_debug_init_early(struct intel_uncore_mmio_debug *mmio_debug);
|
||||||
void intel_uncore_init_early(struct intel_uncore *uncore,
|
void intel_uncore_init_early(struct intel_uncore *uncore,
|
||||||
struct drm_i915_private *i915);
|
struct intel_gt *gt);
|
||||||
int intel_uncore_setup_mmio(struct intel_uncore *uncore);
|
int intel_uncore_setup_mmio(struct intel_uncore *uncore);
|
||||||
int intel_uncore_init_mmio(struct intel_uncore *uncore);
|
int intel_uncore_init_mmio(struct intel_uncore *uncore);
|
||||||
void intel_uncore_prune_engine_fw_domains(struct intel_uncore *uncore,
|
void intel_uncore_prune_engine_fw_domains(struct intel_uncore *uncore,
|
||||||
|
|
|
@ -175,12 +175,12 @@ struct drm_i915_private *mock_gem_device(void)
|
||||||
mkwrite_device_info(i915)->memory_regions = REGION_SMEM;
|
mkwrite_device_info(i915)->memory_regions = REGION_SMEM;
|
||||||
intel_memory_regions_hw_probe(i915);
|
intel_memory_regions_hw_probe(i915);
|
||||||
|
|
||||||
mock_uncore_init(&i915->uncore, i915);
|
|
||||||
|
|
||||||
spin_lock_init(&i915->gpu_error.lock);
|
spin_lock_init(&i915->gpu_error.lock);
|
||||||
|
|
||||||
i915_gem_init__mm(i915);
|
i915_gem_init__mm(i915);
|
||||||
intel_gt_init_early(&i915->gt, i915);
|
intel_gt_init_early(&i915->gt, i915);
|
||||||
|
__intel_gt_init_early(&i915->gt, i915);
|
||||||
|
mock_uncore_init(&i915->uncore, i915);
|
||||||
atomic_inc(&i915->gt.wakeref.count); /* disable; no hw support */
|
atomic_inc(&i915->gt.wakeref.count); /* disable; no hw support */
|
||||||
i915->gt.awake = -ENODEV;
|
i915->gt.awake = -ENODEV;
|
||||||
|
|
||||||
|
|
|
@ -42,7 +42,7 @@ __nop_read(64)
|
||||||
void mock_uncore_init(struct intel_uncore *uncore,
|
void mock_uncore_init(struct intel_uncore *uncore,
|
||||||
struct drm_i915_private *i915)
|
struct drm_i915_private *i915)
|
||||||
{
|
{
|
||||||
intel_uncore_init_early(uncore, i915);
|
intel_uncore_init_early(uncore, &i915->gt);
|
||||||
|
|
||||||
ASSIGN_RAW_WRITE_MMIO_VFUNCS(uncore, nop);
|
ASSIGN_RAW_WRITE_MMIO_VFUNCS(uncore, nop);
|
||||||
ASSIGN_RAW_READ_MMIO_VFUNCS(uncore, nop);
|
ASSIGN_RAW_READ_MMIO_VFUNCS(uncore, nop);
|
||||||
|
|
Загрузка…
Ссылка в новой задаче