[PATCH] drm/i915/pps: debug log the remaining power cycle delay to wait
Paul Menzel
pmenzel at molgen.mpg.de
Thu Dec 5 14:39:58 UTC 2024
Dear Jani,
Thank you very much for the patch.
Am 04.12.24 um 17:00 schrieb Jani Nikula:
> While pps_init_delays() debug logs the power cycle delay, also debug log
> the actual remaining time to wait in wait_panel_power_cycle().
>
> Note that this still isn't the full picture; the power sequencer may
> still wait after this one.
>
> Closes: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13007
> Signed-off-by: Jani Nikula <jani.nikula at intel.com>
>
> ---
>
> Cc: Paul Menzel <pmenzel at molgen.mpg.de>
> ---
> drivers/gpu/drm/i915/display/intel_pps.c | 19 ++++++++++---------
> 1 file changed, 10 insertions(+), 9 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_pps.c b/drivers/gpu/drm/i915/display/intel_pps.c
> index 7784b3b760db..bfda52850150 100644
> --- a/drivers/gpu/drm/i915/display/intel_pps.c
> +++ b/drivers/gpu/drm/i915/display/intel_pps.c
> @@ -668,23 +668,24 @@ static void wait_panel_power_cycle(struct intel_dp *intel_dp)
> struct intel_display *display = to_intel_display(intel_dp);
> struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
> ktime_t panel_power_on_time;
> - s64 panel_power_off_duration;
> -
> - drm_dbg_kms(display->drm,
> - "[ENCODER:%d:%s] %s wait for panel power cycle\n",
> - dig_port->base.base.base.id, dig_port->base.base.name,
> - pps_name(intel_dp));
> + s64 panel_power_off_duration, remaining;
>
> /* take the difference of current time and panel power off time
> * and then make panel wait for power_cycle if needed. */
> panel_power_on_time = ktime_get_boottime();
> panel_power_off_duration = ktime_ms_delta(panel_power_on_time, intel_dp->pps.panel_power_off_time);
>
> + remaining = max(0, intel_dp->pps.panel_power_cycle_delay - panel_power_off_duration);
> +
> + drm_dbg_kms(display->drm,
> + "[ENCODER:%d:%s] %s wait for panel power cycle (%lld ms remaining)\n",
> + dig_port->base.base.base.id, dig_port->base.base.name,
> + pps_name(intel_dp), remaining);
> +
> /* When we disable the VDD override bit last we have to do the manual
> * wait. */
> - if (panel_power_off_duration < (s64)intel_dp->pps.panel_power_cycle_delay)
> - wait_remaining_ms_from_jiffies(jiffies,
> - intel_dp->pps.panel_power_cycle_delay - panel_power_off_duration);
> + if (remaining)
> + wait_remaining_ms_from_jiffies(jiffies, remaining);
>
> wait_panel_status(intel_dp, IDLE_CYCLE_MASK, IDLE_CYCLE_VALUE);
> }
Tested-by: Paul Menzel <pmenzel at molgen.mpg.de> # Dell XPS 13
9360/0596KF, BIOS 2.21.0 06/02/2022
[ 51.596033] PM: suspend entry (deep)
[ 51.622184] Filesystems sync: 0.026 seconds
[ 51.634863] Freezing user space processes
[ 51.636697] Freezing user space processes completed (elapsed
0.001 seconds)
[ 51.636708] OOM killer disabled.
[ 51.636711] Freezing remaining freezable tasks
[ 51.638017] Freezing remaining freezable tasks completed
(elapsed 0.001 seconds)
[ 51.638132] printk: Suspending console(s) (use
no_console_suspend to debug)
[ 51.673815] i915 0000:00:02.0: [drm:intel_power_well_enable
[i915]] enabling always-on
[…]
[ 53.751682] i915 0000:00:02.0: [drm:intel_pps_on_unlocked
[i915]] [ENCODER:98:DDI A/PHY A] PPS 0 turn panel power on
[ 53.751872] i915 0000:00:02.0: [drm:wait_panel_power_cycle
[i915]] [ENCODER:98:DDI A/PHY A] PPS 0 wait for panel power cycle (0 ms
remaining)
[ 53.752096] i915 0000:00:02.0: [drm:wait_panel_status [i915]]
[ENCODER:98:DDI A/PHY A] PPS 0 mask: 0xb800000f value: 0x00000000
PP_STATUS: 0x00000000 PP_CONTROL: 0x00000000
[ 53.752268] i915 0000:00:02.0: [drm:intel_pps_on_unlocked
[i915]] Wait complete
[ 53.752440] i915 0000:00:02.0: [drm:intel_pps_on_unlocked
[i915]] [ENCODER:98:DDI A/PHY A] PPS 0 wait for panel power on
[ 53.752638] i915 0000:00:02.0: [drm:wait_panel_status [i915]]
[ENCODER:98:DDI A/PHY A] PPS 0 mask: 0xb000000f value: 0x80000008
PP_STATUS: 0x9000000a PP_CONTROL: 0x00000003
[ 53.801920] i915 0000:00:02.0: [drm:spt_irq_handler [i915]]
hotplug event received, stat 0x01000000, dig 0x12001010, pins
0x00000010, long 0x00000010
[ 53.802088] i915 0000:00:02.0: [drm:intel_hpd_irq_handler
[i915]] digital hpd on [ENCODER:98:DDI A/PHY A] - long
[ 53.802226] i915 0000:00:02.0: [drm:intel_hpd_irq_handler
[i915]] Received HPD interrupt on PIN 4 - cnt: 10
[ 53.802399] i915 0000:00:02.0: [drm:intel_dp_hpd_pulse [i915]]
ignoring long hpd on eDP [ENCODER:98:DDI A/PHY A]
[ 53.831776] i915 0000:00:02.0: [drm:i915_hdcp_component_bind
[i915]] I915 HDCP comp bind
[ 53.832940] mei_hdcp
0000:00:16.0-b638ab7e-94e2-4ea2-a552-d1c54b627f04: bound 0000:00:02.0
(ops i915_hdcp_ops [i915])
[ 53.835771] Bluetooth: hci0: using NVM file:
qca/nvm_usb_00000302.bin
[ 53.864037] Bluetooth: hci0: HCI Enhanced Setup Synchronous
Connection command is advertised, but not supported.
[ 53.952873] i915 0000:00:02.0: [drm:intel_pps_on_unlocked
[i915]] Wait complete
Kind regards,
Paul
More information about the Intel-gfx
mailing list