From: "Hogander, Jouni" <jouni.hogander@intel.com>
To: "intel-xe@lists.freedesktop.org" <intel-xe@lists.freedesktop.org>,
"dri-devel@lists.freedesktop.org"
<dri-devel@lists.freedesktop.org>,
"Manna, Animesh" <animesh.manna@intel.com>,
"intel-gfx@lists.freedesktop.org"
<intel-gfx@lists.freedesktop.org>
Cc: "Kandpal, Suraj" <suraj.kandpal@intel.com>,
"Nikula, Jani" <jani.nikula@intel.com>
Subject: Re: [PATCH v6 06/18] drm/i915/alpm: Auxless wake time calculation for Xe3p
Date: Tue, 29 Sep 2026 05:38:42 +0000 [thread overview]
Message-ID: <684a65c9a5bc6d76462c7d9f84a367fa710602cb.camel@intel.com> (raw)
In-Reply-To: <20260915180449.277933-7-animesh.manna@intel.com>
On Tue, 2026-09-15 at 23:34 +0530, Animesh Manna wrote:
> Add support for auxless waketime calculation for DP2.1 ALPM
> as dependent parameter got changed.
>
> v1: Initial version.
> v2: Use intel_dp_is_uhbr(). [Jani]
> v3:
> - Separate out switch to active latency calculation.
> - Use macro definition for ML_PHY_LOCK length. [Suraj]
> v4:
> - Fix 32-bit signed integer overflow. [sashiko]
> - Fix negative return of drm_dp_lttpr_count(). [sashiko]
> - Introduce get_ml_phy_lock_len() and get_dp_link_symbol_size().
> [Jouni]
> - Align variable naming with bpec formula of establishment_period.
> [Jouni]
>
> Bspec: 71477
> Cc: Jouni Högander <jouni.hogander@intel.com>
> Signed-off-by: Animesh Manna <animesh.manna@intel.com>
> ---
> drivers/gpu/drm/i915/display/intel_alpm.c | 69 +++++++++++++++++++--
> --
> 1 file changed, 58 insertions(+), 11 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_alpm.c
> b/drivers/gpu/drm/i915/display/intel_alpm.c
> index d5823174576a..924fa8dd4638 100644
> --- a/drivers/gpu/drm/i915/display/intel_alpm.c
> +++ b/drivers/gpu/drm/i915/display/intel_alpm.c
> @@ -102,21 +102,64 @@ static int get_lfps_half_cycle_clocks(const
> struct intel_crtc_state *crtc_state)
> 1000 / (2 * LFPS_CYCLE_COUNT);
> }
>
> +#define ML_PHY_LOCK_LEN 252
> +#define ML_PHY_LOCK_LEN_UHBR 396
> +
> static int get_tphy2_p2_to_p0(const struct intel_crtc_state
> *crtc_state)
> {
> - return 12 * 1000;
> + struct intel_display *display =
> to_intel_display(crtc_state);
> +
> + return DISPLAY_VER(display) >= 35 ? (20 * 1000) : (12 *
> 1000);
> +}
> +
> +static int get_ml_phy_lock_len(const struct intel_crtc_state
> *crtc_state)
> +{
> + return intel_dp_is_uhbr(crtc_state) ? ML_PHY_LOCK_LEN_UHBR :
> ML_PHY_LOCK_LEN;
> +}
> +
> +static int get_dp_link_symbol_size(const struct intel_crtc_state
> *crtc_state)
> +{
> + return intel_dp_is_uhbr(crtc_state) ? 32 : 10;
> }
>
> -static int get_establishment_period(const struct intel_crtc_state
> *crtc_state)
> +static int get_establishment_period(struct intel_dp *intel_dp,
> + const struct intel_crtc_state
> *crtc_state)
> {
> int t1 = 50 * 1000;
> - int tps4 = 252;
> - /* port_clock is link rate in 10kbit/s units */
> - int tml_phy_lock = 1000 * 1000 * tps4 / crtc_state-
> >port_clock;
> + int tps4 = get_ml_phy_lock_len(crtc_state) *
> get_dp_link_symbol_size(crtc_state);
> + /*
> + * port_clock is link rate in 10kbit/s units, so multiplying
> by
> + * (1000 * 1000)/10 = 100000
> + */
> + int tml_phy_lock = 100000 * tps4 / crtc_state->port_clock;
> + int lttpr_count = 0;
> int tcds, establishment_period;
>
> - tcds = (7 + DIV_ROUND_UP(6500, tml_phy_lock) + 1) *
> tml_phy_lock;
> - establishment_period = (SILENCE_PERIOD_TIME + t1 + tcds);
> + if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_EDP)) {
> + tcds = (7 + DIV_ROUND_UP(6500, tml_phy_lock) + 1) *
> tml_phy_lock;
> + } else {
> + tcds = 7 * tml_phy_lock;
> + lttpr_count = drm_dp_lttpr_count(intel_dp-
> >lttpr_common_caps);
You should check drm_dp_lttpr_count return value.
BR,
Jouni Högander
> + }
> +
> + if (lttpr_count > 0) {
> + /* tlw and tcs values are taken from DP2.1 spec */
> + int tlw = 13000;
> + int tcs = 10000;
> + int tlfps_period = get_lfps_cycle_time(crtc_state);
> + int tdcs = (SILENCE_PERIOD_TIME + t1 + tcs +
> + (lttpr_count - 1) * (tlw +
> tlfps_period));
> + int tacds = 70000;
> + int tds = 7 * tml_phy_lock;
> +
> + /* tdrl is same as tcds*/
> + establishment_period = tlw + tlfps_period + tdcs +
> tacds +
> + (lttpr_count - 1) * tds +
> tcds;
> + } else {
> + /* TODO: Add a check for data realign by DPCD
> 0x116[3] */
> +
> + establishment_period = (SILENCE_PERIOD_TIME + t1 +
> tcds);
> + }
>
> return establishment_period;
> }
> @@ -138,12 +181,16 @@ static int get_establishment_period(const
> struct intel_crtc_state *crtc_state)
> * within the CDS period complete within the CDS period regardless
> of
> * entry into the period
> * tML_PHY_LOCK = TPS4 Length * ( 10 / (Link Rate in MHz) )
> - * TPS4 Length = 252 Symbols
> + * ML_PHY_LOCK Length (8b/10b): 252
> + * ML_PHY_LOCK Length (128b/132b): 396
> + * TPS4 Length = ML_PHY_LOCK * Rate Div
> + * Rate Div = 32 for 128b/132b and 10 for 8b/10b.
> */
> -static int _lnl_compute_aux_less_wake_time(const struct
> intel_crtc_state *crtc_state)
> +static int _lnl_compute_aux_less_wake_time(struct intel_dp
> *intel_dp,
> + const struct
> intel_crtc_state *crtc_state)
> {
> int tphy2_p2_to_p0 = get_tphy2_p2_to_p0(crtc_state);
> - int establishment_period =
> get_establishment_period(crtc_state);
> + int establishment_period =
> get_establishment_period(intel_dp, crtc_state);
>
> return DIV_ROUND_UP(tphy2_p2_to_p0 +
> get_lfps_cycle_time(crtc_state) +
> establishment_period, 1000);
> @@ -158,7 +205,7 @@ _lnl_compute_aux_less_alpm_params(struct intel_dp
> *intel_dp,
> lfps_half_cycle;
>
> aux_less_wake_time =
> - _lnl_compute_aux_less_wake_time(crtc_state);
> + _lnl_compute_aux_less_wake_time(intel_dp,
> crtc_state);
> aux_less_wake_lines = intel_usecs_to_scanlines(&crtc_state-
> >hw.adjusted_mode,
>
> aux_less_wake_time);
> silence_period = get_silence_period_symbols(crtc_state);
next prev parent reply other threads:[~2026-09-29 5:38 UTC|newest]
Thread overview: 61+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-15 18:04 [PATCH v6 00/18] Enable DP2.1 alpm Animesh Manna
2026-09-15 18:04 ` [PATCH v6 01/18] drm/i915/alpm: Add DPCD definition for DP2.1 ALPM capability Animesh Manna
2026-09-15 18:04 ` [PATCH v6 02/18] drm/i915/alpm: Move alpm sink capability readout into a separate function Animesh Manna
2026-09-28 9:58 ` Hogander, Jouni
2026-09-28 10:02 ` Hogander, Jouni
2026-09-30 8:04 ` Jani Nikula
2026-10-01 11:21 ` Manna, Animesh
2026-09-15 18:04 ` [PATCH v6 03/18] drm/i915/alpm: alpm_init() for DP2.1 Animesh Manna
2026-09-15 18:57 ` sashiko-bot
2026-09-28 10:44 ` Hogander, Jouni
2026-09-15 18:04 ` [PATCH v6 04/18] drm/i915/alpm: Enable debugfs " Animesh Manna
2026-09-28 11:22 ` Hogander, Jouni
2026-10-01 11:32 ` Manna, Animesh
2026-10-08 4:40 ` Hogander, Jouni
2026-09-15 18:04 ` [PATCH v6 05/18] drm/i915/alpm: Refactor Auxless wake time calculation Animesh Manna
2026-09-28 11:49 ` Hogander, Jouni
2026-09-15 18:04 ` [PATCH v6 06/18] drm/i915/alpm: Auxless wake time calculation for Xe3p Animesh Manna
2026-09-29 5:34 ` Hogander, Jouni
2026-09-29 5:38 ` Hogander, Jouni [this message]
2026-09-15 18:04 ` [PATCH v6 07/18] drm/i915/alpm: Modify AUX_LESS_WAKE_TIME bitfield for xe3lpd Animesh Manna
2026-09-15 18:46 ` sashiko-bot
2026-09-29 6:20 ` Hogander, Jouni
2026-09-15 18:04 ` [PATCH v6 08/18] drm/i915/alpm: table based establishment period Animesh Manna
2026-09-29 7:00 ` Hogander, Jouni
2026-09-29 7:31 ` Hogander, Jouni
2026-10-01 11:40 ` Manna, Animesh
2026-09-15 18:04 ` [PATCH v6 09/18] drm/i915/alpm: Half LFPS cycle calculation Animesh Manna
2026-09-15 18:53 ` sashiko-bot
2026-09-29 9:57 ` Hogander, Jouni
2026-09-15 18:04 ` [PATCH v6 10/18] drm/i915/alpm: Modify LFPS cycle count for DP ALPM Animesh Manna
2026-10-01 6:22 ` Hogander, Jouni
2026-10-01 12:10 ` Hogander, Jouni
2026-10-01 12:11 ` Hogander, Jouni
2026-09-15 18:04 ` [PATCH v6 11/18] drm/i915/alpm: Modify LFPS_CYCLE_COUNT bitfield for xe3lpd Animesh Manna
2026-09-15 18:04 ` [PATCH v6 12/18] drm/i915/alpm: Program LTTPR count for DP 2.1 ALPM Animesh Manna
2026-09-15 18:56 ` sashiko-bot
2026-09-30 8:16 ` Jani Nikula
2026-10-02 4:41 ` Hogander, Jouni
2026-09-15 18:04 ` [PATCH v6 13/18] drm/i915/alpm: Enable MAC Transmitting LFPS for LT PHY Animesh Manna
2026-10-02 5:04 ` Hogander, Jouni
2026-09-15 18:04 ` [PATCH v6 14/18] drm/i915/alpm: Replace is_edp() with alpm_is_possible() Animesh Manna
2026-09-15 18:57 ` sashiko-bot
2026-10-02 6:41 ` Hogander, Jouni
2026-09-15 18:04 ` [PATCH v6 15/18] drm/i915/alpm: Introduce has_alpm to decouple from pr/psr2/lobf Animesh Manna
2026-09-15 19:01 ` sashiko-bot
2026-10-02 8:37 ` Hogander, Jouni
2026-09-15 18:04 ` [PATCH v6 16/18] drm/i915/alpm: Compute and program switch to active latency Animesh Manna
2026-09-15 18:55 ` sashiko-bot
2026-10-02 9:00 ` Hogander, Jouni
2026-09-15 18:04 ` [PATCH v6 17/18] drm/i915/alpm: Program zero-based LFPS half cycle duration Animesh Manna
2026-09-15 19:02 ` sashiko-bot
2026-10-02 9:08 ` Hogander, Jouni
2026-09-15 18:04 ` [PATCH v6 18/18] drm/i915/alpm: Disallow ALPM for UHBR link rate Animesh Manna
2026-09-15 19:01 ` sashiko-bot
2026-10-02 11:33 ` Hogander, Jouni
2026-09-15 18:50 ` ✗ CI.checkpatch: warning for Enable DP2.1 alpm (rev6) Patchwork
2026-09-15 18:52 ` ✓ CI.KUnit: success " Patchwork
2026-09-15 19:29 ` ✓ Xe.CI.BAT: " Patchwork
2026-09-15 21:11 ` ✓ i915.CI.BAT: " Patchwork
2026-09-16 1:55 ` ✓ Xe.CI.FULL: " Patchwork
2026-09-16 8:14 ` ✗ i915.CI.Full: failure " Patchwork
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=684a65c9a5bc6d76462c7d9f84a367fa710602cb.camel@intel.com \
--to=jouni.hogander@intel.com \
--cc=animesh.manna@intel.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=intel-gfx@lists.freedesktop.org \
--cc=intel-xe@lists.freedesktop.org \
--cc=jani.nikula@intel.com \
--cc=suraj.kandpal@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.