RE: [PATCH 2/7] iommu/amd: Implement DOMAIN_ATTR_GEOMETRY attribute

2012-07-11 Thread Sethi Varun-B16395


> -Original Message-
> From: Joerg Roedel [mailto:joerg.roe...@amd.com]
> Sent: Wednesday, July 11, 2012 5:47 PM
> To: Sethi Varun-B16395
> Cc: iommu@lists.linux-foundation.org; linux-ker...@vger.kernel.org
> Subject: Re: [PATCH 2/7] iommu/amd: Implement DOMAIN_ATTR_GEOMETRY
> attribute
> 
> Hi Sethi,
> 
> On Wed, Jul 11, 2012 at 11:47:39AM +, Sethi Varun-B16395 wrote:
> > I am currently working on upstreaming the Freescale IOMMU driver. As
> > discussed (with Scott Wood) a while back, this representation of the
> > GEOMETRY attribute doesn't go well with our IOMMU implementation. Our
> > representation of the geometry would be more complex and is certainly
> > modifiable.  Our IOMMU allows for creating custom DMA mappings by
> > defining a set of DMA sub windows within a given window. We need a
> > mechanism for specifying the number of DMA subwindows as a part of the
> > domain geometry. My suggestion would be to make the GEOMETRY attribute
> > implementation dependent
> 
> Yeah, we had some discussions in the past and I came to the conclusion
> that its best to wait for your code and decide then if and how to change
> the interface to better suit your needs. The interface is not exposed to
> userspace so we can easily change it.
> 
> People are waiting for this feature and I don't want to delay it further
> unless it is absolutly necessary.
The API call for setting domain attributes is an essential part of our 
implementation and
GEOMETRY is a critical attribute for us. I am currently working on our driver 
and hopefully 
should be able to submit it in the next two weeks. In my case I was planning on 
letting the
geometry attribute be implementation dependent.

-Varun

___
iommu mailing list
iommu@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/iommu


Re: [PATCH 2/7] iommu/amd: Implement DOMAIN_ATTR_GEOMETRY attribute

2012-07-11 Thread Joerg Roedel
Hi Sethi,

On Wed, Jul 11, 2012 at 11:47:39AM +, Sethi Varun-B16395 wrote:
> I am currently working on upstreaming the Freescale IOMMU driver. As
> discussed (with Scott Wood) a while back, this representation of the
> GEOMETRY attribute doesn't go well with our IOMMU implementation. Our
> representation of the geometry would be more complex and is certainly
> modifiable.  Our IOMMU allows for creating custom DMA mappings by
> defining a set of DMA sub windows within a given window. We need a
> mechanism for specifying the number of DMA subwindows as a part of the
> domain geometry. My suggestion would be to make the GEOMETRY attribute
> implementation dependent

Yeah, we had some discussions in the past and I came to the conclusion
that its best to wait for your code and decide then if and how to
change the interface to better suit your needs. The interface is not
exposed to userspace so we can easily change it.

People are waiting for this feature and I don't want to delay it further
unless it is absolutly necessary.


Joerg

-- 
AMD Operating System Research Center

Advanced Micro Devices GmbH Einsteinring 24 85609 Dornach
General Managers: Alberto Bozzo
Registration: Dornach, Landkr. Muenchen; Registerger. Muenchen, HRB Nr. 43632

___
iommu mailing list
iommu@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/iommu


RE: [PATCH 2/7] iommu/amd: Implement DOMAIN_ATTR_GEOMETRY attribute

2012-07-11 Thread Sethi Varun-B16395


> -Original Message-
> From: iommu-boun...@lists.linux-foundation.org [mailto:iommu-
> boun...@lists.linux-foundation.org] On Behalf Of Joerg Roedel
> Sent: Wednesday, July 11, 2012 4:19 PM
> To: iommu@lists.linux-foundation.org
> Cc: linux-ker...@vger.kernel.org
> Subject: [PATCH 2/7] iommu/amd: Implement DOMAIN_ATTR_GEOMETRY attribute
> 
> Implement the attribute itself and add the code for the AMD IOMMU driver.
> 
> Signed-off-by: Joerg Roedel 
> ---
>  drivers/iommu/amd_iommu.c |4 
>  drivers/iommu/iommu.c |   19 ---
>  include/linux/iommu.h |8 
>  3 files changed, 28 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/iommu/amd_iommu.c b/drivers/iommu/amd_iommu.c index
> a2e418c..259a6be 100644
> --- a/drivers/iommu/amd_iommu.c
> +++ b/drivers/iommu/amd_iommu.c
> @@ -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:
> diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c index
> c39972d..ed5e0a5 100644
> --- a/drivers/iommu/iommu.c
> +++ b/drivers/iommu/iommu.c
> @@ -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)
>  {
> - if (!domain->ops->domain_get_attr)
> - return -EINVAL;
> + 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);
> 
> diff --git a/include/linux/iommu.h b/include/linux/iommu.h index
> 0eef096..f7df4aa 100644
> --- a/include/linux/iommu.h
> +++ b/include/linux/iommu.h
> @@ -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;
>  };
> 
Hi Joerg,
I am currently working on upstreaming the Freescale IOMMU driver. As discussed 
(with Scott Wood)
a while back, this representation of the GEOMETRY attribute doesn't go well 
with our IOMMU
implementation. Our representation of the geometry would be more complex and is 
certainly modifiable.
Our IOMMU allows for creating custom DMA mappings by defining a set of DMA sub 
windows within
a given window. We need a mechanism for specifying the number of DMA subwindows 
as a part of the 
domain geometry. My suggestion would be to make the GEOMETRY attribute 
implementation dependent

Regards
Varun


___
iommu mailing list
iommu@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/iommu


[PATCH 2/7] iommu/amd: Implement DOMAIN_ATTR_GEOMETRY attribute

2012-07-11 Thread Joerg Roedel
Implement the attribute itself and add the code for the
AMD IOMMU driver.

Signed-off-by: Joerg Roedel 
---
 drivers/iommu/amd_iommu.c |4 
 drivers/iommu/iommu.c |   19 ---
 include/linux/iommu.h |8 
 3 files changed, 28 insertions(+), 3 deletions(-)

diff --git a/drivers/iommu/amd_iommu.c b/drivers/iommu/amd_iommu.c
index a2e418c..259a6be 100644
--- a/drivers/iommu/amd_iommu.c
+++ b/drivers/iommu/amd_iommu.c
@@ -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:
diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c
index c39972d..ed5e0a5 100644
--- a/drivers/iommu/iommu.c
+++ b/drivers/iommu/iommu.c
@@ -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)
 {
-   if (!domain->ops->domain_get_attr)
-   return -EINVAL;
+   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);
 
diff --git a/include/linux/iommu.h b/include/linux/iommu.h
index 0eef096..f7df4aa 100644
--- a/include/linux/iommu.h
+++ b/include/linux/iommu.h
@@ -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
-- 
1.7.9.5


___
iommu mailing list
iommu@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/iommu