diff --git a/drivers/net/wireless/cnss2/bus.c b/drivers/net/wireless/cnss2/bus.c index 4a42a75f8b8f..c7f7d92050c0 100644 --- a/drivers/net/wireless/cnss2/bus.c +++ b/drivers/net/wireless/cnss2/bus.c @@ -588,3 +588,18 @@ int cnss_bus_get_msi_assignment(struct cnss_plat_data *plat_priv, return -EINVAL; } } + +bool cnss_bus_is_smmu_s1_enabled(struct cnss_plat_data *plat_priv) +{ + if (!plat_priv) + return false; + + switch (plat_priv->bus_type) { + case CNSS_BUS_PCI: + return cnss_pci_is_smmu_s1_enabled(plat_priv->bus_priv); + default: + cnss_pr_err("Unsupported bus type: %d\n", + plat_priv->bus_type); + return false; + } +} diff --git a/drivers/net/wireless/cnss2/bus.h b/drivers/net/wireless/cnss2/bus.h index 6c0cec926ad9..09346b088cda 100644 --- a/drivers/net/wireless/cnss2/bus.h +++ b/drivers/net/wireless/cnss2/bus.h @@ -69,4 +69,5 @@ int cnss_bus_get_msi_assignment(struct cnss_plat_data *plat_priv, int *num_vectors, u32 *user_base_data, u32 *base_vector); +bool cnss_bus_is_smmu_s1_enabled(struct cnss_plat_data *plat_priv); #endif /* _CNSS_BUS_H */ diff --git a/drivers/net/wireless/cnss2/pci.c b/drivers/net/wireless/cnss2/pci.c index a0b3ad1d1855..e651190de6d3 100644 --- a/drivers/net/wireless/cnss2/pci.c +++ b/drivers/net/wireless/cnss2/pci.c @@ -4099,6 +4099,14 @@ int cnss_pci_get_iova_ipa(struct cnss_pci_data *pci_priv, u64 *addr, u64 *size) return 0; } +bool cnss_pci_is_smmu_s1_enabled(struct cnss_pci_data *pci_priv) +{ + if (pci_priv) + return pci_priv->smmu_s1_enable; + + return false; +} + struct iommu_domain *cnss_smmu_get_domain(struct device *dev) { struct cnss_pci_data *pci_priv = cnss_get_pci_priv(to_pci_dev(dev)); diff --git a/drivers/net/wireless/cnss2/pci.h b/drivers/net/wireless/cnss2/pci.h index acd323bad6b8..0effa8a5e5f9 100644 --- a/drivers/net/wireless/cnss2/pci.h +++ b/drivers/net/wireless/cnss2/pci.h @@ -253,4 +253,5 @@ int cnss_pci_get_user_msi_assignment(struct cnss_pci_data *pci_priv, int *num_vectors, u32 *user_base_data, u32 *base_vector); +bool cnss_pci_is_smmu_s1_enabled(struct cnss_pci_data *pci_priv); #endif /* _CNSS_PCI_H */ diff --git a/drivers/net/wireless/cnss2/qmi.c b/drivers/net/wireless/cnss2/qmi.c index f683ca607040..6831ea5eee29 100644 --- a/drivers/net/wireless/cnss2/qmi.c +++ b/drivers/net/wireless/cnss2/qmi.c @@ -226,7 +226,8 @@ static int cnss_wlfw_host_cap_send_sync(struct cnss_plat_data *plat_priv) req->cal_done = plat_priv->cal_done; cnss_pr_dbg("Calibration done is %d\n", plat_priv->cal_done); - if (!cnss_bus_get_iova(plat_priv, &iova_start, &iova_size) && + if (cnss_bus_is_smmu_s1_enabled(plat_priv) && + !cnss_bus_get_iova(plat_priv, &iova_start, &iova_size) && !cnss_bus_get_iova_ipa(plat_priv, &iova_ipa_start, &iova_ipa_size)) { req->ddr_range_valid = 1;