Hi Dmitry,

before the technical part: this reply is drafted with an AI assistant and
edited by me.  I am the author of the series; the content, the measurements
and the decisions are mine.

1) Why change it.  Upstream's bonded DSI is clock/PHY only: dsi.xml defines
CMD_DMA_CTRL.BROADCAST_EN, dsi_host.c never sets it, so no path sends one
command over both links -- which is what this panel needs (first DCS ff 20
fails with -22, the DMA engine hangs; slave-first/master-last fixes it).
This series is the data half of proposing that path; behaviour unchanged.
[E1][E2][E3]

2) 1/5.  Both style points accepted: v2 moves dsi_bonded_cmd_lock into
msm_dsim_glb next to the flag (today DEFINE_MUTEX at dsi_manager.c:40, flag
at :41) and reflows the comment to a leading "/*" on its own line.  On the
base: 0f1fb1c9c1 is not public -- it is v7.3-rc7 plus one local squashed
payload commit, so the definitions you miss do not exist upstream. [E4][E5]

3) 2/5.  I have SM8750 values only, so I cannot claim they differ per
platform; that is why they are data in a table, and if a second SoC turns
out identical the entry collapses.  On every other SoC cfg->bonded is NULL
and the old path is taken.  You are also right that SM8750 data must not
hang off the sm8650 entry: both report DSI 6G v2.9, so v2 selects it per
compatible. [E6]

4) 4/5.  My commit message was wrong: IDs are not assigned by probe order
and the master is not derived from it either, it comes from the DT.  The
corrected paragraph is

    drm/msm/dsi: take bonded DSI master cfg from per-SoC config

    The bonded master link is selected by the device tree: dsi_mgr_parse_of()
    sets msm_dsim_glb.master_dsi_link_id from "qcom,master-dsi", and the link
    ids are the DSI host indices, not the probe order.  The DT stays the
    authority for the role; the per-SoC entry only records which link this
    board's panel sits on, so a bonded transfer issued from the non-master
    link can be rejected with a warning instead of failing later as -EINVAL
    during panel init.  On this board the recorded id equals the DT-selected
    one, so behaviour is unchanged.

So in v2 I will not take the master from the table: the DT keeps deciding it
and the entry only backs the "caller must be the master link" check.  I will
recut the series on top of current torvalds master, so it applies for you
without the local payload, and resend it as a new series.  I am not sending
patches in this thread.


Evidence

[E1] v7.3-rc7 (24a19b953e) as exported from this tree:
     grep -n BROADCAST_EN drivers/gpu/drm/msm/registers/display/dsi.xml
       -> 190:  <bitfield name="BROADCAST_EN" pos="31" type="boolean"/>
     grep -c BROADCAST_EN drivers/gpu/drm/msm/dsi/dsi_host.c
       -> 0

[E2] Panel init on this board when the bonded command path is absent or
     mis-ordered: reports/b5-step4-master-from-cfg-20261027.md:35-41
       panel-novatek-nt36536 ae94000.dsi.0: sending dcs data ff 20 failed: -22
       ... attempt 1/2/3 failed ... Failed to initialize panel: -22
       msm_dsi ae96000.dsi: panel is not prepared; refusing video enable
     same file, section 0: with the path in place the seven error counters
     (command DMA timeout, vblank timeout, reset failure, panel not
     prepared, ...) stay at 0 across 10 blank/wake cycles.

[E3] Command DMA engine state with the two links armed independently:
     patches/upstream/m6-b5-p4-rfc-20261027/RFC-SCOPE.md:12-15
       STATUS0=0x20003, TRIG_DMA=0x1 (self-clearing never happens), panel
       shows backlight only; symptom disappears after slave-first /
       master-last ordering with the completion IRQ on the master alone.

[E4] Lock and flag as sent (both file-scoped today):
     linux/drivers/gpu/drm/msm/dsi/dsi_manager.c:40
       static DEFINE_MUTEX(dsi_bonded_cmd_lock);
     linux/drivers/gpu/drm/msm/dsi/dsi_manager.c:41
       static bool dsi_bonded_cmd_failed;

[E5] The base really is v7.3-rc7 + one squashed local commit:
     git -C build/m3v2-7.3rc7 rev-parse 0f1fb1c9c1^   -> 24a19b953e (v7.3-rc7)
     git -C build/m3v2-7.3rc7 show --stat 0f1fb1c9c1    -> 148 files changed,
       15513 insertions(+), 700 deletions(-)
     and the DSI part of it: dsi_host.c +578, dsi_manager.c +249, dsi.h +19.
     Consequence measured earlier: on pristine v7.3-rc7 the series does not
     apply (0/6; only 0002 is clean) -- reports/b5-preflight-20261029.md
     section 1.2.  That is what v2 has to fix, not something I can talk away.

[E6] The SM8750 bonded data is attached to the sm8650 entry in the sent
     patch: patches/local/b5-resoc-20261027/0002-dsi-per-soc-bonded-cfg.patch:72
       +   .bonded = &sm8750_dsi_bonded_cfg,
     on sm8650_dsi_cfg; the only thing distinguishing the two SoCs is the
     compatible (7 uses of "qcom,sm8750-dsi-ctrl" in dsi_host.c), since both
     report DSI 6G v2.9.

[E7] Master is a DT property on this board too:
     linux/arch/arm64/boot/dts/qcom/sm8750-lenovo-elden.dts:1658
       qcom,master-dsi;      (inside &mdss_dsi0, the node with the panel)
     parsed at linux/drivers/gpu/drm/msm/dsi/dsi_manager.c:80-81.

Thanks for the review.
Qianhui Xu

Reply via email to