linux-block.git
3 months agodrm/i915/psr: Allow DSB usage when PSR is enabled
Jouni Högander [Thu, 13 Feb 2025 06:48:04 +0000 (08:48 +0200)]
drm/i915/psr: Allow DSB usage when PSR is enabled

Now as we have correct PSR2_MAN_TRK_CTL handling in place we can allow DSB
usage also when PSR is enabled for LunarLake onwards.

v2: rebase

Signed-off-by: Jouni Högander <jouni.hogander@intel.com>
Reviewed-by: Animesh Manna <animesh.manna@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250213064804.2077127-14-jouni.hogander@intel.com
3 months agodrm/i915/display: Ensure we have "Frame Change" event in DSB commit
Jouni Högander [Thu, 13 Feb 2025 06:48:03 +0000 (08:48 +0200)]
drm/i915/display: Ensure we have "Frame Change" event in DSB commit

We may have commit which doesn't have any non-arming plane register
writes. In that case there aren't "Frame Change" event before DSB vblank
evasion which hangs as PIPEDSL register is reading as 0 when PSR state is
SRDENT(PSR1) or DEEP_SLEEP(PSR2). Handle this by ensuring "Frame Change"
event at the begin of DSB commit if using PSR/PR.

v3: dsb_commit as a first parameter
v2: use intel_psr_trigger_frame_change_event

Signed-off-by: Jouni Högander <jouni.hogander@intel.com>
Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250213064804.2077127-13-jouni.hogander@intel.com
3 months agodrm/i915/psr: Add function for triggering "Frame Change" event
Jouni Högander [Thu, 13 Feb 2025 06:48:02 +0000 (08:48 +0200)]
drm/i915/psr: Add function for triggering "Frame Change" event

Add new function to trigger "Frame Change" event for ensuring we are waking
up before vblank evasion.

v2: dsb as a first parameter

Signed-off-by: Jouni Högander <jouni.hogander@intel.com>
Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250213064804.2077127-12-jouni.hogander@intel.com
3 months agodrm/i915/display: Evade scanline 0 as well if PSR1 or PSR2 is enabled
Jouni Högander [Thu, 13 Feb 2025 06:48:01 +0000 (08:48 +0200)]
drm/i915/display: Evade scanline 0 as well if PSR1 or PSR2 is enabled

PIPEDSL is reading as 0 when in SRDENT(PSR1) or DEEP_SLEEP(PSR2). On
wake-up scanline counting starts from vblank_start - 1. We don't know if
wake-up is already ongoing when evasion starts. In worst case PIPEDSL could
start reading valid value right after checking the scanline. In this
scenario we wouldn't have enough time to write all registers. To tackle
this evade scanline 0 as well. As a drawback we have 1 frame delay in flip
when waking up.

v2:
  - use intel_dsb_emit_wait_dsl
  - add evasion of scanline 0 also for Panel Replay

Signed-off-by: Jouni Högander <jouni.hogander@intel.com>
Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250213064804.2077127-11-jouni.hogander@intel.com
3 months agodrm/i915/psr: Remove DSB_SKIP_WAITS_EN chicken bit
Jouni Högander [Thu, 13 Feb 2025 06:48:00 +0000 (08:48 +0200)]
drm/i915/psr: Remove DSB_SKIP_WAITS_EN chicken bit

We have different approach on how flip is considered being complete. We are
waiting for vblank on DSB and generate interrupt when it happens and this
interrupt is considered as indication of completion -> we definitely do not
want to skip vblank wait.

Also not skipping scanline wait shouldn't cause any problems if we are in
DEEP_SLEEP PIPEDSL register is returning 0 -> evasion does nothing and if
we are not in DEEP_SLEEP evasion works same way as without PSR.

v2: add comment explaining why we are not setting DSB_SKIP_WAITS_EN

Signed-off-by: Jouni Högander <jouni.hogander@intel.com>
Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250213064804.2077127-10-jouni.hogander@intel.com
3 months agodrm/i915/display: Warn on use_dsb in non-dsb pipe update functions
Jouni Högander [Thu, 13 Feb 2025 06:47:59 +0000 (08:47 +0200)]
drm/i915/display: Warn on use_dsb in non-dsb pipe update functions

Add drm_WARN_ON(use_dsb) into commit_pipe_{pre,post}_planes() and
intel_pipe_update_{start,end}() as they are not supposed to get called on
non-dsb updates.

Signed-off-by: Jouni Högander <jouni.hogander@intel.com>
Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250213064804.2077127-9-jouni.hogander@intel.com
3 months agodrm/i915/psr: Write PSR2_MAN_TRK_CTL on DSB commit as well
Jouni Högander [Thu, 13 Feb 2025 06:47:58 +0000 (08:47 +0200)]
drm/i915/psr: Write PSR2_MAN_TRK_CTL on DSB commit as well

Add PSR2_MAN_TRK_CTL writing into DSB commit in intel_atomic_dsb_finish.

Taking PSR lock over DSB commit is not needed because PSR2_MAN_TRK_CTL is
now written only by DSB.

Signed-off-by: Jouni Högander <jouni.hogander@intel.com>
Reviewed-by: Animesh Manna <animesh.manna@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250213064804.2077127-8-jouni.hogander@intel.com
3 months agodrm/i915/psr: Allow writing PSR2_MAN_TRK_CTL using DSB
Jouni Högander [Thu, 13 Feb 2025 06:47:57 +0000 (08:47 +0200)]
drm/i915/psr: Allow writing PSR2_MAN_TRK_CTL using DSB

Allow writing PSR2_MAN_TRK_CTL using DSB by using intel_de_write_dsb. Do
not check intel_dp->psr.lock being held when using DSB. This assertion
doesn't make sense as in case of using DSB the actual write happens later
and we are not taking intel_dp->psr.lock mutex over dsb commit.

Signed-off-by: Jouni Högander <jouni.hogander@intel.com>
Reviewed-by: Animesh Manna <animesh.manna@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250213064804.2077127-7-jouni.hogander@intel.com
3 months agodrm/i915/psr: Use SFF_CTL on invalidate/flush for LunarLake onwards
Jouni Högander [Thu, 13 Feb 2025 06:47:56 +0000 (08:47 +0200)]
drm/i915/psr: Use SFF_CTL on invalidate/flush for LunarLake onwards

In LunarLake we have SFF_CTL register which contains SFF bit ored with
respective SFF bit in PSR2_MAN_TRK_CTL register. Use this register instead
of the bit in PSR2_MAN_TRK_CTL on frontbuffer tracking callbacks. This
helps us avoiding taking psr mutex when performing atomic commit.

We don't need to set the CFF bit as selective update configuration in
PSR2_MAN_TRL_CTL is not overwritten anymore. I.e. we have valid
configuration in PSR2_MAN_TRK_CTL and in plane SEL_FETCH_* registers when
SFF bit gets cleared by the HW in case something triggers "frame change"
event after SFF bit is cleared.

Signed-off-by: Jouni Högander <jouni.hogander@intel.com>
Reviewed-by: Animesh Manna <animesh.manna@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250213064804.2077127-6-jouni.hogander@intel.com
3 months agodrm/i915/psr: Add register definitions for SFF_CTL and CFF_CTL registers
Jouni Högander [Thu, 13 Feb 2025 06:47:55 +0000 (08:47 +0200)]
drm/i915/psr: Add register definitions for SFF_CTL and CFF_CTL registers

Add register definitions for SFF_CTL and CFF_CTL registers. Name them as
LNL_SFF_CTL and LNL_CFF_CTL.

v2: use _MMIO_TRANS instead of _MMIO_TRANS2

Signed-off-by: Jouni Högander <jouni.hogander@intel.com>
Reviewed-by: Animesh Manna <animesh.manna@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250213064804.2077127-5-jouni.hogander@intel.com
3 months agodrm/i915/psr: Split setting sff and cff bits away from intel_psr_force_update
Jouni Högander [Thu, 13 Feb 2025 06:47:54 +0000 (08:47 +0200)]
drm/i915/psr: Split setting sff and cff bits away from intel_psr_force_update

This is a clean-up and a preparation for adding own SFF and CFF registers
for LunarLake onwards.

Signed-off-by: Jouni Högander <jouni.hogander@intel.com>
Reviewed-by: Animesh Manna <animesh.manna@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250213064804.2077127-4-jouni.hogander@intel.com
3 months agodrm/i915/psr: Rename psr_force_hw_tracking_exit as intel_psr_force_update
Jouni Högander [Thu, 13 Feb 2025 06:47:53 +0000 (08:47 +0200)]
drm/i915/psr: Rename psr_force_hw_tracking_exit as intel_psr_force_update

psr_force_hw_tracking_exit is misleading name as it is used for PSR1, PSR2
HW tracking and PSR2 selective fetch. Due to this rename it as
intel_psr_force_update.

Signed-off-by: Jouni Högander <jouni.hogander@intel.com>
Reviewed-by: Animesh Manna <animesh.manna@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250213064804.2077127-3-jouni.hogander@intel.com
3 months agodrm/i915/psr: Use PSR2_MAN_TRK_CTL CFF bit only to send full update
Jouni Högander [Thu, 13 Feb 2025 06:47:52 +0000 (08:47 +0200)]
drm/i915/psr: Use PSR2_MAN_TRK_CTL CFF bit only to send full update

We are preparing for a change where only frontbuffer flush will use
single full frame bit of a new register (SFF_CTL) available on LunarLake
onwards.

It shouldn't be necessary to have SFF bit set if CFF bit is set in
PSR2_MAN_TRK_CTL -> removing setting it on all platforms as there is not
reason to have it different on older platforms.

v2: commit message improved

Signed-off-by: Jouni Högander <jouni.hogander@intel.com>
Reviewed-by: Animesh Manna <animesh.manna@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250213064804.2077127-2-jouni.hogander@intel.com
3 months agodrm/i915/display: convert i915_pipestat_enable_mask() to struct intel_display
Jani Nikula [Wed, 12 Feb 2025 16:36:43 +0000 (18:36 +0200)]
drm/i915/display: convert i915_pipestat_enable_mask() to struct intel_display

Going forward, struct intel_display is the main display device data
pointer. Convert i915_pipestat_enable_mask() to struct intel_display,
allowing further conversions elsewhere.

Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/975b382c703cfb62f24643e40eac247b8e8bbea8.1739378096.git.jani.nikula@intel.com
3 months agodrm/i915/display: convert intel_fifo_underrun.[ch] to struct intel_display
Jani Nikula [Wed, 12 Feb 2025 16:36:42 +0000 (18:36 +0200)]
drm/i915/display: convert intel_fifo_underrun.[ch] to struct intel_display

Going forward, struct intel_display is the main display device data
pointer. Convert as much as possible of intel_fifo_underrun.[ch] to
struct intel_display.

Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/682e667013e1726a6f2f78484b7e9618cee3b639.1739378096.git.jani.nikula@intel.com
3 months agodrm/i915/combo-phy: convert intel_combo_phy.[ch] to struct intel_display
Jani Nikula [Wed, 12 Feb 2025 16:36:41 +0000 (18:36 +0200)]
drm/i915/combo-phy: convert intel_combo_phy.[ch] to struct intel_display

Going forward, struct intel_display is the main display device data
pointer. Convert as much as possible of intel_combo_phy.[ch] to struct
intel_display, along with intel_phy_is_combo() in intel_display.c.

Drive-by convert some drm_dbg() to drm_dbg_kms() while at it.

Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/c2e0a6294a8eaa4c16632881edc4f2d23c576101.1739378096.git.jani.nikula@intel.com
3 months agodrm/i915/dsi: convert platform checks to display->platform.<platform> style
Jani Nikula [Wed, 12 Feb 2025 16:36:40 +0000 (18:36 +0200)]
drm/i915/dsi: convert platform checks to display->platform.<platform> style

These are stragglers from a time the display->platform mechanism didn't
exist. Finish the conversion.

Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/493e4c550f9c515e2e82df1afd8a74a24156e76e.1739378096.git.jani.nikula@intel.com
3 months agodrm/i915/display: convert intel_mode_valid_max_plane_size() to intel_display
Jani Nikula [Wed, 12 Feb 2025 16:36:39 +0000 (18:36 +0200)]
drm/i915/display: convert intel_mode_valid_max_plane_size() to intel_display

Going forward, struct intel_display is the main display device data
pointer. Convert the intel_mode_valid_max_plane_size() helper to struct
intel_display, allowing further conversions elsewhere.

Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/6e7810c793ecc8ff6a31569830bf162156245668.1739378095.git.jani.nikula@intel.com
3 months agodrm/i915/display: convert intel_cpu_transcoder_mode_valid() to intel_display
Jani Nikula [Wed, 12 Feb 2025 16:36:38 +0000 (18:36 +0200)]
drm/i915/display: convert intel_cpu_transcoder_mode_valid() to intel_display

Going forward, struct intel_display is the main display device data
pointer. Convert the intel_cpu_transcoder_mode_valid()() helper to
struct intel_display, allowing further conversions elsewhere.

Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/f9246a00a2e7aabaffb86f863915a4307e1fd3f8.1739378095.git.jani.nikula@intel.com
3 months agodrm/i915/sdvo: convert intel_sdvo.[ch] to struct intel_display
Jani Nikula [Wed, 12 Feb 2025 16:36:37 +0000 (18:36 +0200)]
drm/i915/sdvo: convert intel_sdvo.[ch] to struct intel_display

Going forward, struct intel_display is the main display device data
pointer. Convert as much as possible of intel_sdvo.[ch] to struct
intel_display.

Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/2e79909f8a060d7ff1744911f8da9300eb1f225c.1739378095.git.jani.nikula@intel.com
3 months agodrm/i915/display: convert intel_set_{cpu,pch}_fifo_underrun_reporting() to intel_display
Jani Nikula [Wed, 12 Feb 2025 16:36:36 +0000 (18:36 +0200)]
drm/i915/display: convert intel_set_{cpu,pch}_fifo_underrun_reporting() to intel_display

Going forward, struct intel_display is the main display device data
pointer. Convert intel_set_cpu_fifo_underrun_reporting() and
intel_set_pch_fifo_underrun_reporting() to struct intel_display, along
with some of the call chains from there.

Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/3b984d0183214d05d0cdecad35184ea8d89ae050.1739378095.git.jani.nikula@intel.com
3 months agodrm/i915/hpd: drop dev_priv parameter from intel_hpd_pin_default()
Jani Nikula [Wed, 12 Feb 2025 16:36:35 +0000 (18:36 +0200)]
drm/i915/hpd: drop dev_priv parameter from intel_hpd_pin_default()

The function doesn't use the parameter for anything. Drop it.

Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/4347a0f71a1a8c515617cf06471486d9bbb4a026.1739378095.git.jani.nikula@intel.com
3 months agodrm/i915/display: convert assert_port_valid() to struct intel_display
Jani Nikula [Wed, 12 Feb 2025 16:36:34 +0000 (18:36 +0200)]
drm/i915/display: convert assert_port_valid() to struct intel_display

Going forward, struct intel_display is the main display device data
pointer. Convert the assert_port_valid() helper to struct intel_display,
allowing further conversions elsewhere.

Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/e06ef0e2cc34d42918f3208362587a17ea34e28f.1739378095.git.jani.nikula@intel.com
3 months agodrm/i915/display: convert assert_transcoder*() to struct intel_display
Jani Nikula [Wed, 12 Feb 2025 16:36:33 +0000 (18:36 +0200)]
drm/i915/display: convert assert_transcoder*() to struct intel_display

Going forward, struct intel_display is the main display device data
pointer. Convert the assert_transcoder*() helpers to struct
intel_display, allowing further conversions elsewhere.

Do a few small opportunistic conversions right away.

Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/430c2f3c899bc98beeb6ba8608f841c9271d0971.1739378095.git.jani.nikula@intel.com
3 months agodrm/i915/ips: convert hsw_ips.c to struct intel_display
Jani Nikula [Wed, 12 Feb 2025 16:36:32 +0000 (18:36 +0200)]
drm/i915/ips: convert hsw_ips.c to struct intel_display

Going forward, struct intel_display is the main display device data
pointer. Convert as much as possible of hsw_ips.c to struct
intel_display.

Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/ebea40784fca6cfb4dbacec570bc9bef49393fc1.1739378095.git.jani.nikula@intel.com
3 months agodrm/i915/hdmi: convert g4x_hdmi.[ch] to struct intel_display
Jani Nikula [Wed, 12 Feb 2025 16:36:31 +0000 (18:36 +0200)]
drm/i915/hdmi: convert g4x_hdmi.[ch] to struct intel_display

Going forward, struct intel_display is the main display device data
pointer. Convert as much as possible of g4x_hdmi.[ch] to struct
intel_display.

Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/4fbaaa4cdab8ec020e5b3fb2f615b3c244c9da2d.1739378095.git.jani.nikula@intel.com
3 months agodrm/i915/dp: convert g4x_dp.[ch] to struct intel display
Jani Nikula [Wed, 12 Feb 2025 16:36:30 +0000 (18:36 +0200)]
drm/i915/dp: convert g4x_dp.[ch] to struct intel display

Going forward, struct intel_display is the main display device data
pointer. Convert as much as possible of g4x_dp.[ch] to struct
intel_display.

Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/89ce4f7e6aa31f3db6316537f54c5bc7df852322.1739378095.git.jani.nikula@intel.com
3 months agodrm/i915/dsb: Decode DSB error interrupts
Ville Syrjälä [Fri, 7 Feb 2025 22:31:59 +0000 (00:31 +0200)]
drm/i915/dsb: Decode DSB error interrupts

Decode the DSB error interrupts into human readable
form for easier debugging.

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250207223159.14132-9-ville.syrjala@linux.intel.com
Reviewed-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
3 months agodrm/i915/vrr: Check that the push send bit is clear after delayed vblank
Ville Syrjälä [Mon, 10 Feb 2025 16:07:11 +0000 (18:07 +0200)]
drm/i915/vrr: Check that the push send bit is clear after delayed vblank

Since we don't do mailbox updates the push send bit
should alwyas clear by the time the delay vblank fires
and the flip completes. Check for that to make sure we
haven't screwed up the sequencing/vblank evasion/etc.

On the DSB path we should be able to guarantee this
since we don't have to deal with any scheduler latencies
and whatnot. I suppose unexpected DMA/memory latencies
might be the only thing that might trip us up here.

For the MMIO path we do always have a non-zero chance
that vblank evasion fails (since we can't really guarantee
anything about the scheduling behaviour). That could trip
up this check, but that seems fine since we already print
errors for other types of vblank evasion failures.

Should the CPU vblank evasion actually fail, then the push
send bit can still be set when the next commit happens. But
both the DSB and MMIO paths should handle that situation
gracefully.

v2: Only check once instead of polling for two scanlines
    since we should now be guaranteed to be past the
    delayed vblank.
    Also check in the MMIO path for good measure
v3: Skip the push send check when VRR is disabled.
    With joiner the secondary pipe's DSBs doen't have access
    to the transcoder registers, and so doing this check
    there triggers a reponse timeout error on the DSB. VRR
    is not currently allowed when using joiner, so this will
    prevent the bogus register access.

Reviewed-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250210160711.24010-1-ville.syrjala@linux.intel.com
3 months agodrm/i915/vrr: Reorder the DSB "wait for safe window" vs. TRANS_PUSH
Ville Syrjälä [Fri, 7 Feb 2025 22:31:57 +0000 (00:31 +0200)]
drm/i915/vrr: Reorder the DSB "wait for safe window" vs. TRANS_PUSH

Currently we trigger the push send first, then follow it with
a "wait for safe window". That approach no longer works on
PTL+ because triggering the push send immediately ends the safe
window. On prior hardware the safe window extended past the
push being sent (presumably all the way to the pipe's delayed
vblank).

In order to deal with the new hardware behaviour we must reverse
the order of these two operations: first wait for safe window,
then trigger the push.

The only slight danger with this approach is that if we mess up
the vblank evasion around the vmax decision boundary the push
might get postponed until after the next frame's vactive. But
assuming we don't mess up the vblank evasion this approach is
completely safe.

As a slight bonus we can perform the push after we've done the
LUT writes as well, meaning we no longer have to worry about
extending the vblank delay to provide enough time for LUT
programming. Instead we will now depend on the vblank evasion
at vmax decision boundary to guarantee this.

However vblank delay (or framestart delay) is still the only
way to provide extra time for the LUT programming in the
non-VRR use cases. Let's assume we don't need anything extra
for now, but eventually we should come up with some proper
estimates on how long the LUT programming can take and
configure the vblank delay accordingly for the non-VRR use
cases.

Reviewed-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250207223159.14132-7-ville.syrjala@linux.intel.com
3 months agodrm/i915/dsb: Introduce intel_dsb_poll()
Ville Syrjälä [Fri, 7 Feb 2025 22:31:56 +0000 (00:31 +0200)]
drm/i915/dsb: Introduce intel_dsb_poll()

Add a function for emitting a DSB poll instruction. We'll allow
the caller to specify the poll parameters.

v2: s/wait/wait_us/ (Ankit)

Reviewed-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250207223159.14132-6-ville.syrjala@linux.intel.com
3 months agodrm/i915/dsb: Compute use_dsb earlier
Ville Syrjälä [Fri, 7 Feb 2025 22:31:55 +0000 (00:31 +0200)]
drm/i915/dsb: Compute use_dsb earlier

Skip all the commit completion interrupt stuff on the
chained DSB when we don't take the full DSB path (ie. when
the plane/pipe programming is done via MMIO). The commit
completion will be done via the CPU side vblank interrupt.

Currently this is just a redundant interrupt, so not a big
deal. But in the future we'll be moving the TRANS_PUSH write
into the chained DSB as well, and that we definitely don't
want to do when it's also being done by the CPU from
intel_pipe_update_end().

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250207223159.14132-5-ville.syrjala@linux.intel.com
Reviewed-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
3 months agodrm/i915/vrr: Account for TRANS_PUSH delay
Ville Syrjälä [Fri, 7 Feb 2025 22:31:54 +0000 (00:31 +0200)]
drm/i915/vrr: Account for TRANS_PUSH delay

When we send a push during vblank the TRANS_PUSH write happens
at some point during a scanline, and the hardware picks it up
on the next scanline. Thus there is up to one extra scanline
of delay between the TRANS_PUSH write and the delayed vblank
triggering. Account for that during intel_dsb_wait_vblank_delay()
so that we are guaranteed to be past the delayed vblank before
we trigger the completion interrupt for the commit.

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250207223159.14132-4-ville.syrjala@linux.intel.com
Reviewed-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
3 months agodrm/i915/vrr: Don't send push for legacy cursor updates
Ville Syrjälä [Fri, 7 Feb 2025 22:31:53 +0000 (00:31 +0200)]
drm/i915/vrr: Don't send push for legacy cursor updates

We don't really want legacy cursor updates to trigger
VRR pushes because these can happen willy nilly and we
generally want more precise control over the pushes.
The fastpath in intel_legacy_cursor_update() doesn't
send pushes, but if we punt to the full commit path
(with the flip completion short circuited) we are currently
sending pushes. Skip those as well so that they don't
interfere with the push handling from normal commits.

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250207223159.14132-3-ville.syrjala@linux.intel.com
Reviewed-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
3 months agodrm/i915/dsb: Move the +1 usec adjustment into dsb_wait_usec()
Ville Syrjälä [Fri, 7 Feb 2025 22:31:52 +0000 (00:31 +0200)]
drm/i915/dsb: Move the +1 usec adjustment into dsb_wait_usec()

The "wait usec" DSB command doesn't quite seem to able to
guarantee that it always waits at least the specified
amount of usecs. Some of that could be just because it
supposedly just does some kind of dumb timestamp comparison
internally. But I also see cases where two hardware timestamps
sampled on each side of the "wait usec" command come out one
less than expected. So it looks like we always need at least a
+1 to guarantee that we never wait less than specified. Always
apply that adjustment in dsb_wait_usec().

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250207223159.14132-2-ville.syrjala@linux.intel.com
Reviewed-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
3 months agodrm/i915/pch: Remove unused i915->pch_id
Jani Nikula [Fri, 7 Feb 2025 10:17:38 +0000 (12:17 +0200)]
drm/i915/pch: Remove unused i915->pch_id

With the PCH checks based on PCH types instead of IDs, the i915->pch_id
member has become unused. Remove it.

Reviewed-by: Nemesa Garg <nemesa.garg@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/fac1c59800128e8f398e83d718a3a5dc235d0526.1738923308.git.jani.nikula@intel.com
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
3 months agodrm/i915/pch: Hide PCH device IDs
Jani Nikula [Fri, 7 Feb 2025 10:17:37 +0000 (12:17 +0200)]
drm/i915/pch: Hide PCH device IDs

Only the PCH identification code needs the PCH device IDs, as all the
PCH checks are now based on PCH type. Hide the PCH device IDs inside
intel_pch.c. Remove the unused INTEL_PCH_ID() macro while at it.

Reviewed-by: Nemesa Garg <nemesa.garg@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/d1ceb9fc461cf21e1b885a55293f593eba1458ea.1738923308.git.jani.nikula@intel.com
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
3 months agodrm/i915/pch: Make LPT LP a dedicated PCH type
Jani Nikula [Fri, 7 Feb 2025 10:17:36 +0000 (12:17 +0200)]
drm/i915/pch: Make LPT LP a dedicated PCH type

Add PCH type PCH_LPT_LP and rename PCH_LPT to PCH_LPT_H for
consistency. Keep the existing HAS_PCH_LPT*() macros, but express them
in terms of the PCH types instead of looking at the device IDs
directly. This makes the PCH checks independent of the PCH device IDs.

Reviewed-by: Nemesa Garg <nemesa.garg@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/777b63f50b10fba1d768af25870e81b33267bdc8.1738923308.git.jani.nikula@intel.com
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
3 months agodrm/i915/dpll: Replace all other leftover drm_i915_private
Suraj Kandpal [Wed, 12 Feb 2025 07:45:42 +0000 (13:15 +0530)]
drm/i915/dpll: Replace all other leftover drm_i915_private

Replace all other left over drm_i915_private with intel_display
in dpll_mgr.c.

--v2
-Don't use inline to_intel_display() [Jani]

Signed-off-by: Suraj Kandpal <suraj.kandpal@intel.com>
Reviewed-by: Jani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250212074542.3569452-9-suraj.kandpal@intel.com
3 months agodrm/i915/dpll: Accept intel_display as argument for shared_dpll_init
Suraj Kandpal [Wed, 12 Feb 2025 07:45:41 +0000 (13:15 +0530)]
drm/i915/dpll: Accept intel_display as argument for shared_dpll_init

Use intel_display as an argument for intel_shared_dpll_init() and
replace drm_i915_private in function wherever possible.
While at it prefer using display->platform.xx over IS_PLATFORM.
Initialize dpio_phy and dpio_channel since with IS_GEMINILAKE()
and IS_BROXTON() compiler knows it will return false for xe but
since display->platform.xx is a runtime check which means the
compiler sees a potential path where uninitialized variables
could be accessed and raises a warning.

--v2
-Amend commit message to explain why some variables were
initialized [Jani]

Signed-off-by: Suraj Kandpal <suraj.kandpal@intel.com>
Reviewed-by: Jani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250212074542.3569452-8-suraj.kandpal@intel.com
3 months agodrm/i915/dpll: Use intel_display for update_refclk hook
Suraj Kandpal [Wed, 12 Feb 2025 07:45:40 +0000 (13:15 +0530)]
drm/i915/dpll: Use intel_display for update_refclk hook

Use intel_display instead of drm_i915_private for update_refclk hook.

Signed-off-by: Suraj Kandpal <suraj.kandpal@intel.com>
Reviewed-by: Jani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250212074542.3569452-7-suraj.kandpal@intel.com
3 months agodrm/i915/dpll: Use intel_display for asserting pll
Suraj Kandpal [Wed, 12 Feb 2025 07:45:39 +0000 (13:15 +0530)]
drm/i915/dpll: Use intel_display for asserting pll

Use intel_display instead of drm_i915_private to assert pll enabled
and disabled and the corresponding changes needed to make that happen.

Signed-off-by: Suraj Kandpal <suraj.kandpal@intel.com>
Reviewed-by: Jani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250212074542.3569452-6-suraj.kandpal@intel.com
3 months agodrm/i915/dpll: Use intel_display possible in shared_dpll_mgr hooks
Suraj Kandpal [Wed, 12 Feb 2025 07:45:38 +0000 (13:15 +0530)]
drm/i915/dpll: Use intel_display possible in shared_dpll_mgr hooks

We use intel_display for function hooks of shared_dpll_mgr and
any function that gets called when we use for_each_shared_dpll.
This also contains some opportunistic display->platform.xx changes
all to reductate the use of drm_i915_private.

--v2
-rebase

--v3
-Don't use inline to_i915 [Jani]

Signed-off-by: Suraj Kandpal <suraj.kandpal@intel.com>
Reviewed-by: Jani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250212074542.3569452-5-suraj.kandpal@intel.com
3 months agodrm/i915/dpll: Use intel_display for dpll dump and compare hw state
Suraj Kandpal [Wed, 12 Feb 2025 07:45:37 +0000 (13:15 +0530)]
drm/i915/dpll: Use intel_display for dpll dump and compare hw state

Let's use intel_display for dpll dump and compare hw state. This also
helps elimanate drm_i915_private dependency from i915_shared_dplls_info
in intel_display_debugfs.c

--v2
-Fix commit message [Jani]

Signed-off-by: Suraj Kandpal <suraj.kandpal@intel.com>
Reviewed-by: Jani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250212074542.3569452-4-suraj.kandpal@intel.com
3 months agodrm/i915/dpll: Change param to intel_display in for_each_shared_dpll
Suraj Kandpal [Wed, 12 Feb 2025 07:45:36 +0000 (13:15 +0530)]
drm/i915/dpll: Change param to intel_display in for_each_shared_dpll

Change the argument of for_each_shared_dpll to take intel_display which
helps move as an ongoing effort to get rid off the dependency on
drm_i915_private. Some opportunistic changes in intel_pch_refclk done
too.

--v2
-Prefer using &i915->display [Jani]

Signed-off-by: Suraj Kandpal <suraj.kandpal@intel.com>
Reviewed-by: Jani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250212074542.3569452-3-suraj.kandpal@intel.com
3 months agodrm/i915: Use intel_display wherever possible
Suraj Kandpal [Wed, 12 Feb 2025 07:45:35 +0000 (13:15 +0530)]
drm/i915: Use intel_display wherever possible

Use struct intel_display wherever possible in intel_display_debug_fs.c
to reduce the use of drm_i915_private.
While at it do the opportunistic display->platform.xx replacement.

--v2
-Rebase

--v3
-Don't use inline to_intel_display [Jani]
-Don't use display debug fs as subject prefix [Jani]

Signed-off-by: Suraj Kandpal <suraj.kandpal@intel.com>
Reviewed-by: Jani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250212074542.3569452-2-suraj.kandpal@intel.com
3 months agodrm/i915: Continue intel_display_power struct intel_display conversion
Ville Syrjälä [Tue, 11 Feb 2025 00:01:33 +0000 (02:01 +0200)]
drm/i915: Continue intel_display_power struct intel_display conversion

Convert the remaining intel_display_power.h interfaces to
take struct intel_display instead of struct drm_i915_private.
intel_display_power.c still has some internal uses due to
i915->runtime_pm.

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250211000135.6096-3-ville.syrjala@linux.intel.com
Reviewed-by: Jani Nikula <jani.nikula@intel.com>
3 months agodrm/i915: Fix CONFIG_DRM_I915_DEBUG_RUNTIME_PM=n build
Ville Syrjälä [Tue, 11 Feb 2025 00:01:32 +0000 (02:01 +0200)]
drm/i915: Fix CONFIG_DRM_I915_DEBUG_RUNTIME_PM=n build

Looks like I missed one of myriad CONFIG_DRM_I915_DEBUG_RUNTIME_PM=n
special cases when converting the intel_display_power_{get,put}()
code to use struct intel_display. Only noticed after the fact
when building a EXPERT=n kernel :/

Fixes: 5dcfda5cfa42 ("drm/i915: Convert intel_display_power_{get,put}*() to intel_display")
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250211000135.6096-2-ville.syrjala@linux.intel.com
Reviewed-by: Jani Nikula <jani.nikula@intel.com>
3 months agodrm/i915: Pimp plane debugs
Ville Syrjälä [Thu, 6 Feb 2025 18:55:33 +0000 (20:55 +0200)]
drm/i915: Pimp plane debugs

Include the standard "[PLANE:%d:s]" stuff in all plane debugs
(or rather all I was able to find), to provide better information
on which plane we're actually talking about.

There are a few spots where we care about the CRTC as well, so
include that where appropriate.

Reviewed-by: Chaitanya Kumar Borah <chaitanya.kumar.borah@intel.com>
Reviewed-by: Jani Nikula <jani.nikula@intel.com>
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250206185533.32306-13-ville.syrjala@linux.intel.com
3 months agodrm/i915: Use DRM_RECT_FMT & co. for plane debugs
Ville Syrjälä [Thu, 6 Feb 2025 18:55:32 +0000 (20:55 +0200)]
drm/i915: Use DRM_RECT_FMT & co. for plane debugs

Switch the plane debugs to use DRM_RECT_FMT & co. instead
of drm_rect_debug_print() so that the debugs go on the same line.

Reviewed-by: Jani Nikula <jani.nikula@intel.com>
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250206185533.32306-12-ville.syrjala@linux.intel.com
3 months agodrm/i915: Convert skl_univeral_plane.c to struct intel_display
Ville Syrjälä [Thu, 6 Feb 2025 18:55:31 +0000 (20:55 +0200)]
drm/i915: Convert skl_univeral_plane.c to struct intel_display

struct intel_display will replace struct drm_i915_private as
the main thing for display code. Convert the skl+ universal plane
code to use it.

Note that we still have two straggles in the form on
HAS_FLAT_CCS() and the pxp stuff.

Reviewed-by: Jani Nikula <jani.nikula@intel.com>
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250206185533.32306-11-ville.syrjala@linux.intel.com
3 months agodrm/i915: Convert intel_cursor.c to struct intel_display
Ville Syrjälä [Thu, 6 Feb 2025 18:55:30 +0000 (20:55 +0200)]
drm/i915: Convert intel_cursor.c to struct intel_display

struct intel_display will replace struct drm_i915_private as
the main thing for display code. Convert the cursor code to
use it.

Reviewed-by: Jani Nikula <jani.nikula@intel.com>
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250206185533.32306-10-ville.syrjala@linux.intel.com
3 months agodrm/i915: Finish intel_sprite.c struct intel_display conversion
Ville Syrjälä [Thu, 6 Feb 2025 18:55:29 +0000 (20:55 +0200)]
drm/i915: Finish intel_sprite.c struct intel_display conversion

intel_sprite.c was partially converted to struct intel_display.
Finish the job now that we can deal with the platform checks
as well.

And while at it we also move the 'display' variable declaration
to be the first thing in most functions, consistency. We can
actually do that now since intel_display() accepts the intel_plane
and intel_plane_state types.

Reviewed-by: Jani Nikula <jani.nikula@intel.com>
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250206185533.32306-9-ville.syrjala@linux.intel.com
3 months agodrm/i915: Convert i9xx_plane.c to struct intel_display
Ville Syrjälä [Thu, 6 Feb 2025 18:55:28 +0000 (20:55 +0200)]
drm/i915: Convert i9xx_plane.c to struct intel_display

struct intel_display will replace struct drm_i915_private as
the main thing for display code. Convert the pre-skl primary plane
code to use it.

Reviewed-by: Jani Nikula <jani.nikula@intel.com>
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250206185533.32306-8-ville.syrjala@linux.intel.com
3 months agodrm/i915: Convert intel_display_power_{get,put}*() to intel_display
Ville Syrjälä [Thu, 6 Feb 2025 18:55:27 +0000 (20:55 +0200)]
drm/i915: Convert intel_display_power_{get,put}*() to intel_display

Pass intel_display to the display power stuff. These are spread
all over the place so tend to hinder clean conversions of whole
files.

TODO: The gt part/unpark power domain shenanigans need some
kind of more abstract interface...

v2: Deal with cmtg

Reviewed-by: Jani Nikula <jani.nikula@intel.com>
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250206185533.32306-7-ville.syrjala@linux.intel.com
3 months agodrm/i915: Convert intel_fb.c to struct intel_display
Ville Syrjälä [Thu, 6 Feb 2025 18:55:26 +0000 (20:55 +0200)]
drm/i915: Convert intel_fb.c to struct intel_display

struct intel_display will replace struct drm_i915_private as
the main thing for display code. Convert the fb code to
use it.

Reviewed-by: Jani Nikula <jani.nikula@intel.com>
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250206185533.32306-6-ville.syrjala@linux.intel.com
3 months agodrm/i915: Convert intel_crtc.c to struct intel_display
Ville Syrjälä [Thu, 6 Feb 2025 18:55:25 +0000 (20:55 +0200)]
drm/i915: Convert intel_crtc.c to struct intel_display

struct intel_display will replace struct drm_i915_private as
the main thing for display code. Convert intel_crtc.c code to
use it.

Reviewed-by: Jani Nikula <jani.nikula@intel.com>
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250206185533.32306-5-ville.syrjala@linux.intel.com
3 months agodrm/i915: Decouple intel_fb_bo.h interfaces from driver specific types
Ville Syrjälä [Thu, 6 Feb 2025 18:55:24 +0000 (20:55 +0200)]
drm/i915: Decouple intel_fb_bo.h interfaces from driver specific types

Make the intel_fb_bo.h interfaces operated purely in base
drm_ types so that each driver (i915 and xe) doesn't have to
know about each other, or the display stuff.

v2: s/dev/drm/ (Jani)

Reviewed-by: Jani Nikula <jani.nikula@intel.com>
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250206185533.32306-4-ville.syrjala@linux.intel.com
3 months agodrm/i915: Decouple i915_gem_dumb_create() from the display a bit
Ville Syrjälä [Thu, 6 Feb 2025 18:55:23 +0000 (20:55 +0200)]
drm/i915: Decouple i915_gem_dumb_create() from the display a bit

Pass the device argument as drm_device to intel_plane_fb_max_stride()
to decouple i915_gem_dumb_create() vs. the display code a bit.

xe currently doesn't even call this, but it probably should...

v2: s/dev/drm/ (Jani)

Reviewed-by: Jani Nikula <jani.nikula@intel.com>
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250206185533.32306-3-ville.syrjala@linux.intel.com
3 months agodrm/i915: Pass intel_display to intel_scanout_needs_vtd_wa()
Ville Syrjälä [Thu, 6 Feb 2025 18:55:22 +0000 (20:55 +0200)]
drm/i915: Pass intel_display to intel_scanout_needs_vtd_wa()

Now that intel_scanout_needs_vtd_wa() is no longer used from
the gem code we can convert it to take struct intel_display.
which will help with converting the low level plane code over
as well.

Cc: Jani Nikula <jani.nikula@intel.com>
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250206185533.32306-2-ville.syrjala@linux.intel.com
Reviewed-by: Jani Nikula <jani.nikula@intel.com>
3 months agodrm/i915/hdcp: Make some functions static
Jani Nikula [Fri, 7 Feb 2025 10:58:38 +0000 (12:58 +0200)]
drm/i915/hdcp: Make some functions static

With the debugfs implementation moved next to the implementation, we no
longer need to expose some of the functions. Make them static.

Cc: Suraj Kandpal <suraj.kandpal@intel.com>
Reviewed-by: Suraj Kandpal <suraj.kandpal@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250207105838.179805-1-jani.nikula@intel.com
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
3 months agodrm/i915/hdcp: Convert platform checks to use display->platform
Jani Nikula [Fri, 7 Feb 2025 10:41:12 +0000 (12:41 +0200)]
drm/i915/hdcp: Convert platform checks to use display->platform

Prefer display->platform.<platform> over IS_<PLATFORM>(i915), and
reducate struct drm_i915_private usages while at it.

Cc: Suraj Kandpal <suraj.kandpal@intel.com>
Reviewed-by: Suraj Kandpal <suraj.kandpal@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/58bad1e888a57a014acbaae67ccddd4f895091a7.1738924826.git.jani.nikula@intel.com
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
3 months agodrm/i915/hdcp: rename intel_connector to connector
Jani Nikula [Fri, 7 Feb 2025 10:41:11 +0000 (12:41 +0200)]
drm/i915/hdcp: rename intel_connector to connector

Follow the current convention of naming struct intel_connector pointers
connector.

Cc: Suraj Kandpal <suraj.kandpal@intel.com>
Reviewed-by: Suraj Kandpal <suraj.kandpal@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/8f43542a8f0ce0ec5725b769c077d3cea723bde0.1738924826.git.jani.nikula@intel.com
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
3 months agodrm/i915/hdcp: Move HDCP debugfs to intel_hdcp.c
Jani Nikula [Fri, 7 Feb 2025 10:41:10 +0000 (12:41 +0200)]
drm/i915/hdcp: Move HDCP debugfs to intel_hdcp.c

Continue with placing debugfs next to the implementation.
intel_connector_info() still needs intel_hdcp_info(), so we'll need to
expose that too.

Cc: Suraj Kandpal <suraj.kandpal@intel.com>
Reviewed-by: Suraj Kandpal <suraj.kandpal@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/c118e992673f6b054aacaff0e1850fcea329e000.1738924826.git.jani.nikula@intel.com
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
3 months agodrm/i915/dp_mst: Fix disabling the minimum HBlank time
Imre Deak [Thu, 6 Feb 2025 16:46:24 +0000 (18:46 +0200)]
drm/i915/dp_mst: Fix disabling the minimum HBlank time

Disable the minimum HBlank time only on LNL+, where this functionality
and corresponding register exists.

Bspec: 74379
Fixes: a5ebe00c2ace ("drm/i915/dp: Guarantee a minimum HBlank time")
Cc: Arun R Murthy <arun.r.murthy@intel.com>
Cc: Suraj Kandpal <suraj.kandpal@intel.com>
Reviewed-by: Suraj Kandpal <suraj.kandpal@intel.com>
Signed-off-by: Imre Deak <imre.deak@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250206164624.3185280-1-imre.deak@intel.com
3 months agoRevert "drm/i915/dp: Compute as_sdp based on if vrr possible"
Mitul Golani [Thu, 6 Feb 2025 04:50:01 +0000 (10:20 +0530)]
Revert "drm/i915/dp: Compute as_sdp based on if vrr possible"

This reverts commit 08277aa5d5a44befd71717de35b956f55e1e8401.

Compute AS SDP params only when VRR is enabled to maintain
PSR exclusivity.

Signed-off-by: Mitul Golani <mitulkumar.ajitkumar.golani@intel.com>
Reviewed-by: Jouni Högander <jouni.hogander@intel.com>
Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250206045001.2919360-3-mitulkumar.ajitkumar.golani@intel.com
3 months agodrm/i915/display: Skip state checker for AS SDP infoframe enable
Mitul Golani [Thu, 6 Feb 2025 04:50:00 +0000 (10:20 +0530)]
drm/i915/display: Skip state checker for AS SDP infoframe enable

Avoid full modeset by skipping infoframe.enable check when toggling
AS SDP while enabling VRR, preventing full modeset while pipe
config changes.

--v2:
- Add check for exclude_infoframe. (Ankit)
- Update commit message. (Ankit)

--v3:
- Optimise PIPE_CONF_CHECK for infoframes.enable. [Ankit]

Signed-off-by: Mitul Golani <mitulkumar.ajitkumar.golani@intel.com>
Reviewed-by: Jouni Högander <jouni.hogander@intel.com>
Reviewed-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250206045001.2919360-2-mitulkumar.ajitkumar.golani@intel.com
3 months agodrm/i915/backlight: Enable nits based luminance
Suraj Kandpal [Thu, 6 Feb 2025 06:32:53 +0000 (12:02 +0530)]
drm/i915/backlight: Enable nits based luminance

Enable nits based luminance by writing the PANEL_LUMINANCE_CONTROL
bit and set the correct register to change brightness.

Signed-off-by: Suraj Kandpal <suraj.kandpal@intel.com>
Tested-by: Ben Kao <ben.kao@intel.com>
Reviewed-by: Arun R Murthy <arun.r.murthy@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250206063253.2827017-9-suraj.kandpal@intel.com
3 months agodrm/i915/backlight: Setup nits based luminance via VESA
Suraj Kandpal [Thu, 6 Feb 2025 06:32:52 +0000 (12:02 +0530)]
drm/i915/backlight: Setup nits based luminance via VESA

Modify backlight setup function for VESA interface to take into
account the nits based luminance.

--v2
-Prefer using luminance over nits [Jani]

Signed-off-by: Suraj Kandpal <suraj.kandpal@intel.com>
Tested-by: Ben Kao <ben.kao@intel.com>
Reviewed-by: Arun R Murthy <arun.r.murthy@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250206063253.2827017-8-suraj.kandpal@intel.com
3 months agodrm/i915/backlight: Add function to change brightness in nits for VESA
Suraj Kandpal [Thu, 6 Feb 2025 06:32:51 +0000 (12:02 +0530)]
drm/i915/backlight: Add function to change brightness in nits for VESA

Create a function that fills in the value for
PANEL_TARGET_LUMINANCE_VALUE which helps in changing the luminance in
nits using VESA interface.

--v2
-Prefer using luminance over nits [Jani]

Signed-off-by: Suraj Kandpal <suraj.kandpal@intel.com>
Tested-by: Ben Kao <ben.kao@intel.com>
Reviewed-by: Arun R Murthy <arun.r.murthy@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250206063253.2827017-7-suraj.kandpal@intel.com
3 months agodrm/i915/backlight: Modify function to get VESA brightness in Nits
Suraj Kandpal [Thu, 6 Feb 2025 06:32:50 +0000 (12:02 +0530)]
drm/i915/backlight: Modify function to get VESA brightness in Nits

Modify vesa_get_brightness function to take into account
luminance_control_support and based on that read the appropriate
register and return the value.

--v2
-Changes since we now use luminance instead of nits

Signed-off-by: Suraj Kandpal <suraj.kandpal@intel.com>
Tested-by: Ben Kao <ben.kao@intel.com>
Reviewed-by: Arun R Murthy <arun.r.murthy@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250206063253.2827017-6-suraj.kandpal@intel.com
3 months agodrm/i915/backlight: Check Luminance based brightness control for VESA
Suraj Kandpal [Thu, 6 Feb 2025 06:32:49 +0000 (12:02 +0530)]
drm/i915/backlight: Check Luminance based brightness control for VESA

Check if we are capable of controlling brightness via luminance
which is dependent on PANEL_LUMINANCE_CONTROL_CAPABLE bit being set
on EDP_GENERAL_CAPABILITY_2 register.

--v2
-Prefer using luminance rather than nits [Jani]
-Fix commit message

--v3
-Fix the bit name used in commit message [Arun]
-Use correct edp_dpcd[] to check the capability [Arun]

Signed-off-by: Suraj Kandpal <suraj.kandpal@intel.com>
Tested-by: Ben Kao <ben.kao@intel.com>
Reviewed-by: Arun R Murthy <arun.r.murthy@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250206063253.2827017-5-suraj.kandpal@intel.com
3 months agodrm/i915/backlight: Use proper interface based on eDP version
Suraj Kandpal [Thu, 6 Feb 2025 06:32:48 +0000 (12:02 +0530)]
drm/i915/backlight: Use proper interface based on eDP version

eDP is supposed to use VESA interface when using revision 1.5 and above,
use Intel interface for backlight control otherwise. Add check to
use correct interface.

Signed-off-by: Suraj Kandpal <suraj.kandpal@intel.com>
Tested-by: Ben Kao <ben.kao@intel.com>
Reviewed-by: Arun R Murthy <arun.r.murthy@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250206063253.2827017-4-suraj.kandpal@intel.com
3 months agodrm/dp: Increase eDP display control capability size
Suraj Kandpal [Thu, 6 Feb 2025 06:32:47 +0000 (12:02 +0530)]
drm/dp: Increase eDP display control capability size

Increase the eDP display control capability size to take into
account the general capability register 703 and 704 that have
recently been added.

Signed-off-by: Suraj Kandpal <suraj.kandpal@intel.com>
Reviewed-by: Arun R Murthy <arun.r.murthy@intel.com>
Acked-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250206063253.2827017-3-suraj.kandpal@intel.com
3 months agodrm/dp: Add eDP 1.5 bit definition
Suraj Kandpal [Thu, 6 Feb 2025 06:32:46 +0000 (12:02 +0530)]
drm/dp: Add eDP 1.5 bit definition

Add the eDP revision bit value for 1.5.

Spec: eDPv1.5 Table 16-5
Signed-off-by: Suraj Kandpal <suraj.kandpal@intel.com>
Reviewed-by: Arun R Murthy <arun.r.murthy@intel.com>
Tested-by: Ben Kao <ben.kao@intel.com>
Acked-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250206063253.2827017-2-suraj.kandpal@intel.com
3 months agodrm/i915/dp_mst: Fix getting display pointer in intel_dp_mst_compute_min_hblank()
Imre Deak [Thu, 6 Feb 2025 00:17:26 +0000 (02:17 +0200)]
drm/i915/dp_mst: Fix getting display pointer in intel_dp_mst_compute_min_hblank()

The MST intel_connector::encoder pointer is NULL if the connector hasn't
been enabled before, so it can't be used to retrieve the display
pointer. Use instead the crtc_state and drop the unused connector
parameter.

v2: Use the crtc_state and drop the unused connector parameter.

Fixes: a5ebe00c2ace ("drm/i915/dp: Guarantee a minimum HBlank time")
Reported-and-tested-by: Khaled Almahallawy <khaled.almahallawy@intel.com>
Closes: https://lore.kernel.org/all/16754ee4cd21d99c1e81c5953134b496dd07630f.camel@intel.com
Reviewed-by: Khaled Almahallawy <khaled.almahallawy@intel.com> #v1
Cc: Arun R Murthy <arun.r.murthy@intel.com>
Cc: Suraj Kandpal <suraj.kandpal@intel.com>
Signed-off-by: Imre Deak <imre.deak@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250206001726.3021787-1-imre.deak@intel.com
3 months agodrm/i915/fbdev: Use fb->normal_view.gtt
Ville Syrjälä [Wed, 22 Jan 2025 15:17:55 +0000 (17:17 +0200)]
drm/i915/fbdev: Use fb->normal_view.gtt

Grab the GTT view for the fbdev fb pinning from
fb->normal_view.gtt instead of having and extra one on
the stack. Seems safer in case we ever put any new
information into normal GTT views.

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250122151755.6928-6-ville.syrjala@linux.intel.com
Reviewed-by: Jani Nikula <jani.nikula@intel.com>
3 months agodrm/i915: Use per-plane VT-d guard numbers
Ville Syrjälä [Wed, 22 Jan 2025 15:17:54 +0000 (17:17 +0200)]
drm/i915: Use per-plane VT-d guard numbers

Bspec lists different VT-d guard numbers (the number of dummy
padding PTEs) for different platforms and plane types. Use those
instead of just assuming the max glk+ number for everything.
This could avoid a bit of overhead on older platforms due to
reduced padding, and it makes it easier to cross check with the
spec.

Note that VLV/CHV do not document this w/a at all, so not sure
if it's actually needed or not. Nor do we actually know how much
padding is required if it is needed. For now use the same 128
PTEs that we use for snb-bdw primary planes.

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250122151755.6928-5-ville.syrjala@linux.intel.com
Reviewed-by: Jani Nikula <jani.nikula@intel.com>
3 months agodrm/i915: Calculate the VT-d guard size in the display code
Ville Syrjälä [Wed, 22 Jan 2025 15:17:53 +0000 (17:17 +0200)]
drm/i915: Calculate the VT-d guard size in the display code

Currently i915_gem_object_pin_to_display_plane() uses
i915_gem_object_get_tile_row_size() to calculate the tile row
size for the VT-d guard w/a. That's not really proper since
i915_gem_object_get_tile_row_size() only works for fenced BOs,
nor does it take rotation into account.

Remedy the situation by calculating the VT-d guard size in the
display code where we have more information readily available.
Although the default guard size (168 PTEs now) should cover
the more typical fb size use cases anyway, and only very large
Y/Yf-tiled framebuffers might have tile row size that exceeds it.

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250122151755.6928-4-ville.syrjala@linux.intel.com
Reviewed-by: Jani Nikula <jani.nikula@intel.com>
3 months agodrm/i915: Use more optimal VTd alignment for planes
Ville Syrjälä [Wed, 22 Jan 2025 15:17:52 +0000 (17:17 +0200)]
drm/i915: Use more optimal VTd alignment for planes

Depending on the platform and/or plane type we can get away
with a bit less alignment in the VT-d w/a. Reduce the numbers
accordingly.

Note that it's not actually clear in VLV/CHV need this w/a,
and if they do we don't actually know what kind of alignment
is sufficient. Leave the 256k alignment in place for now, but
toss in a FIXME.

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250122151755.6928-3-ville.syrjala@linux.intel.com
Reviewed-by: Jani Nikula <jani.nikula@intel.com>
3 months agodrm/i915: Move VT-d alignment into plane->min_alignment()
Ville Syrjälä [Wed, 22 Jan 2025 15:17:51 +0000 (17:17 +0200)]
drm/i915: Move VT-d alignment into plane->min_alignment()

Currently we don't account for the VT-d alignment w/a in
plane->min_alignment() which means that panning inside a larger
framebuffer can still cause the plane SURF to be misaligned.
Fix the issue by moving the VT-d alignment w/a into
plane->min_alignment() itself (for the affected platforms).

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250122151755.6928-2-ville.syrjala@linux.intel.com
Reviewed-by: Jani Nikula <jani.nikula@intel.com>
3 months agodrm/i915/psr: clarify intel_psr_pre_plane_update() conditions
Jani Nikula [Tue, 4 Feb 2025 14:05:18 +0000 (16:05 +0200)]
drm/i915/psr: clarify intel_psr_pre_plane_update() conditions

Make the conditions easier to follow. We don't do anything for
!psr->enabled, so hoist psr->enabled check higher, avoiding all the
checks when !psr->enabled. Stop the bitwise OR abuse on booleans by
removing the temporary variable altogether.

v2: Rebase

Cc: Jouni Högander <jouni.hogander@intel.com>
Cc: Suraj Kandpal <suraj.kandpal@intel.com>
Reviewed-by: Jouni Högander <jouni.hogander@intel.com> # v1
Link: https://patchwork.freedesktop.org/patch/msgid/20250204140518.2971530-1-jani.nikula@intel.com
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
3 months agodrm/i915/backlight: convert to use struct intel_display
Jani Nikula [Tue, 4 Feb 2025 13:24:23 +0000 (15:24 +0200)]
drm/i915/backlight: convert to use struct intel_display

Going forward, struct intel_display will be the main display data
structure. Convert as much as possible of backlight code to use it.

There are some stragglers mainly around PCH checks.

Reviewed-by: Suraj Kandpal <suraj.kandpal@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250204132423.2910978-1-jani.nikula@intel.com
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
3 months agodrm/i915/cx0: convert to struct intel_display based platform checks
Jani Nikula [Tue, 4 Feb 2025 13:42:28 +0000 (15:42 +0200)]
drm/i915/cx0: convert to struct intel_display based platform checks

Switch the IS_<PLATFORM>() checks to display->platform.<platform>, and
drop a number of struct drm_i915_private pointers in the process.

Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250204134228.2934744-3-jani.nikula@intel.com
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
3 months agodrm/i915/cdclk: switch to new platform checks
Jani Nikula [Tue, 4 Feb 2025 13:42:27 +0000 (15:42 +0200)]
drm/i915/cdclk: switch to new platform checks

Switch the IS_<PLATFORM>() checks to display->platform.<platform>, and
drop a number of struct drm_i915_private pointers in the process.

While at it, replace

/* NOOP */;

with
; /* NOOP */

to avoid a checkpatch warning on misleading indentation.

Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250204134228.2934744-2-jani.nikula@intel.com
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
3 months agodrm/i915/display: convert intel_ddi_buf_trans.c to struct intel_display
Jani Nikula [Tue, 4 Feb 2025 13:42:26 +0000 (15:42 +0200)]
drm/i915/display: convert intel_ddi_buf_trans.c to struct intel_display

Going forward, struct intel_display is the main device data structure
for display. Switch to it.

For MISSING_CASE(), log the PCI ID instead of the platform to get rid of
the i915_drv.h dependency.

Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
Reviewed-by: Matt Roper <matthew.d.roper@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250204134228.2934744-1-jani.nikula@intel.com
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
3 months agodrm/i915/lspcon: rename interfaces to intel_lspcon_* to unify
Jani Nikula [Tue, 4 Feb 2025 13:58:43 +0000 (15:58 +0200)]
drm/i915/lspcon: rename interfaces to intel_lspcon_* to unify

Rename all the main functions to have intel_lspcon_ prefix. Keep the
infoframes hooks named lspcon_ for now, and grouped together, as there'd
be a clash with intel_lspcon_infoframes_enabled().

Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/15e8c4133aee89181e6776a44e58f2573cfe23f2.1738677489.git.jani.nikula@intel.com
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
3 months agodrm/i915/lspcon: remove dp_to_lspcon(), hide enc_to_intel_lspcon()
Jani Nikula [Tue, 4 Feb 2025 13:58:42 +0000 (15:58 +0200)]
drm/i915/lspcon: remove dp_to_lspcon(), hide enc_to_intel_lspcon()

There are no users left for dp_to_lspcon(), remove it. The only two
users of enc_to_intel_lspcon() are in intel_lspcon.c, so hide it there.

v2: Rebase

Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/ea14ba07b88ba5ed65d832c89a3415b7a91edea9.1738677489.git.jani.nikula@intel.com
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
3 months agodrm/i915/lspcon: change signature of lspcon_wait_pcon_mode()
Jani Nikula [Tue, 4 Feb 2025 13:58:41 +0000 (15:58 +0200)]
drm/i915/lspcon: change signature of lspcon_wait_pcon_mode()

Switch from struct intel_lspcon to struct intel_digital_port to unify.

Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/84a00791d3d7ee4e34c1224ef7471918546635aa.1738677489.git.jani.nikula@intel.com
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
3 months agodrm/i915/lspcon: change signature of lspcon_detect_hdr_capability()
Jani Nikula [Tue, 4 Feb 2025 13:58:40 +0000 (15:58 +0200)]
drm/i915/lspcon: change signature of lspcon_detect_hdr_capability()

Switch from struct intel_lspcon to struct intel_digital_port to unify,
and return the value so the caller doesn't have to look at
lspcon->hdr_detected directly.

Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/6f249f5c537a16a6762faddffd6a95cbf61cf077.1738677489.git.jani.nikula@intel.com
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
3 months agodrm/i915/lspcon: add intel_lspcon_active() and use it
Jani Nikula [Tue, 4 Feb 2025 13:58:39 +0000 (15:58 +0200)]
drm/i915/lspcon: add intel_lspcon_active() and use it

Hide the direct lspcon->active use behind intel_lspcon_active().

Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/3eabe0cb07a84c63119ea893e149de410b4356b0.1738677489.git.jani.nikula@intel.com
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
3 months agodrm/i915/hdmi: move declarations for hsw_read/write_infoframe() to the right place
Jani Nikula [Tue, 4 Feb 2025 13:58:38 +0000 (15:58 +0200)]
drm/i915/hdmi: move declarations for hsw_read/write_infoframe() to the right place

The functions are located in intel_hdmi.c, put the declarations in
intel_hdmi.h.

Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/e8cd28a3c46f06b9654df8b7990e1e6a1d9e18c1.1738677489.git.jani.nikula@intel.com
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
3 months agoMerge drm/drm-next into drm-intel-next
Jani Nikula [Wed, 5 Feb 2025 17:12:37 +0000 (19:12 +0200)]
Merge drm/drm-next into drm-intel-next

Sync with v6.14-rc1.

Signed-off-by: Jani Nikula <jani.nikula@intel.com>
3 months agodrm/i915/dmc_wl: Do not check for DMC payload
Gustavo Sousa [Fri, 24 Jan 2025 19:12:34 +0000 (16:12 -0300)]
drm/i915/dmc_wl: Do not check for DMC payload

Enabling and disabling of DMC wakelock is already coupled with enabling
and disabling of dynamic DC states, which already depend on the DMC
being properly loaded. As such, we do not need to check if we already
have a DMC payload parsed in __intel_dmc_wl_supported().

Furthermore, the presence of such a check causes inconsistencies in the
refcount if the following sequence of events happen:

  1. A call to one of the register accessors from intel_de.h is done
     before the DMC payload is parsed. That causes intel_dmc_wl_get() to
     be called. Suppose the register offset qualifies as needing the
     wakelock.

     In normal circumstances, the refcount would be incremented, but,
     because __intel_dmc_wl_supported() returns false, the refcount is
     untouched.

  2. In a separate worker thread, the DMC firmware is parsed. Parsing of
     the DMC payload is finished before the corresponding
     intel_dmc_wl_put() from (1) is called.

  3. When in the context of (1), intel_dmc_wl_put() gets called, now we
     have __intel_dmc_wl_supported() returning true and we hit the
     warning, because the code doesn't expect a zero refcount.

Let's remove that check, since it is unnecessary and causes the
inconsistency illustrated above.

Reviewed-by: Krzysztof Karas <krzysztof.karas@intel.com>
Reviewed-by: Luca Coelho <luciano.coelho@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250124191250.56833-1-gustavo.sousa@intel.com
Signed-off-by: Gustavo Sousa <gustavo.sousa@intel.com>
3 months agodrm/i915/dp: Add support for DP UHBR SST DSC
Jani Nikula [Mon, 3 Feb 2025 16:08:34 +0000 (18:08 +0200)]
drm/i915/dp: Add support for DP UHBR SST DSC

Drop the UHBR limitation from DP SST DSC, and handle SST DSC bandwidth
computation for UHBR using intel_dp_mtp_tu_compute_config().

Cc: Imre Deak <imre.deak@intel.com>
Reviewed-by: Imre Deak <imre.deak@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250203160834.2708027-1-jani.nikula@intel.com
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
3 months agodrm/i915/dp: Fix potential infinite loop in 128b/132b SST
Jani Nikula [Tue, 4 Feb 2025 15:49:25 +0000 (17:49 +0200)]
drm/i915/dp: Fix potential infinite loop in 128b/132b SST

Passing 0 as the step only works when there are other reasons to break
out of the BPP loop in intel_dp_mtp_tu_compute_config(). Otherwise, an
infinite loop might occur. Fix it by explicitly checking for 0 step.

Fixes: ef0a0757bbea ("drm/i915/dp: compute config for 128b/132b SST w/o DSC")
Reported-by: Imre Deak <imre.deak@intel.com>
Closes: https://lore.kernel.org/r/Z6I0knh2Kt5T0JrT@ideak-desk.fi.intel.com
Reviewed-by: Imre Deak <imre.deak@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250204154925.3001781-1-jani.nikula@intel.com
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
3 months agodrm/i915/mst: fix INT_MAX to .4 fixed point conversion mistake
Jani Nikula [Tue, 4 Feb 2025 15:37:17 +0000 (17:37 +0200)]
drm/i915/mst: fix INT_MAX to .4 fixed point conversion mistake

intel_dp_mtp_tu_compute_config() conversion to use .4 fixed point didn't
take into account that intel_dp_mst_max_dpt_bpp() may return INT_MAX
when the transport limitation is not relevant. Converting INT_MAX to .4
fixed point results in -1.0, which then gets used as if it were a real
max BPP value:

i915 0000:00:02.0: [drm:intel_dp_mtp_tu_compute_config [i915]] Limiting bpp to max DPT bpp (24.0000 -> -1.0000)
i915 0000:00:02.0: [drm:intel_dp_mtp_tu_compute_config [i915]] Looking for slots in range min bpp 18.0000 max bpp -1.0000

Just return 0 for "no max DPT BPP", and handle it explicitly.

Fixes: 67782bf6e8a6 ("drm/i915/mst: Convert intel_dp_mtp_tu_compute_config() to .4 format")
Closes: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13624
Cc: Imre Deak <imre.deak@intel.com>
Reviewed-by: Imre Deak <imre.deak@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250204153717.2996923-1-jani.nikula@intel.com
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
3 months agodrm/i915/dp: Guarantee a minimum HBlank time
Arun R Murthy [Wed, 22 Jan 2025 05:55:42 +0000 (11:25 +0530)]
drm/i915/dp: Guarantee a minimum HBlank time

Mandate a minimum Hblank symbol cycle count between BlankingStart and
BlankingEnd in 8b/10b MST and 128b/132b mode.

v2: Affine calculation/updation of min HBlank to dp_mst (Jani)
v3: moved min_hblank from struct intel_dp to intel_crtc_state (Jani)
v4: use max/min functions, change intel_xx *intel_xx to intel_xx *xx
    (Jani)
    Limit hblank to 511 and accommodate BS/BE in calculated value
    (Srikanth)
v5: Some spelling corrections (Suraj)
v6: Removed DP2.1 in comment as this is applicable for both DP2.1 and
    DP1.4 (Suraj)
v7: crtc_state holds the logical values and the register value
    computation is moved to mst_enable() (Jani)
v8: Limit max hblank to 0x10, disable min_hblank on mst_disable (Jani)

Bspec: 74379
Signed-off-by: Arun R Murthy <arun.r.murthy@intel.com>
Reviewed-by: Suraj Kandpal <suraj.kandpal@intel.com>
Acked-by: Jani Nikula <jani.nikula@intel.com>
Signed-off-by: Suraj Kandpal <suraj.kandpal@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250122-hblank-v9-1-90afda006685@intel.com
3 months agodrm/i915/dmc_wl: Track INITIATE_PM_DMD_REQ for DC5
Gustavo Sousa [Mon, 3 Feb 2025 20:58:58 +0000 (17:58 -0300)]
drm/i915/dmc_wl: Track INITIATE_PM_DMD_REQ for DC5

The Bspec has been updated to include INITIATE_PM_DMD_REQ in the set of
register offsets that require the DMC wakelock for access during DC5.
Update our table accordingly.

Bspec: 71583
Reviewed-by: Luca Coelho <luciano.coelho@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250203205941.251754-1-gustavo.sousa@intel.com
Signed-off-by: Gustavo Sousa <gustavo.sousa@intel.com>
3 months agodrm/i915/mst: Convert intel_dp_mtp_tu_compute_config() to .4 format
Jani Nikula [Fri, 31 Jan 2025 12:50:07 +0000 (14:50 +0200)]
drm/i915/mst: Convert intel_dp_mtp_tu_compute_config() to .4 format

Move towards always using the fxp q4 or .4 fixed point format for
compressed bpp. We'll need to pass the more accurate bpp to this
function later on.

Always use _x16 naming for variables that are in .4 fixed point for
clarity.

Reviewed-by: Imre Deak <imre.deak@intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/887306a47ce4550226f5d54178f667a52840a11c.1738327620.git.jani.nikula@intel.com