[PATCH v4 0/9] drm/msm/dp: Drop the HPD state machine
From: Dmitry Baryshkov
Date: Thu Mar 05 2026 - 09:37:26 EST
Currently, all HPD interrupt handling must go through the HPD state
machine.
This has caused many issues where the DRM framework assumes that DP is
in one state while the state machine is stuck in another state.
As discussed here [1], this series:
- Removes the state machine
- Moves link training to atomic_enable()
- Changes the detect() behavior to return true if a display is physically
plugged in (as opposed to if the DP link is ready).
- Remove event queue and move internal HPD handling to hpd_notify()
Note: eDP is mostly untested. This will be sorted out before the next
iteration, but it will not affect the series in a major way.
Note 2: there is an issue with the DP connectors using GPIO for HPD
(rather than using the nativate DP HPD pin), the DP will not detect a
display if it is plugged in before the board is booted. This is not an
issue of this series and it will be handled by a separate series to be
posted today or tomorrow.
[1] https://patchwork.freedesktop.org/patch/656312/?series=142010&rev=2#comment_1201738
---
Changes in v4:
- Fixed PM runtime handling
- Fixed several cases where the HPD machine would loose its state
- Fixed the case where detection was ignoring the plugging in display.
- Link to v3: https://lore.kernel.org/r/20260115-hpd-refactor-v3-0-08e2f3bcd2e0@xxxxxxxxxxxxxxxx
Changes in v3:
- Take over the series (thanks, Jessica, for the previous work!)
- Major rework of the series, squashed the set of patches touching the
HPD states and handling, it is easier to do it this way rather than
pulling the strings one by one.
- Link to v2: https://lore.kernel.org/r/20250808-hpd-refactor-v2-0-7f4e1e741aa3@xxxxxxxxxxxxxxxx
Changes in v2:
- Dropped event queue (Dmitry)
- Moved internal HPD handling to use hpd_notify() (Dmitry)
- Reworked bridge detect() to read DPCP and sink count (Dmitry)
- Moved setting of link_trained to plug/unplugged handling
- Dropped msm_dp::connected (Dmitry)
- Squashed all hpd state related patches (Dmitry)
- Link to v1: https://lore.kernel.org/r/20250711-hpd-refactor-v1-0-33cbac823f34@xxxxxxxxxxxxxxxx
---
Dmitry Baryshkov (2):
drm/msm/dp: drop event data
drm/msm/dp: turn link_ready into plugged
Jessica Zhang (7):
drm/msm/dp: fix HPD state status bit shift value
drm/msm/dp: Fix the ISR_* enum values
drm/msm/dp: Read DPCD and sink count in bridge detect()
drm/msm/dp: Move link training to atomic_enable()
drm/msm/dp: Drop EV_USER_NOTIFICATION
drm/msm/dp: rework HPD handling
drm/msm/dp: Add sink_count to debug logs
drivers/gpu/drm/msm/dp/dp_ctrl.c | 22 --
drivers/gpu/drm/msm/dp/dp_ctrl.h | 1 -
drivers/gpu/drm/msm/dp/dp_display.c | 712 ++++++++++++------------------------
drivers/gpu/drm/msm/dp/dp_display.h | 3 +-
drivers/gpu/drm/msm/dp/dp_drm.c | 63 +---
drivers/gpu/drm/msm/dp/dp_drm.h | 2 +
drivers/gpu/drm/msm/dp/dp_reg.h | 4 +-
7 files changed, 236 insertions(+), 571 deletions(-)
---
base-commit: b775e489bec70895b7ef6b66927886bbac79598f
change-id: 20250523-hpd-refactor-74e25b55620a
Best regards,
--
With best wishes
Dmitry