mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-09 05:39:54 -04:00
cnss2: Only send host IOVA range to firmware when SMMU enabled
Only when SMMU S1 enabled, CNSS driver will send IOVA range in HOST_CAP message, and let firmware to configure ATU. Change-Id: Idd19063da975c0105d91e0e31575d0b0d1edd8e2 Signed-off-by: Lin Bai <lbai@codeaurora.org>
This commit is contained in:
parent
b95e50426d
commit
d00e6c6b34
5 changed files with 27 additions and 1 deletions
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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 */
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
|
|
|
|||
|
|
@ -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 */
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Reference in a new issue