SDM632 SLIMbus: ADSP framer never gets frame-sync under q6v5-pas (works under downstream pil-tz, identical firmware) - what physical precondition is PAS missing?
Lajosházi László Gergely <[email protected]> Mon, 20 Jul 2026 02:16:52 +0200
| Newsgroups | org.kernel.vger.linux-remoteproc,org.kernel.vger.linux-arm-msm |
|---|---|
| Message-ID | <CAAD3nBebR3GPbufLyc95QVwueLBUWmGpxQhqtSt3EBEswjpdVw@mail.gmail.com> |
Hi Srinivas, all,
On the Fairphone 3 (SDM632/msm8953, WCD9326 codec) mainline SLIMbus audio
is silent: the NGD reports "capability exchange timed-out STATUS=0x40c
CFG=0x0 INT_STAT=0x0" and the codec never gets a logical address. Same
hardware works on the downstream 4.9 stack (A/B slots, same phone). With Claude
code I've localized it to one register-level difference and I'm stuck
on the last step.
The only variable is the ADSP boot method: downstream subsys-pil-tz vs
mainline qcom_q6v5_pas. adsp.mbn and its devcfg are byte-identical; the
AP-side QMI sequence is byte-identical and ACKed in both cases; current
mainline HEAD (including the merged qcom-ngd-ctrl fix series) reproduces
it, cold-boot retested.
Reading the SLIMbus block (0x0c140000) and LPASS-CC (0x0c000000) via
/dev/mem on both slots:
reg (0x0c140000 +off) downstream/PIL mainline/PAS
FRM_CFG +0x400 0x000D0C83 0x000D0C83 identical
INTF_CFG +0x600 0x00000001 0x00000001 identical
FRM_STAT +0x404 0x060D1901 0x00000000
INTF_STAT +0x604 0x00003E04 0x00000000
LPASS-CC is byte-identical over the whole aperture (SLIMbus root RCGR
CFG=0x509, branch CLK_OFF=0 on both -- the 24.576 MHz root clock runs on
the dead side too). So the framer is configured and clocked identically;
only the status registers read 0 under PAS: INTF_STAT bits FS/SFS/MS
(frame/super-frame/master sync) never set -- the interface never acquires
sync on the physical bus. The stock firmware's own bring-up confirms it
waits on hardware: it polls the FS bit, times out ("Hardware failed to
enumerate ... (FS:0)(SFS:0)(MS:0)"), and its subsequent HW reset succeeds,
so ADSP register access is fine. The firmware maps no separate PHY/analog
block. On msm8953 I find no AP-side lever either: no lpasscc, nothing
SLIMbus in gcc, no LPASS GDSC (unlike msm8996, which frames the same codec
family under PAS).
Two questions:
(1) What physical precondition (rail / reset-deassert / pad / LPASS-internal
enable) must hold for the SLIMbus interface to acquire frame-sync on
SDM632, and where does the pil-tz path establish it that q6v5_pas does not?
(2) Is that step AP-reachable from mainline (SCM call, reset, regulator
vote, clock, DT), or only TZ/PIL-internal -- i.e. is this fixable with a
kernel patch at all, or does it need a vendor-side change?
Full write-up, two-sided register dumps, binary diffs and the annotated
firmware disassembly: https://github.com/msm8953-mainline/linux/issues/255
Thanks for any pointer,
László