[PATCH RESEND v5 00/25] drm/msm/dp: Add MST support for MSM chipsets
From: Yongxing Mou
Date: Mon Jun 29 2026 - 10:23:39 EST
Add support for Multi-stream transport for MSM chipsets that allow
a single instance of DP controller to send multiple streams.
This series has been validated on sa8775p ride platform using multiple
MST dongles and also daisy chain method on both DP0 and DP1 upto 1080P.
With 4x4K monitors, due to lack of layer mixers that combination will not
work but this can be supported as well after some rework on the DPU side.
In addition, SST was re-validated with all these changes to ensure there
were no regressions.
This patch series was made on top of:
[1] : https://patchwork.freedesktop.org/series/167458/
Overall, the patch series has been organized in the following way:
1) First set are a couple of fixes made while debugging MST but applicable
to SST as well so go ahead of everything else
2) Prepare the DP driver to get ready to handle multiple streams. This is the bulk
of the work as current DP driver design had to be adjusted to make this happen.
3) Finally, new files to handle MST related operations
Note:
Validation for this series has so far been done on the latest linux-next
on LeMans, covering both FB console and Weston.
Type-C MST support will be submitted shortly after this series.
Signed-off-by: Yongxing Mou <yongxing.mou@xxxxxxxxxxxxxxxx>
---
Changes in v5(fix comments from V4):
- Dropped early refactoring patches (v4 01-12); restructured as
"move link-level teardown", "factor out _helper variants", etc.
- Dropped v4 39/39 (platform MST stream list); use DT pixel-clock
count instead per Dmitry's request.
- Patch 02: Remove artificial max-stream limitation check.
unify register naming (REG_DP1 vs MMSS_DP1).
- Patch 05: Calculate ACT wait time dynamically from mode parameters
instead of hardcoded 20 ms.
- Patch 08: Replace start-slot loop with direct math; fix commit message.
- Patch 09: Add locking annotation "Must be called with
msm_dp_mst::mst_lock held" to msm_dp_ctrl_push_vcpf().
- Patch 17: Rename prepared flag to link_ready.
- Patch 22: Move drm_dp_mst_atomic_check() call into msm_atomic.c.
- Patch 23: Replace bridge-based MST DRM model with encoder-based
approach; remove redundant bridge layer between encoder and connector.
- Patch 24: Add drm_edid_free(); add FIXME for bpp negotiation.
- Patch 25: Use dp->plugged flag instead of link status for MST plug path routing.
- Link to v4: https://lore.kernel.org/r/20260410-msm-dp-mst-v4-0-b20518dea8de@xxxxxxxxxxxxxxxx
Changes in v4:
- Fixed most comments from V3.
- Rebase onto HPD refactor V5.
- Fixed casing/formatting issues, for example: “mst”.
- Drop .mode_set() and set_mode in .atomic_enable().
- Rewrite commit messages that are unclear.
- Use the same API for MST link and SST link writes.
- Use the new drm_dp_dpcd_read_byte() / drm_dp_dpcd_write_byte() interfaces.
- Remove some unnecessary payload fields from the MST bridge.
- Remove some defensive NULL pointer checks.
- Reworked the patch order to make the series easier to follow.
- Add support for more platforms.
- Link to v3: https://lore.kernel.org/r/20250825-msm-dp-mst-v3-0-01faacfcdedd@xxxxxxxxxxxxxxxx
Changes in v3: Fixed review comments from Dmitry
- Fixed lots of comments from series V1/V2.
- Rebased onto next-20250808.
- Rebased onto Jessica's HPD-refactor branch.
- Fixed formatting issues in commit messages under changes.
- Removed unnecessary one-line wrappers.
- Relocated MST-related .atomic_check() calls to their appropriate positions.
- Removed the logic related to slot checking in .mode_valid().
- Link to v2: https://lore.kernel.org/r/20250609-msm-dp-mst-v2-0-a54d8902a23d@xxxxxxxxxxx
Changes in v2: Fixed review comments from Dmitry
- Rebase on top of next-20250606
- Add all 4 streams pixel clks support and MST2/MST3 Link clk support
- Address the formatting issues mentioned in the review comments
- Drop the cache of msm_dp_panel->drm_edid cached
- Remove the one-line wrapper funtion and redundant conditional check
- Fixed the commit messgae descriptions of some patches
- Reordered the patches and renamed some functions and variables
- Link to v1: https://lore.kernel.org/all/20241205-dp_mst-v1-0-f
8618d42a99a@xxxxxxxxxxx/
Signed-off-by: Yongxing Mou <yongxing.mou@xxxxxxxxxxxxxxxx>
---
Abhinav Kumar (19):
drm/msm/dp: introduce stream_id for each DP panel
drm/msm/dp: introduce max_streams for DP controller MST support
drm/msm/dp: Add support for programming p1/p2/p3 register blocks
drm/msm/dp: use stream_id to change offsets in dp_catalog
drm/msm/dp: add support to send ACT packets for MST
drm/msm/dp: Add support to enable MST in mainlink control
drm/msm/dp: no need to update tu calculation for mst
drm/msm/dp: Add support for MST channel slot allocation
drm/msm/dp: Add support for sending VCPF packets in DP controller
drm/msm/dp: Always program MST_FIFO_CONSTANT_FILL for MST use cases
drm/msm/dp: move link-level teardown from display_disable to display_unprepare
drm/msm/dp: factor out _helper variants of bridge ops accepting a panel
drm/msm/dp: replace power_on with active_stream_cnt for dp_display
drm/msm/dp: Mark the SST bridge disconnected when mst is active
drm/msm/dp: add an API to initialize MST on sink side
drm/msm/dp: add msm_dp_display_get_panel() to initialize DP panel
drm/msm/dp: initialize dp_mst module for each DP MST controller
drm/msm/dp: add connector abstraction for DP MST
drm/msm/dp: add HPD callback for dp MST
Yongxing Mou (6):
drm/msm/dp: add link_ready to manage link-level operations
drm/msm/dpu: initialize encoders per stream for DP MST
drm/msm/dpu: expose dpu_encoder ops for DP MST reuse
drm/msm/dpu: use msm_dp_get_mst_intf_id() to get the intf id
drm/msm/dp: wire MST helpers into atomic check and commit paths
drm/msm/dp: add dp_mst_drm to manage DP MST encoder operations
drivers/gpu/drm/msm/Makefile | 3 +-
drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c | 40 +-
drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.h | 8 +
drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c | 30 +-
drivers/gpu/drm/msm/dp/dp_audio.c | 2 +-
drivers/gpu/drm/msm/dp/dp_ctrl.c | 473 ++++++++++++++++++++--
drivers/gpu/drm/msm/dp/dp_ctrl.h | 17 +-
drivers/gpu/drm/msm/dp/dp_display.c | 394 +++++++++++++++----
drivers/gpu/drm/msm/dp/dp_display.h | 25 +-
drivers/gpu/drm/msm/dp/dp_mst_drm.c | 583 ++++++++++++++++++++++++++++
drivers/gpu/drm/msm/dp/dp_mst_drm.h | 14 +
drivers/gpu/drm/msm/dp/dp_panel.c | 197 ++++++++--
drivers/gpu/drm/msm/dp/dp_panel.h | 20 +-
drivers/gpu/drm/msm/dp/dp_reg.h | 68 ++++
drivers/gpu/drm/msm/msm_atomic.c | 14 +-
drivers/gpu/drm/msm/msm_drv.h | 19 +
drivers/gpu/drm/msm/msm_kms.c | 1 +
17 files changed, 1718 insertions(+), 190 deletions(-)
---
base-commit: e7d700e14934e68f86338c5610cf2ae76798b663
change-id: 20260410-msm-dp-mst-35130b6e8b84
prerequisite-message-id: <20260609-dp_mstclean-v7-0-ea04113e8233@xxxxxxxxxxxxxxxx>
prerequisite-patch-id: 1d440cb9fed2bdd66d8de0e1e20475f0fe166973
prerequisite-patch-id: be0f4b80697df7224c80362b161b8a9f0a542184
prerequisite-patch-id: eefa6e6353df301420feae1da704a9db2c2155f2
prerequisite-patch-id: 9e9095f82dd6c131c9f3c1de4fdb8a62bd65ca24
prerequisite-patch-id: 3e635f008f9b56823101abd9253905f078fcb3b5
prerequisite-patch-id: e39e0dc124ed043c7a419610ebe03ad105da27db
prerequisite-patch-id: 945af39213cd4241e1a5929fada04a9286aeb5db
prerequisite-patch-id: 898ae7e4582a6b31492c223e7dd167fb9ce78096
prerequisite-patch-id: 3887553893357c1ffbda99eb010801bc2166cbad
prerequisite-patch-id: 7ccd961fa3c6f925659dee7d7a5bd167c8e7331b
prerequisite-patch-id: be2bf918e0e87ec2ea999927f36bd172c498748e
prerequisite-patch-id: 6aacdabb2dd0536dc04da04f8419ae39e35f8b19
prerequisite-patch-id: a9f27eff8f643ff445810b17d670891928f5b416
prerequisite-patch-id: efd300a2b52715153b8c1c7407db696eb331594b
prerequisite-patch-id: 950abefc4862050ef606404977fd27c5dd2cbb2b
Best regards,
--
Yongxing Mou <yongxing.mou@xxxxxxxxxxxxxxxx>