On 8/31/2026 4:17 PM, Yongxing Mou wrote:
> 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.
>
> The prerequisite cleanup series [1] has been merged into linux-next.
>
> Type-C MST support depends on the DRM IRQ design which is still under
> discussion, so it will be updated in that series first and folded into
> the MST series once the design stabilizes.
>
> Overall, the patch series has been organized in the following way:
>
> 1) First set are preparatory refactors to decouple link-level and
> stream-level operations for MST readiness.
> 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, DPU encoder
> integration, and SST/MST connector state management.
>
> Note:
> Validation for this series has so far been done on the latest linux-next
> on LeMans, covering both FB console and Weston.
>
> [1] https://lore.kernel.org/r/20260528-dp_mstclean-v9-0-f094cea8ca24@oss.qualcomm.com
>
> ---
> Changes in v6:
> - Rebased onto linux-next 20260828; drop already-merged prerequisite
> cleanup patches.
> - Reordered patches for better logical flow.
> - Patch 01: Also move power_on=false into display_unprepare.
> - Patch 02 (new): Split from old patch 04.
> - Patch 03 (new): Split from old patch 04.
> - Patch 04: Squash num_pixel_clks into this patch.
> - Patch 05: Use loop for snapshot; skip inactive streams before adding.
> - Patch 06 (new): Split register definitions out of old patch 04.
> - Patch 07: Rewrite old patch 04; replace stream_id special-casing
> with transparent msm_dp_read/write_link() helpers.
> - Patch 08: Fix REG_DP_MST_ACT register placement.
> - Patch 13: Drop defensive start_slot bounds check; rename
> channel_alloc -> update_timeslot.
> - Patch 14: Guard link training with active_stream_cnt == 0.
> - Patch 16: Add locking annotation; group link_ready with status
> variables.
> - Patch 17: Drop redundant stream_id >= DP_STREAM_MAX check.
> - Patch 18: Consolidate msm_dp_mst_attach_encoder() and
> msm_dp_get_mst_max_stream() definition, declaration, and usage
> into this patch.
> - Patch 19 (new): Split connector/topology callbacks out of old
> patch 23+24.
> - Patch 20 (new): Split dpu_encoder_get_intf() refactor out of old
> patch 21.
> - Patch 21: Squash stream_id condition; reorder before MST encoder
> patch.
> - Patch 22: Use thin wrappers instead of renaming/exporting core
> dpu_encoder functions; use suggested for-loop style.
> - Patch 23 (new): Split atomic stream enable/disable/check out of
> old patch 23.
> - Patch 24: Add hpd_irq_lock; use %*ph for ESI debug prints.
> - Patch 26: Defer SST-disconnect-on-MST-cap to new patches 28-29
> to avoid bisect breakage.
> - Patch 27: Add comment for clear-before-write DPCD sequence.
> - Patch 28 (new): Split from old patch 14; handle boot-with-cable
> SST bridge detection.
> - Patch 29 (new): Handle SST connector status when MST is enabled.
> - Link to v5: https://lore.kernel.org/r/20260629-msm-dp-mst-v5-0-2ed6aee1867a@oss.qualcomm.com
>
> 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@oss.qualcomm.com
>
> 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@oss.qualcomm.com
>
> 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@quicinc.com
>
> 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@quicinc.com/
>
> Signed-off-by: Yongxing Mou <yongxing.mou@oss.qualcomm.com>
>
> ---
> Abhinav Kumar (16):
> drm/msm/dp: move link-level teardown from display_disable to display_unprepare
> drm/msm/dp: introduce stream_id for each DP panel
> drm/msm/dp: add support for programming p1/p2/p3 register blocks
> 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: always program MST_FIFO_CONSTANT_FILL for MST use cases
> drm/msm/dp: add support for sending VCPF packets in DP controller
> drm/msm/dp: add support for MST channel slot allocation
> drm/msm/dp: replace power_on with active_stream_cnt
> drm/msm/dp: factor out _helper variants of bridge ops accepting a panel
> drm/msm/dp: add msm_dp_display_get_panel() to initialize DP panel
> drm/msm/dp: add HPD callback for dp MST
> drm/msm/dp: mark the SST bridge disconnected when mst is active
> drm/msm/dp: enable MST on capable sinks
> drm/msm/dp: mark the SST bridge disconnected when an MST-capable sink is present
>
> Yongxing Mou (13):
> drm/msm/dp: refactor msm_dp_ctrl_config_msa() to take panel
> drm/msm/dp: drop redundant config_ctrl_link() from msm_dp_ctrl_on_stream()
> drm/msm/dp: add MST stream register definitions
> drm/msm/dp: add stream-aware link register accessors
> drm/msm/dp: add link_ready to manage link-level operations
> drm/msm/dp: introduce dp_mst_drm module
> drm/msm/dp: add MST connector creation and topology callbacks
> drm/msm/dpu: pass msm_display_info to dpu_encoder_get_intf()
> drm/msm/dpu: use stream_id to select MST interfaces
> drm/msm/dpu: add per-stream MST encoders
> drm/msm/dp: add atomic stream handling for MST
> drm/msm/dp: wire MST helpers into atomic check and commit paths
> drm/msm/dp: mark the SST connector disconnected when MST is enabled
>
> drivers/gpu/drm/msm/Makefile | 3 +-
> drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c | 51 ++-
> drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.h | 2 +
> drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c | 27 +-
> drivers/gpu/drm/msm/dp/dp_audio.c | 2 +-
> drivers/gpu/drm/msm/dp/dp_ctrl.c | 479 ++++++++++++++++++++++---
> drivers/gpu/drm/msm/dp/dp_ctrl.h | 19 +-
> drivers/gpu/drm/msm/dp/dp_display.c | 414 ++++++++++++++++-----
> drivers/gpu/drm/msm/dp/dp_display.h | 26 +-
> drivers/gpu/drm/msm/dp/dp_mst_drm.c | 538 ++++++++++++++++++++++++++++
> drivers/gpu/drm/msm/dp/dp_mst_drm.h | 16 +
> drivers/gpu/drm/msm/dp/dp_panel.c | 205 ++++++++---
> drivers/gpu/drm/msm/dp/dp_panel.h | 19 +-
> drivers/gpu/drm/msm/dp/dp_reg.h | 69 ++++
> drivers/gpu/drm/msm/msm_atomic.c | 14 +-
> drivers/gpu/drm/msm/msm_drv.h | 41 +++
> drivers/gpu/drm/msm/msm_kms.c | 1 +
> 17 files changed, 1727 insertions(+), 199 deletions(-)
> ---
> base-commit: e30626823a406725ce29bc75cb8ec467d3e1e326
> change-id: 20260410-msm-dp-mst-35130b6e8b84
>
> Best regards,
Hi,
This is a gentle ping on this series.
If you have a chance to review it, I'd appreciate any comments and feedback.