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

drm/i915/hotplug: convert intel_hotplug.[ch] to struct intel_display

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

Reviewed-by: Uma Shankar <uma.shankar@intel.com>
Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Link: https://lore.kernel.org/r/cf382dbfacf1445b26fbe1e7c011e7a3ea6e1594.1742481923.git.jani.nikula@intel.com

+240 -213
+1 -1
drivers/gpu/drm/i915/display/intel_display_debugfs.c
··· 844 844 intel_dmc_debugfs_register(display); 845 845 intel_dp_test_debugfs_register(display); 846 846 intel_fbc_debugfs_register(display); 847 - intel_hpd_debugfs_register(i915); 847 + intel_hpd_debugfs_register(display); 848 848 intel_opregion_debugfs_register(display); 849 849 intel_psr_debugfs_register(display); 850 850 intel_wm_debugfs_register(i915);
+5 -9
drivers/gpu/drm/i915/display/intel_display_driver.c
··· 315 315 */ 316 316 void intel_display_driver_enable_user_access(struct intel_display *display) 317 317 { 318 - struct drm_i915_private *i915 = to_i915(display->drm); 319 - 320 318 set_display_access(display, true, NULL); 321 319 322 - intel_hpd_enable_detection_work(i915); 320 + intel_hpd_enable_detection_work(display); 323 321 } 324 322 325 323 /** ··· 339 341 */ 340 342 void intel_display_driver_disable_user_access(struct intel_display *display) 341 343 { 342 - struct drm_i915_private *i915 = to_i915(display->drm); 343 - 344 - intel_hpd_disable_detection_work(i915); 344 + intel_hpd_disable_detection_work(display); 345 345 346 346 set_display_access(display, false, current); 347 347 } ··· 520 524 intel_overlay_setup(display); 521 525 522 526 /* Only enable hotplug handling once the fbdev is fully set up. */ 523 - intel_hpd_init(i915); 527 + intel_hpd_init(display); 524 528 525 529 skl_watermark_ipc_init(i915); 526 530 ··· 554 558 * fbdev->async_cookie. 555 559 */ 556 560 drm_kms_helper_poll_init(display->drm); 557 - intel_hpd_poll_disable(i915); 561 + intel_hpd_poll_disable(display); 558 562 559 563 intel_fbdev_setup(i915); 560 564 ··· 596 600 * Due to the hpd irq storm handling the hotplug work can re-arm the 597 601 * poll handlers. Hence disable polling after hpd handling is shut down. 598 602 */ 599 - intel_hpd_poll_fini(i915); 603 + intel_hpd_poll_fini(display); 600 604 601 605 intel_unregister_dsm_handler(); 602 606
+3 -3
drivers/gpu/drm/i915/display/intel_display_power_well.c
··· 1236 1236 if (display->power.domains.initializing) 1237 1237 return; 1238 1238 1239 - intel_hpd_init(dev_priv); 1240 - intel_hpd_poll_disable(dev_priv); 1239 + intel_hpd_init(display); 1240 + intel_hpd_poll_disable(display); 1241 1241 1242 1242 /* Re-enable the ADPA, if we have one */ 1243 1243 for_each_intel_encoder(display->drm, encoder) { ··· 1265 1265 1266 1266 /* Prevent us from re-enabling polling on accident in late suspend */ 1267 1267 if (!display->drm->dev->power.is_suspended) 1268 - intel_hpd_poll_enable(dev_priv); 1268 + intel_hpd_poll_enable(display); 1269 1269 } 1270 1270 1271 1271 static void vlv_display_power_well_enable(struct intel_display *display,
+2 -2
drivers/gpu/drm/i915/display/intel_display_reset.c
··· 107 107 intel_display_driver_init_hw(display); 108 108 intel_clock_gating_init(i915); 109 109 intel_cx0_pll_power_save_wa(display); 110 - intel_hpd_init(i915); 110 + intel_hpd_init(display); 111 111 112 112 ret = __intel_display_driver_resume(display, state, ctx); 113 113 if (ret) 114 114 drm_err(display->drm, 115 115 "Restoring old state failed with %i\n", ret); 116 116 117 - intel_hpd_poll_disable(i915); 117 + intel_hpd_poll_disable(display); 118 118 } 119 119 120 120 drm_atomic_state_put(state);
+1 -1
drivers/gpu/drm/i915/display/intel_dp.c
··· 6117 6117 spin_unlock_irq(&i915->irq_lock); 6118 6118 6119 6119 if (need_work) 6120 - intel_hpd_schedule_detection(i915); 6120 + intel_hpd_schedule_detection(display); 6121 6121 } 6122 6122 6123 6123 static const struct drm_connector_funcs intel_dp_connector_funcs = {
+176 -156
drivers/gpu/drm/i915/display/intel_hotplug.c
··· 118 118 119 119 /** 120 120 * intel_hpd_irq_storm_detect - gather stats and detect HPD IRQ storm on a pin 121 - * @dev_priv: private driver data pointer 121 + * @display: display device 122 122 * @pin: the pin to gather stats on 123 123 * @long_hpd: whether the HPD IRQ was long or short 124 124 * ··· 127 127 * responsible for further action. 128 128 * 129 129 * The number of IRQs that are allowed within @HPD_STORM_DETECT_PERIOD is 130 - * stored in @dev_priv->display.hotplug.hpd_storm_threshold which defaults to 130 + * stored in @display->hotplug.hpd_storm_threshold which defaults to 131 131 * @HPD_STORM_DEFAULT_THRESHOLD. Long IRQs count as +10 to this threshold, and 132 132 * short IRQs count as +1. If this threshold is exceeded, it's considered an 133 133 * IRQ storm and the IRQ state is set to @HPD_MARK_DISABLED. 134 134 * 135 135 * By default, most systems will only count long IRQs towards 136 - * &dev_priv->display.hotplug.hpd_storm_threshold. However, some older systems also 136 + * &display->hotplug.hpd_storm_threshold. However, some older systems also 137 137 * suffer from short IRQ storms and must also track these. Because short IRQ 138 138 * storms are naturally caused by sideband interactions with DP MST devices, 139 139 * short IRQ detection is only enabled for systems without DP MST support. ··· 145 145 * 146 146 * Return true if an IRQ storm was detected on @pin. 147 147 */ 148 - static bool intel_hpd_irq_storm_detect(struct drm_i915_private *dev_priv, 148 + static bool intel_hpd_irq_storm_detect(struct intel_display *display, 149 149 enum hpd_pin pin, bool long_hpd) 150 150 { 151 - struct intel_hotplug *hpd = &dev_priv->display.hotplug; 151 + struct intel_hotplug *hpd = &display->hotplug; 152 152 unsigned long start = hpd->stats[pin].last_jiffies; 153 153 unsigned long end = start + msecs_to_jiffies(HPD_STORM_DETECT_PERIOD); 154 154 const int increment = long_hpd ? 10 : 1; ··· 156 156 bool storm = false; 157 157 158 158 if (!threshold || 159 - (!long_hpd && !dev_priv->display.hotplug.hpd_short_storm_enabled)) 159 + (!long_hpd && !display->hotplug.hpd_short_storm_enabled)) 160 160 return false; 161 161 162 162 if (!time_in_range(jiffies, start, end)) { ··· 167 167 hpd->stats[pin].count += increment; 168 168 if (hpd->stats[pin].count > threshold) { 169 169 hpd->stats[pin].state = HPD_MARK_DISABLED; 170 - drm_dbg_kms(&dev_priv->drm, 170 + drm_dbg_kms(display->drm, 171 171 "HPD interrupt storm detected on PIN %d\n", pin); 172 172 storm = true; 173 173 } else { 174 - drm_dbg_kms(&dev_priv->drm, 174 + drm_dbg_kms(display->drm, 175 175 "Received HPD interrupt on PIN %d - cnt: %d\n", 176 176 pin, 177 177 hpd->stats[pin].count); ··· 180 180 return storm; 181 181 } 182 182 183 - static bool detection_work_enabled(struct drm_i915_private *i915) 183 + static bool detection_work_enabled(struct intel_display *display) 184 184 { 185 + struct drm_i915_private *i915 = to_i915(display->drm); 186 + 185 187 lockdep_assert_held(&i915->irq_lock); 186 188 187 - return i915->display.hotplug.detection_work_enabled; 189 + return display->hotplug.detection_work_enabled; 188 190 } 189 191 190 192 static bool 191 - mod_delayed_detection_work(struct drm_i915_private *i915, struct delayed_work *work, int delay) 193 + mod_delayed_detection_work(struct intel_display *display, struct delayed_work *work, int delay) 192 194 { 195 + struct drm_i915_private *i915 = to_i915(display->drm); 196 + 193 197 lockdep_assert_held(&i915->irq_lock); 194 198 195 - if (!detection_work_enabled(i915)) 199 + if (!detection_work_enabled(display)) 196 200 return false; 197 201 198 202 return mod_delayed_work(i915->unordered_wq, work, delay); 199 203 } 200 204 201 205 static bool 202 - queue_delayed_detection_work(struct drm_i915_private *i915, struct delayed_work *work, int delay) 206 + queue_delayed_detection_work(struct intel_display *display, struct delayed_work *work, int delay) 203 207 { 208 + struct drm_i915_private *i915 = to_i915(display->drm); 209 + 204 210 lockdep_assert_held(&i915->irq_lock); 205 211 206 - if (!detection_work_enabled(i915)) 212 + if (!detection_work_enabled(display)) 207 213 return false; 208 214 209 215 return queue_delayed_work(i915->unordered_wq, work, delay); 210 216 } 211 217 212 218 static bool 213 - queue_detection_work(struct drm_i915_private *i915, struct work_struct *work) 219 + queue_detection_work(struct intel_display *display, struct work_struct *work) 214 220 { 221 + struct drm_i915_private *i915 = to_i915(display->drm); 222 + 215 223 lockdep_assert_held(&i915->irq_lock); 216 224 217 - if (!detection_work_enabled(i915)) 225 + if (!detection_work_enabled(display)) 218 226 return false; 219 227 220 228 return queue_work(i915->unordered_wq, work); 221 229 } 222 230 223 231 static void 224 - intel_hpd_irq_storm_switch_to_polling(struct drm_i915_private *dev_priv) 232 + intel_hpd_irq_storm_switch_to_polling(struct intel_display *display) 225 233 { 234 + struct drm_i915_private *dev_priv = to_i915(display->drm); 226 235 struct drm_connector_list_iter conn_iter; 227 236 struct intel_connector *connector; 228 237 bool hpd_disabled = false; 229 238 230 239 lockdep_assert_held(&dev_priv->irq_lock); 231 240 232 - drm_connector_list_iter_begin(&dev_priv->drm, &conn_iter); 241 + drm_connector_list_iter_begin(display->drm, &conn_iter); 233 242 for_each_intel_connector_iter(connector, &conn_iter) { 234 243 enum hpd_pin pin; 235 244 ··· 247 238 248 239 pin = intel_connector_hpd_pin(connector); 249 240 if (pin == HPD_NONE || 250 - dev_priv->display.hotplug.stats[pin].state != HPD_MARK_DISABLED) 241 + display->hotplug.stats[pin].state != HPD_MARK_DISABLED) 251 242 continue; 252 243 253 - drm_info(&dev_priv->drm, 244 + drm_info(display->drm, 254 245 "HPD interrupt storm detected on connector %s: " 255 246 "switching from hotplug detection to polling\n", 256 247 connector->base.name); 257 248 258 - dev_priv->display.hotplug.stats[pin].state = HPD_DISABLED; 249 + display->hotplug.stats[pin].state = HPD_DISABLED; 259 250 connector->base.polled = DRM_CONNECTOR_POLL_CONNECT | 260 251 DRM_CONNECTOR_POLL_DISCONNECT; 261 252 hpd_disabled = true; ··· 264 255 265 256 /* Enable polling and queue hotplug re-enabling. */ 266 257 if (hpd_disabled) { 267 - drm_kms_helper_poll_reschedule(&dev_priv->drm); 268 - mod_delayed_detection_work(dev_priv, 269 - &dev_priv->display.hotplug.reenable_work, 258 + drm_kms_helper_poll_reschedule(display->drm); 259 + mod_delayed_detection_work(display, 260 + &display->hotplug.reenable_work, 270 261 msecs_to_jiffies(HPD_STORM_REENABLE_DELAY)); 271 262 } 272 263 } 273 264 274 265 static void intel_hpd_irq_storm_reenable_work(struct work_struct *work) 275 266 { 276 - struct drm_i915_private *dev_priv = 277 - container_of(work, typeof(*dev_priv), 278 - display.hotplug.reenable_work.work); 267 + struct intel_display *display = 268 + container_of(work, typeof(*display), hotplug.reenable_work.work); 269 + struct drm_i915_private *dev_priv = to_i915(display->drm); 279 270 struct drm_connector_list_iter conn_iter; 280 271 struct intel_connector *connector; 281 272 intel_wakeref_t wakeref; ··· 285 276 286 277 spin_lock_irq(&dev_priv->irq_lock); 287 278 288 - drm_connector_list_iter_begin(&dev_priv->drm, &conn_iter); 279 + drm_connector_list_iter_begin(display->drm, &conn_iter); 289 280 for_each_intel_connector_iter(connector, &conn_iter) { 290 281 pin = intel_connector_hpd_pin(connector); 291 282 if (pin == HPD_NONE || 292 - dev_priv->display.hotplug.stats[pin].state != HPD_DISABLED) 283 + display->hotplug.stats[pin].state != HPD_DISABLED) 293 284 continue; 294 285 295 286 if (connector->base.polled != connector->polled) 296 - drm_dbg(&dev_priv->drm, 287 + drm_dbg(display->drm, 297 288 "Reenabling HPD on connector %s\n", 298 289 connector->base.name); 299 290 connector->base.polled = connector->polled; ··· 301 292 drm_connector_list_iter_end(&conn_iter); 302 293 303 294 for_each_hpd_pin(pin) { 304 - if (dev_priv->display.hotplug.stats[pin].state == HPD_DISABLED) 305 - dev_priv->display.hotplug.stats[pin].state = HPD_ENABLED; 295 + if (display->hotplug.stats[pin].state == HPD_DISABLED) 296 + display->hotplug.stats[pin].state = HPD_ENABLED; 306 297 } 307 298 308 299 intel_hpd_irq_setup(dev_priv); ··· 416 407 417 408 spin_unlock_irq(&dev_priv->irq_lock); 418 409 419 - for_each_intel_encoder(&dev_priv->drm, encoder) { 410 + for_each_intel_encoder(display->drm, encoder) { 420 411 struct intel_digital_port *dig_port; 421 412 enum hpd_pin pin = encoder->hpd_pin; 422 413 bool long_hpd, short_hpd; ··· 442 433 443 434 if (old_bits) { 444 435 spin_lock_irq(&dev_priv->irq_lock); 445 - dev_priv->display.hotplug.event_bits |= old_bits; 446 - queue_delayed_detection_work(dev_priv, 447 - &dev_priv->display.hotplug.hotplug_work, 0); 436 + display->hotplug.event_bits |= old_bits; 437 + queue_delayed_detection_work(display, 438 + &display->hotplug.hotplug_work, 0); 448 439 spin_unlock_irq(&dev_priv->irq_lock); 449 440 } 450 441 } ··· 490 481 int changed_connectors = 0; 491 482 u32 blocked_hpd_pin_mask; 492 483 493 - mutex_lock(&dev_priv->drm.mode_config.mutex); 494 - drm_dbg_kms(&dev_priv->drm, "running encoder hotplug functions\n"); 484 + mutex_lock(&display->drm->mode_config.mutex); 485 + drm_dbg_kms(display->drm, "running encoder hotplug functions\n"); 495 486 496 487 spin_lock_irq(&dev_priv->irq_lock); 497 488 ··· 502 493 hotplug->retry_bits &= ~hpd_retry_bits; 503 494 504 495 /* Enable polling for connectors which had HPD IRQ storms */ 505 - intel_hpd_irq_storm_switch_to_polling(dev_priv); 496 + intel_hpd_irq_storm_switch_to_polling(display); 506 497 507 498 spin_unlock_irq(&dev_priv->irq_lock); 508 499 509 500 /* Skip calling encode hotplug handlers if ignore long HPD set*/ 510 - if (dev_priv->display.hotplug.ignore_long_hpd) { 511 - drm_dbg_kms(&dev_priv->drm, "Ignore HPD flag on - skip encoder hotplug handlers\n"); 512 - mutex_unlock(&dev_priv->drm.mode_config.mutex); 501 + if (display->hotplug.ignore_long_hpd) { 502 + drm_dbg_kms(display->drm, "Ignore HPD flag on - skip encoder hotplug handlers\n"); 503 + mutex_unlock(&display->drm->mode_config.mutex); 513 504 return; 514 505 } 515 506 516 - drm_connector_list_iter_begin(&dev_priv->drm, &conn_iter); 507 + drm_connector_list_iter_begin(display->drm, &conn_iter); 517 508 for_each_intel_connector_iter(connector, &conn_iter) { 518 509 enum hpd_pin pin; 519 510 u32 hpd_bit; ··· 532 523 else 533 524 connector->hotplug_retries++; 534 525 535 - drm_dbg_kms(&dev_priv->drm, 526 + drm_dbg_kms(display->drm, 536 527 "Connector %s (pin %i) received hotplug event. (retry %d)\n", 537 528 connector->base.name, pin, 538 529 connector->hotplug_retries); ··· 555 546 } 556 547 } 557 548 drm_connector_list_iter_end(&conn_iter); 558 - mutex_unlock(&dev_priv->drm.mode_config.mutex); 549 + mutex_unlock(&display->drm->mode_config.mutex); 559 550 560 551 if (changed_connectors == 1) 561 552 drm_kms_helper_connector_hotplug_event(first_changed_connector); 562 553 else if (changed_connectors > 0) 563 - drm_kms_helper_hotplug_event(&dev_priv->drm); 554 + drm_kms_helper_hotplug_event(display->drm); 564 555 565 556 if (first_changed_connector) 566 557 drm_connector_put(first_changed_connector); ··· 569 560 retry &= ~changed; 570 561 if (retry) { 571 562 spin_lock_irq(&dev_priv->irq_lock); 572 - dev_priv->display.hotplug.retry_bits |= retry; 563 + display->hotplug.retry_bits |= retry; 573 564 574 - mod_delayed_detection_work(dev_priv, 575 - &dev_priv->display.hotplug.hotplug_work, 565 + mod_delayed_detection_work(display, 566 + &display->hotplug.hotplug_work, 576 567 msecs_to_jiffies(HPD_RETRY_DELAY)); 577 568 spin_unlock_irq(&dev_priv->irq_lock); 578 569 } ··· 581 572 582 573 /** 583 574 * intel_hpd_irq_handler - main hotplug irq handler 584 - * @dev_priv: drm_i915_private 575 + * @display: display device 585 576 * @pin_mask: a mask of hpd pins that have triggered the irq 586 577 * @long_mask: a mask of hpd pins that may be long hpd pulses 587 578 * ··· 595 586 * Here, we do hotplug irq storm detection and mitigation, and pass further 596 587 * processing to appropriate bottom halves. 597 588 */ 598 - void intel_hpd_irq_handler(struct drm_i915_private *dev_priv, 589 + void intel_hpd_irq_handler(struct intel_display *display, 599 590 u32 pin_mask, u32 long_mask) 600 591 { 601 - struct intel_display *display = to_intel_display(&dev_priv->drm); 592 + struct drm_i915_private *dev_priv = to_i915(display->drm); 602 593 struct intel_encoder *encoder; 603 594 bool storm_detected = false; 604 595 bool queue_dig = false, queue_hp = false; ··· 617 608 * as each pin may have up to two encoders (HDMI and DP) and 618 609 * only the one of them (DP) will have ->hpd_pulse(). 619 610 */ 620 - for_each_intel_encoder(&dev_priv->drm, encoder) { 611 + for_each_intel_encoder(display->drm, encoder) { 621 612 bool long_hpd; 622 613 623 614 pin = encoder->hpd_pin; ··· 629 620 630 621 long_hpd = long_mask & BIT(pin); 631 622 632 - drm_dbg(&dev_priv->drm, 623 + drm_dbg(display->drm, 633 624 "digital hpd on [ENCODER:%d:%s] - %s\n", 634 625 encoder->base.base.id, encoder->base.name, 635 626 long_hpd ? "long" : "short"); ··· 639 630 640 631 if (long_hpd) { 641 632 long_hpd_pulse_mask |= BIT(pin); 642 - dev_priv->display.hotplug.long_hpd_pin_mask |= BIT(pin); 633 + display->hotplug.long_hpd_pin_mask |= BIT(pin); 643 634 } else { 644 635 short_hpd_pulse_mask |= BIT(pin); 645 - dev_priv->display.hotplug.short_hpd_pin_mask |= BIT(pin); 636 + display->hotplug.short_hpd_pin_mask |= BIT(pin); 646 637 } 647 638 } 648 639 ··· 653 644 if (!(BIT(pin) & pin_mask)) 654 645 continue; 655 646 656 - if (dev_priv->display.hotplug.stats[pin].state == HPD_DISABLED) { 647 + if (display->hotplug.stats[pin].state == HPD_DISABLED) { 657 648 /* 658 649 * On GMCH platforms the interrupt mask bits only 659 650 * prevent irq generation, not the setting of the 660 651 * hotplug bits itself. So only WARN about unexpected 661 652 * interrupts on saner platforms. 662 653 */ 663 - drm_WARN_ONCE(&dev_priv->drm, !HAS_GMCH(dev_priv), 654 + drm_WARN_ONCE(display->drm, !HAS_GMCH(display), 664 655 "Received HPD interrupt on pin %d although disabled\n", 665 656 pin); 666 657 continue; 667 658 } 668 659 669 - if (dev_priv->display.hotplug.stats[pin].state != HPD_ENABLED) 660 + if (display->hotplug.stats[pin].state != HPD_ENABLED) 670 661 continue; 671 662 672 663 /* ··· 677 668 if (((short_hpd_pulse_mask | long_hpd_pulse_mask) & BIT(pin))) { 678 669 long_hpd = long_hpd_pulse_mask & BIT(pin); 679 670 } else { 680 - dev_priv->display.hotplug.event_bits |= BIT(pin); 671 + display->hotplug.event_bits |= BIT(pin); 681 672 long_hpd = true; 682 673 683 674 if (!hpd_pin_is_blocked(display, pin)) 684 675 queue_hp = true; 685 676 } 686 677 687 - if (intel_hpd_irq_storm_detect(dev_priv, pin, long_hpd)) { 688 - dev_priv->display.hotplug.event_bits &= ~BIT(pin); 678 + if (intel_hpd_irq_storm_detect(display, pin, long_hpd)) { 679 + display->hotplug.event_bits &= ~BIT(pin); 689 680 storm_detected = true; 690 681 queue_hp = true; 691 682 } ··· 705 696 * deadlock. 706 697 */ 707 698 if (queue_dig) 708 - queue_work(dev_priv->display.hotplug.dp_wq, &dev_priv->display.hotplug.dig_port_work); 699 + queue_work(display->hotplug.dp_wq, &display->hotplug.dig_port_work); 709 700 if (queue_hp) 710 - queue_delayed_detection_work(dev_priv, 711 - &dev_priv->display.hotplug.hotplug_work, 0); 701 + queue_delayed_detection_work(display, 702 + &display->hotplug.hotplug_work, 0); 712 703 713 704 spin_unlock(&dev_priv->irq_lock); 714 705 } 715 706 716 707 /** 717 708 * intel_hpd_init - initializes and enables hpd support 718 - * @dev_priv: i915 device instance 709 + * @display: display device instance 719 710 * 720 711 * This function enables the hotplug support. It requires that interrupts have 721 712 * already been enabled with intel_irq_init_hw(). From this point on hotplug and ··· 727 718 * 728 719 * Also see: intel_hpd_poll_enable() and intel_hpd_poll_disable(). 729 720 */ 730 - void intel_hpd_init(struct drm_i915_private *dev_priv) 721 + void intel_hpd_init(struct intel_display *display) 731 722 { 723 + struct drm_i915_private *dev_priv = to_i915(display->drm); 732 724 int i; 733 725 734 - if (!HAS_DISPLAY(dev_priv)) 726 + if (!HAS_DISPLAY(display)) 735 727 return; 736 728 737 729 for_each_hpd_pin(i) { 738 - dev_priv->display.hotplug.stats[i].count = 0; 739 - dev_priv->display.hotplug.stats[i].state = HPD_ENABLED; 730 + display->hotplug.stats[i].count = 0; 731 + display->hotplug.stats[i].state = HPD_ENABLED; 740 732 } 741 733 742 734 /* ··· 749 739 spin_unlock_irq(&dev_priv->irq_lock); 750 740 } 751 741 752 - static void i915_hpd_poll_detect_connectors(struct drm_i915_private *i915) 742 + static void i915_hpd_poll_detect_connectors(struct intel_display *display) 753 743 { 754 744 struct drm_connector_list_iter conn_iter; 755 745 struct intel_connector *connector; 756 746 struct intel_connector *first_changed_connector = NULL; 757 747 int changed = 0; 758 748 759 - mutex_lock(&i915->drm.mode_config.mutex); 749 + mutex_lock(&display->drm->mode_config.mutex); 760 750 761 - if (!i915->drm.mode_config.poll_enabled) 751 + if (!display->drm->mode_config.poll_enabled) 762 752 goto out; 763 753 764 - drm_connector_list_iter_begin(&i915->drm, &conn_iter); 754 + drm_connector_list_iter_begin(display->drm, &conn_iter); 765 755 for_each_intel_connector_iter(connector, &conn_iter) { 766 756 if (!(connector->base.polled & DRM_CONNECTOR_POLL_HPD)) 767 757 continue; ··· 779 769 drm_connector_list_iter_end(&conn_iter); 780 770 781 771 out: 782 - mutex_unlock(&i915->drm.mode_config.mutex); 772 + mutex_unlock(&display->drm->mode_config.mutex); 783 773 784 774 if (!changed) 785 775 return; ··· 787 777 if (changed == 1) 788 778 drm_kms_helper_connector_hotplug_event(&first_changed_connector->base); 789 779 else 790 - drm_kms_helper_hotplug_event(&i915->drm); 780 + drm_kms_helper_hotplug_event(display->drm); 791 781 792 782 drm_connector_put(&first_changed_connector->base); 793 783 } 794 784 795 785 static void i915_hpd_poll_init_work(struct work_struct *work) 796 786 { 797 - struct drm_i915_private *dev_priv = 798 - container_of(work, struct drm_i915_private, 799 - display.hotplug.poll_init_work); 800 - struct intel_display *display = &dev_priv->display; 787 + struct intel_display *display = 788 + container_of(work, typeof(*display), hotplug.poll_init_work); 789 + struct drm_i915_private *dev_priv = to_i915(display->drm); 801 790 struct drm_connector_list_iter conn_iter; 802 791 struct intel_connector *connector; 803 792 intel_wakeref_t wakeref; 804 793 bool enabled; 805 794 806 - mutex_lock(&dev_priv->drm.mode_config.mutex); 795 + mutex_lock(&display->drm->mode_config.mutex); 807 796 808 - enabled = READ_ONCE(dev_priv->display.hotplug.poll_enabled); 797 + enabled = READ_ONCE(display->hotplug.poll_enabled); 809 798 /* 810 799 * Prevent taking a power reference from this sequence of 811 800 * i915_hpd_poll_init_work() -> drm_helper_hpd_irq_event() -> ··· 814 805 if (!enabled) { 815 806 wakeref = intel_display_power_get(display, 816 807 POWER_DOMAIN_DISPLAY_CORE); 817 - drm_WARN_ON(&dev_priv->drm, 818 - READ_ONCE(dev_priv->display.hotplug.poll_enabled)); 819 - cancel_work(&dev_priv->display.hotplug.poll_init_work); 808 + drm_WARN_ON(display->drm, 809 + READ_ONCE(display->hotplug.poll_enabled)); 810 + cancel_work(&display->hotplug.poll_init_work); 820 811 } 821 812 822 813 spin_lock_irq(&dev_priv->irq_lock); 823 814 824 - drm_connector_list_iter_begin(&dev_priv->drm, &conn_iter); 815 + drm_connector_list_iter_begin(display->drm, &conn_iter); 825 816 for_each_intel_connector_iter(connector, &conn_iter) { 826 817 enum hpd_pin pin; 827 818 ··· 829 820 if (pin == HPD_NONE) 830 821 continue; 831 822 832 - if (dev_priv->display.hotplug.stats[pin].state == HPD_DISABLED) 823 + if (display->hotplug.stats[pin].state == HPD_DISABLED) 833 824 continue; 834 825 835 826 connector->base.polled = connector->polled; ··· 843 834 spin_unlock_irq(&dev_priv->irq_lock); 844 835 845 836 if (enabled) 846 - drm_kms_helper_poll_reschedule(&dev_priv->drm); 837 + drm_kms_helper_poll_reschedule(display->drm); 847 838 848 - mutex_unlock(&dev_priv->drm.mode_config.mutex); 839 + mutex_unlock(&display->drm->mode_config.mutex); 849 840 850 841 /* 851 842 * We might have missed any hotplugs that happened while we were 852 843 * in the middle of disabling polling 853 844 */ 854 845 if (!enabled) { 855 - i915_hpd_poll_detect_connectors(dev_priv); 846 + i915_hpd_poll_detect_connectors(display); 856 847 857 848 intel_display_power_put(display, 858 849 POWER_DOMAIN_DISPLAY_CORE, ··· 862 853 863 854 /** 864 855 * intel_hpd_poll_enable - enable polling for connectors with hpd 865 - * @dev_priv: i915 device instance 856 + * @display: display device instance 866 857 * 867 858 * This function enables polling for all connectors which support HPD. 868 859 * Under certain conditions HPD may not be functional. On most Intel GPUs, ··· 876 867 * 877 868 * Also see: intel_hpd_init() and intel_hpd_poll_disable(). 878 869 */ 879 - void intel_hpd_poll_enable(struct drm_i915_private *dev_priv) 870 + void intel_hpd_poll_enable(struct intel_display *display) 880 871 { 881 - struct intel_display *display = &dev_priv->display; 872 + struct drm_i915_private *dev_priv = to_i915(display->drm); 882 873 883 - if (!HAS_DISPLAY(dev_priv) || 884 - !intel_display_device_enabled(display)) 874 + if (!HAS_DISPLAY(display) || !intel_display_device_enabled(display)) 885 875 return; 886 876 887 - WRITE_ONCE(dev_priv->display.hotplug.poll_enabled, true); 877 + WRITE_ONCE(display->hotplug.poll_enabled, true); 888 878 889 879 /* 890 880 * We might already be holding dev->mode_config.mutex, so do this in a ··· 892 884 * this worker anyway 893 885 */ 894 886 spin_lock_irq(&dev_priv->irq_lock); 895 - queue_detection_work(dev_priv, 896 - &dev_priv->display.hotplug.poll_init_work); 887 + queue_detection_work(display, 888 + &display->hotplug.poll_init_work); 897 889 spin_unlock_irq(&dev_priv->irq_lock); 898 890 } 899 891 900 892 /** 901 893 * intel_hpd_poll_disable - disable polling for connectors with hpd 902 - * @dev_priv: i915 device instance 894 + * @display: display device instance 903 895 * 904 896 * This function disables polling for all connectors which support HPD. 905 897 * Under certain conditions HPD may not be functional. On most Intel GPUs, ··· 916 908 * 917 909 * Also see: intel_hpd_init() and intel_hpd_poll_enable(). 918 910 */ 919 - void intel_hpd_poll_disable(struct drm_i915_private *dev_priv) 911 + void intel_hpd_poll_disable(struct intel_display *display) 920 912 { 921 - if (!HAS_DISPLAY(dev_priv)) 913 + struct drm_i915_private *dev_priv = to_i915(display->drm); 914 + 915 + if (!HAS_DISPLAY(display)) 922 916 return; 923 917 924 - WRITE_ONCE(dev_priv->display.hotplug.poll_enabled, false); 918 + WRITE_ONCE(display->hotplug.poll_enabled, false); 925 919 926 920 spin_lock_irq(&dev_priv->irq_lock); 927 - queue_detection_work(dev_priv, 928 - &dev_priv->display.hotplug.poll_init_work); 921 + queue_detection_work(display, 922 + &display->hotplug.poll_init_work); 929 923 spin_unlock_irq(&dev_priv->irq_lock); 930 924 } 931 925 932 - void intel_hpd_poll_fini(struct drm_i915_private *i915) 926 + void intel_hpd_poll_fini(struct intel_display *display) 933 927 { 934 928 struct intel_connector *connector; 935 929 struct drm_connector_list_iter conn_iter; 936 930 937 931 /* Kill all the work that may have been queued by hpd. */ 938 - drm_connector_list_iter_begin(&i915->drm, &conn_iter); 932 + drm_connector_list_iter_begin(display->drm, &conn_iter); 939 933 for_each_intel_connector_iter(connector, &conn_iter) { 940 934 intel_connector_cancel_modeset_retry_work(connector); 941 935 intel_hdcp_cancel_works(connector); ··· 945 935 drm_connector_list_iter_end(&conn_iter); 946 936 } 947 937 948 - void intel_hpd_init_early(struct drm_i915_private *i915) 938 + void intel_hpd_init_early(struct intel_display *display) 949 939 { 950 - INIT_DELAYED_WORK(&i915->display.hotplug.hotplug_work, 940 + INIT_DELAYED_WORK(&display->hotplug.hotplug_work, 951 941 i915_hotplug_work_func); 952 - INIT_WORK(&i915->display.hotplug.dig_port_work, i915_digport_work_func); 953 - INIT_WORK(&i915->display.hotplug.poll_init_work, i915_hpd_poll_init_work); 954 - INIT_DELAYED_WORK(&i915->display.hotplug.reenable_work, 942 + INIT_WORK(&display->hotplug.dig_port_work, i915_digport_work_func); 943 + INIT_WORK(&display->hotplug.poll_init_work, i915_hpd_poll_init_work); 944 + INIT_DELAYED_WORK(&display->hotplug.reenable_work, 955 945 intel_hpd_irq_storm_reenable_work); 956 946 957 - i915->display.hotplug.hpd_storm_threshold = HPD_STORM_DEFAULT_THRESHOLD; 947 + display->hotplug.hpd_storm_threshold = HPD_STORM_DEFAULT_THRESHOLD; 958 948 /* If we have MST support, we want to avoid doing short HPD IRQ storm 959 949 * detection, as short HPD storms will occur as a natural part of 960 950 * sideband messaging with MST. 961 951 * On older platforms however, IRQ storms can occur with both long and 962 952 * short pulses, as seen on some G4x systems. 963 953 */ 964 - i915->display.hotplug.hpd_short_storm_enabled = !HAS_DP_MST(i915); 954 + display->hotplug.hpd_short_storm_enabled = !HAS_DP_MST(display); 965 955 } 966 956 967 - static bool cancel_all_detection_work(struct drm_i915_private *i915) 957 + static bool cancel_all_detection_work(struct intel_display *display) 968 958 { 969 959 bool was_pending = false; 970 960 971 - if (cancel_delayed_work_sync(&i915->display.hotplug.hotplug_work)) 961 + if (cancel_delayed_work_sync(&display->hotplug.hotplug_work)) 972 962 was_pending = true; 973 - if (cancel_work_sync(&i915->display.hotplug.poll_init_work)) 963 + if (cancel_work_sync(&display->hotplug.poll_init_work)) 974 964 was_pending = true; 975 - if (cancel_delayed_work_sync(&i915->display.hotplug.reenable_work)) 965 + if (cancel_delayed_work_sync(&display->hotplug.reenable_work)) 976 966 was_pending = true; 977 967 978 968 return was_pending; 979 969 } 980 970 981 - void intel_hpd_cancel_work(struct drm_i915_private *dev_priv) 971 + void intel_hpd_cancel_work(struct intel_display *display) 982 972 { 983 - struct intel_display *display = to_intel_display(&dev_priv->drm); 973 + struct drm_i915_private *dev_priv = to_i915(display->drm); 984 974 985 - if (!HAS_DISPLAY(dev_priv)) 975 + if (!HAS_DISPLAY(display)) 986 976 return; 987 977 988 978 spin_lock_irq(&dev_priv->irq_lock); 989 979 990 980 drm_WARN_ON(display->drm, get_blocked_hpd_pin_mask(display)); 991 981 992 - dev_priv->display.hotplug.long_hpd_pin_mask = 0; 993 - dev_priv->display.hotplug.short_hpd_pin_mask = 0; 994 - dev_priv->display.hotplug.event_bits = 0; 995 - dev_priv->display.hotplug.retry_bits = 0; 982 + display->hotplug.long_hpd_pin_mask = 0; 983 + display->hotplug.short_hpd_pin_mask = 0; 984 + display->hotplug.event_bits = 0; 985 + display->hotplug.retry_bits = 0; 996 986 997 987 spin_unlock_irq(&dev_priv->irq_lock); 998 988 999 - cancel_work_sync(&dev_priv->display.hotplug.dig_port_work); 989 + cancel_work_sync(&display->hotplug.dig_port_work); 1000 990 1001 991 /* 1002 992 * All other work triggered by hotplug events should be canceled by 1003 993 * now. 1004 994 */ 1005 - if (cancel_all_detection_work(dev_priv)) 1006 - drm_dbg_kms(&dev_priv->drm, "Hotplug detection work still active\n"); 995 + if (cancel_all_detection_work(display)) 996 + drm_dbg_kms(display->drm, "Hotplug detection work still active\n"); 1007 997 } 1008 998 1009 - static void queue_work_for_missed_irqs(struct drm_i915_private *i915) 999 + static void queue_work_for_missed_irqs(struct intel_display *display) 1010 1000 { 1011 - struct intel_display *display = to_intel_display(&i915->drm); 1001 + struct drm_i915_private *i915 = to_i915(display->drm); 1012 1002 struct intel_hotplug *hotplug = &display->hotplug; 1013 1003 bool queue_hp_work = false; 1014 1004 u32 blocked_hpd_pin_mask; ··· 1021 1011 queue_hp_work = true; 1022 1012 1023 1013 for_each_hpd_pin(pin) { 1024 - switch (i915->display.hotplug.stats[pin].state) { 1014 + switch (display->hotplug.stats[pin].state) { 1025 1015 case HPD_MARK_DISABLED: 1026 1016 queue_hp_work = true; 1027 1017 break; ··· 1029 1019 case HPD_ENABLED: 1030 1020 break; 1031 1021 default: 1032 - MISSING_CASE(i915->display.hotplug.stats[pin].state); 1022 + MISSING_CASE(display->hotplug.stats[pin].state); 1033 1023 } 1034 1024 } 1035 1025 ··· 1037 1027 queue_work(hotplug->dp_wq, &hotplug->dig_port_work); 1038 1028 1039 1029 if (queue_hp_work) 1040 - queue_delayed_detection_work(i915, &i915->display.hotplug.hotplug_work, 0); 1030 + queue_delayed_detection_work(display, &display->hotplug.hotplug_work, 0); 1041 1031 } 1042 1032 1043 1033 static bool block_hpd_pin(struct intel_display *display, enum hpd_pin pin) ··· 1131 1121 spin_lock_irq(&i915->irq_lock); 1132 1122 1133 1123 if (unblock_hpd_pin(display, encoder->hpd_pin)) 1134 - queue_work_for_missed_irqs(i915); 1124 + queue_work_for_missed_irqs(display); 1135 1125 1136 1126 spin_unlock_irq(&i915->irq_lock); 1137 1127 } ··· 1166 1156 spin_unlock_irq(&i915->irq_lock); 1167 1157 } 1168 1158 1169 - void intel_hpd_enable_detection_work(struct drm_i915_private *i915) 1159 + void intel_hpd_enable_detection_work(struct intel_display *display) 1170 1160 { 1161 + struct drm_i915_private *i915 = to_i915(display->drm); 1162 + 1171 1163 spin_lock_irq(&i915->irq_lock); 1172 - i915->display.hotplug.detection_work_enabled = true; 1173 - queue_work_for_missed_irqs(i915); 1164 + display->hotplug.detection_work_enabled = true; 1165 + queue_work_for_missed_irqs(display); 1174 1166 spin_unlock_irq(&i915->irq_lock); 1175 1167 } 1176 1168 1177 - void intel_hpd_disable_detection_work(struct drm_i915_private *i915) 1169 + void intel_hpd_disable_detection_work(struct intel_display *display) 1178 1170 { 1171 + struct drm_i915_private *i915 = to_i915(display->drm); 1172 + 1179 1173 spin_lock_irq(&i915->irq_lock); 1180 - i915->display.hotplug.detection_work_enabled = false; 1174 + display->hotplug.detection_work_enabled = false; 1181 1175 spin_unlock_irq(&i915->irq_lock); 1182 1176 1183 - cancel_all_detection_work(i915); 1177 + cancel_all_detection_work(display); 1184 1178 } 1185 1179 1186 - bool intel_hpd_schedule_detection(struct drm_i915_private *i915) 1180 + bool intel_hpd_schedule_detection(struct intel_display *display) 1187 1181 { 1182 + struct drm_i915_private *i915 = to_i915(display->drm); 1188 1183 unsigned long flags; 1189 1184 bool ret; 1190 1185 1191 1186 spin_lock_irqsave(&i915->irq_lock, flags); 1192 - ret = queue_delayed_detection_work(i915, &i915->display.hotplug.hotplug_work, 0); 1187 + ret = queue_delayed_detection_work(display, &display->hotplug.hotplug_work, 0); 1193 1188 spin_unlock_irqrestore(&i915->irq_lock, flags); 1194 1189 1195 1190 return ret; ··· 1203 1188 static int i915_hpd_storm_ctl_show(struct seq_file *m, void *data) 1204 1189 { 1205 1190 struct drm_i915_private *dev_priv = m->private; 1206 - struct intel_hotplug *hotplug = &dev_priv->display.hotplug; 1191 + struct intel_display *display = &dev_priv->display; 1192 + struct intel_hotplug *hotplug = &display->hotplug; 1207 1193 1208 1194 /* Synchronize with everything first in case there's been an HPD 1209 1195 * storm, but we haven't finished handling it in the kernel yet 1210 1196 */ 1211 1197 intel_synchronize_irq(dev_priv); 1212 - flush_work(&dev_priv->display.hotplug.dig_port_work); 1213 - flush_delayed_work(&dev_priv->display.hotplug.hotplug_work); 1198 + flush_work(&display->hotplug.dig_port_work); 1199 + flush_delayed_work(&display->hotplug.hotplug_work); 1214 1200 1215 1201 seq_printf(m, "Threshold: %d\n", hotplug->hpd_storm_threshold); 1216 1202 seq_printf(m, "Detected: %s\n", ··· 1226 1210 { 1227 1211 struct seq_file *m = file->private_data; 1228 1212 struct drm_i915_private *dev_priv = m->private; 1229 - struct intel_hotplug *hotplug = &dev_priv->display.hotplug; 1213 + struct intel_display *display = &dev_priv->display; 1214 + struct intel_hotplug *hotplug = &display->hotplug; 1230 1215 unsigned int new_threshold; 1231 1216 int i; 1232 1217 char *newline; ··· 1252 1235 return -EINVAL; 1253 1236 1254 1237 if (new_threshold > 0) 1255 - drm_dbg_kms(&dev_priv->drm, 1238 + drm_dbg_kms(display->drm, 1256 1239 "Setting HPD storm detection threshold to %d\n", 1257 1240 new_threshold); 1258 1241 else 1259 - drm_dbg_kms(&dev_priv->drm, "Disabling HPD storm detection\n"); 1242 + drm_dbg_kms(display->drm, "Disabling HPD storm detection\n"); 1260 1243 1261 1244 spin_lock_irq(&dev_priv->irq_lock); 1262 1245 hotplug->hpd_storm_threshold = new_threshold; ··· 1266 1249 spin_unlock_irq(&dev_priv->irq_lock); 1267 1250 1268 1251 /* Re-enable hpd immediately if we were in an irq storm */ 1269 - flush_delayed_work(&dev_priv->display.hotplug.reenable_work); 1252 + flush_delayed_work(&display->hotplug.reenable_work); 1270 1253 1271 1254 return len; 1272 1255 } ··· 1288 1271 static int i915_hpd_short_storm_ctl_show(struct seq_file *m, void *data) 1289 1272 { 1290 1273 struct drm_i915_private *dev_priv = m->private; 1274 + struct intel_display *display = &dev_priv->display; 1291 1275 1292 1276 seq_printf(m, "Enabled: %s\n", 1293 - str_yes_no(dev_priv->display.hotplug.hpd_short_storm_enabled)); 1277 + str_yes_no(display->hotplug.hpd_short_storm_enabled)); 1294 1278 1295 1279 return 0; 1296 1280 } ··· 1309 1291 { 1310 1292 struct seq_file *m = file->private_data; 1311 1293 struct drm_i915_private *dev_priv = m->private; 1312 - struct intel_hotplug *hotplug = &dev_priv->display.hotplug; 1294 + struct intel_display *display = &dev_priv->display; 1295 + struct intel_hotplug *hotplug = &display->hotplug; 1313 1296 char *newline; 1314 1297 char tmp[16]; 1315 1298 int i; ··· 1331 1312 1332 1313 /* Reset to the "default" state for this system */ 1333 1314 if (strcmp(tmp, "reset") == 0) 1334 - new_state = !HAS_DP_MST(dev_priv); 1315 + new_state = !HAS_DP_MST(display); 1335 1316 else if (kstrtobool(tmp, &new_state) != 0) 1336 1317 return -EINVAL; 1337 1318 1338 - drm_dbg_kms(&dev_priv->drm, "%sabling HPD short storm detection\n", 1319 + drm_dbg_kms(display->drm, "%sabling HPD short storm detection\n", 1339 1320 new_state ? "En" : "Dis"); 1340 1321 1341 1322 spin_lock_irq(&dev_priv->irq_lock); ··· 1346 1327 spin_unlock_irq(&dev_priv->irq_lock); 1347 1328 1348 1329 /* Re-enable hpd immediately if we were in an irq storm */ 1349 - flush_delayed_work(&dev_priv->display.hotplug.reenable_work); 1330 + flush_delayed_work(&display->hotplug.reenable_work); 1350 1331 1351 1332 return len; 1352 1333 } ··· 1360 1341 .write = i915_hpd_short_storm_ctl_write, 1361 1342 }; 1362 1343 1363 - void intel_hpd_debugfs_register(struct drm_i915_private *i915) 1344 + void intel_hpd_debugfs_register(struct intel_display *display) 1364 1345 { 1365 - struct drm_minor *minor = i915->drm.primary; 1346 + struct drm_minor *minor = display->drm->primary; 1347 + struct drm_i915_private *i915 = to_i915(display->drm); 1366 1348 1367 1349 debugfs_create_file("i915_hpd_storm_ctl", 0644, minor->debugfs_root, 1368 1350 i915, &i915_hpd_storm_ctl_fops); 1369 1351 debugfs_create_file("i915_hpd_short_storm_ctl", 0644, minor->debugfs_root, 1370 1352 i915, &i915_hpd_short_storm_ctl_fops); 1371 1353 debugfs_create_bool("i915_ignore_long_hpd", 0644, minor->debugfs_root, 1372 - &i915->display.hotplug.ignore_long_hpd); 1354 + &display->hotplug.ignore_long_hpd); 1373 1355 }
+13 -13
drivers/gpu/drm/i915/display/intel_hotplug.h
··· 8 8 9 9 #include <linux/types.h> 10 10 11 - struct drm_i915_private; 11 + enum port; 12 12 struct intel_connector; 13 13 struct intel_digital_port; 14 + struct intel_display; 14 15 struct intel_encoder; 15 - enum port; 16 16 17 - void intel_hpd_poll_enable(struct drm_i915_private *dev_priv); 18 - void intel_hpd_poll_disable(struct drm_i915_private *dev_priv); 19 - void intel_hpd_poll_fini(struct drm_i915_private *i915); 17 + void intel_hpd_poll_enable(struct intel_display *display); 18 + void intel_hpd_poll_disable(struct intel_display *display); 19 + void intel_hpd_poll_fini(struct intel_display *display); 20 20 enum intel_hotplug_state intel_encoder_hotplug(struct intel_encoder *encoder, 21 21 struct intel_connector *connector); 22 - void intel_hpd_irq_handler(struct drm_i915_private *dev_priv, 22 + void intel_hpd_irq_handler(struct intel_display *display, 23 23 u32 pin_mask, u32 long_mask); 24 24 void intel_hpd_trigger_irq(struct intel_digital_port *dig_port); 25 - void intel_hpd_init(struct drm_i915_private *dev_priv); 26 - void intel_hpd_init_early(struct drm_i915_private *i915); 27 - void intel_hpd_cancel_work(struct drm_i915_private *dev_priv); 25 + void intel_hpd_init(struct intel_display *display); 26 + void intel_hpd_init_early(struct intel_display *display); 27 + void intel_hpd_cancel_work(struct intel_display *display); 28 28 enum hpd_pin intel_hpd_pin_default(enum port port); 29 29 void intel_hpd_block(struct intel_encoder *encoder); 30 30 void intel_hpd_unblock(struct intel_encoder *encoder); 31 31 void intel_hpd_clear_and_unblock(struct intel_encoder *encoder); 32 - void intel_hpd_debugfs_register(struct drm_i915_private *i915); 32 + void intel_hpd_debugfs_register(struct intel_display *display); 33 33 34 - void intel_hpd_enable_detection_work(struct drm_i915_private *i915); 35 - void intel_hpd_disable_detection_work(struct drm_i915_private *i915); 36 - bool intel_hpd_schedule_detection(struct drm_i915_private *i915); 34 + void intel_hpd_enable_detection_work(struct intel_display *display); 35 + void intel_hpd_disable_detection_work(struct intel_display *display); 36 + bool intel_hpd_schedule_detection(struct intel_display *display); 37 37 38 38 #endif /* __INTEL_HOTPLUG_H__ */
+15 -9
drivers/gpu/drm/i915/display/intel_hotplug_irq.c
··· 472 472 dev_priv->display.hotplug.hpd, 473 473 i9xx_port_hotplug_long_detect); 474 474 475 - intel_hpd_irq_handler(dev_priv, pin_mask, long_mask); 475 + intel_hpd_irq_handler(display, pin_mask, long_mask); 476 476 } 477 477 478 478 if ((IS_G4X(dev_priv) || ··· 483 483 484 484 void ibx_hpd_irq_handler(struct drm_i915_private *dev_priv, u32 hotplug_trigger) 485 485 { 486 + struct intel_display *display = &dev_priv->display; 486 487 u32 dig_hotplug_reg, pin_mask = 0, long_mask = 0; 487 488 488 489 /* ··· 510 509 dev_priv->display.hotplug.pch_hpd, 511 510 pch_port_hotplug_long_detect); 512 511 513 - intel_hpd_irq_handler(dev_priv, pin_mask, long_mask); 512 + intel_hpd_irq_handler(display, pin_mask, long_mask); 514 513 } 515 514 516 515 void xelpdp_pica_irq_handler(struct drm_i915_private *i915, u32 iir) ··· 544 543 "pica hotplug event received, stat 0x%08x, pins 0x%08x, long 0x%08x\n", 545 544 hotplug_trigger, pin_mask, long_mask); 546 545 547 - intel_hpd_irq_handler(i915, pin_mask, long_mask); 546 + intel_hpd_irq_handler(display, pin_mask, long_mask); 548 547 } 549 548 550 549 if (trigger_aux) ··· 588 587 } 589 588 590 589 if (pin_mask) 591 - intel_hpd_irq_handler(dev_priv, pin_mask, long_mask); 590 + intel_hpd_irq_handler(display, pin_mask, long_mask); 592 591 593 592 if (pch_iir & SDE_GMBUS_ICP) 594 593 intel_gmbus_irq_handler(display); ··· 625 624 } 626 625 627 626 if (pin_mask) 628 - intel_hpd_irq_handler(dev_priv, pin_mask, long_mask); 627 + intel_hpd_irq_handler(display, pin_mask, long_mask); 629 628 630 629 if (pch_iir & SDE_GMBUS_CPT) 631 630 intel_gmbus_irq_handler(display); ··· 633 632 634 633 void ilk_hpd_irq_handler(struct drm_i915_private *dev_priv, u32 hotplug_trigger) 635 634 { 635 + struct intel_display *display = &dev_priv->display; 636 636 u32 dig_hotplug_reg, pin_mask = 0, long_mask = 0; 637 637 638 638 dig_hotplug_reg = intel_uncore_rmw(&dev_priv->uncore, DIGITAL_PORT_HOTPLUG_CNTRL, 0, 0); ··· 643 641 dev_priv->display.hotplug.hpd, 644 642 ilk_port_hotplug_long_detect); 645 643 646 - intel_hpd_irq_handler(dev_priv, pin_mask, long_mask); 644 + intel_hpd_irq_handler(display, pin_mask, long_mask); 647 645 } 648 646 649 647 void bxt_hpd_irq_handler(struct drm_i915_private *dev_priv, u32 hotplug_trigger) 650 648 { 649 + struct intel_display *display = &dev_priv->display; 651 650 u32 dig_hotplug_reg, pin_mask = 0, long_mask = 0; 652 651 653 652 dig_hotplug_reg = intel_uncore_rmw(&dev_priv->uncore, PCH_PORT_HOTPLUG, 0, 0); ··· 658 655 dev_priv->display.hotplug.hpd, 659 656 bxt_port_hotplug_long_detect); 660 657 661 - intel_hpd_irq_handler(dev_priv, pin_mask, long_mask); 658 + intel_hpd_irq_handler(display, pin_mask, long_mask); 662 659 } 663 660 664 661 void gen11_hpd_irq_handler(struct drm_i915_private *dev_priv, u32 iir) 665 662 { 663 + struct intel_display *display = &dev_priv->display; 666 664 u32 pin_mask = 0, long_mask = 0; 667 665 u32 trigger_tc = iir & GEN11_DE_TC_HOTPLUG_MASK; 668 666 u32 trigger_tbt = iir & GEN11_DE_TBT_HOTPLUG_MASK; ··· 691 687 } 692 688 693 689 if (pin_mask) 694 - intel_hpd_irq_handler(dev_priv, pin_mask, long_mask); 690 + intel_hpd_irq_handler(display, pin_mask, long_mask); 695 691 else 696 692 drm_err(&dev_priv->drm, 697 693 "Unexpected DE HPD interrupt 0x%08x\n", iir); ··· 1471 1467 1472 1468 void intel_hotplug_irq_init(struct drm_i915_private *i915) 1473 1469 { 1470 + struct intel_display *display = &i915->display; 1471 + 1474 1472 intel_hpd_init_pins(i915); 1475 1473 1476 - intel_hpd_init_early(i915); 1474 + intel_hpd_init_early(display); 1477 1475 1478 1476 if (HAS_GMCH(i915)) { 1479 1477 if (I915_HAS_HOTPLUG(i915))
+7 -7
drivers/gpu/drm/i915/i915_driver.c
··· 991 991 intel_dp_mst_suspend(display); 992 992 993 993 intel_irq_suspend(i915); 994 - intel_hpd_cancel_work(i915); 994 + intel_hpd_cancel_work(display); 995 995 996 996 if (HAS_DISPLAY(i915)) 997 997 intel_display_driver_suspend_access(display); ··· 1074 1074 intel_display_driver_suspend(display); 1075 1075 1076 1076 intel_irq_suspend(dev_priv); 1077 - intel_hpd_cancel_work(dev_priv); 1077 + intel_hpd_cancel_work(display); 1078 1078 1079 1079 if (HAS_DISPLAY(dev_priv)) 1080 1080 intel_display_driver_suspend_access(display); ··· 1237 1237 if (HAS_DISPLAY(dev_priv)) 1238 1238 intel_display_driver_resume_access(display); 1239 1239 1240 - intel_hpd_init(dev_priv); 1240 + intel_hpd_init(display); 1241 1241 1242 1242 intel_display_driver_resume(display); 1243 1243 ··· 1245 1245 intel_display_driver_enable_user_access(display); 1246 1246 drm_kms_helper_poll_enable(dev); 1247 1247 } 1248 - intel_hpd_poll_disable(dev_priv); 1248 + intel_hpd_poll_disable(display); 1249 1249 1250 1250 intel_opregion_resume(display); 1251 1251 ··· 1585 1585 assert_forcewakes_inactive(&dev_priv->uncore); 1586 1586 1587 1587 if (!IS_VALLEYVIEW(dev_priv) && !IS_CHERRYVIEW(dev_priv)) 1588 - intel_hpd_poll_enable(dev_priv); 1588 + intel_hpd_poll_enable(display); 1589 1589 1590 1590 drm_dbg(&dev_priv->drm, "Device suspended\n"); 1591 1591 return 0; ··· 1643 1643 * everyone else do it here. 1644 1644 */ 1645 1645 if (!IS_VALLEYVIEW(dev_priv) && !IS_CHERRYVIEW(dev_priv)) { 1646 - intel_hpd_init(dev_priv); 1647 - intel_hpd_poll_disable(dev_priv); 1646 + intel_hpd_init(display); 1647 + intel_hpd_poll_disable(display); 1648 1648 } 1649 1649 1650 1650 skl_watermark_ipc_update(dev_priv);
+2 -1
drivers/gpu/drm/i915/i915_irq.c
··· 1280 1280 */ 1281 1281 void intel_irq_uninstall(struct drm_i915_private *dev_priv) 1282 1282 { 1283 + struct intel_display *display = &dev_priv->display; 1283 1284 int irq = to_pci_dev(dev_priv->drm.dev)->irq; 1284 1285 1285 1286 if (drm_WARN_ON(&dev_priv->drm, !dev_priv->irqs_enabled)) ··· 1290 1289 1291 1290 free_irq(irq, dev_priv); 1292 1291 1293 - intel_hpd_cancel_work(dev_priv); 1292 + intel_hpd_cancel_work(display); 1294 1293 dev_priv->irqs_enabled = false; 1295 1294 } 1296 1295
+15 -11
drivers/gpu/drm/xe/display/xe_display.c
··· 173 173 struct xe_device *xe = arg; 174 174 struct intel_display *display = &xe->display; 175 175 176 - intel_hpd_poll_fini(xe); 176 + intel_hpd_poll_fini(display); 177 177 intel_hdcp_component_fini(display); 178 178 intel_audio_deinit(display); 179 179 } ··· 314 314 intel_dmc_suspend(display); 315 315 316 316 if (has_display(xe)) 317 - intel_hpd_poll_enable(xe); 317 + intel_hpd_poll_enable(display); 318 318 } 319 319 320 320 static void xe_display_disable_d3cold(struct xe_device *xe) ··· 331 331 332 332 intel_display_driver_init_hw(display); 333 333 334 - intel_hpd_init(xe); 334 + intel_hpd_init(display); 335 335 336 336 if (has_display(xe)) 337 - intel_hpd_poll_disable(xe); 337 + intel_hpd_poll_disable(display); 338 338 339 339 intel_opregion_resume(display); 340 340 ··· 364 364 365 365 xe_display_flush_cleanup_work(xe); 366 366 367 - intel_hpd_cancel_work(xe); 367 + intel_hpd_cancel_work(display); 368 368 369 369 if (has_display(xe)) { 370 370 intel_display_driver_suspend_access(display); ··· 394 394 395 395 xe_display_flush_cleanup_work(xe); 396 396 intel_dp_mst_suspend(display); 397 - intel_hpd_cancel_work(xe); 397 + intel_hpd_cancel_work(display); 398 398 399 399 if (has_display(xe)) 400 400 intel_display_driver_suspend_access(display); ··· 409 409 410 410 void xe_display_pm_runtime_suspend(struct xe_device *xe) 411 411 { 412 + struct intel_display *display = &xe->display; 413 + 412 414 if (!xe->info.probe_display) 413 415 return; 414 416 ··· 419 417 return; 420 418 } 421 419 422 - intel_hpd_poll_enable(xe); 420 + intel_hpd_poll_enable(display); 423 421 } 424 422 425 423 void xe_display_pm_suspend_late(struct xe_device *xe) ··· 493 491 if (has_display(xe)) 494 492 intel_display_driver_resume_access(display); 495 493 496 - intel_hpd_init(xe); 494 + intel_hpd_init(display); 497 495 498 496 if (has_display(xe)) { 499 497 intel_display_driver_resume(display); ··· 502 500 } 503 501 504 502 if (has_display(xe)) 505 - intel_hpd_poll_disable(xe); 503 + intel_hpd_poll_disable(display); 506 504 507 505 intel_opregion_resume(display); 508 506 ··· 513 511 514 512 void xe_display_pm_runtime_resume(struct xe_device *xe) 515 513 { 514 + struct intel_display *display = &xe->display; 515 + 516 516 if (!xe->info.probe_display) 517 517 return; 518 518 ··· 523 519 return; 524 520 } 525 521 526 - intel_hpd_init(xe); 527 - intel_hpd_poll_disable(xe); 522 + intel_hpd_init(display); 523 + intel_hpd_poll_disable(display); 528 524 skl_watermark_ipc_update(xe); 529 525 } 530 526