Re: How to specify IOMMU'able devices in DT (was: [RFC 0/5] ARM: dma-mapping: New dma_map_ops to control IOVA more precisely)

2012-09-24 Thread Hiroshi Doyu
Hi James,

On Mon, 24 Sep 2012 11:28:01 +0200
James Bottomley james.bottom...@hansenpartnership.com wrote:

 On Mon, 2012-09-24 at 12:04 +0300, Hiroshi Doyu wrote:
  diff --git a/drivers/base/platform.c b/drivers/base/platform.c
  index a1a7225..9eae3be 100644
  --- a/drivers/base/platform.c
  +++ b/drivers/base/platform.c
  @@ -21,6 +21,8 @@
   #include linux/slab.h
   #include linux/pm_runtime.h
  
  +#include asm/dma-iommu.h
  +
   #include base.h
  
   #define to_platform_driver(drv)(container_of((drv), struct
  platform_driver, \
  @@ -305,8 +307,19 @@ int platform_device_add(struct platform_device
  *pdev)
   dev_name(pdev-dev), dev_name(pdev-dev.parent));
  
  ret = device_add(pdev-dev);
  -   if (ret == 0)
  -   return ret;
  +   if (ret)
  +   goto failed;
  +
  +#ifdef CONFIG_PLATFORM_ENABLE_IOMMU
  +   if (platform_bus_type.map  !pdev-dev.archdata.mapping) {
  +   ret = arm_iommu_attach_device(pdev-dev,
  + platform_bus_type.map);
  +   if (ret)
  +   goto failed;
 
 This is horrible ... you're adding an architecture specific callback
 into our generic code; that's really a no-no.  If the concept of
 CONFIG_PLATFORM_ENABE_IOMMU is useful to more than just arm, then this
 could become a generic callback.

As mentioned in the original, this is a heck to explain what is
needed. I am looking for some generic solution for how to specify
IOMMU info for each platform devices. I'm guessing that some other SoC
may have the similar requirements on the above. As you mentioned, this
solution should be a generic, not arch specific.
___
iommu mailing list
iommu@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/iommu


RE: How to specify IOMMU'able devices in DT (was: [RFC 0/5] ARM: dma-mapping: New dma_map_ops to control IOVA more precisely)

2012-09-24 Thread Marek Szyprowski
Hello,

On Monday, September 24, 2012 11:45 AM Hiroshi Doyu wrote:

 On Mon, 24 Sep 2012 11:28:01 +0200
 James Bottomley james.bottom...@hansenpartnership.com wrote:
 
  On Mon, 2012-09-24 at 12:04 +0300, Hiroshi Doyu wrote:
   diff --git a/drivers/base/platform.c b/drivers/base/platform.c
   index a1a7225..9eae3be 100644
   --- a/drivers/base/platform.c
   +++ b/drivers/base/platform.c
   @@ -21,6 +21,8 @@
#include linux/slab.h
#include linux/pm_runtime.h
  
   +#include asm/dma-iommu.h
   +
#include base.h
  
#define to_platform_driver(drv)(container_of((drv), struct
   platform_driver, \
   @@ -305,8 +307,19 @@ int platform_device_add(struct platform_device
   *pdev)
dev_name(pdev-dev), dev_name(pdev-dev.parent));
  
   ret = device_add(pdev-dev);
   -   if (ret == 0)
   -   return ret;
   +   if (ret)
   +   goto failed;
   +
   +#ifdef CONFIG_PLATFORM_ENABLE_IOMMU
   +   if (platform_bus_type.map  !pdev-dev.archdata.mapping) {
   +   ret = arm_iommu_attach_device(pdev-dev,
   + platform_bus_type.map);
   +   if (ret)
   +   goto failed;
 
  This is horrible ... you're adding an architecture specific callback
  into our generic code; that's really a no-no.  If the concept of
  CONFIG_PLATFORM_ENABE_IOMMU is useful to more than just arm, then this
  could become a generic callback.
 
 As mentioned in the original, this is a heck to explain what is
 needed. I am looking for some generic solution for how to specify
 IOMMU info for each platform devices. I'm guessing that some other SoC
 may have the similar requirements on the above. As you mentioned, this
 solution should be a generic, not arch specific.

Please read more about bus notifiers. IMHO a good example is provided in 
the following thread:
http://www.mail-archive.com/linux-samsung-soc@vger.kernel.org/msg12238.html

Best regards
-- 
Marek Szyprowski
Samsung Poland RD Center


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


Re: How to specify IOMMU'able devices in DT (was: [RFC 0/5] ARM: dma-mapping: New dma_map_ops to control IOVA more precisely)

2012-09-24 Thread James Bottomley
On Mon, 2012-09-24 at 12:04 +0300, Hiroshi Doyu wrote:
 diff --git a/drivers/base/platform.c b/drivers/base/platform.c
 index a1a7225..9eae3be 100644
 --- a/drivers/base/platform.c
 +++ b/drivers/base/platform.c
 @@ -21,6 +21,8 @@
  #include linux/slab.h
  #include linux/pm_runtime.h
 
 +#include asm/dma-iommu.h
 +
  #include base.h
 
  #define to_platform_driver(drv)(container_of((drv), struct
 platform_driver, \
 @@ -305,8 +307,19 @@ int platform_device_add(struct platform_device
 *pdev)
  dev_name(pdev-dev), dev_name(pdev-dev.parent));
 
 ret = device_add(pdev-dev);
 -   if (ret == 0)
 -   return ret;
 +   if (ret)
 +   goto failed;
 +
 +#ifdef CONFIG_PLATFORM_ENABLE_IOMMU
 +   if (platform_bus_type.map  !pdev-dev.archdata.mapping) {
 +   ret = arm_iommu_attach_device(pdev-dev,
 + platform_bus_type.map);
 +   if (ret)
 +   goto failed;

This is horrible ... you're adding an architecture specific callback
into our generic code; that's really a no-no.  If the concept of
CONFIG_PLATFORM_ENABE_IOMMU is useful to more than just arm, then this
could become a generic callback.

James


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