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

drm/i915/vblank: convert to struct intel_display

Going forward, struct intel_display shall replace struct
drm_i915_private as the main display device data pointer type. Convert
intel_vblank.[ch] to struct intel_display.

Some stragglers are left behind where needed.

Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/40430651a45ddd9e350a1fd7938fe4054492f6ea.1724342644.git.jani.nikula@intel.com
Signed-off-by: Jani Nikula <jani.nikula@intel.com>

+50 -47
+50 -47
drivers/gpu/drm/i915/display/intel_vblank.c
··· 67 67 */ 68 68 u32 i915_get_vblank_counter(struct drm_crtc *crtc) 69 69 { 70 - struct drm_i915_private *dev_priv = to_i915(crtc->dev); 70 + struct intel_display *display = to_intel_display(crtc->dev); 71 71 struct drm_vblank_crtc *vblank = drm_crtc_vblank_crtc(crtc); 72 72 const struct drm_display_mode *mode = &vblank->hwmode; 73 73 enum pipe pipe = to_intel_crtc(crtc)->pipe; ··· 103 103 * we get a low value that's stable across two reads of the high 104 104 * register. 105 105 */ 106 - frame = intel_de_read64_2x32(dev_priv, PIPEFRAMEPIXEL(dev_priv, pipe), 107 - PIPEFRAME(dev_priv, pipe)); 106 + frame = intel_de_read64_2x32(display, PIPEFRAMEPIXEL(display, pipe), 107 + PIPEFRAME(display, pipe)); 108 108 109 109 pixel = frame & PIPE_PIXEL_MASK; 110 110 frame = (frame >> PIPE_FRAME_LOW_SHIFT) & 0xffffff; ··· 119 119 120 120 u32 g4x_get_vblank_counter(struct drm_crtc *crtc) 121 121 { 122 - struct drm_i915_private *dev_priv = to_i915(crtc->dev); 122 + struct intel_display *display = to_intel_display(crtc->dev); 123 123 struct drm_vblank_crtc *vblank = drm_crtc_vblank_crtc(crtc); 124 124 enum pipe pipe = to_intel_crtc(crtc)->pipe; 125 125 126 126 if (!vblank->max_vblank_count) 127 127 return 0; 128 128 129 - return intel_de_read(dev_priv, PIPE_FRMCOUNT_G4X(dev_priv, pipe)); 129 + return intel_de_read(display, PIPE_FRMCOUNT_G4X(display, pipe)); 130 130 } 131 131 132 132 static u32 intel_crtc_scanlines_since_frame_timestamp(struct intel_crtc *crtc) 133 133 { 134 - struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); 134 + struct intel_display *display = to_intel_display(crtc); 135 135 struct drm_vblank_crtc *vblank = drm_crtc_vblank_crtc(&crtc->base); 136 136 const struct drm_display_mode *mode = &vblank->hwmode; 137 137 u32 htotal = mode->crtc_htotal; ··· 150 150 * pipe frame time stamp. The time stamp value 151 151 * is sampled at every start of vertical blank. 152 152 */ 153 - scan_prev_time = intel_de_read_fw(dev_priv, 153 + scan_prev_time = intel_de_read_fw(display, 154 154 PIPE_FRMTMSTMP(crtc->pipe)); 155 155 156 156 /* 157 157 * The TIMESTAMP_CTR register has the current 158 158 * time stamp value. 159 159 */ 160 - scan_curr_time = intel_de_read_fw(dev_priv, IVB_TIMESTAMP_CTR); 160 + scan_curr_time = intel_de_read_fw(display, IVB_TIMESTAMP_CTR); 161 161 162 - scan_post_time = intel_de_read_fw(dev_priv, 162 + scan_post_time = intel_de_read_fw(display, 163 163 PIPE_FRMTMSTMP(crtc->pipe)); 164 164 } while (scan_post_time != scan_prev_time); 165 165 ··· 192 192 193 193 static int intel_crtc_scanline_offset(const struct intel_crtc_state *crtc_state) 194 194 { 195 + struct intel_display *display = to_intel_display(crtc_state); 195 196 struct drm_i915_private *i915 = to_i915(crtc_state->uapi.crtc->dev); 196 197 197 198 /* ··· 221 220 * However if queried just before the start of vblank we'll get an 222 221 * answer that's slightly in the future. 223 222 */ 224 - if (DISPLAY_VER(i915) == 2) 223 + if (DISPLAY_VER(display) == 2) 225 224 return -1; 226 225 else if (HAS_DDI(i915) && intel_crtc_has_type(crtc_state, INTEL_OUTPUT_HDMI)) 227 226 return 2; ··· 235 234 */ 236 235 static int __intel_get_crtc_scanline(struct intel_crtc *crtc) 237 236 { 238 - struct drm_device *dev = crtc->base.dev; 239 - struct drm_i915_private *dev_priv = to_i915(dev); 237 + struct intel_display *display = to_intel_display(crtc); 240 238 struct drm_vblank_crtc *vblank = drm_crtc_vblank_crtc(&crtc->base); 241 239 const struct drm_display_mode *mode = &vblank->hwmode; 242 240 enum pipe pipe = crtc->pipe; ··· 249 249 250 250 vtotal = intel_mode_vtotal(mode); 251 251 252 - position = intel_de_read_fw(dev_priv, PIPEDSL(dev_priv, pipe)) & PIPEDSL_LINE_MASK; 252 + position = intel_de_read_fw(display, PIPEDSL(display, pipe)) & PIPEDSL_LINE_MASK; 253 253 254 254 /* 255 255 * On HSW, the DSL reg (0x70000) appears to return 0 if we ··· 263 263 * problem. We may need to extend this to include other platforms, 264 264 * but so far testing only shows the problem on HSW. 265 265 */ 266 - if (HAS_DDI(dev_priv) && !position) { 266 + if (HAS_DDI(display) && !position) { 267 267 int i, temp; 268 268 269 269 for (i = 0; i < 100; i++) { 270 270 udelay(1); 271 - temp = intel_de_read_fw(dev_priv, 272 - PIPEDSL(dev_priv, pipe)) & PIPEDSL_LINE_MASK; 271 + temp = intel_de_read_fw(display, 272 + PIPEDSL(display, pipe)) & PIPEDSL_LINE_MASK; 273 273 if (temp != position) { 274 274 position = temp; 275 275 break; ··· 304 304 * otherwise they may hang. 305 305 */ 306 306 #ifdef I915 307 - static void intel_vblank_section_enter(struct drm_i915_private *i915) 307 + static void intel_vblank_section_enter(struct intel_display *display) 308 308 __acquires(i915->uncore.lock) 309 309 { 310 + struct drm_i915_private *i915 = to_i915(display->drm); 310 311 spin_lock(&i915->uncore.lock); 311 312 } 312 313 313 - static void intel_vblank_section_exit(struct drm_i915_private *i915) 314 + static void intel_vblank_section_exit(struct intel_display *display) 314 315 __releases(i915->uncore.lock) 315 316 { 317 + struct drm_i915_private *i915 = to_i915(display->drm); 316 318 spin_unlock(&i915->uncore.lock); 317 319 } 318 320 #else 319 - static void intel_vblank_section_enter(struct drm_i915_private *i915) 321 + static void intel_vblank_section_enter(struct intel_display *display) 320 322 { 321 323 } 322 324 323 - static void intel_vblank_section_exit(struct drm_i915_private *i915) 325 + static void intel_vblank_section_exit(struct intel_display *display) 324 326 { 325 327 } 326 328 #endif ··· 333 331 ktime_t *stime, ktime_t *etime, 334 332 const struct drm_display_mode *mode) 335 333 { 336 - struct drm_device *dev = _crtc->dev; 337 - struct drm_i915_private *dev_priv = to_i915(dev); 334 + struct intel_display *display = to_intel_display(_crtc->dev); 335 + struct drm_i915_private *dev_priv = to_i915(display->drm); 338 336 struct intel_crtc *crtc = to_intel_crtc(_crtc); 339 337 enum pipe pipe = crtc->pipe; 340 338 int position; 341 339 int vbl_start, vbl_end, hsync_start, htotal, vtotal; 342 340 unsigned long irqflags; 343 - bool use_scanline_counter = DISPLAY_VER(dev_priv) >= 5 || 344 - IS_G4X(dev_priv) || DISPLAY_VER(dev_priv) == 2 || 341 + bool use_scanline_counter = DISPLAY_VER(display) >= 5 || 342 + IS_G4X(dev_priv) || DISPLAY_VER(display) == 2 || 345 343 crtc->mode_flags & I915_MODE_FLAG_USE_SCANLINE_COUNTER; 346 344 347 - if (drm_WARN_ON(&dev_priv->drm, !mode->crtc_clock)) { 348 - drm_dbg(&dev_priv->drm, 345 + if (drm_WARN_ON(display->drm, !mode->crtc_clock)) { 346 + drm_dbg(display->drm, 349 347 "trying to get scanoutpos for disabled pipe %c\n", 350 348 pipe_name(pipe)); 351 349 return false; ··· 363 361 * preemption disabled, so the following code must not block. 364 362 */ 365 363 local_irq_save(irqflags); 366 - intel_vblank_section_enter(dev_priv); 364 + intel_vblank_section_enter(display); 367 365 368 366 /* preempt_disable_rt() should go right here in PREEMPT_RT patchset. */ 369 367 ··· 395 393 * We can split this into vertical and horizontal 396 394 * scanout position. 397 395 */ 398 - position = (intel_de_read_fw(dev_priv, PIPEFRAMEPIXEL(dev_priv, pipe)) & PIPE_PIXEL_MASK) >> PIPE_PIXEL_SHIFT; 396 + position = (intel_de_read_fw(display, PIPEFRAMEPIXEL(display, pipe)) & PIPE_PIXEL_MASK) >> PIPE_PIXEL_SHIFT; 399 397 400 398 /* convert to pixel counts */ 401 399 vbl_start *= htotal; ··· 431 429 432 430 /* preempt_enable_rt() should go right here in PREEMPT_RT patchset. */ 433 431 434 - intel_vblank_section_exit(dev_priv); 432 + intel_vblank_section_exit(display); 435 433 local_irq_restore(irqflags); 436 434 437 435 /* ··· 466 464 467 465 int intel_get_crtc_scanline(struct intel_crtc *crtc) 468 466 { 469 - struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); 467 + struct intel_display *display = to_intel_display(crtc); 470 468 unsigned long irqflags; 471 469 int position; 472 470 473 471 local_irq_save(irqflags); 474 - intel_vblank_section_enter(dev_priv); 472 + intel_vblank_section_enter(display); 475 473 476 474 position = __intel_get_crtc_scanline(crtc); 477 475 478 - intel_vblank_section_exit(dev_priv); 476 + intel_vblank_section_exit(display); 479 477 local_irq_restore(irqflags); 480 478 481 479 return position; 482 480 } 483 481 484 - static bool pipe_scanline_is_moving(struct drm_i915_private *dev_priv, 482 + static bool pipe_scanline_is_moving(struct intel_display *display, 485 483 enum pipe pipe) 486 484 { 487 - i915_reg_t reg = PIPEDSL(dev_priv, pipe); 485 + i915_reg_t reg = PIPEDSL(display, pipe); 488 486 u32 line1, line2; 489 487 490 - line1 = intel_de_read(dev_priv, reg) & PIPEDSL_LINE_MASK; 488 + line1 = intel_de_read(display, reg) & PIPEDSL_LINE_MASK; 491 489 msleep(5); 492 - line2 = intel_de_read(dev_priv, reg) & PIPEDSL_LINE_MASK; 490 + line2 = intel_de_read(display, reg) & PIPEDSL_LINE_MASK; 493 491 494 492 return line1 != line2; 495 493 } 496 494 497 495 static void wait_for_pipe_scanline_moving(struct intel_crtc *crtc, bool state) 498 496 { 499 - struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); 497 + struct intel_display *display = to_intel_display(crtc); 500 498 enum pipe pipe = crtc->pipe; 501 499 502 500 /* Wait for the display line to settle/start moving */ 503 - if (wait_for(pipe_scanline_is_moving(dev_priv, pipe) == state, 100)) 504 - drm_err(&dev_priv->drm, 501 + if (wait_for(pipe_scanline_is_moving(display, pipe) == state, 100)) 502 + drm_err(display->drm, 505 503 "pipe %c scanline %s wait timed out\n", 506 504 pipe_name(pipe), str_on_off(state)); 507 505 } ··· 519 517 void intel_crtc_update_active_timings(const struct intel_crtc_state *crtc_state, 520 518 bool vrr_enable) 521 519 { 520 + struct intel_display *display = to_intel_display(crtc_state); 522 521 struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc); 523 - struct drm_i915_private *i915 = to_i915(crtc->base.dev); 524 522 u8 mode_flags = crtc_state->mode_flags; 525 523 struct drm_display_mode adjusted_mode; 526 524 int vmax_vblank_start = 0; ··· 529 527 drm_mode_init(&adjusted_mode, &crtc_state->hw.adjusted_mode); 530 528 531 529 if (vrr_enable) { 532 - drm_WARN_ON(&i915->drm, (mode_flags & I915_MODE_FLAG_VRR) == 0); 530 + drm_WARN_ON(display->drm, 531 + (mode_flags & I915_MODE_FLAG_VRR) == 0); 533 532 534 533 adjusted_mode.crtc_vtotal = crtc_state->vrr.vmax; 535 534 adjusted_mode.crtc_vblank_end = crtc_state->vrr.vmax; ··· 552 549 * __intel_get_crtc_scanline()) with vblank_time_lock? 553 550 * Need to audit everything to make sure it's safe. 554 551 */ 555 - spin_lock_irqsave(&i915->drm.vblank_time_lock, irqflags); 556 - intel_vblank_section_enter(i915); 552 + spin_lock_irqsave(&display->drm->vblank_time_lock, irqflags); 553 + intel_vblank_section_enter(display); 557 554 558 555 drm_calc_timestamping_constants(&crtc->base, &adjusted_mode); 559 556 ··· 562 559 crtc->mode_flags = mode_flags; 563 560 564 561 crtc->scanline_offset = intel_crtc_scanline_offset(crtc_state); 565 - intel_vblank_section_exit(i915); 566 - spin_unlock_irqrestore(&i915->drm.vblank_time_lock, irqflags); 562 + intel_vblank_section_exit(display); 563 + spin_unlock_irqrestore(&display->drm->vblank_time_lock, irqflags); 567 564 } 568 565 569 566 int intel_mode_vdisplay(const struct drm_display_mode *mode) ··· 669 666 int intel_vblank_evade(struct intel_vblank_evade_ctx *evade) 670 667 { 671 668 struct intel_crtc *crtc = evade->crtc; 672 - struct drm_i915_private *i915 = to_i915(crtc->base.dev); 669 + struct intel_display *display = to_intel_display(crtc); 673 670 long timeout = msecs_to_jiffies_timeout(1); 674 671 wait_queue_head_t *wq = drm_crtc_vblank_waitqueue(&crtc->base); 675 672 DEFINE_WAIT(wait); ··· 691 688 break; 692 689 693 690 if (!timeout) { 694 - drm_err(&i915->drm, 691 + drm_err(display->drm, 695 692 "Potential atomic update failure on pipe %c\n", 696 693 pipe_name(crtc->pipe)); 697 694 break;