int ret;
 
        if (!gt_is_root(gt)) {
-               struct intel_uncore_mmio_debug *mmio_debug;
                struct intel_uncore *uncore;
 
                uncore = kzalloc(sizeof(*uncore), GFP_KERNEL);
                if (!uncore)
                        return -ENOMEM;
 
-               mmio_debug = kzalloc(sizeof(*mmio_debug), GFP_KERNEL);
-               if (!mmio_debug) {
-                       kfree(uncore);
-                       return -ENOMEM;
-               }
-
                gt->uncore = uncore;
-               gt->uncore->debug = mmio_debug;
 
                __intel_gt_init_early(gt);
        }
        intel_uncore_cleanup_mmio(gt->uncore);
 
        if (!gt_is_root(gt)) {
-               kfree(gt->uncore->debug);
                kfree(gt->uncore);
                kfree(gt);
        }
 
        intel_device_info_subplatform_init(dev_priv);
        intel_step_init(dev_priv);
 
-       intel_uncore_mmio_debug_init_early(&dev_priv->mmio_debug);
+       intel_uncore_mmio_debug_init_early(dev_priv);
 
        spin_lock_init(&dev_priv->irq_lock);
        spin_lock_init(&dev_priv->gpu_error.lock);
 
 }
 
 void
-intel_uncore_mmio_debug_init_early(struct intel_uncore_mmio_debug *mmio_debug)
+intel_uncore_mmio_debug_init_early(struct drm_i915_private *i915)
 {
-       spin_lock_init(&mmio_debug->lock);
-       mmio_debug->unclaimed_mmio_check = 1;
+       spin_lock_init(&i915->mmio_debug.lock);
+       i915->mmio_debug.unclaimed_mmio_check = 1;
+
+       i915->uncore.debug = &i915->mmio_debug;
 }
 
 static void mmio_debug_suspend(struct intel_uncore *uncore)
 {
+       if (!uncore->debug)
+               return;
+
        spin_lock(&uncore->debug->lock);
 
        /* Save and disable mmio debugging for the user bypass */
 
 static void mmio_debug_resume(struct intel_uncore *uncore)
 {
+       if (!uncore->debug)
+               return;
+
        spin_lock(&uncore->debug->lock);
 
        if (!--uncore->debug->suspend_count)
                    const bool read,
                    const bool before)
 {
-       if (likely(!uncore->i915->params.mmio_debug))
+       if (likely(!uncore->i915->params.mmio_debug) || !uncore->debug)
                return;
 
        /* interrupts are disabled and re-enabled around uncore->lock usage */
        uncore->i915 = gt->i915;
        uncore->gt = gt;
        uncore->rpm = >->i915->runtime_pm;
-       uncore->debug = >->i915->mmio_debug;
 }
 
 static void uncore_raw_init(struct intel_uncore *uncore)
 {
        bool ret;
 
+       if (!uncore->debug)
+               return false;
+
        spin_lock_irq(&uncore->debug->lock);
        ret = check_for_unclaimed_mmio(uncore);
        spin_unlock_irq(&uncore->debug->lock);
 {
        bool ret = false;
 
+       if (drm_WARN_ON(&uncore->i915->drm, !uncore->debug))
+               return false;
+
        spin_lock_irq(&uncore->debug->lock);
 
        if (unlikely(uncore->debug->unclaimed_mmio_check <= 0))
 
        return uncore->flags & UNCORE_HAS_FIFO;
 }
 
-void
-intel_uncore_mmio_debug_init_early(struct intel_uncore_mmio_debug *mmio_debug);
+void intel_uncore_mmio_debug_init_early(struct drm_i915_private *i915);
 void intel_uncore_init_early(struct intel_uncore *uncore,
                             struct intel_gt *gt);
 int intel_uncore_setup_mmio(struct intel_uncore *uncore, phys_addr_t phys_addr);