From: Jani Nikula Date: Thu, 18 Sep 2025 08:40:58 +0000 (+0300) Subject: drm/{i915,xe}/fbdev: deduplicate fbdev creation X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=f379035fdf89eaa7e411ab589b3a8845bc2d5481;p=thirdparty%2Fkernel%2Flinux.git drm/{i915,xe}/fbdev: deduplicate fbdev creation With the bo creation helper in place, we can lift intel_framebuffer_create() part to common code. Reviewed-by: Ville Syrjälä Link: https://lore.kernel.org/r/7289deac730a877ab1bfcc467f9d063fdccf3930.1758184771.git.jani.nikula@intel.com Signed-off-by: Jani Nikula --- diff --git a/drivers/gpu/drm/i915/display/intel_fbdev.c b/drivers/gpu/drm/i915/display/intel_fbdev.c index e46c08762b847..4bc9a053ca40a 100644 --- a/drivers/gpu/drm/i915/display/intel_fbdev.c +++ b/drivers/gpu/drm/i915/display/intel_fbdev.c @@ -227,13 +227,38 @@ __intel_fbdev_fb_alloc(struct intel_display *display, struct drm_fb_helper_surface_size *sizes) { struct drm_mode_fb_cmd2 mode_cmd = {}; - struct intel_framebuffer *fb; + struct drm_framebuffer *fb; + struct drm_gem_object *obj; + int size; intel_fbdev_fill_mode_cmd(sizes, &mode_cmd); - fb = intel_fbdev_fb_alloc(display->drm, &mode_cmd); + size = mode_cmd.pitches[0] * mode_cmd.height; + size = PAGE_ALIGN(size); + + obj = intel_fbdev_fb_bo_create(display->drm, size); + if (IS_ERR(obj)) { + fb = ERR_CAST(obj); + goto err; + } + + fb = intel_framebuffer_create(obj, + drm_get_format_info(display->drm, + mode_cmd.pixel_format, + mode_cmd.modifier[0]), + &mode_cmd); + if (IS_ERR(fb)) { + intel_fbdev_fb_bo_destroy(obj); + goto err; + } + + drm_gem_object_put(obj); + + return to_intel_framebuffer(fb); + +err: + return ERR_CAST(fb); - return fb; } int intel_fbdev_driver_fbdev_probe(struct drm_fb_helper *helper, diff --git a/drivers/gpu/drm/i915/display/intel_fbdev_fb.c b/drivers/gpu/drm/i915/display/intel_fbdev_fb.c index a7dab8cd3aa26..c802a4b2bfc7f 100644 --- a/drivers/gpu/drm/i915/display/intel_fbdev_fb.c +++ b/drivers/gpu/drm/i915/display/intel_fbdev_fb.c @@ -10,7 +10,6 @@ #include "i915_drv.h" #include "intel_display_core.h" #include "intel_display_types.h" -#include "intel_fb.h" #include "intel_fbdev_fb.h" struct drm_gem_object *intel_fbdev_fb_bo_create(struct drm_device *drm, int size) @@ -51,39 +50,6 @@ void intel_fbdev_fb_bo_destroy(struct drm_gem_object *obj) drm_gem_object_put(obj); } -struct intel_framebuffer *intel_fbdev_fb_alloc(struct drm_device *drm, - struct drm_mode_fb_cmd2 *mode_cmd) -{ - struct drm_framebuffer *fb; - struct drm_gem_object *obj; - int size; - - size = mode_cmd->pitches[0] * mode_cmd->height; - size = PAGE_ALIGN(size); - - obj = intel_fbdev_fb_bo_create(drm, size); - if (IS_ERR(obj)) { - fb = ERR_CAST(obj); - goto err; - } - - fb = intel_framebuffer_create(obj, - drm_get_format_info(drm, - mode_cmd->pixel_format, - mode_cmd->modifier[0]), - mode_cmd); - if (IS_ERR(fb)) { - intel_fbdev_fb_bo_destroy(obj); - goto err; - } - - drm_gem_object_put(obj); - - return to_intel_framebuffer(fb); -err: - return ERR_CAST(fb); -} - int intel_fbdev_fb_fill_info(struct intel_display *display, struct fb_info *info, struct drm_gem_object *_obj, struct i915_vma *vma) { diff --git a/drivers/gpu/drm/i915/display/intel_fbdev_fb.h b/drivers/gpu/drm/i915/display/intel_fbdev_fb.h index 8b6214b0ad0e4..3b7b59d664b5e 100644 --- a/drivers/gpu/drm/i915/display/intel_fbdev_fb.h +++ b/drivers/gpu/drm/i915/display/intel_fbdev_fb.h @@ -15,8 +15,6 @@ struct intel_display; struct drm_gem_object *intel_fbdev_fb_bo_create(struct drm_device *drm, int size); void intel_fbdev_fb_bo_destroy(struct drm_gem_object *obj); -struct intel_framebuffer *intel_fbdev_fb_alloc(struct drm_device *drm, - struct drm_mode_fb_cmd2 *mode_cmd); int intel_fbdev_fb_fill_info(struct intel_display *display, struct fb_info *info, struct drm_gem_object *obj, struct i915_vma *vma); diff --git a/drivers/gpu/drm/xe/display/intel_fbdev_fb.c b/drivers/gpu/drm/xe/display/intel_fbdev_fb.c index e1043617c3ae6..c23da0dd5336a 100644 --- a/drivers/gpu/drm/xe/display/intel_fbdev_fb.c +++ b/drivers/gpu/drm/xe/display/intel_fbdev_fb.c @@ -7,7 +7,6 @@ #include "intel_display_core.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" @@ -54,40 +53,6 @@ void intel_fbdev_fb_bo_destroy(struct drm_gem_object *obj) xe_bo_unpin_map_no_vm(gem_to_xe_bo(obj)); } -struct intel_framebuffer *intel_fbdev_fb_alloc(struct drm_device *drm, - struct drm_mode_fb_cmd2 *mode_cmd) -{ - struct drm_framebuffer *fb; - struct drm_gem_object *obj; - int size; - - size = mode_cmd->pitches[0] * mode_cmd->height; - size = PAGE_ALIGN(size); - - obj = intel_fbdev_fb_bo_create(drm, size); - if (IS_ERR(obj)) { - fb = ERR_CAST(obj); - goto err; - } - - fb = intel_framebuffer_create(obj, - drm_get_format_info(drm, - mode_cmd->pixel_format, - mode_cmd->modifier[0]), - mode_cmd); - if (IS_ERR(fb)) { - intel_fbdev_fb_bo_destroy(obj); - goto err; - } - - drm_gem_object_put(obj); - - return to_intel_framebuffer(fb); - -err: - return ERR_CAST(fb); -} - int intel_fbdev_fb_fill_info(struct intel_display *display, struct fb_info *info, struct drm_gem_object *_obj, struct i915_vma *vma) {