Igt-dev Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH i-g-t v3 0/7] Validate PM_PME signalling on display hotplug
@ 2026-10-20 14:11 Pranay Samala
  2026-10-20 14:11 ` [PATCH i-g-t v3 1/7] lib/igt_pci: Add PCI Power Management capability register layout Pranay Samala
                   ` (10 more replies)
  0 siblings, 11 replies; 12+ messages in thread
From: Pranay Samala @ 2026-10-20 14:11 UTC (permalink / raw)
  To: igt-dev; +Cc: kunal1.joshi, sameer.lattannavar, pranay.samala

A display hotplug can be signalled as a PCI PME while the graphics device
is runtime suspended in D3hot. That lets the driver leave the
drm_kms_helper connector poll worker disabled across runtime suspend, so
the device stays parked instead of being resumed every ~10s just to probe
connectors.

The property worth validating is therefore not "does a hotplug still
work" - the polling fallback delivers that too, just slowly and at the
cost of the power saving. It is "does the hotplug work while polling
stays off". A test that only toggles HPD and waits for a uevent passes
either way, and would not notice the feature regressing into the
fallback.

So the new subtest runs against the same suspended device in three steps:

  Control: suspend with power/wakeup disabled, so PME is not armed, and
           check the device is woken by the poll within two periods.
           This proves polling is live on the setup and that the test
           catches a poll wake, and measures what one costs.
  Phase 1: arm PME, hold the device idle in D3hot for 25s and check it
           never wakes.
  Phase 2: plug and then unplug from D3hot and check that each produces
           a uevent, that the connector status updated, and that
           power/wakeup_active_count incremented, i.e. that the resume
           was signalled by the device and not initiated by the host.

Patches 1-2 add the PCI Power Management capability register layout and
accessors for PME_Support, PME_En, PME_Status and the PowerState field.
PME_Status distinguishes a device that signalled but was never
acknowledged from one that never signalled at all, which makes a failure
report actionable instead of just "no uevent".

Patches 3-5 add the power/wakeup and power/wakeup_active_count
accessors, with patch 3 factoring out the path construction they share.
active_count is used rather than wakeup_count because the latter never
moves for a runtime resume.

Patch 6 adds igt_kms_poll_save(), _set() and _restore() to igt_kms.
Converting the two tests that already open code this is left to a
separate series.

Patch 7 adds the subtest.

v2:
- Rebase

v3:
- 2/7: check power_state before touching config space, report D3cold
  from it, return errors from PME_En/PME_Status reads, generic
  kerneldoc (Kunal)
- 4/7: drop the xe note, document the counter reset on enable (Kunal)
- 5/7: mention the PME poll route, return -1 when there is no wakeup
  source (Kunal)
- 6/7: move to igt_kms and rename, document that setting the parameter
  does not restart a stopped poll worker (Kunal)
- 7/7: decide D3hot once, settle before baselines, watch the idle
  window once, add the control run, fix the uevent/latency race, check
  requirements before changing state and restore it on failure, misc
  cleanups (Kunal)

Pranay Samala (7):
  lib/igt_pci: Add PCI Power Management capability register layout
  lib/igt_pm: Add PCI PME capability and D state accessors
  lib/igt_pm: Factor out power attribute path construction
  lib/igt_pm: Add power/wakeup accessors
  lib/igt_pm: Add power/wakeup_active_count accessor
  lib/igt_kms: Add drm_kms_helper.poll save/restore helpers
  tests/chamelium/kms_chamelium_hpd: Add HPD from runtime suspended
    D3hot

 lib/igt_kms.c                       | 101 ++++++
 lib/igt_kms.h                       |   3 +
 lib/igt_pci.h                       |  12 +
 lib/igt_pm.c                        | 450 +++++++++++++++++++++++-
 lib/igt_pm.h                        |   9 +
 tests/chamelium/kms_chamelium_hpd.c | 528 ++++++++++++++++++++++++++++
 6 files changed, 1094 insertions(+), 9 deletions(-)

-- 
2.53.0


^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2026-10-20 23:08 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-10-20 14:11 [PATCH i-g-t v3 0/7] Validate PM_PME signalling on display hotplug Pranay Samala
2026-10-20 14:11 ` [PATCH i-g-t v3 1/7] lib/igt_pci: Add PCI Power Management capability register layout Pranay Samala
2026-10-20 14:11 ` [PATCH i-g-t v3 2/7] lib/igt_pm: Add PCI PME capability and D state accessors Pranay Samala
2026-10-20 14:11 ` [PATCH i-g-t v3 3/7] lib/igt_pm: Factor out power attribute path construction Pranay Samala
2026-10-20 14:11 ` [PATCH i-g-t v3 4/7] lib/igt_pm: Add power/wakeup accessors Pranay Samala
2026-10-20 14:11 ` [PATCH i-g-t v3 5/7] lib/igt_pm: Add power/wakeup_active_count accessor Pranay Samala
2026-10-20 14:11 ` [PATCH i-g-t v3 6/7] lib/igt_kms: Add drm_kms_helper.poll save/restore helpers Pranay Samala
2026-10-20 14:11 ` [PATCH i-g-t v3 7/7] tests/chamelium/kms_chamelium_hpd: Add HPD from runtime suspended D3hot Pranay Samala
2026-10-20 15:40 ` ✓ Xe.CI.BAT: success for Validate PM_PME signalling on display hotplug (rev4) Patchwork
2026-10-20 15:59 ` ✓ i915.CI.BAT: " Patchwork
2026-10-20 20:46 ` ✗ Xe.CI.FULL: failure " Patchwork
2026-10-20 23:07 ` ✓ i915.CI.Full: success " Patchwork

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox