]> git.ipfire.org Git - thirdparty/linux.git/log
thirdparty/linux.git
4 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
4 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
4 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
4 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
4 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
4 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
4 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
4 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
4 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
4 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
4 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
4 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
4 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
4 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
4 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
4 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>
4 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
4 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
4 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
4 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>
4 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>
4 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>
4 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>
4 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>
4 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>
4 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>
4 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
4 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
4 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
4 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
4 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
4 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
4 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
4 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
4 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>
4 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>
4 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
4 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
4 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
4 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
4 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
4 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
4 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
4 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
4 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
4 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
4 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
4 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>
4 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>
4 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>
4 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>
4 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>
4 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
4 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
4 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
4 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
4 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
4 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
4 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
4 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
4 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
4 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
4 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
4 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
4 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>
4 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>
4 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>
4 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>
4 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>
4 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>
4 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>
4 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>
4 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>
4 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>
4 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>
4 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>
4 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>
4 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>
4 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>
4 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>
4 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>
4 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>
4 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>
4 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>
4 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>
4 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
4 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>
4 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
4 months agodrm/i915/dp: Pass connector state all the way to dsc_compute_link_config()
Jani Nikula [Fri, 31 Jan 2025 12:50:06 +0000 (14:50 +0200)] 
drm/i915/dp: Pass connector state all the way to dsc_compute_link_config()

Going forward, we'll need the connector state in
dsc_compute_link_config(). Pass it along through the chain. Maintain the
same parameter order where relevant.

Reviewed-by: Imre Deak <imre.deak@intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/645d950a80df5fd4441d69aba4893ab263b3e555.1738327620.git.jani.nikula@intel.com
4 months agodrm/i915/dp: Drop compute_pipe_bpp parameter from intel_dp_dsc_compute_config()
Jani Nikula [Fri, 31 Jan 2025 12:50:05 +0000 (14:50 +0200)] 
drm/i915/dp: Drop compute_pipe_bpp parameter from intel_dp_dsc_compute_config()

The parameter is basically just a proxy for whether the function is
being called for DP SST or DP MST. We can figure this out from crtc
state.

Reviewed-by: Imre Deak <imre.deak@intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/82a4b84711b1416bb3382f5d8383fe65ab88159a.1738327620.git.jani.nikula@intel.com
4 months agodrm/i915/dp: Use int for compressed BPP in dsc_compute_link_config()
Jani Nikula [Fri, 31 Jan 2025 12:50:04 +0000 (14:50 +0200)] 
drm/i915/dp: Use int for compressed BPP in dsc_compute_link_config()

Just use ints unless there are actual reasons to do otherwise. Here,
there are not.

Reviewed-by: Imre Deak <imre.deak@intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/b8f9aebc4e40afeed3d723f98cae96c9c927a480.1738327620.git.jani.nikula@intel.com
4 months agodrm/i915/dp: Simplify input BPP checks in intel_dp_dsc_compute_pipe_bpp()
Jani Nikula [Fri, 31 Jan 2025 12:50:03 +0000 (14:50 +0200)] 
drm/i915/dp: Simplify input BPP checks in intel_dp_dsc_compute_pipe_bpp()

Drop the extra local variables and simplify the conditions. We don't
have to try to special case the loop condition and break in the validity
checks.

Reviewed-by: Imre Deak <imre.deak@intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/5559b14d6af4e001677f23454d6bd8b3606b3d7a.1738327620.git.jani.nikula@intel.com
4 months agodrm/i915/dp: Inline do_dsc_compute_compressed_bpp()
Jani Nikula [Fri, 31 Jan 2025 12:50:02 +0000 (14:50 +0200)] 
drm/i915/dp: Inline do_dsc_compute_compressed_bpp()

With just the one platform independent loop left in
do_dsc_compute_compressed_bpp(), we don't really need the extra function
that is simply becoming increasingly hard to even figure out a decent
name for. Just merge the whole thing to
dsc_compute_compressed_bpp(). Good riddance to the short lived
do_dsc_compute_compressed_bpp().

Reviewed-by: Imre Deak <imre.deak@intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/91ae42cbdffe4938a665667955c577f887b92b9d.1738327620.git.jani.nikula@intel.com
4 months agodrm/i915/dp: Unify DSC link config functions
Jani Nikula [Fri, 31 Jan 2025 12:50:01 +0000 (14:50 +0200)] 
drm/i915/dp: Unify DSC link config functions

{icl,xelpd}_dsc_compute_link_config() are now effectively the same, and
can be unified to a single platform independent function.

Reviewed-by: Imre Deak <imre.deak@intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/ca41ebb287fc51e1257d3c2b2790edf2cd661ab3.1738327620.git.jani.nikula@intel.com
4 months agodrm/i915/dp: Move force_dsc_fractional_bpp_en check to intel_dp_dsc_valid_bpp()
Jani Nikula [Fri, 31 Jan 2025 12:50:00 +0000 (14:50 +0200)] 
drm/i915/dp: Move force_dsc_fractional_bpp_en check to intel_dp_dsc_valid_bpp()

Add the fractional DSC BPP force check to intel_dp_dsc_valid_bpp(), and
use that in xelpd_dsc_compute_link_config(). This is another step closer
towards unifying the platform specific functions.

Reviewed-by: Imre Deak <imre.deak@intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/2d8cdfef422dc2229d3ead2201bff4a321cbbdd3.1738327620.git.jani.nikula@intel.com
4 months agodrm/i915/dp: Change icl_dsc_compute_link_config() DSC BPP iteration
Jani Nikula [Fri, 31 Jan 2025 12:49:59 +0000 (14:49 +0200)] 
drm/i915/dp: Change icl_dsc_compute_link_config() DSC BPP iteration

Instead of iterating the valid BPP array directly, switch to the same
approach as xelpd_dsc_compute_link_config(), with a separate function to
check if the DSC BPP is valid. This prepares us for unifying the
platform specific functions.

Reviewed-by: Imre Deak <imre.deak@intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/bc1972391041a3ba84b3f68b9c0605ae142611e0.1738327620.git.jani.nikula@intel.com
4 months agodrm/i915/dp: Move max DSC BPP reduction one level higher
Jani Nikula [Fri, 31 Jan 2025 12:49:58 +0000 (14:49 +0200)] 
drm/i915/dp: Move max DSC BPP reduction one level higher

Now that {icl,xelpd}_dsc_compute_link_config() take .4 fixed point as
parameter, move the common max DSC BPP reduction one level higher. Use
intel_dp_dsc_bpp_step() to compute the step, and pass on to both
platform specific functions. (Though it's unused for now in
icl_dsc_compute_link_config()).

We can drop the pipe_bpp and connector parameters.

Reviewed-by: Imre Deak <imre.deak@intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/62fa7f18ea49dce24c5d0ee7b2f0cbde9e2b609c.1738327620.git.jani.nikula@intel.com
4 months agodrm/i915/dp: Pass .4 BPP values to {icl,xelpd}_dsc_compute_link_config()
Jani Nikula [Fri, 31 Jan 2025 12:49:57 +0000 (14:49 +0200)] 
drm/i915/dp: Pass .4 BPP values to {icl,xelpd}_dsc_compute_link_config()

Try to keep the variables in the same domain a bit longer to reduce
juggling between integers and .4 fixed point. Change parameter order to
min, max while at it.

For now, keep the juggling in dsc_compute_compressed_bpp() ensure
min/max will always have 0 fractional part. To be fixed later.

Reviewed-by: Imre Deak <imre.deak@intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/e72f153fd28755e41ee8c5a7b9e6de257c3b27ac.1738327620.git.jani.nikula@intel.com
4 months agodrm/i915/dp: Rename some variables in xelpd_dsc_compute_link_config()
Jani Nikula [Fri, 31 Jan 2025 12:49:56 +0000 (14:49 +0200)] 
drm/i915/dp: Rename some variables in xelpd_dsc_compute_link_config()

Use the _x16 suffix for all .4 fixed point variables. Drop compressed_
prefix, as it's implied from the precision suffix.

As dsc_min_bpp and dsc_max_bpp change domain from int to .4 in the
middle of the function, they remain the same for now.

Reviewed-by: Imre Deak <imre.deak@intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/91dd6ef53683b624a978101cca7322ea3e5e2f7b.1738327620.git.jani.nikula@intel.com
4 months agodrm/i915/dp: Add intel_dp_dsc_bpp_step_x16() helper to get DSC BPP precision
Jani Nikula [Fri, 31 Jan 2025 23:28:15 +0000 (01:28 +0200)] 
drm/i915/dp: Add intel_dp_dsc_bpp_step_x16() helper to get DSC BPP precision

Add a platform independent helper for getting the supported DSC BPP step
for the link.

v2: Use fxp_q4_from_int(1) (Imre)

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