Add multiPD support for AHB platforms following the approach for ath12k:
link: https://lore.kernel.org/linux-wireless/20250321-ath12k-ahb-v12-0-bb389ed76ae5@quicinc.com/
link: https://lore.kernel.org/linux-wireless/20260721065038.126046-1-aaradhana.sahu@oss.qualcomm.com/
The IPQ5018 platform is a multiPD platform and the current ath11k driver
supports standalone IPQ5018 WiFi only. However, IPQ5018 boards come with
up to two optional SoC-specific QCN6122 WiFi companion chips for 5G/6G
WiFi.
IPQ5018 implements the multi-PD architecture as follows:
+-----------------------------+
| Q6 Remote Processor |
| RootPD |
+--------------+--------------+
|
|
|
+---------------------+---------------------+
| | |
+-----v-----+ +-----v-----+ +-----v-----+
| UserPD1 | | UserPD2 | | UserPD3 |
| IPQ5018 | | QCN6122 #1| | QCN6122 #2|
| (Radio) | | (Radio) | | (Radio) |
+-----------+ +-----------+ +-----------+
The rootPD is responsible for managing the lifecycle of the UserPD and
shared resources and providing SSR notifiers. There are different
firmware blobs that include either the rootPD and userPD binaries for
IPQ5018-only which auto-spawns the userPD for IPQ5018 WiFi, or for
IPQ5018 and QCN6122 for which the userPDs for each radio must be spawned
by the ath11k driver.
It's worth noting that QCN6122 does not have its own Q6 firmware blobs.
Instead, the firmware segments for QCN6122 are included in the MPD
version of the IPQ5018 firmware blob(s). The QCN6122 M3 firmware does
come separately and is loaded into the Q6 memory carveout of IPQ5018.
In high-level, the path series covers:
- Addition of multiPD IPQ5018 binding definition
- Updates to the ath11k driver to register handle standalone vs multiPD
remoteproc boot sequence with required notifiers.
- Support for loading M3 firmware files during remoteproc boot sequence
- Ability to set required memory carveouts for Q6, BDF, and M3 firmware
segments.
- Addition of SCM call to manage power state of the internal IPQ5018
WiFi radio
- Driver support for resource acquisition and power up/down of userPDs
- Binding definition and AHB driver support for QCN6122
Signed-off-by: George Moussalem <george.moussalem@outlook.com>
---
George Moussalem (16):
dt-bindings: net: wireless: ath11k: Sort compatible names alphabetically
dt-bindings: net: wireless: ath11k: Add bindings for IPQ5018
wifi: ath11k: Register root PD rproc notifier
wifi: ath11k: Add support for loading m3 mbn firmware
wifi: ath11k: Add ability to set BDF and M3 dump memory addresses
firmware: qcom: scm: Add support for setting internal WiFi power mode
wifi: ath11k: Register userPD interrupts and SMEM entries
wifi: ath11k: Power up userPD
wifi: ath11k: Power down userPD
dt-bindings: net: wireless: ath11k: Add bindings for QCN6122
wifi: ath11k: add hw params for QCN6122
wifi: ath11k: add hal regs for QCN6122
wifi: ath11k: add hw ring mask for QCN6122
wifi: ath11k: update hif and pci ops for QCN6122
wifi: ath11k: define userPDs for QCN6122
wifi: ath11k: add QCN6122 device support
.../bindings/net/wireless/qcom,ath11k.yaml | 569 ++++++++++++++++++++-
drivers/firmware/qcom/qcom_scm.c | 43 ++
drivers/firmware/qcom/qcom_scm.h | 2 +
drivers/net/wireless/ath/ath11k/ahb.c | 555 +++++++++++++++++++-
drivers/net/wireless/ath/ath11k/ahb.h | 54 +-
drivers/net/wireless/ath/ath11k/core.c | 99 +++-
drivers/net/wireless/ath/ath11k/core.h | 1 +
drivers/net/wireless/ath/ath11k/hif.h | 9 +
drivers/net/wireless/ath/ath11k/hw.c | 112 ++++
drivers/net/wireless/ath/ath11k/hw.h | 10 +
drivers/net/wireless/ath/ath11k/pcic.c | 9 +
drivers/net/wireless/ath/ath11k/qmi.c | 70 ++-
drivers/net/wireless/ath/ath11k/qmi.h | 3 +-
include/linux/firmware/qcom/qcom_scm.h | 1 +
14 files changed, 1501 insertions(+), 36 deletions(-)
---
base-commit: 10cfa109c880092df32e396647b4afdca9be8350
change-id: 20260910-ipq5018-qcn6122-mpd-46256c31b99e
Best regards,
--
George Moussalem <george.moussalem@outlook.com>