[PATCH ath-next 15/17] wifi: ath12k: Derive QMI service instance ID per protection domain

From: Aaradhana Sahu

Date: Thu Oct 08 2026 - 06:32:08 EST


From: Sowmiya Sree Elavalagan <quic_ssreeela@xxxxxxxxxxx>

IPQ5332 platform variants are supporting multiple Protection Domains
(PDs), each PD exposes its own instance of QMI services. The current
implementation uses a fixed qmi_service_ins_id from hw_params, which
results in multiple PDs sharing the same service instance ID.

Update ath12k_ahb_init_qmi_ce_config() to derive the QMI service
instance ID based on the user PD identifier. Offset the base
qmi_service_ins_id with (userpd_id - 1) to ensure each PD gets a
unique service instance.

This avoids QMI service instance conflicts and enables correct
operation on multi-PD targets.

Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.6-01243-QCAHKSWPL_SILICONZ-1
Tested-on: IPQ5332 hw1.0 AHB WLAN.WBE.1.6-01322-QCAHKSWPL_SILICONZ-1
Tested-on: QCN6432 hw1.0 AHB WLAN.WBE.1.6-01322-QCAHKSWPL_SILICONZ-1

Signed-off-by: Sowmiya Sree Elavalagan <quic_ssreeela@xxxxxxxxxxx>
Signed-off-by: Aaradhana Sahu <aaradhana.sahu@xxxxxxxxxxxxxxxx>
---
drivers/net/wireless/ath/ath12k/ahb.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/net/wireless/ath/ath12k/ahb.c b/drivers/net/wireless/ath/ath12k/ahb.c
index 892872f70b2f..3872aeeb9ba7 100644
--- a/drivers/net/wireless/ath/ath12k/ahb.c
+++ b/drivers/net/wireless/ath/ath12k/ahb.c
@@ -542,12 +542,14 @@ static void ath12k_ahb_power_down(struct ath12k_base *ab, bool is_suspend)
static void ath12k_ahb_init_qmi_ce_config(struct ath12k_base *ab)
{
struct ath12k_qmi_ce_cfg *cfg = &ab->qmi.ce_cfg;
+ struct ath12k_ahb *ab_ahb = ath12k_ab_to_ahb(ab);

cfg->tgt_ce_len = ab->hw_params->target_ce_count;
cfg->tgt_ce = ab->hw_params->target_ce_config;
cfg->svc_to_ce_map_len = ab->hw_params->svc_to_ce_map_len;
cfg->svc_to_ce_map = ab->hw_params->svc_to_ce_map;
- ab->qmi.service_ins_id = ab->hw_params->qmi_service_ins_id;
+ ab->qmi.service_ins_id = ab->hw_params->qmi_service_ins_id +
+ (ab_ahb->userpd_id - ATH12K_AHB_USERPD_ID_0);
}

static void ath12k_ahb_disable_irq(struct ath12k_base *ab)

--
2.34.1