/* Preliminary initialization of Tile 0 */
 int intel_root_gt_init_early(struct drm_i915_private *i915)
 {
-       struct intel_gt *gt = to_gt(i915);
+       struct intel_gt *gt;
+
+       gt = drmm_kzalloc(&i915->drm, sizeof(*gt), GFP_KERNEL);
+       if (!gt)
+               return -ENOMEM;
+
+       i915->gt0 = gt;
 
        gt->i915 = i915;
        gt->uncore = &i915->uncore;
 
        struct i915_hwmon *hwmon;
 
        /* Abstract the submission mechanism (legacy ringbuffer or execlists) away */
-       struct intel_gt gt0;
+       struct intel_gt *gt0;
 
        /*
-        * i915->gt[0] == &i915->gt0
+        * i915->gt[0] == i915->gt0
         */
        struct intel_gt *gt[I915_MAX_GT];
 
        return pci_get_drvdata(pdev);
 }
 
-static inline struct intel_gt *to_gt(struct drm_i915_private *i915)
+static inline struct intel_gt *to_gt(const struct drm_i915_private *i915)
 {
-       return &i915->gt0;
+       return i915->gt0;
 }
 
 /* Simple iterator over all initialised engines */