Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/i915/fb: convert intel_fbdev.[ch] and intel_fbdev_fb.[ch] to struct intel_display

Going forward, struct intel_display is the main display device data
pointer. Convert intel_fbdev.[ch] and as much as possible of
intel_fbdev_fb.[ch] to struct intel_display.

Reviewed-by: Chaitanya Kumar Borah <chaitanya.kumar.borah@intel.com>
Link: https://lore.kernel.org/r/49651754f3716041f97984e47c15d331851870a5.1744222449.git.jani.nikula@intel.com
Signed-off-by: Jani Nikula <jani.nikula@intel.com>

+51 -55
+1 -2
drivers/gpu/drm/i915/display/intel_display_driver.c
··· 528 528 529 529 void intel_display_driver_register(struct intel_display *display) 530 530 { 531 - struct drm_i915_private *i915 = to_i915(display->drm); 532 531 struct drm_printer p = drm_dbg_printer(display->drm, DRM_UT_KMS, 533 532 "i915 display info:"); 534 533 ··· 554 555 drm_kms_helper_poll_init(display->drm); 555 556 intel_hpd_poll_disable(display); 556 557 557 - intel_fbdev_setup(i915); 558 + intel_fbdev_setup(display); 558 559 559 560 intel_display_device_info_print(DISPLAY_INFO(display), 560 561 DISPLAY_RUNTIME_INFO(display), &p);
+35 -39
drivers/gpu/drm/i915/display/intel_fbdev.c
··· 47 47 #include <drm/drm_managed.h> 48 48 #include <drm/drm_print.h> 49 49 50 - #include "i915_drv.h" 51 50 #include "i915_vma.h" 52 51 #include "intel_bo.h" 52 + #include "intel_display_core.h" 53 53 #include "intel_display_rpm.h" 54 54 #include "intel_display_types.h" 55 55 #include "intel_fb.h" ··· 66 66 67 67 static struct intel_fbdev *to_intel_fbdev(struct drm_fb_helper *fb_helper) 68 68 { 69 - struct drm_i915_private *i915 = to_i915(fb_helper->client.dev); 69 + struct intel_display *display = to_intel_display(fb_helper->client.dev); 70 70 71 - return i915->display.fbdev.fbdev; 71 + return display->fbdev.fbdev; 72 72 } 73 73 74 74 static struct intel_frontbuffer *to_frontbuffer(struct intel_fbdev *ifbdev) ··· 210 210 int intel_fbdev_driver_fbdev_probe(struct drm_fb_helper *helper, 211 211 struct drm_fb_helper_surface_size *sizes) 212 212 { 213 + struct intel_display *display = to_intel_display(helper->dev); 213 214 struct intel_fbdev *ifbdev = to_intel_fbdev(helper); 214 215 struct intel_framebuffer *fb = ifbdev->fb; 215 - struct drm_device *dev = helper->dev; 216 - struct drm_i915_private *dev_priv = to_i915(dev); 217 - struct intel_display *display = to_intel_display(dev); 218 216 struct ref_tracker *wakeref; 219 217 struct fb_info *info; 220 218 struct i915_vma *vma; ··· 226 228 if (fb && 227 229 (sizes->fb_width > fb->base.width || 228 230 sizes->fb_height > fb->base.height)) { 229 - drm_dbg_kms(&dev_priv->drm, 231 + drm_dbg_kms(display->drm, 230 232 "BIOS fb too small (%dx%d), we require (%dx%d)," 231 233 " releasing it\n", 232 234 fb->base.width, fb->base.height, ··· 234 236 drm_framebuffer_put(&fb->base); 235 237 fb = NULL; 236 238 } 237 - if (!fb || drm_WARN_ON(dev, !intel_fb_bo(&fb->base))) { 238 - drm_dbg_kms(&dev_priv->drm, 239 + if (!fb || drm_WARN_ON(display->drm, !intel_fb_bo(&fb->base))) { 240 + drm_dbg_kms(display->drm, 239 241 "no BIOS fb, allocating a new one\n"); 240 242 fb = intel_fbdev_fb_alloc(helper, sizes); 241 243 if (IS_ERR(fb)) 242 244 return PTR_ERR(fb); 243 245 } else { 244 - drm_dbg_kms(&dev_priv->drm, "re-using BIOS fb\n"); 246 + drm_dbg_kms(display->drm, "re-using BIOS fb\n"); 245 247 prealloc = true; 246 248 sizes->fb_width = fb->base.width; 247 249 sizes->fb_height = fb->base.height; ··· 265 267 266 268 info = drm_fb_helper_alloc_info(helper); 267 269 if (IS_ERR(info)) { 268 - drm_err(&dev_priv->drm, "Failed to allocate fb_info (%pe)\n", info); 270 + drm_err(display->drm, "Failed to allocate fb_info (%pe)\n", info); 269 271 ret = PTR_ERR(info); 270 272 goto out_unpin; 271 273 } ··· 277 279 278 280 obj = intel_fb_bo(&fb->base); 279 281 280 - ret = intel_fbdev_fb_fill_info(dev_priv, info, obj, vma); 282 + ret = intel_fbdev_fb_fill_info(display, info, obj, vma); 281 283 if (ret) 282 284 goto out_unpin; 283 285 284 - drm_fb_helper_fill_info(info, dev->fb_helper, sizes); 286 + drm_fb_helper_fill_info(info, display->drm->fb_helper, sizes); 285 287 286 288 /* If the object is shmemfs backed, it will have given us zeroed pages. 287 289 * If the object is stolen however, it will be full of whatever ··· 292 294 293 295 /* Use default scratch pixmap (info->pixmap.flags = FB_PIXMAP_SYSTEM) */ 294 296 295 - drm_dbg_kms(&dev_priv->drm, "allocated %dx%d fb: 0x%08x\n", 297 + drm_dbg_kms(display->drm, "allocated %dx%d fb: 0x%08x\n", 296 298 fb->base.width, fb->base.height, 297 299 i915_ggtt_offset(vma)); 298 300 ifbdev->fb = fb; ··· 320 322 * Note we only support a single fb shared across pipes for boot (mostly for 321 323 * fbcon), so we just find the biggest and use that. 322 324 */ 323 - static bool intel_fbdev_init_bios(struct drm_device *dev, 325 + static bool intel_fbdev_init_bios(struct intel_display *display, 324 326 struct intel_fbdev *ifbdev) 325 327 { 326 - struct drm_i915_private *i915 = to_i915(dev); 327 328 struct intel_framebuffer *fb = NULL; 328 329 struct intel_crtc *crtc; 329 330 unsigned int max_size = 0; 330 331 331 332 /* Find the largest fb */ 332 - for_each_intel_crtc(dev, crtc) { 333 + for_each_intel_crtc(display->drm, crtc) { 333 334 struct intel_crtc_state *crtc_state = 334 335 to_intel_crtc_state(crtc->base.state); 335 336 struct intel_plane *plane = ··· 338 341 struct drm_gem_object *obj = intel_fb_bo(plane_state->uapi.fb); 339 342 340 343 if (!crtc_state->uapi.active) { 341 - drm_dbg_kms(&i915->drm, 344 + drm_dbg_kms(display->drm, 342 345 "[CRTC:%d:%s] not active, skipping\n", 343 346 crtc->base.base.id, crtc->base.name); 344 347 continue; 345 348 } 346 349 347 350 if (!obj) { 348 - drm_dbg_kms(&i915->drm, 351 + drm_dbg_kms(display->drm, 349 352 "[PLANE:%d:%s] no fb, skipping\n", 350 353 plane->base.base.id, plane->base.name); 351 354 continue; 352 355 } 353 356 354 357 if (obj->size > max_size) { 355 - drm_dbg_kms(&i915->drm, 358 + drm_dbg_kms(display->drm, 356 359 "found possible fb from [PLANE:%d:%s]\n", 357 360 plane->base.base.id, plane->base.name); 358 361 fb = to_intel_framebuffer(plane_state->uapi.fb); ··· 361 364 } 362 365 363 366 if (!fb) { 364 - drm_dbg_kms(&i915->drm, 367 + drm_dbg_kms(display->drm, 365 368 "no active fbs found, not using BIOS config\n"); 366 369 goto out; 367 370 } 368 371 369 372 /* Now make sure all the pipes will fit into it */ 370 - for_each_intel_crtc(dev, crtc) { 373 + for_each_intel_crtc(display->drm, crtc) { 371 374 struct intel_crtc_state *crtc_state = 372 375 to_intel_crtc_state(crtc->base.state); 373 376 struct intel_plane *plane = ··· 375 378 unsigned int cur_size; 376 379 377 380 if (!crtc_state->uapi.active) { 378 - drm_dbg_kms(&i915->drm, 381 + drm_dbg_kms(display->drm, 379 382 "[CRTC:%d:%s] not active, skipping\n", 380 383 crtc->base.base.id, crtc->base.name); 381 384 continue; 382 385 } 383 386 384 - drm_dbg_kms(&i915->drm, "checking [PLANE:%d:%s] for BIOS fb\n", 387 + drm_dbg_kms(display->drm, "checking [PLANE:%d:%s] for BIOS fb\n", 385 388 plane->base.base.id, plane->base.name); 386 389 387 390 /* ··· 392 395 cur_size = crtc_state->uapi.adjusted_mode.crtc_hdisplay; 393 396 cur_size = cur_size * fb->base.format->cpp[0]; 394 397 if (fb->base.pitches[0] < cur_size) { 395 - drm_dbg_kms(&i915->drm, 398 + drm_dbg_kms(display->drm, 396 399 "fb not wide enough for [PLANE:%d:%s] (%d vs %d)\n", 397 400 plane->base.base.id, plane->base.name, 398 401 cur_size, fb->base.pitches[0]); ··· 403 406 cur_size = crtc_state->uapi.adjusted_mode.crtc_vdisplay; 404 407 cur_size = intel_fb_align_height(&fb->base, 0, cur_size); 405 408 cur_size *= fb->base.pitches[0]; 406 - drm_dbg_kms(&i915->drm, 409 + drm_dbg_kms(display->drm, 407 410 "[CRTC:%d:%s] area: %dx%d, bpp: %d, size: %d\n", 408 411 crtc->base.base.id, crtc->base.name, 409 412 crtc_state->uapi.adjusted_mode.crtc_hdisplay, ··· 412 415 cur_size); 413 416 414 417 if (cur_size > max_size) { 415 - drm_dbg_kms(&i915->drm, 418 + drm_dbg_kms(display->drm, 416 419 "fb not big enough for [PLANE:%d:%s] (%d vs %d)\n", 417 420 plane->base.base.id, plane->base.name, 418 421 cur_size, max_size); ··· 420 423 break; 421 424 } 422 425 423 - drm_dbg_kms(&i915->drm, 426 + drm_dbg_kms(display->drm, 424 427 "fb big enough [PLANE:%d:%s] (%d >= %d)\n", 425 428 plane->base.base.id, plane->base.name, 426 429 max_size, cur_size); 427 430 } 428 431 429 432 if (!fb) { 430 - drm_dbg_kms(&i915->drm, 433 + drm_dbg_kms(display->drm, 431 434 "BIOS fb not suitable for all pipes, not using\n"); 432 435 goto out; 433 436 } ··· 437 440 drm_framebuffer_get(&ifbdev->fb->base); 438 441 439 442 /* Final pass to check if any active pipes don't have fbs */ 440 - for_each_intel_crtc(dev, crtc) { 443 + for_each_intel_crtc(display->drm, crtc) { 441 444 struct intel_crtc_state *crtc_state = 442 445 to_intel_crtc_state(crtc->base.state); 443 446 struct intel_plane *plane = ··· 448 451 if (!crtc_state->uapi.active) 449 452 continue; 450 453 451 - drm_WARN(dev, !plane_state->uapi.fb, 454 + drm_WARN(display->drm, !plane_state->uapi.fb, 452 455 "re-used BIOS config but lost an fb on [PLANE:%d:%s]\n", 453 456 plane->base.base.id, plane->base.name); 454 457 } 455 458 456 459 457 - drm_dbg_kms(&i915->drm, "using BIOS fb for initial console\n"); 460 + drm_dbg_kms(display->drm, "using BIOS fb for initial console\n"); 458 461 return true; 459 462 460 463 out: ··· 479 482 } 480 483 } 481 484 482 - void intel_fbdev_setup(struct drm_i915_private *i915) 485 + void intel_fbdev_setup(struct intel_display *display) 483 486 { 484 - struct drm_device *dev = &i915->drm; 485 487 struct intel_fbdev *ifbdev; 486 488 unsigned int preferred_bpp = 0; 487 489 488 - if (!HAS_DISPLAY(i915)) 490 + if (!HAS_DISPLAY(display)) 489 491 return; 490 492 491 - ifbdev = drmm_kzalloc(dev, sizeof(*ifbdev), GFP_KERNEL); 493 + ifbdev = drmm_kzalloc(display->drm, sizeof(*ifbdev), GFP_KERNEL); 492 494 if (!ifbdev) 493 495 return; 494 496 495 - i915->display.fbdev.fbdev = ifbdev; 496 - if (intel_fbdev_init_bios(dev, ifbdev)) 497 + display->fbdev.fbdev = ifbdev; 498 + if (intel_fbdev_init_bios(display, ifbdev)) 497 499 preferred_bpp = intel_fbdev_color_mode(ifbdev->fb->base.format); 498 500 if (!preferred_bpp) 499 501 preferred_bpp = 32; 500 502 501 - drm_client_setup_with_color_mode(dev, preferred_bpp); 503 + drm_client_setup_with_color_mode(display->drm, preferred_bpp); 502 504 } 503 505 504 506 struct intel_framebuffer *intel_fbdev_framebuffer(struct intel_fbdev *fbdev)
+3 -3
drivers/gpu/drm/i915/display/intel_fbdev.h
··· 10 10 11 11 struct drm_fb_helper; 12 12 struct drm_fb_helper_surface_size; 13 - struct drm_i915_private; 13 + struct intel_display; 14 14 struct intel_fbdev; 15 15 struct intel_framebuffer; 16 16 ··· 19 19 struct drm_fb_helper_surface_size *sizes); 20 20 #define INTEL_FBDEV_DRIVER_OPS \ 21 21 .fbdev_probe = intel_fbdev_driver_fbdev_probe 22 - void intel_fbdev_setup(struct drm_i915_private *dev_priv); 22 + void intel_fbdev_setup(struct intel_display *display); 23 23 struct intel_framebuffer *intel_fbdev_framebuffer(struct intel_fbdev *fbdev); 24 24 struct i915_vma *intel_fbdev_vma_pointer(struct intel_fbdev *fbdev); 25 25 26 26 #else 27 27 #define INTEL_FBDEV_DRIVER_OPS \ 28 28 .fbdev_probe = NULL 29 - static inline void intel_fbdev_setup(struct drm_i915_private *dev_priv) 29 + static inline void intel_fbdev_setup(struct intel_display *display) 30 30 { 31 31 } 32 32 static inline struct intel_framebuffer *intel_fbdev_framebuffer(struct intel_fbdev *fbdev)
+7 -6
drivers/gpu/drm/i915/display/intel_fbdev_fb.c
··· 15 15 struct intel_framebuffer *intel_fbdev_fb_alloc(struct drm_fb_helper *helper, 16 16 struct drm_fb_helper_surface_size *sizes) 17 17 { 18 + struct intel_display *display = to_intel_display(helper->dev); 19 + struct drm_i915_private *dev_priv = to_i915(display->drm); 18 20 struct drm_framebuffer *fb; 19 - struct drm_device *dev = helper->dev; 20 - struct drm_i915_private *dev_priv = to_i915(dev); 21 21 struct drm_mode_fb_cmd2 mode_cmd = {}; 22 22 struct drm_i915_gem_object *obj; 23 23 int size; ··· 50 50 * 51 51 * Also skip stolen on MTL as Wa_22018444074 mitigation. 52 52 */ 53 - if (!(IS_METEORLAKE(dev_priv)) && size * 2 < dev_priv->dsm.usable_size) 53 + if (!display->platform.meteorlake && size * 2 < dev_priv->dsm.usable_size) 54 54 obj = i915_gem_object_create_stolen(dev_priv, size); 55 55 if (IS_ERR(obj)) 56 56 obj = i915_gem_object_create_shmem(dev_priv, size); 57 57 } 58 58 59 59 if (IS_ERR(obj)) { 60 - drm_err(&dev_priv->drm, "failed to allocate framebuffer (%pe)\n", obj); 60 + drm_err(display->drm, "failed to allocate framebuffer (%pe)\n", obj); 61 61 return ERR_PTR(-ENOMEM); 62 62 } 63 63 ··· 67 67 return to_intel_framebuffer(fb); 68 68 } 69 69 70 - int intel_fbdev_fb_fill_info(struct drm_i915_private *i915, struct fb_info *info, 70 + int intel_fbdev_fb_fill_info(struct intel_display *display, struct fb_info *info, 71 71 struct drm_gem_object *_obj, struct i915_vma *vma) 72 72 { 73 + struct drm_i915_private *i915 = to_i915(display->drm); 73 74 struct drm_i915_gem_object *obj = to_intel_bo(_obj); 74 75 struct i915_gem_ww_ctx ww; 75 76 void __iomem *vaddr; ··· 102 101 103 102 vaddr = i915_vma_pin_iomap(vma); 104 103 if (IS_ERR(vaddr)) { 105 - drm_err(&i915->drm, 104 + drm_err(display->drm, 106 105 "Failed to remap framebuffer into virtual memory (%pe)\n", vaddr); 107 106 ret = PTR_ERR(vaddr); 108 107 continue;
+2 -2
drivers/gpu/drm/i915/display/intel_fbdev_fb.h
··· 9 9 struct drm_fb_helper; 10 10 struct drm_fb_helper_surface_size; 11 11 struct drm_gem_object; 12 - struct drm_i915_private; 13 12 struct fb_info; 14 13 struct i915_vma; 14 + struct intel_display; 15 15 16 16 struct intel_framebuffer *intel_fbdev_fb_alloc(struct drm_fb_helper *helper, 17 17 struct drm_fb_helper_surface_size *sizes); 18 - int intel_fbdev_fb_fill_info(struct drm_i915_private *i915, struct fb_info *info, 18 + int intel_fbdev_fb_fill_info(struct intel_display *display, struct fb_info *info, 19 19 struct drm_gem_object *obj, struct i915_vma *vma); 20 20 21 21 #endif
+3 -3
drivers/gpu/drm/xe/display/intel_fbdev_fb.c
··· 79 79 return ERR_CAST(fb); 80 80 } 81 81 82 - int intel_fbdev_fb_fill_info(struct drm_i915_private *i915, struct fb_info *info, 83 - struct drm_gem_object *_obj, struct i915_vma *vma) 82 + int intel_fbdev_fb_fill_info(struct intel_display *display, struct fb_info *info, 83 + struct drm_gem_object *_obj, struct i915_vma *vma) 84 84 { 85 85 struct xe_bo *obj = gem_to_xe_bo(_obj); 86 - struct pci_dev *pdev = to_pci_dev(i915->drm.dev); 86 + struct pci_dev *pdev = to_pci_dev(display->drm->dev); 87 87 88 88 if (!(obj->flags & XE_BO_FLAG_SYSTEM)) { 89 89 if (obj->flags & XE_BO_FLAG_STOLEN)