}
 
 static bool
-check_for_unclaimed_mmio(struct drm_i915_private *dev_priv)
+check_for_unclaimed_mmio(struct intel_uncore *uncore)
 {
-       struct intel_uncore *uncore = &dev_priv->uncore;
        bool ret = false;
 
-       if (HAS_FPGA_DBG_UNCLAIMED(dev_priv))
+       if (intel_uncore_has_fpga_dbg_unclaimed(uncore))
                ret |= fpga_check_for_unclaimed_mmio(uncore);
 
-       if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv))
+       if (intel_uncore_has_dbg_unclaimed(uncore))
                ret |= vlv_check_for_unclaimed_mmio(uncore);
 
-       if (IS_GEN_RANGE(dev_priv, 6, 7))
+       if (intel_uncore_has_fifo(uncore))
                ret |= gen6_check_for_fifo_debug(uncore);
 
        return ret;
 static void __intel_uncore_early_sanitize(struct intel_uncore *uncore,
                                          unsigned int restore_forcewake)
 {
-       struct drm_i915_private *i915 = uncore_to_i915(uncore);
-
        /* clear out unclaimed reg detection bit */
-       if (check_for_unclaimed_mmio(i915))
+       if (check_for_unclaimed_mmio(uncore))
                DRM_DEBUG("unclaimed mmio detected on uncore init, clearing\n");
 
        /* WaDisableShadowRegForCpd:chv */
-       if (IS_CHERRYVIEW(i915)) {
+       if (IS_CHERRYVIEW(uncore_to_i915(uncore))) {
                __raw_uncore_write32(uncore, GTFIFOCTL,
                                     __raw_uncore_read32(uncore, GTFIFOCTL) |
                                     GT_FIFO_CTL_BLOCK_ALL_POLICY_STALL |
                spin_lock_irq(&uncore->lock);
                uncore->funcs.force_wake_get(uncore, restore_forcewake);
 
-               if (IS_GEN_RANGE(i915, 6, 7))
+               if (intel_uncore_has_fifo(uncore))
                        uncore->fifo_count = fifo_free_entries(uncore);
                spin_unlock_irq(&uncore->lock);
        }
  */
 void intel_uncore_forcewake_user_put(struct intel_uncore *uncore)
 {
-       struct drm_i915_private *i915 = uncore_to_i915(uncore);
-
        spin_lock_irq(&uncore->lock);
        if (!--uncore->user_forcewake.count) {
-               if (intel_uncore_unclaimed_mmio(i915))
-                       dev_info(i915->drm.dev,
+               if (intel_uncore_unclaimed_mmio(uncore))
+                       dev_info(uncore_to_i915(uncore)->drm.dev,
                                 "Invalid mmio detected during user access\n");
 
                uncore->unclaimed_mmio_check =
 }
 
 static void
-__unclaimed_reg_debug(struct drm_i915_private *dev_priv,
+__unclaimed_reg_debug(struct intel_uncore *uncore,
                      const i915_reg_t reg,
                      const bool read,
                      const bool before)
 {
-       if (WARN(check_for_unclaimed_mmio(dev_priv) && !before,
+       if (WARN(check_for_unclaimed_mmio(uncore) && !before,
                 "Unclaimed %s register 0x%x\n",
                 read ? "read from" : "write to",
                 i915_mmio_reg_offset(reg)))
 }
 
 static inline void
-unclaimed_reg_debug(struct drm_i915_private *dev_priv,
+unclaimed_reg_debug(struct intel_uncore *uncore,
                    const i915_reg_t reg,
                    const bool read,
                    const bool before)
        if (likely(!i915_modparams.mmio_debug))
                return;
 
-       __unclaimed_reg_debug(dev_priv, reg, read, before);
+       __unclaimed_reg_debug(uncore, reg, read, before);
 }
 
 #define GEN2_READ_HEADER(x) \
        u##x val = 0; \
        assert_rpm_wakelock_held(dev_priv); \
        spin_lock_irqsave(&uncore->lock, irqflags); \
-       unclaimed_reg_debug(dev_priv, reg, true, true)
+       unclaimed_reg_debug(uncore, reg, true, true)
 
 #define GEN6_READ_FOOTER \
-       unclaimed_reg_debug(dev_priv, reg, true, false); \
+       unclaimed_reg_debug(uncore, reg, true, false); \
        spin_unlock_irqrestore(&uncore->lock, irqflags); \
        trace_i915_reg_rw(false, reg, val, sizeof(val), trace); \
        return val
        trace_i915_reg_rw(true, reg, val, sizeof(val), trace); \
        assert_rpm_wakelock_held(dev_priv); \
        spin_lock_irqsave(&uncore->lock, irqflags); \
-       unclaimed_reg_debug(dev_priv, reg, false, true)
+       unclaimed_reg_debug(uncore, reg, false, true)
 
 #define GEN6_WRITE_FOOTER \
-       unclaimed_reg_debug(dev_priv, reg, false, false); \
+       unclaimed_reg_debug(uncore, reg, false, false); \
        spin_unlock_irqrestore(&uncore->lock, irqflags)
 
 #define __gen6_write(x) \
                ASSIGN_READ_MMIO_VFUNCS(uncore, gen11_fwtable);
        }
 
+       if (HAS_FPGA_DBG_UNCLAIMED(i915))
+               uncore->flags |= UNCORE_HAS_FPGA_DBG_UNCLAIMED;
+
+       if (IS_VALLEYVIEW(i915) || IS_CHERRYVIEW(i915))
+               uncore->flags |= UNCORE_HAS_DBG_UNCLAIMED;
+
+       if (IS_GEN_RANGE(i915, 6, 7))
+               uncore->flags |= UNCORE_HAS_FIFO;
+
        iosf_mbi_register_pmic_bus_access_notifier(&uncore->pmic_bus_access_nb);
 
        return 0;
        return ret;
 }
 
-bool intel_uncore_unclaimed_mmio(struct drm_i915_private *dev_priv)
+bool intel_uncore_unclaimed_mmio(struct intel_uncore *uncore)
 {
-       return check_for_unclaimed_mmio(dev_priv);
+       return check_for_unclaimed_mmio(uncore);
 }
 
 bool
-intel_uncore_arm_unclaimed_mmio_detection(struct drm_i915_private *dev_priv)
+intel_uncore_arm_unclaimed_mmio_detection(struct intel_uncore *uncore)
 {
-       struct intel_uncore *uncore = &dev_priv->uncore;
        bool ret = false;
 
        spin_lock_irq(&uncore->lock);
        if (unlikely(uncore->unclaimed_mmio_check <= 0))
                goto out;
 
-       if (unlikely(intel_uncore_unclaimed_mmio(dev_priv))) {
+       if (unlikely(intel_uncore_unclaimed_mmio(uncore))) {
                if (!i915_modparams.mmio_debug) {
                        DRM_DEBUG("Unclaimed register detected, "
                                  "enabling oneshot unclaimed register reporting. "
 
 
        unsigned int flags;
 #define UNCORE_HAS_FORCEWAKE           BIT(0)
+#define UNCORE_HAS_FPGA_DBG_UNCLAIMED  BIT(1)
+#define UNCORE_HAS_DBG_UNCLAIMED       BIT(2)
+#define UNCORE_HAS_FIFO                        BIT(3)
 
        const struct intel_forcewake_range *fw_domains_table;
        unsigned int fw_domains_table_entries;
        return uncore->flags & UNCORE_HAS_FORCEWAKE;
 }
 
+static inline bool
+intel_uncore_has_fpga_dbg_unclaimed(const struct intel_uncore *uncore)
+{
+       return uncore->flags & UNCORE_HAS_FPGA_DBG_UNCLAIMED;
+}
+
+static inline bool
+intel_uncore_has_dbg_unclaimed(const struct intel_uncore *uncore)
+{
+       return uncore->flags & UNCORE_HAS_DBG_UNCLAIMED;
+}
+
+static inline bool
+intel_uncore_has_fifo(const struct intel_uncore *uncore)
+{
+       return uncore->flags & UNCORE_HAS_FIFO;
+}
+
 void intel_uncore_sanitize(struct drm_i915_private *dev_priv);
 int intel_uncore_init(struct intel_uncore *uncore);
 void intel_uncore_prune(struct intel_uncore *uncore);
-bool intel_uncore_unclaimed_mmio(struct drm_i915_private *dev_priv);
-bool intel_uncore_arm_unclaimed_mmio_detection(struct drm_i915_private *dev_priv);
+bool intel_uncore_unclaimed_mmio(struct intel_uncore *uncore);
+bool intel_uncore_arm_unclaimed_mmio_detection(struct intel_uncore *uncore);
 void intel_uncore_fini(struct intel_uncore *uncore);
 void intel_uncore_suspend(struct intel_uncore *uncore);
 void intel_uncore_resume_early(struct intel_uncore *uncore);
 
 {
 #define FW_RANGE 0x40000
        struct drm_i915_private *dev_priv = arg;
+       struct intel_uncore *uncore = &dev_priv->uncore;
        unsigned long *valid;
        u32 offset;
        int err;
        if (!valid)
                return -ENOMEM;
 
-       intel_uncore_forcewake_get(&dev_priv->uncore, FORCEWAKE_ALL);
+       intel_uncore_forcewake_get(uncore, FORCEWAKE_ALL);
 
-       check_for_unclaimed_mmio(dev_priv);
+       check_for_unclaimed_mmio(uncore);
        for (offset = 0; offset < FW_RANGE; offset += 4) {
                i915_reg_t reg = { offset };
 
                (void)I915_READ_FW(reg);
-               if (!check_for_unclaimed_mmio(dev_priv))
+               if (!check_for_unclaimed_mmio(uncore))
                        set_bit(offset, valid);
        }
 
-       intel_uncore_forcewake_put(&dev_priv->uncore, FORCEWAKE_ALL);
+       intel_uncore_forcewake_put(uncore, FORCEWAKE_ALL);
 
        err = 0;
        for_each_set_bit(offset, valid, FW_RANGE) {
                i915_reg_t reg = { offset };
 
                iosf_mbi_punit_acquire();
-               intel_uncore_forcewake_reset(&dev_priv->uncore);
+               intel_uncore_forcewake_reset(uncore);
                iosf_mbi_punit_release();
 
-               check_for_unclaimed_mmio(dev_priv);
+               check_for_unclaimed_mmio(uncore);
 
                (void)I915_READ(reg);
-               if (check_for_unclaimed_mmio(dev_priv)) {
+               if (check_for_unclaimed_mmio(uncore)) {
                        pr_err("Unclaimed mmio read to register 0x%04x\n",
                               offset);
                        err = -EINVAL;