Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d00e6c6b authored by Lin Bai's avatar Lin Bai Committed by Gerrit - the friendly Code Review server
Browse files

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: default avatarLin Bai <lbai@codeaurora.org>
parent b95e5042
Loading
Loading
Loading
Loading
+15 −0
Original line number Diff line number Diff line
@@ -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;
	}
}
+1 −0
Original line number Diff line number Diff line
@@ -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 */
+8 −0
Original line number Diff line number Diff line
@@ -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));
+1 −0
Original line number Diff line number Diff line
@@ -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 */
+2 −1
Original line number Diff line number Diff line
@@ -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;