From: Imre Deak <imre.deak@intel.com>
To: "Jouni Högander" <jouni.hogander@intel.com>
Cc: <intel-gfx@lists.freedesktop.org>, <intel-xe@lists.freedesktop.org>
Subject: Re: [PATCH 7/8] drm/i915/psr: Move sink PSR and Panel Replay booleans to intel_connector
Date: Mon, 1 Dec 2025 12:59:48 +0200 [thread overview]
Message-ID: <aS11JICsUtB_xW9s@ideak-desk> (raw)
In-Reply-To: <20251121111655.164830-8-jouni.hogander@intel.com>
On Fri, Nov 21, 2025 at 01:16:54PM +0200, Jouni Högander wrote:
> As a preparation for MST Panel Replay we need to move Panel Replay sink
> related data into intel_connector. Move sink support booleans as well
> into intel_connector. Generally this is more correct place for this data so
> move PSR versions as well.
>
> Still sink_support and sink_panel_replay_support are kept to keep CAN_PSR
> and CAN_PANEL_REPLAY macros.
Would be good to mention what's the plan with these macros (they'll take
a connector instead of an intel_dp pointer?)
>
> Signed-off-by: Jouni Högander <jouni.hogander@intel.com>
> ---
> .../drm/i915/display/intel_display_types.h | 7 ++-
> drivers/gpu/drm/i915/display/intel_dp.c | 4 +-
> drivers/gpu/drm/i915/display/intel_psr.c | 44 +++++++++++--------
> 3 files changed, 33 insertions(+), 22 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h b/drivers/gpu/drm/i915/display/intel_display_types.h
> index e1d47496ea4de..04d21333130f9 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_types.h
> +++ b/drivers/gpu/drm/i915/display/intel_display_types.h
> @@ -572,6 +572,8 @@ struct intel_connector {
> } dsc_branch_caps;
>
> struct {
> + bool support;
> + bool su_support;
> enum intel_panel_replay_dsc_support dsc_support;
>
> u16 su_w_granularity;
> @@ -579,6 +581,9 @@ struct intel_connector {
> } panel_replay_caps;
>
> struct {
> + bool support;
> + bool su_support;
> +
> u16 su_w_granularity;
> u16 su_y_granularity;
> } psr_caps;
> @@ -1729,7 +1734,6 @@ struct intel_psr {
> bool active;
> struct work_struct work;
> unsigned int busy_frontbuffer_bits;
> - bool sink_psr2_support;
> bool link_standby;
> bool sel_update_enabled;
> bool psr2_sel_fetch_enabled;
> @@ -1745,7 +1749,6 @@ struct intel_psr {
> u16 su_y_granularity;
> bool source_panel_replay_support;
> bool sink_panel_replay_support;
> - bool sink_panel_replay_su_support;
> bool panel_replay_enabled;
> u32 dc3co_exitline;
> u32 dc3co_exit_delay;
> diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c
> index d32f476c288c1..2452302937c73 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp.c
> +++ b/drivers/gpu/drm/i915/display/intel_dp.c
> @@ -6052,10 +6052,12 @@ intel_dp_detect(struct drm_connector *_connector,
> memset(connector->dp.dsc_dpcd, 0, sizeof(connector->dp.dsc_dpcd));
> memset(connector->dp.pr_dpcd, 0, sizeof(connector->dp.pr_dpcd));
> intel_dp->psr.sink_panel_replay_support = false;
> - intel_dp->psr.sink_panel_replay_su_support = false;
> + connector->dp.panel_replay_caps.support = false;
> + connector->dp.panel_replay_caps.su_support = false;
What about resetting PSR counterparts?
> connector->dp.panel_replay_caps.dsc_support =
> INTEL_DP_PANEL_REPLAY_DSC_NOT_SUPPORTED;
>
> +
Extra w/s.
> intel_dp_mst_disconnect(intel_dp);
>
> intel_dp_tunnel_disconnect(intel_dp);
> diff --git a/drivers/gpu/drm/i915/display/intel_psr.c b/drivers/gpu/drm/i915/display/intel_psr.c
> index 4bae39f745ea0..e6268d692f89d 100644
> --- a/drivers/gpu/drm/i915/display/intel_psr.c
> +++ b/drivers/gpu/drm/i915/display/intel_psr.c
> @@ -635,11 +635,12 @@ static void _panel_replay_init_dpcd(struct intel_dp *intel_dp, struct intel_conn
> }
> }
>
> + connector->dp.panel_replay_caps.support = true;
> intel_dp->psr.sink_panel_replay_support = true;
>
> if (connector->dp.pr_dpcd[INTEL_PR_DPCD_INDEX(DP_PANEL_REPLAY_CAP_SUPPORT)] &
> DP_PANEL_REPLAY_SU_SUPPORT) {
> - intel_dp->psr.sink_panel_replay_su_support = true;
> + connector->dp.panel_replay_caps.su_support = true;
>
> _panel_replay_compute_su_granularity(intel_dp, connector);
> }
> @@ -648,7 +649,7 @@ static void _panel_replay_init_dpcd(struct intel_dp *intel_dp, struct intel_conn
>
> drm_dbg_kms(display->drm,
> "Panel replay %sis supported by panel (in DSC mode: %s)\n",
> - intel_dp->psr.sink_panel_replay_su_support ?
> + connector->dp.panel_replay_caps.su_support ?
> "selective_update " : "",
> panel_replay_dsc_support_str(connector->dp.panel_replay_caps.dsc_support));
> }
> @@ -681,7 +682,9 @@ static void _psr_init_dpcd(struct intel_dp *intel_dp, struct intel_connector *co
> return;
> }
>
> + connector->dp.psr_caps.support = true;
> intel_dp->psr.sink_support = true;
> +
> intel_dp->psr.sink_sync_latency =
> intel_dp_get_sink_sync_latency(intel_dp);
>
> @@ -701,13 +704,13 @@ static void _psr_init_dpcd(struct intel_dp *intel_dp, struct intel_connector *co
> * Y-coordinate requirement panels we would need to enable
> * GTC first.
> */
> - intel_dp->psr.sink_psr2_support = y_req &&
> + connector->dp.psr_caps.su_support = y_req &&
> intel_alpm_aux_wake_supported(intel_dp);
> drm_dbg_kms(display->drm, "PSR2 %ssupported\n",
> - intel_dp->psr.sink_psr2_support ? "" : "not ");
> + connector->dp.psr_caps.su_support ? "" : "not ");
> }
>
> - if (intel_dp->psr.sink_psr2_support)
> + if (connector->dp.psr_caps.su_support)
> _psr_compute_su_granularity(intel_dp, connector);
> }
>
> @@ -1522,14 +1525,16 @@ static bool alpm_config_valid(struct intel_dp *intel_dp,
> }
>
> static bool intel_psr2_config_valid(struct intel_dp *intel_dp,
> - struct intel_crtc_state *crtc_state)
> + struct intel_crtc_state *crtc_state,
> + struct drm_connector_state *conn_state)
> {
> struct intel_display *display = to_intel_display(intel_dp);
> + struct intel_connector *connector = to_intel_connector(conn_state->connector);
> int crtc_hdisplay = crtc_state->hw.adjusted_mode.crtc_hdisplay;
> int crtc_vdisplay = crtc_state->hw.adjusted_mode.crtc_vdisplay;
> int psr_max_h = 0, psr_max_v = 0, max_bpp = 0;
>
> - if (!intel_dp->psr.sink_psr2_support || display->params.enable_psr == 1)
> + if (!connector->dp.psr_caps.su_support || display->params.enable_psr == 1)
> return false;
>
> /* JSL and EHL only supports eDP 1.3 */
> @@ -1642,7 +1647,8 @@ static bool intel_sel_update_config_valid(struct intel_dp *intel_dp,
> goto unsupported;
> }
>
> - if (!crtc_state->has_panel_replay && !intel_psr2_config_valid(intel_dp, crtc_state))
> + if (!crtc_state->has_panel_replay && !intel_psr2_config_valid(intel_dp, crtc_state,
> + conn_state))
> goto unsupported;
>
> if (!_compute_psr2_sdp_prior_scanline_indication(intel_dp, crtc_state)) {
> @@ -1655,7 +1661,7 @@ static bool intel_sel_update_config_valid(struct intel_dp *intel_dp,
> if (DISPLAY_VER(display) < 14)
> goto unsupported;
>
> - if (!intel_dp->psr.sink_panel_replay_su_support)
> + if (!connector->dp.panel_replay_caps.su_support)
> goto unsupported;
>
> if (intel_dsc_enabled_on_link(crtc_state) &&
> @@ -1744,6 +1750,9 @@ static bool _panel_replay_compute_config(struct intel_dp *intel_dp,
> if (!CAN_PANEL_REPLAY(intel_dp))
> return false;
>
> + if (!connector->dp.panel_replay_caps.support)
> + return false;
> +
> if (!panel_replay_global_enabled(intel_dp)) {
> drm_dbg_kms(display->drm, "Panel Replay disabled by flag\n");
> return false;
> @@ -4128,22 +4137,19 @@ psr_source_status(struct intel_dp *intel_dp, struct seq_file *m)
> seq_printf(m, "Source PSR/PanelReplay status: %s [0x%08x]\n", status, val);
> }
>
> -static void intel_psr_sink_capability(struct intel_dp *intel_dp,
> - struct intel_connector *connector,
> +static void intel_psr_sink_capability(struct intel_connector *connector,
> struct seq_file *m)
> {
> - struct intel_psr *psr = &intel_dp->psr;
> -
> seq_printf(m, "Sink support: PSR = %s",
> - str_yes_no(psr->sink_support));
> + str_yes_no(connector->dp.psr_caps.support));
>
> - if (psr->sink_support)
> + if (connector->dp.psr_caps.support)
> seq_printf(m, " [0x%02x]", connector->dp.psr_dpcd[0]);
> if (connector->dp.psr_dpcd[0] == DP_PSR2_WITH_Y_COORD_ET_SUPPORTED)
> seq_printf(m, " (Early Transport)");
> - seq_printf(m, ", Panel Replay = %s", str_yes_no(psr->sink_panel_replay_support));
> + seq_printf(m, ", Panel Replay = %s", str_yes_no(connector->dp.panel_replay_caps.support));
> seq_printf(m, ", Panel Replay Selective Update = %s",
> - str_yes_no(psr->sink_panel_replay_su_support));
> + str_yes_no(connector->dp.panel_replay_caps.su_support));
> seq_printf(m, ", Panel Replay DSC support = %s",
> panel_replay_dsc_support_str(connector->dp.panel_replay_caps.dsc_support));
> if (connector->dp.pr_dpcd[INTEL_PR_DPCD_INDEX(DP_PANEL_REPLAY_CAP_SUPPORT)] &
> @@ -4194,9 +4200,9 @@ static int intel_psr_status(struct seq_file *m, struct intel_dp *intel_dp,
> bool enabled;
> u32 val, psr2_ctl;
>
> - intel_psr_sink_capability(intel_dp, connector, m);
> + intel_psr_sink_capability(connector, m);
>
> - if (!(psr->sink_support || psr->sink_panel_replay_support))
> + if (!(connector->dp.psr_caps.support || connector->dp.panel_replay_caps.support))
> return 0;
>
> wakeref = intel_display_rpm_get(display);
> --
> 2.43.0
>
next prev parent reply other threads:[~2025-12-01 11:00 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-11-21 11:16 [PATCH 0/8] Move PSR/Panel Replay sink data into intel_connector Jouni Högander
2025-11-21 11:16 ` [PATCH 1/8] drm/i915/psr: Add panel granularity information " Jouni Högander
2025-12-01 9:54 ` Imre Deak
2025-11-21 11:16 ` [PATCH 2/8] drm/i915/psr: Use SU granularity information available in intel_connector Jouni Högander
2025-12-01 10:14 ` Imre Deak
2025-11-21 11:16 ` [PATCH 3/8] drm/i915/psr: Compute Panel Replay/Adaptive coexistence behavior Jouni Högander
2025-11-21 11:24 ` Jani Nikula
2025-12-01 10:28 ` Imre Deak
2025-11-21 11:16 ` [PATCH 4/8] drm/i915/psr: Move pr_dpcd and psr_dpcd to intel_connector Jouni Högander
2025-12-01 10:45 ` Imre Deak
2025-11-21 11:16 ` [PATCH 5/8] drm/i915/psr: Clear pr_dpcd as well on disconnect Jouni Högander
2025-12-01 10:53 ` Imre Deak
2025-12-01 11:23 ` Hogander, Jouni
2025-12-03 14:37 ` Imre Deak
2025-12-03 15:10 ` Hogander, Jouni
2025-11-21 11:16 ` [PATCH 6/8] drm/i915/psr: Move Panel Replay DSC sink support data to intel_connector Jouni Högander
2025-12-01 10:55 ` Imre Deak
2025-11-21 11:16 ` [PATCH 7/8] drm/i915/psr: Move sink PSR and Panel Replay booleans " Jouni Högander
2025-12-01 10:59 ` Imre Deak [this message]
2025-11-21 11:16 ` [PATCH 8/8] drm/i915/psr: Move sink_sync_latency " Jouni Högander
2025-12-01 11:03 ` Imre Deak
2025-11-24 19:59 ` ✗ CI.checkpatch: warning for Move PSR/Panel Replay sink data into intel_connector Patchwork
2025-11-24 20:00 ` ✓ CI.KUnit: success " Patchwork
2025-11-24 20:41 ` ✓ i915.CI.BAT: " Patchwork
2025-11-24 20:47 ` ✓ Xe.CI.BAT: " Patchwork
2025-11-24 22:37 ` ✗ Xe.CI.Full: failure " Patchwork
2025-11-25 1:09 ` ✗ i915.CI.Full: " Patchwork
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=aS11JICsUtB_xW9s@ideak-desk \
--to=imre.deak@intel.com \
--cc=intel-gfx@lists.freedesktop.org \
--cc=intel-xe@lists.freedesktop.org \
--cc=jouni.hogander@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.