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

Commit 0ff64f80 authored by Joerg Roedel's avatar Joerg Roedel
Browse files

iommu/amd: Implement DOMAIN_ATTR_GEOMETRY attribute



Implement the attribute itself and add the code for the
AMD IOMMU driver.

Signed-off-by: default avatarJoerg Roedel <joerg.roedel@amd.com>
parent 0cd76dd1
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -3069,6 +3069,10 @@ static int amd_iommu_domain_init(struct iommu_domain *dom)

	dom->priv = domain;

	dom->geometry.aperture_start = 0;
	dom->geometry.aperture_end   = ~0ULL;
	dom->geometry.force_aperture = true;

	return 0;

out_free:
+16 −3
Original line number Diff line number Diff line
@@ -348,10 +348,23 @@ EXPORT_SYMBOL_GPL(iommu_device_group);
int iommu_domain_get_attr(struct iommu_domain *domain,
			  enum iommu_attr attr, void *data)
{
	struct iommu_domain_geometry *geometry;
	int ret = 0;

	switch (attr) {
	case DOMAIN_ATTR_GEOMETRY:
		geometry  = data;
		*geometry = domain->geometry;

		break;
	default:
		if (!domain->ops->domain_get_attr)
			return -EINVAL;

	return domain->ops->domain_get_attr(domain, attr, data);
		ret = domain->ops->domain_get_attr(domain, attr, data);
	}

	return ret;
}
EXPORT_SYMBOL_GPL(iommu_domain_get_attr);

+8 −0
Original line number Diff line number Diff line
@@ -37,11 +37,18 @@ struct iommu_domain;
typedef int (*iommu_fault_handler_t)(struct iommu_domain *,
			struct device *, unsigned long, int, void *);

struct iommu_domain_geometry {
	dma_addr_t aperture_start; /* First address that can be mapped    */
	dma_addr_t aperture_end;   /* Last address that can be mapped     */
	bool force_aperture;       /* DMA only allowed in mappable range? */
};

struct iommu_domain {
	struct iommu_ops *ops;
	void *priv;
	iommu_fault_handler_t handler;
	void *handler_token;
	struct iommu_domain_geometry geometry;
};

#define IOMMU_CAP_CACHE_COHERENCY	0x1
@@ -49,6 +56,7 @@ struct iommu_domain {

enum iommu_attr {
	DOMAIN_ATTR_MAX,
	DOMAIN_ATTR_GEOMETRY,
};

#ifdef CONFIG_IOMMU_API