drm/i915/pps: debug log the remaining power cycle delay to wait
authorJani Nikula <jani.nikula@intel.com>
Wed, 4 Dec 2024 16:00:48 +0000 (18:00 +0200)
committerJani Nikula <jani.nikula@intel.com>
Mon, 9 Dec 2024 14:27:09 +0000 (16:27 +0200)
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
Reviewed-by: Chaitanya Kumar Borah <chaitanya.kumar.borah@intel.com>
Tested-by: Paul Menzel <pmenzel@molgen.mpg.de> # Dell XPS 13
Link: https://patchwork.freedesktop.org/patch/msgid/20241204160048.2774419-1-jani.nikula@intel.com
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
drivers/gpu/drm/i915/display/intel_pps.c

index 7784b3b760db7f3456f0bdd09190beb073c9e2ed..bfda528501507221b9c262c1574073b80f1532ff 100644 (file)
@@ -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);
 }