On Fri, 09 Jan 2026, Kaushlendra Kumar <[email protected]> wrote:
> intel_alpm_disable() incorrectly passes cpu_transcoder as the
> index to PORT_ALPM_CTL(), which expects an enum port. This
> writes to the wrong register, potentially corrupting state on
> unrelated ports.
>
> Use dp_to_dig_port(intel_dp)->base.port to access the correct
> port-indexed register.
Good catch!
For future reference, please also do 'git blame' on the source to find
out which commit introduced the error, and add a proper Fixes: tag. This
way we know the kernels that are affected.
We have to hop through code movement and multiple other changes to
eventually land on commit 1ccbf135862b ("drm/i915/psr: Enable ALPM on
source side for eDP Panel replay") adding the
PORT_ALPM_CTL(cpu_transcoder) usage in intel_psr.c.
'dim fixes 1ccbf135862b' gives us:
Fixes: 1ccbf135862b ("drm/i915/psr: Enable ALPM on source side for eDP Panel
replay")
Cc: Jouni Högander <[email protected]>
Cc: Animesh Manna <[email protected]>
Cc: Jani Nikula <[email protected]>
Cc: Rodrigo Vivi <[email protected]>
Cc: [email protected]
Cc: [email protected]
Cc: <[email protected]> # v6.10+
Which I'd usually just trim to the author/reviewers like this:
Fixes: 1ccbf135862b ("drm/i915/psr: Enable ALPM on source side for eDP Panel
replay")
Cc: Jouni Högander <[email protected]>
Cc: Animesh Manna <[email protected]>
Cc: <[email protected]> # v6.10+
And these are more important Cc's for the patch than any of the
maintainers or dri-devel, which IMO should be dropped, regardless of
what get_maintainer.pl says.
Obviously, a backport to kernels v6.10..v6.15 will fail due to the other
changes, but it doesn't change the fact that the original broken commit
was 1ccbf135862b in v6.10, and that's what we should reference.
BR,
Jani.
Oh, and also,
Reviewed-by: Jani Nikula <[email protected]>
>
> Signed-off-by: Kaushlendra Kumar <[email protected]>
> ---
> drivers/gpu/drm/i915/display/intel_alpm.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_alpm.c
> b/drivers/gpu/drm/i915/display/intel_alpm.c
> index 6372f533f65b..09ba1c2be16c 100644
> --- a/drivers/gpu/drm/i915/display/intel_alpm.c
> +++ b/drivers/gpu/drm/i915/display/intel_alpm.c
> @@ -557,6 +557,7 @@ void intel_alpm_disable(struct intel_dp *intel_dp)
> {
> struct intel_display *display = to_intel_display(intel_dp);
> enum transcoder cpu_transcoder = intel_dp->alpm.transcoder;
> + enum port port = dp_to_dig_port(intel_dp)->base.port;
>
> if (DISPLAY_VER(display) < 20 || !intel_dp->alpm_dpcd)
> return;
> @@ -568,7 +569,7 @@ void intel_alpm_disable(struct intel_dp *intel_dp)
> ALPM_CTL_ALPM_AUX_LESS_ENABLE, 0);
>
> intel_de_rmw(display,
> - PORT_ALPM_CTL(cpu_transcoder),
> + PORT_ALPM_CTL(port),
> PORT_ALPM_CTL_ALPM_AUX_LESS_ENABLE, 0);
>
> drm_dbg_kms(display->drm, "Disabling ALPM\n");
--
Jani Nikula, Intel