PAF becomes saf/device (history kept), STATE.md dissolves into saf/state.md with the dated era archived, the substrate SAF moves up from souveraine, and every agreement points at saf/INDEX.md and nowhere else. one map, nothing to remember
4.7 KiB
PAF · Android modem bring-up — COMPLETE captured sequence (the working reference)
The full modem boot Android does, end to end, extracted from the real captures in
android-capture-20260620/ (modem SSR full re-init -> ONLINE, and the cold online capture).
This is the ENTIRE process — not one diff. Each phase lists what Android does (with file:line)
and the pmOS gap. Android reaches IN_SERVICE / LTE / Fido (302/720) at the end; pmOS stalls
at phase 1.
Source files:
qcril-ssr-fullinit.txt(66k lines, modem SSR -> full re-init)qcril-online-capture.txt(24k lines, cold bring-up to ONLINE)android-radio-log.txt,qcril-ssr-TIMELINE.txt(digest) SIM: ICCID , IMSI , MCC/MNC 302/370 (Fido).
PHASE 0 — kernel/firmware secure-load (pre-QMI; NOT in these AP logs)
The modem PIL loads MBA -> PBL -> MPSS with the TZ memory-assign + XPU unlock. Android passes this.
pmOS is where the -22 / XPU violation lives — see secure_load_tz_frontier.md. NOTE: downstream
(peripheral-loader.c:334 pil_assign_mem_to_subsys) makes the same HLOS->subsys_vmid RW
hyp_assign that mainline qcom_q6v5_mss.c:463 does — the assign is load-bearing, the skip was wrong.
PHASE 1 — firmware comes up at op-mode 1 = LOW_POWER ← THE DIVERGENCE
- Android:
qcril_qmi_nas_query_cur_power_state: known modem operating mode 1thendms_handle_modem_operating_mode: modem's operating mode needs to be changed(qcril-online-capture.txt:90,96), and the DMS event report showsoprt 1 / 0(qcril-online-capture.txt, qcril_qmi_nas.cpp:6562). - pmOS: modem comes up at op-mode 3 = OFFLINE (
tools/modem-online-provisioner/RESULTS.md). OFFLINE->online = 52 DeviceNotReady; low_power->online would be a legal transition. - QMI DMS operating-mode enum: 0=ONLINE 1=LOW_POWER 2=FACTORY 3=OFFLINE 4=RESET 5=SHUTDOWN 6=PERSISTENT_LOW_POWER.
- The real question is NOT "how to force OFFLINE->online" (it can't) — it is "why does our modem boot to OFFLINE when Android's boots to LOW_POWER". OFFLINE is the firmware's "something-wrong / not-provisioned" state. Prime suspects: phase-0 secure-load health (degraded boot), or EFS/rmtfs provisioning (modem can't read/write its NV -> falls to OFFLINE).
PHASE 2 — UIM / SIM card init (Android: OK)
card_state 3(present), appstate 5(READY), apptype 2=USIM /type 5=ISIM (qcril-online-capture.txt:336-337). SIM ICCID/IMSI read fine.- pmOS gap: untested past phase 1 — modem must be online first.
PHASE 3 — PDC: select carrier MBN config (per SIM slot) ← pmOS likely missing
- Android:
qcril_qmi_pdc_get_selected_mbn_config_by_sim_slot(qcril-ssr-fullinit.txt:4308…) andqcril_qmi_pdc_get_selection_carrier: cnv is valid, cnv=[72](qcril-online-capture.txt:9367,qcril_qmi_nas: prop_cnv = 72). cnv 72 = the Fido carrier config. - This is the carrier/modem config (MBN) activation. pmOS has no RIL doing it; the planned
replacement is the PDC self-provisioner
qcril-autoselect.py(seebuild.md,device-google-blueline). Without a selected config the modem may stay inert on RF.
PHASE 4 — drive operating mode -> ONLINE
- Android: NAS decides "needs to be changed" (phase 1) and sets the modem ONLINE; subsequent
state shows
is_online 1(qcril-online-capture.txt, qcril_qmi_nas.cpp:26131). - pmOS: this is exactly the
--dms-set-operating-mode=onlinewe fire — returns 52 because we start from OFFLINE (phase 1), not LOW_POWER.
PHASE 5 — NAS attach / network registration (full QMI choreography)
- Module/QMI send order (from
qcril-ssr-TIMELINE.txtsection A): Nas, Pdc, Voice, DSD, Auth, WDS, Pbm, Sms, Vs — dozens of NasModem sends, all rc=0. This is the post-online network attach.
PHASE 6 — IN_SERVICE (the goal)
combinePsRegistrationStates: mVoiceRegState=0(IN_SERVICE), mDataRegState=0(IN_SERVICE) … getRilVoiceRadioTechnology=14(LTE) … mOperatorAlphaLong=Fido(qcril-online-capture.txt:24110).- CS domain: VOICE,SMS,VIDEO; PS domain: DATA,MMS; registrationState=HOME; LTE EARFCN 2000, Fido
302/720 (
qcril-online-capture.txt:24107-24132). IMS registered (:24083).
What "the whole job" actually is (so it stops getting half-done)
- Phase 0 — fix the secure-load so the modem boots HEALTHY (the -22 / XPU). Not the skip.
- Phase 1 — get the modem to come up at LOW_POWER, not OFFLINE. Likely a consequence of (1) and/or EFS/rmtfs provisioning. This is the current wall.
- Phase 3 — replicate Android's PDC MBN carrier-config selection (qcril-autoselect provisioner).
- Phase 4 — only then does
set-operating-mode=onlinesucceed instead of 52. Doing (4) without (1)-(3) is why every "flash and test" returns 52. All four are required.