Hi all,
I'm working on a mainline OpenWrt port for the Wallys DR9574 — an IPQ9574
tri-radio AP with three QCN9274 hw2.0 M.2 cards. Posting to share what I've
found so far and ask for help on the remaining WiFi blocker.
Hardware
| Component | Detail |
|---|---|
| Board | Wallys DR9574 (Qualcomm AP-AL02-C4 reference design) |
| SoC | IPQ9574 |
| WiFi | 3x QCN9274 hw2.0 M.2 (DR9274-2GK / DR9274-5GK / DR9274-6GK) — single-band each |
| LAN | 4x 1 GbE (QCA8075 via MDIO) + 2x 2.5G/10G USXGMII (not yet enabled) |
| RAM | 1 GB DDR |
Status: what works on mainline OpenWrt (kernel 6.12.89)
- Boots: mainline OpenWrt via UART tftpboot (RAM-only, NAND untouched)
- Ethernet: all 4x 1GbE LAN ports working (QCA8075 PHYs via EDMA PPE)
- WiFi init: all 3 QCN9274 cards detected, firmware loads, HTC/WMI
service negotiation completes cleanly... up to a point (see below)
What it took to get here (two patches required)
Patch 1: single-mac cards must not request WMI MAC1
Without this: HTC Service WMI MAC1 connect response: status: 0x1 (NOT_FOUND)
ath12k_hw_params.max_radios = 2 for QCN9274 hw2.0 tells ath12k_htc_init()
to open two WMI endpoints. These cards have single-mac firmware (no dualmac OTP
bit), so the firmware doesn't advertise MAC1. Fix: cap wmi_ep_count at 1 when
the OTP dualmac bit is clear.
Patch 2: DMA ring capability TLV parser must tolerate unknown module IDs
Without this: "Invalid module id 3" -> "failed to parse tlv -22" -> WMI ready timeout
WLAN.WBE.1.6 sends a DMA ring capability entry for module_id 3 (and possibly
others) that the host-side enum doesn't know. Current ath12k returns -EINVAL,
which breaks the entire TLV parse. Fix: warn-and-skip unknown module_ids.
Both patches confirmed working on this hardware. HTC services (Control, HTT,
WMI) all connect with status 0 and SVC_READY_EXT parses cleanly.
Current blocker: firmware RDDM ~300 ms after WMI_INIT_CMD
With both patches and CONFIG_ATH12K_DEBUG=y + debug_mask=0xffffff:
[19.485] WMI connect response: status: 0, assigned ep: 2 <- clean
[19.486] num hw modes 1 preferred_hw_mode 0
[19.486] slot 0002: supported_bands 2 freq 5 GHz [4890-7125] <- 5/6 GHz card
[19.486] slot 0001: supported_bands 1 freq 2 GHz [2401-2495] <- 2.4 GHz card
[20.408] htc ep 2 consumed 1 credits (total 1) <- WMI_INIT_CMD sent
[20.724] mhi notify status reason MHI_CB_EE_RDDM <- 316 ms later: firmware crash
[20.883] mhi notify status reason MHI_CB_EE_RDDM
[24.517] failed to receive wmi unified ready event: -110
MHI_CB_EE_RDDM = firmware entered RAM Dump Debug Mode (fatal crash). The
crash fires on all three cards within 300-500 ms of the host sending
WMI_INIT_CMD. Tried multiple firmware versions and host-side patches targeting
the post-INIT path — RDDM fires before any of that code runs, so it's something
in how the firmware processes our INIT payload.
Firmware version: WLAN.WBE.1.6-01243-QCAHKSWPL_SILICONZ-1 (from
linux-firmware 20260410).
What I've ruled out
- HTC transport problems: all services connect status=0
- Board data / calibration: using the board-2.bin extracted from Wallys's
own mainline-driver reference image — exact match for this hardware - Driver-side NULL ptr and DMA ring timing issues: tested, RDDM fires
upstream of those code paths
Questions
-
Has anyone successfully run QCN9274 hw2.0 cards on IPQ9574 with current
mainline ath12k? What firmware version are you using? -
Does the RDDM-after-WMI-INIT pattern ring a bell with anyone who has
debugged QCN9274 on other platforms? -
Is there a way to extract the RDDM crash dump from a QCN9274 card via
debugfs or PCIe after this failure? -
Has anyone tried older WBE firmware (1.4.x or 1.3.x) with current
ath-next on these cards?
Upstream plans
The DTS and these two patches are in good shape for upstream submission once
WiFi is working. Happy to coordinate with anyone else working on IPQ9574 or
QCN9274 mainlining.
Full verbose dmesg (850 lines) available on request.
Thanks,
Stefano