Skip to content

Commit 338aae5

Browse files
committed
Merge tag 'drm-intel-next-fixes-2024-09-19' of https://gitlab.freedesktop.org/drm/i915/kernel into drm-next
- Fix BMG support to UHBR13.5 - Two PSR fixes Signed-off-by: Dave Airlie <[email protected]> From: Joonas Lahtinen <[email protected]> Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
2 parents ae2c6d8 + ec2231b commit 338aae5

File tree

4 files changed

+35
-14
lines changed

4 files changed

+35
-14
lines changed

drivers/gpu/drm/i915/display/intel_ddi.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -916,7 +916,7 @@ intel_ddi_main_link_aux_domain(struct intel_digital_port *dig_port,
916916
* instead of a specific AUX_IO_<port> reference without powering up any
917917
* extra wells.
918918
*/
919-
if (intel_encoder_can_psr(&dig_port->base))
919+
if (intel_psr_needs_aux_io_power(&dig_port->base, crtc_state))
920920
return intel_display_power_aux_io_domain(i915, dig_port->aux_ch);
921921
else if (DISPLAY_VER(i915) < 14 &&
922922
(intel_crtc_has_dp_encoder(crtc_state) ||

drivers/gpu/drm/i915/display/intel_dp.c

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -531,6 +531,10 @@ static void
531531
intel_dp_set_source_rates(struct intel_dp *intel_dp)
532532
{
533533
/* The values must be in increasing order */
534+
static const int bmg_rates[] = {
535+
162000, 216000, 243000, 270000, 324000, 432000, 540000, 675000,
536+
810000, 1000000, 1350000,
537+
};
534538
static const int mtl_rates[] = {
535539
162000, 216000, 243000, 270000, 324000, 432000, 540000, 675000,
536540
810000, 1000000, 2000000,
@@ -561,8 +565,13 @@ intel_dp_set_source_rates(struct intel_dp *intel_dp)
561565
intel_dp->source_rates || intel_dp->num_source_rates);
562566

563567
if (DISPLAY_VER(dev_priv) >= 14) {
564-
source_rates = mtl_rates;
565-
size = ARRAY_SIZE(mtl_rates);
568+
if (IS_BATTLEMAGE(dev_priv)) {
569+
source_rates = bmg_rates;
570+
size = ARRAY_SIZE(bmg_rates);
571+
} else {
572+
source_rates = mtl_rates;
573+
size = ARRAY_SIZE(mtl_rates);
574+
}
566575
max_rate = mtl_max_source_rate(intel_dp);
567576
} else if (DISPLAY_VER(dev_priv) >= 11) {
568577
source_rates = icl_rates;

drivers/gpu/drm/i915/display/intel_psr.c

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -203,6 +203,25 @@ bool intel_encoder_can_psr(struct intel_encoder *encoder)
203203
return false;
204204
}
205205

206+
bool intel_psr_needs_aux_io_power(struct intel_encoder *encoder,
207+
const struct intel_crtc_state *crtc_state)
208+
{
209+
/*
210+
* For PSR/PR modes only eDP requires the AUX IO power to be enabled whenever
211+
* the output is enabled. For non-eDP outputs the main link is always
212+
* on, hence it doesn't require the HW initiated AUX wake-up signaling used
213+
* for eDP.
214+
*
215+
* TODO:
216+
* - Consider leaving AUX IO disabled for eDP / PR as well, in case
217+
* the ALPM with main-link off mode is not enabled.
218+
* - Leave AUX IO enabled for DP / PR, once support for ALPM with
219+
* main-link off mode is added for it and this mode gets enabled.
220+
*/
221+
return intel_crtc_has_type(crtc_state, INTEL_OUTPUT_EDP) &&
222+
intel_encoder_can_psr(encoder);
223+
}
224+
206225
static bool psr_global_enabled(struct intel_dp *intel_dp)
207226
{
208227
struct intel_display *display = to_intel_display(intel_dp);
@@ -2784,13 +2803,6 @@ static int _psr1_ready_for_pipe_update_locked(struct intel_dp *intel_dp)
27842803
EDP_PSR_STATUS_STATE_MASK, 50);
27852804
}
27862805

2787-
static int _panel_replay_ready_for_pipe_update_locked(struct intel_dp *intel_dp)
2788-
{
2789-
return intel_dp_is_edp(intel_dp) ?
2790-
_psr2_ready_for_pipe_update_locked(intel_dp) :
2791-
_psr1_ready_for_pipe_update_locked(intel_dp);
2792-
}
2793-
27942806
/**
27952807
* intel_psr_wait_for_idle_locked - wait for PSR be ready for a pipe update
27962808
* @new_crtc_state: new CRTC state
@@ -2813,12 +2825,10 @@ void intel_psr_wait_for_idle_locked(const struct intel_crtc_state *new_crtc_stat
28132825

28142826
lockdep_assert_held(&intel_dp->psr.lock);
28152827

2816-
if (!intel_dp->psr.enabled)
2828+
if (!intel_dp->psr.enabled || intel_dp->psr.panel_replay_enabled)
28172829
continue;
28182830

2819-
if (intel_dp->psr.panel_replay_enabled)
2820-
ret = _panel_replay_ready_for_pipe_update_locked(intel_dp);
2821-
else if (intel_dp->psr.sel_update_enabled)
2831+
if (intel_dp->psr.sel_update_enabled)
28222832
ret = _psr2_ready_for_pipe_update_locked(intel_dp);
28232833
else
28242834
ret = _psr1_ready_for_pipe_update_locked(intel_dp);

drivers/gpu/drm/i915/display/intel_psr.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ struct intel_plane_state;
2525
(intel_dp)->psr.source_panel_replay_support)
2626

2727
bool intel_encoder_can_psr(struct intel_encoder *encoder);
28+
bool intel_psr_needs_aux_io_power(struct intel_encoder *encoder,
29+
const struct intel_crtc_state *crtc_state);
2830
void intel_psr_init_dpcd(struct intel_dp *intel_dp);
2931
void intel_psr_enable_sink(struct intel_dp *intel_dp,
3032
const struct intel_crtc_state *crtc_state);

0 commit comments

Comments
 (0)