const bool edram = INTEL_GEN(dev_priv) > 8;
 
        seq_printf(m, "LLC: %s\n", yesno(HAS_LLC(dev_priv)));
-       seq_printf(m, "%s: %lluMB\n", edram ? "eDRAM" : "eLLC",
-                  intel_uncore_edram_size(dev_priv)/1024/1024);
+       seq_printf(m, "%s: %uMB\n", edram ? "eDRAM" : "eLLC",
+                  dev_priv->edram_size_mb);
 
        return 0;
 }
 
                      dram_info->ranks, yesno(dram_info->is_16gb_dimm));
 }
 
+static u32 gen9_edram_size_mb(struct drm_i915_private *dev_priv, u32 cap)
+{
+       const unsigned int ways[8] = { 4, 8, 12, 16, 16, 16, 16, 16 };
+       const unsigned int sets[4] = { 1, 1, 2, 2 };
+
+       return EDRAM_NUM_BANKS(cap) *
+               ways[EDRAM_WAYS_IDX(cap)] *
+               sets[EDRAM_SETS_IDX(cap)];
+}
+
+static void edram_detect(struct drm_i915_private *dev_priv)
+{
+       u32 edram_cap = 0;
+
+       if (!(IS_HASWELL(dev_priv) ||
+             IS_BROADWELL(dev_priv) ||
+             INTEL_GEN(dev_priv) >= 9))
+               return;
+
+       edram_cap = __raw_uncore_read32(&dev_priv->uncore, HSW_EDRAM_CAP);
+
+       /* NB: We can't write IDICR yet because we don't have gt funcs set up */
+
+       if (!(edram_cap & EDRAM_ENABLED))
+               return;
+
+       /*
+        * The needed capability bits for size calculation are not there with
+        * pre gen9 so return 128MB always.
+        */
+       if (INTEL_GEN(dev_priv) < 9)
+               dev_priv->edram_size_mb = 128;
+       else
+               dev_priv->edram_size_mb =
+                       gen9_edram_size_mb(dev_priv, edram_cap);
+
+       DRM_INFO("Found %uMB of eDRAM\n", dev_priv->edram_size_mb);
+}
+
 /**
  * i915_driver_init_hw - setup state requiring device access
  * @dev_priv: device private
 
        intel_sanitize_options(dev_priv);
 
+       /* needs to be done before ggtt probe */
+       edram_detect(dev_priv);
+
        i915_perf_init(dev_priv);
 
        ret = i915_ggtt_probe_hw(dev_priv);
 
 
        struct intel_l3_parity l3_parity;
 
-       /* Cannot be determined by PCIID. You must always read a register. */
-       u32 edram_cap;
+       /*
+        * edram size in MB.
+        * Cannot be determined by PCIID. You must always read a register.
+        */
+       u32 edram_size_mb;
 
        /*
         * Protects RPS/RC6 register access and PCU communication.
 
 #define HAS_LLC(dev_priv)      (INTEL_INFO(dev_priv)->has_llc)
 #define HAS_SNOOP(dev_priv)    (INTEL_INFO(dev_priv)->has_snoop)
-#define HAS_EDRAM(dev_priv)    (!!((dev_priv)->edram_cap & EDRAM_ENABLED))
+#define HAS_EDRAM(dev_priv)    ((dev_priv)->edram_size_mb)
 #define HAS_WT(dev_priv)       ((IS_HASWELL(dev_priv) || \
                                 IS_BROADWELL(dev_priv)) && HAS_EDRAM(dev_priv))
 
 
        return fw; /* track the lost user forcewake domains */
 }
 
-static u64 gen9_edram_size(struct drm_i915_private *dev_priv)
-{
-       const unsigned int ways[8] = { 4, 8, 12, 16, 16, 16, 16, 16 };
-       const unsigned int sets[4] = { 1, 1, 2, 2 };
-       const u32 cap = dev_priv->edram_cap;
-
-       return EDRAM_NUM_BANKS(cap) *
-               ways[EDRAM_WAYS_IDX(cap)] *
-               sets[EDRAM_SETS_IDX(cap)] *
-               1024 * 1024;
-}
-
-u64 intel_uncore_edram_size(struct drm_i915_private *dev_priv)
-{
-       if (!HAS_EDRAM(dev_priv))
-               return 0;
-
-       /* The needed capability bits for size calculation
-        * are not there with pre gen9 so return 128MB always.
-        */
-       if (INTEL_GEN(dev_priv) < 9)
-               return 128 * 1024 * 1024;
-
-       return gen9_edram_size(dev_priv);
-}
-
-static void intel_uncore_edram_detect(struct drm_i915_private *dev_priv)
-{
-       if (IS_HASWELL(dev_priv) ||
-           IS_BROADWELL(dev_priv) ||
-           INTEL_GEN(dev_priv) >= 9) {
-               dev_priv->edram_cap = __raw_uncore_read32(&dev_priv->uncore,
-                                                         HSW_EDRAM_CAP);
-
-               /* NB: We can't write IDICR yet because we do not have gt funcs
-                * set up */
-       } else {
-               dev_priv->edram_cap = 0;
-       }
-
-       if (HAS_EDRAM(dev_priv))
-               DRM_INFO("Found %lluMB of eDRAM\n",
-                        intel_uncore_edram_size(dev_priv) / (1024 * 1024));
-}
-
 static bool
 fpga_check_for_unclaimed_mmio(struct intel_uncore *uncore)
 {
        if (INTEL_GEN(i915) > 5 && !intel_vgpu_active(i915))
                uncore->flags |= UNCORE_HAS_FORCEWAKE;
 
-       intel_uncore_edram_detect(i915);
        intel_uncore_fw_domains_init(uncore);
        __intel_uncore_early_sanitize(uncore, 0);
 
 
 void intel_uncore_resume_early(struct intel_uncore *uncore);
 void intel_uncore_runtime_resume(struct intel_uncore *uncore);
 
-u64 intel_uncore_edram_size(struct drm_i915_private *dev_priv);
 void assert_forcewakes_inactive(struct intel_uncore *uncore);
 void assert_forcewakes_active(struct intel_uncore *uncore,
                              enum forcewake_domains fw_domains);