struct drm_file;
 struct drm_format_info;
 struct drm_framebuffer;
-struct drm_i915_gem_object;
 struct drm_i915_private;
 struct drm_mode_fb_cmd2;
 struct drm_modeset_acquire_ctx;
 void vlv_wait_port_ready(struct drm_i915_private *dev_priv,
                         struct intel_digital_port *dig_port,
                         unsigned int expected_mask);
-struct drm_framebuffer *
-intel_framebuffer_create(struct drm_i915_gem_object *obj,
-                        struct drm_mode_fb_cmd2 *mode_cmd);
 
 bool intel_fuzzy_clock_check(int clock1, int clock2);
 
 
        if (IS_ERR(obj))
                return ERR_CAST(obj);
 
-       fb = intel_framebuffer_create(to_intel_bo(obj), &mode_cmd);
+       fb = intel_framebuffer_create(obj, &mode_cmd);
        drm_gem_object_put(obj);
 
        return fb;
 }
 
 struct drm_framebuffer *
-intel_framebuffer_create(struct drm_i915_gem_object *obj,
+intel_framebuffer_create(struct drm_gem_object *obj,
                         struct drm_mode_fb_cmd2 *mode_cmd)
 {
        struct intel_framebuffer *intel_fb;
        if (!intel_fb)
                return ERR_PTR(-ENOMEM);
 
-       ret = intel_framebuffer_init(intel_fb, intel_bo_to_drm_bo(obj), mode_cmd);
+       ret = intel_framebuffer_init(intel_fb, obj, mode_cmd);
        if (ret)
                goto err;
 
 
                           struct drm_gem_object *obj,
                           struct drm_mode_fb_cmd2 *mode_cmd);
 struct drm_framebuffer *
+intel_framebuffer_create(struct drm_gem_object *obj,
+                        struct drm_mode_fb_cmd2 *mode_cmd);
+struct drm_framebuffer *
 intel_user_framebuffer_create(struct drm_device *dev,
                              struct drm_file *filp,
                              const struct drm_mode_fb_cmd2 *user_mode_cmd);
 
 
 #include "i915_drv.h"
 #include "intel_display_types.h"
+#include "intel_fb.h"
 #include "intel_fbdev_fb.h"
 
 struct intel_framebuffer *intel_fbdev_fb_alloc(struct drm_fb_helper *helper,
                return ERR_PTR(-ENOMEM);
        }
 
-       fb = intel_framebuffer_create(obj, &mode_cmd);
+       fb = intel_framebuffer_create(intel_bo_to_drm_bo(obj), &mode_cmd);
        i915_gem_object_put(obj);
 
        return to_intel_framebuffer(fb);
 
 #include <drm/drm_fb_helper.h>
 
 #include "intel_display_types.h"
+#include "intel_fb.h"
 #include "intel_fbdev_fb.h"
 #include "xe_bo.h"
 #include "xe_ttm_stolen_mgr.h"
                goto err;
        }
 
-       fb = intel_framebuffer_create(obj, &mode_cmd);
+       fb = intel_framebuffer_create(&obj->ttm.base, &mode_cmd);
        if (IS_ERR(fb)) {
                xe_bo_unpin_map_no_vm(obj);
                goto err;