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

Commit 2d4e3a39 authored by qctecmdr's avatar qctecmdr Committed by Gerrit - the friendly Code Review server
Browse files

Merge "cnss2: Add DOMAIN_ATTR_GEOMETRY attribute support"

parents 28c5a991 6284f561
Loading
Loading
Loading
Loading
+26 −0
Original line number Diff line number Diff line
@@ -1407,6 +1407,27 @@ static int cnss_pci_init_smmu(struct cnss_pci_data *pci_priv)
			goto release_mapping;
		}

		if (pci_priv->iommu_geometry) {
			struct iommu_domain_geometry geometry = {0};

			/* Need revisit if iova and ipa not continuous */
			CNSS_ASSERT(pci_priv->smmu_iova_start +
				    pci_priv->smmu_iova_len ==
				    pci_priv->smmu_iova_ipa_start);

			geometry.aperture_start = pci_priv->smmu_iova_start;
			geometry.aperture_end = pci_priv->smmu_iova_start +
						pci_priv->smmu_iova_len +
						pci_priv->smmu_iova_ipa_len;
			ret = iommu_domain_set_attr(mapping->domain,
						    DOMAIN_ATTR_GEOMETRY,
						    &geometry);
			/* Not fatal failure, fall-thru */
			if (ret)
				cnss_pr_err("Failed to set GEOMETRY, err = %d\n",
					    ret);
		}

		ret = iommu_domain_set_attr(mapping->domain,
					    DOMAIN_ATTR_CB_STALL_DISABLE,
					    &cb_stall_disable);
@@ -3328,6 +3349,11 @@ static int cnss_pci_get_smmu_cfg(struct cnss_plat_data *plat_priv)
		    "converged dt" : "single dt"),
		    &pci_priv->smmu_iova_ipa_start,
		    pci_priv->smmu_iova_ipa_len);

	pci_priv->iommu_geometry =
		of_property_read_bool(dev_node, "qcom,iommu-geometry");
	cnss_pr_dbg("DOMAIN_ATTR_GEOMETRY: %d\n", pci_priv->iommu_geometry);

	return 0;

out:
+2 −1
Original line number Diff line number Diff line
/* Copyright (c) 2016-2019, The Linux Foundation. All rights reserved.
/* Copyright (c) 2016-2020, The Linux Foundation. All rights reserved.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 and
@@ -86,6 +86,7 @@ struct cnss_pci_data {
	struct timer_list dev_rddm_timer;
	bool disable_pc;
	struct cnss_pci_debug_reg *debug_reg;
	u32 iommu_geometry;
};

static inline void cnss_set_pci_priv(struct pci_dev *pci_dev, void *data)