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

Configure Feed

Select the types of activity you want to include in your feed.

drm/i915/alpm: Simplify and align LOBF checks in pre/post plane update

The pre_plane_update and post_plane_update hooks essentially
disable/enable lobf feature. Use the existing _is_enabling/is_disabling
logic for this in the pre_plane_update and post_plane_update paths.

Also rename the helpers to intel_alpm_lobf_{en,dis}able().

v2: Remove redeundant checks during enabling/disabling. (Jouni)

Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
Reviewed-by: Michał Grzelak <michal.grzelak@intel.com>
Reviewed-by: Jouni Högander <jouni.hogander@intel.com>
Link: https://patch.msgid.link/20260204050250.762718-5-ankit.k.nautiyal@intel.com

+38 -41
+13 -35
drivers/gpu/drm/i915/display/intel_alpm.c
··· 452 452 intel_de_write(display, PORT_ALPM_LFPS_CTL(port), lfps_ctl_val); 453 453 } 454 454 455 - void intel_alpm_pre_plane_update(struct intel_atomic_state *state, 456 - struct intel_crtc *crtc) 455 + void intel_alpm_lobf_disable(const struct intel_crtc_state *new_crtc_state) 457 456 { 458 - struct intel_display *display = to_intel_display(state); 459 - const struct intel_crtc_state *crtc_state = 460 - intel_atomic_get_new_crtc_state(state, crtc); 461 - const struct intel_crtc_state *old_crtc_state = 462 - intel_atomic_get_old_crtc_state(state, crtc); 463 - enum transcoder cpu_transcoder = crtc_state->cpu_transcoder; 457 + struct intel_display *display = to_intel_display(new_crtc_state); 458 + enum transcoder cpu_transcoder = new_crtc_state->cpu_transcoder; 464 459 struct intel_encoder *encoder; 465 460 466 - if (DISPLAY_VER(display) < 20) 467 - return; 468 - 469 - if (crtc_state->has_lobf || crtc_state->has_lobf == old_crtc_state->has_lobf) 470 - return; 471 - 472 461 for_each_intel_encoder_mask(display->drm, encoder, 473 - crtc_state->uapi.encoder_mask) { 462 + new_crtc_state->uapi.encoder_mask) { 474 463 struct intel_dp *intel_dp; 475 464 476 465 if (!intel_encoder_is_dp(encoder)) ··· 470 481 if (!intel_dp_is_edp(intel_dp)) 471 482 continue; 472 483 473 - if (old_crtc_state->has_lobf) { 474 - mutex_lock(&intel_dp->alpm.lock); 475 - intel_de_write(display, ALPM_CTL(display, cpu_transcoder), 0); 476 - drm_dbg_kms(display->drm, "Link off between frames (LOBF) disabled\n"); 477 - mutex_unlock(&intel_dp->alpm.lock); 478 - } 484 + mutex_lock(&intel_dp->alpm.lock); 485 + intel_de_write(display, ALPM_CTL(display, cpu_transcoder), 0); 486 + drm_dbg_kms(display->drm, "Link off between frames (LOBF) disabled\n"); 487 + mutex_unlock(&intel_dp->alpm.lock); 479 488 } 480 489 } 481 490 ··· 494 507 drm_dp_dpcd_writeb(&intel_dp->aux, DP_RECEIVER_ALPM_CONFIG, val); 495 508 } 496 509 497 - void intel_alpm_post_plane_update(struct intel_atomic_state *state, 498 - struct intel_crtc *crtc) 510 + void intel_alpm_lobf_enable(const struct intel_crtc_state *new_crtc_state) 499 511 { 500 - struct intel_display *display = to_intel_display(state); 501 - const struct intel_crtc_state *crtc_state = 502 - intel_atomic_get_new_crtc_state(state, crtc); 503 - const struct intel_crtc_state *old_crtc_state = 504 - intel_atomic_get_old_crtc_state(state, crtc); 512 + struct intel_display *display = to_intel_display(new_crtc_state); 505 513 struct intel_encoder *encoder; 506 514 507 - if (crtc_state->has_psr || !crtc_state->has_lobf || 508 - crtc_state->has_lobf == old_crtc_state->has_lobf) 509 - return; 510 - 511 515 for_each_intel_encoder_mask(display->drm, encoder, 512 - crtc_state->uapi.encoder_mask) { 516 + new_crtc_state->uapi.encoder_mask) { 513 517 struct intel_dp *intel_dp; 514 518 515 519 if (!intel_encoder_is_dp(encoder)) ··· 509 531 intel_dp = enc_to_intel_dp(encoder); 510 532 511 533 if (intel_dp_is_edp(intel_dp)) { 512 - intel_alpm_enable_sink(intel_dp, crtc_state); 513 - intel_alpm_configure(intel_dp, crtc_state); 534 + intel_alpm_enable_sink(intel_dp, new_crtc_state); 535 + intel_alpm_configure(intel_dp, new_crtc_state); 514 536 } 515 537 } 516 538 }
+2 -4
drivers/gpu/drm/i915/display/intel_alpm.h
··· 25 25 const struct intel_crtc_state *crtc_state); 26 26 void intel_alpm_enable_sink(struct intel_dp *intel_dp, 27 27 const struct intel_crtc_state *crtc_state); 28 - void intel_alpm_pre_plane_update(struct intel_atomic_state *state, 29 - struct intel_crtc *crtc); 28 + void intel_alpm_lobf_disable(const struct intel_crtc_state *new_crtc_state); 30 29 void intel_alpm_port_configure(struct intel_dp *intel_dp, 31 30 const struct intel_crtc_state *crtc_state); 32 - void intel_alpm_post_plane_update(struct intel_atomic_state *state, 33 - struct intel_crtc *crtc); 31 + void intel_alpm_lobf_enable(const struct intel_crtc_state *new_crtc_state); 34 32 void intel_alpm_lobf_debugfs_add(struct intel_connector *connector); 35 33 bool intel_alpm_aux_wake_supported(struct intel_dp *intel_dp); 36 34 bool intel_alpm_aux_less_wake_supported(struct intel_dp *intel_dp);
+23 -2
drivers/gpu/drm/i915/display/intel_display.c
··· 1008 1008 return is_disabling(hw.casf_params.casf_enable, old_crtc_state, new_crtc_state); 1009 1009 } 1010 1010 1011 + static bool intel_crtc_lobf_enabling(const struct intel_crtc_state *old_crtc_state, 1012 + const struct intel_crtc_state *new_crtc_state) 1013 + { 1014 + if (!new_crtc_state->hw.active) 1015 + return false; 1016 + 1017 + return is_enabling(has_lobf, old_crtc_state, new_crtc_state); 1018 + } 1019 + 1020 + static bool intel_crtc_lobf_disabling(const struct intel_crtc_state *old_crtc_state, 1021 + const struct intel_crtc_state *new_crtc_state) 1022 + { 1023 + if (!old_crtc_state->hw.active) 1024 + return false; 1025 + 1026 + return is_disabling(has_lobf, old_crtc_state, new_crtc_state); 1027 + } 1028 + 1011 1029 #undef is_disabling 1012 1030 #undef is_enabling 1013 1031 ··· 1073 1055 adl_scaler_ecc_unmask(new_crtc_state); 1074 1056 } 1075 1057 1076 - intel_alpm_post_plane_update(state, crtc); 1058 + if (intel_crtc_lobf_enabling(old_crtc_state, new_crtc_state)) 1059 + intel_alpm_lobf_enable(new_crtc_state); 1077 1060 1078 1061 intel_psr_post_plane_update(state, crtc); 1079 1062 } ··· 1171 1152 intel_atomic_get_new_crtc_state(state, crtc); 1172 1153 enum pipe pipe = crtc->pipe; 1173 1154 1174 - intel_alpm_pre_plane_update(state, crtc); 1155 + if (intel_crtc_lobf_disabling(old_crtc_state, new_crtc_state)) 1156 + intel_alpm_lobf_disable(new_crtc_state); 1157 + 1175 1158 intel_psr_pre_plane_update(state, crtc); 1176 1159 1177 1160 if (intel_crtc_vrr_disabling(state, crtc)) {