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

drm/i915/alpm: Calculate silence period

Calculate silence period instead of hardcoding it in switch case.

Signed-off-by: Jouni Högander <jouni.hogander@intel.com>
Reviewed-by: Animesh Manna <animesh.manna@intel.com>
Link: https://lore.kernel.org/r/20250829053929.3585636-2-jouni.hogander@intel.com

+17 -20
+17 -20
drivers/gpu/drm/i915/display/intel_alpm.c
··· 16 16 #include "intel_psr.h" 17 17 #include "intel_psr_regs.h" 18 18 19 + #define SILENCE_PERIOD_MIN_TIME 80 20 + #define SILENCE_PERIOD_MAX_TIME 180 21 + #define SILENCE_PERIOD_TIME (SILENCE_PERIOD_MIN_TIME + \ 22 + (SILENCE_PERIOD_MAX_TIME - \ 23 + SILENCE_PERIOD_MIN_TIME) / 2) 24 + 19 25 bool intel_alpm_aux_wake_supported(struct intel_dp *intel_dp) 20 26 { 21 27 return intel_dp->alpm_dpcd & DP_ALPM_CAP; ··· 50 44 mutex_init(&intel_dp->alpm_parameters.lock); 51 45 } 52 46 47 + static int get_silence_period_symbols(const struct intel_crtc_state *crtc_state) 48 + { 49 + return SILENCE_PERIOD_TIME * intel_dp_link_symbol_clock(crtc_state->port_clock) / 50 + 1000 / 1000; 51 + } 52 + 53 53 /* 54 54 * See Bspec: 71632 for the table 55 - * 56 - * Silence_period = tSilence,Min + ((tSilence,Max - tSilence,Min) / 2) 57 55 * 58 56 * Half cycle duration: 59 57 * ··· 70 60 * FLOOR( LFPS Period in Symbol clocks / 71 61 * (2 * PORT_ALPM_LFPS_CTL[ LFPS Cycle Count ]) ) 72 62 */ 73 - static bool _lnl_get_silence_period_and_lfps_half_cycle(int link_rate, 74 - int *silence_period, 75 - int *lfps_half_cycle) 63 + static bool _lnl_get_lfps_half_cycle(int link_rate, int *lfps_half_cycle) 76 64 { 77 65 switch (link_rate) { 78 66 case 162000: 79 - *silence_period = 20; 80 67 *lfps_half_cycle = 5; 81 68 break; 82 69 case 216000: 83 - *silence_period = 27; 84 70 *lfps_half_cycle = 7; 85 71 break; 86 72 case 243000: 87 - *silence_period = 31; 88 73 *lfps_half_cycle = 8; 89 74 break; 90 75 case 270000: 91 - *silence_period = 34; 92 76 *lfps_half_cycle = 9; 93 77 break; 94 78 case 324000: 95 - *silence_period = 41; 96 79 *lfps_half_cycle = 11; 97 80 break; 98 81 case 432000: 99 - *silence_period = 56; 100 82 *lfps_half_cycle = 15; 101 83 break; 102 84 case 540000: 103 - *silence_period = 69; 104 85 *lfps_half_cycle = 12; 105 86 break; 106 87 case 648000: 107 - *silence_period = 84; 108 88 *lfps_half_cycle = 15; 109 89 break; 110 90 case 675000: 111 - *silence_period = 87; 112 91 *lfps_half_cycle = 15; 113 92 break; 114 93 case 810000: 115 - *silence_period = 104; 116 94 *lfps_half_cycle = 19; 117 95 break; 118 96 default: 119 - *silence_period = *lfps_half_cycle = -1; 97 + *lfps_half_cycle = -1; 120 98 return false; 121 99 } 122 100 return true; ··· 158 160 _lnl_compute_aux_less_wake_time(crtc_state->port_clock); 159 161 aux_less_wake_lines = intel_usecs_to_scanlines(&crtc_state->hw.adjusted_mode, 160 162 aux_less_wake_time); 161 - 162 - if (!_lnl_get_silence_period_and_lfps_half_cycle(crtc_state->port_clock, 163 - &silence_period, 164 - &lfps_half_cycle)) 163 + silence_period = get_silence_period_symbols(crtc_state); 164 + if (!_lnl_get_lfps_half_cycle(crtc_state->port_clock, 165 + &lfps_half_cycle)) 165 166 return false; 166 167 167 168 if (aux_less_wake_lines > ALPM_CTL_AUX_LESS_WAKE_TIME_MASK ||