Re: [PATCH v5 07/14] dmaengine: add dma_request_slave_channel_compat()

2013-01-29 Thread Matt Porter
On Wed, Jan 23, 2013 at 10:28:46PM +, Arnd Bergmann wrote:
 On Tuesday 15 January 2013, Matt Porter wrote:
  Adds a dma_request_slave_channel_compat() wrapper which accepts
  both the arguments from dma_request_channel() and
  dma_request_slave_channel(). Based on whether the driver is
  instantiated via DT, the appropriate channel request call will be
  made.
  
  This allows for a much cleaner migration of drivers to the
  dmaengine DT API as platforms continue to be mixed between those
  that boot using DT and those that do not.
 
 I noticed today some drivers in linux-next that rely on this patch,
 but the patch itself still missing from -next.
 
  --- a/include/linux/dmaengine.h
  +++ b/include/linux/dmaengine.h
  @@ -1047,6 +1047,16 @@ void dma_run_dependencies(struct 
  dma_async_tx_descriptor *tx);
   struct dma_chan *dma_find_channel(enum dma_transaction_type tx_type);
   struct dma_chan *net_dma_find_channel(void);
   #define dma_request_channel(mask, x, y) __dma_request_channel((mask), x, 
  y)
  +static inline struct dma_chan
  +*dma_request_slave_channel_compat(dma_cap_mask_t mask, dma_filter_fn fn,
  + void *fn_param, struct device *dev,
  + char *name)
  +{
  +   if (dev-of_node)
  +   return dma_request_slave_channel(dev, name);
  +   else
  +   return dma_request_channel(mask, fn, fn_param);
  +}
 
 Hmm, dma_request_channel is actually a macro that passes mask by reference,
 presumably because it can get modified by the filter function. Also, there
 may be cases where we do have an of_node but don't use the dma binding
 yet, or where dma_request_slave_channel doesn't actually use DT information
 but rather one of the other methods that Vinod was talking about adding.
 
 I think what it should look like instead is the below.

Yes, looks correct now, thanks. I've incorporated it into v6.

-Matt

 
   Arnd
 
 diff --git a/include/linux/dmaengine.h b/include/linux/dmaengine.h
 index bfcdecb..b6ffd7d 100644
 --- a/include/linux/dmaengine.h
 +++ b/include/linux/dmaengine.h
 @@ -993,6 +993,19 @@ static inline void dma_release_channel(struct dma_chan 
 *chan)
  }
  #endif
  
 +static inline struct dma_chan 
 *__dma_request_slave_channel_compat(dma_cap_mask_t *mask,
 + dma_filter_fn fn, void *fn_param, struct device 
 *dev,
 +  char *name)
 +{
 + struct dma_chan *chan;
 +
 + chan = dma_request_slave_channel(dev, name);
 + if (chan)
 + return chan;
 +
 + return __dma_request_channel(mask, fn, fn_param);
 +}
 +
  /* --- DMA device --- */
  
  int dma_async_device_register(struct dma_device *device);
 @@ -1001,6 +1014,8 @@ void dma_run_dependencies(struct 
 dma_async_tx_descriptor *tx);
  struct dma_chan *dma_find_channel(enum dma_transaction_type tx_type);
  struct dma_chan *net_dma_find_channel(void);
  #define dma_request_channel(mask, x, y) __dma_request_channel((mask), x, y)
 +#define dma_request_slave_channel_compat(mask, x, y, dev, name) \
 +  __dma_request_slave_channel_compat((mask), x, y, dev, name)
  
  /* --- Helper iov-locking functions --- */
  
 ___
 Davinci-linux-open-source mailing list
 Davinci-linux-open-source@linux.davincidsp.com
 http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source
___
Davinci-linux-open-source mailing list
Davinci-linux-open-source@linux.davincidsp.com
http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source


Re: [PATCH v5 07/14] dmaengine: add dma_request_slave_channel_compat()

2013-01-28 Thread Arnd Bergmann
On Monday 28 January 2013, Andy Shevchenko wrote:
 On Tue, Jan 15, 2013 at 10:32 PM, Matt Porter mpor...@ti.com wrote:
  Adds a dma_request_slave_channel_compat() wrapper which accepts
  both the arguments from dma_request_channel() and
  dma_request_slave_channel(). Based on whether the driver is
  instantiated via DT, the appropriate channel request call will be
  made.
 
  This allows for a much cleaner migration of drivers to the
  dmaengine DT API as platforms continue to be mixed between those
  that boot using DT and those that do not.
 
 Does it mean the introduced function is kinda temporary?

Some drivers can very likely get converted to use only
dma_request_slave_channel() in the long run, when all
the platforms using those drivers have been converted to
provide the channels using device tree.

However, for drivers that are used on legacy platforms
without DT support, we may still need something like
this function in the long run.

Arnd
___
Davinci-linux-open-source mailing list
Davinci-linux-open-source@linux.davincidsp.com
http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source


Re: [PATCH v5 07/14] dmaengine: add dma_request_slave_channel_compat()

2013-01-28 Thread Andy Shevchenko
On Tue, Jan 15, 2013 at 10:32 PM, Matt Porter mpor...@ti.com wrote:
 Adds a dma_request_slave_channel_compat() wrapper which accepts
 both the arguments from dma_request_channel() and
 dma_request_slave_channel(). Based on whether the driver is
 instantiated via DT, the appropriate channel request call will be
 made.

 This allows for a much cleaner migration of drivers to the
 dmaengine DT API as platforms continue to be mixed between those
 that boot using DT and those that do not.

Does it mean the introduced function is kinda temporary?


 Suggested-by: Tony Lindgren t...@atomide.com
 Signed-off-by: Matt Porter mpor...@ti.com
 Acked-by: Tony Lindgren t...@atomide.com
 ---
  include/linux/dmaengine.h |   10 ++
  1 file changed, 10 insertions(+)

 diff --git a/include/linux/dmaengine.h b/include/linux/dmaengine.h
 index 9fd0c5b..64f9f69 100644
 --- a/include/linux/dmaengine.h
 +++ b/include/linux/dmaengine.h
 @@ -1047,6 +1047,16 @@ void dma_run_dependencies(struct 
 dma_async_tx_descriptor *tx);
  struct dma_chan *dma_find_channel(enum dma_transaction_type tx_type);
  struct dma_chan *net_dma_find_channel(void);
  #define dma_request_channel(mask, x, y) __dma_request_channel((mask), x, y)
 +static inline struct dma_chan
 +*dma_request_slave_channel_compat(dma_cap_mask_t mask, dma_filter_fn fn,
 + void *fn_param, struct device *dev,
 + char *name)
 +{
 +   if (dev-of_node)
 +   return dma_request_slave_channel(dev, name);
 +   else
 +   return dma_request_channel(mask, fn, fn_param);
 +}

  /* --- Helper iov-locking functions --- */

 --
 1.7.9.5

 --
 To unsubscribe from this list: send the line unsubscribe linux-kernel in
 the body of a message to majord...@vger.kernel.org
 More majordomo info at  http://vger.kernel.org/majordomo-info.html
 Please read the FAQ at  http://www.tux.org/lkml/



-- 
With Best Regards,
Andy Shevchenko
___
Davinci-linux-open-source mailing list
Davinci-linux-open-source@linux.davincidsp.com
http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source


Re: [PATCH v5 07/14] dmaengine: add dma_request_slave_channel_compat()

2013-01-23 Thread Arnd Bergmann
On Tuesday 15 January 2013, Matt Porter wrote:
 Adds a dma_request_slave_channel_compat() wrapper which accepts
 both the arguments from dma_request_channel() and
 dma_request_slave_channel(). Based on whether the driver is
 instantiated via DT, the appropriate channel request call will be
 made.
 
 This allows for a much cleaner migration of drivers to the
 dmaengine DT API as platforms continue to be mixed between those
 that boot using DT and those that do not.

I noticed today some drivers in linux-next that rely on this patch,
but the patch itself still missing from -next.

 --- a/include/linux/dmaengine.h
 +++ b/include/linux/dmaengine.h
 @@ -1047,6 +1047,16 @@ void dma_run_dependencies(struct 
 dma_async_tx_descriptor *tx);
  struct dma_chan *dma_find_channel(enum dma_transaction_type tx_type);
  struct dma_chan *net_dma_find_channel(void);
  #define dma_request_channel(mask, x, y) __dma_request_channel((mask), x, y)
 +static inline struct dma_chan
 +*dma_request_slave_channel_compat(dma_cap_mask_t mask, dma_filter_fn fn,
 + void *fn_param, struct device *dev,
 + char *name)
 +{
 +   if (dev-of_node)
 +   return dma_request_slave_channel(dev, name);
 +   else
 +   return dma_request_channel(mask, fn, fn_param);
 +}

Hmm, dma_request_channel is actually a macro that passes mask by reference,
presumably because it can get modified by the filter function. Also, there
may be cases where we do have an of_node but don't use the dma binding
yet, or where dma_request_slave_channel doesn't actually use DT information
but rather one of the other methods that Vinod was talking about adding.

I think what it should look like instead is the below.

Arnd

diff --git a/include/linux/dmaengine.h b/include/linux/dmaengine.h
index bfcdecb..b6ffd7d 100644
--- a/include/linux/dmaengine.h
+++ b/include/linux/dmaengine.h
@@ -993,6 +993,19 @@ static inline void dma_release_channel(struct dma_chan 
*chan)
 }
 #endif
 
+static inline struct dma_chan 
*__dma_request_slave_channel_compat(dma_cap_mask_t *mask,
+   dma_filter_fn fn, void *fn_param, struct device 
*dev,
+char *name)
+{
+   struct dma_chan *chan;
+
+   chan = dma_request_slave_channel(dev, name);
+   if (chan)
+   return chan;
+
+   return __dma_request_channel(mask, fn, fn_param);
+}
+
 /* --- DMA device --- */
 
 int dma_async_device_register(struct dma_device *device);
@@ -1001,6 +1014,8 @@ void dma_run_dependencies(struct dma_async_tx_descriptor 
*tx);
 struct dma_chan *dma_find_channel(enum dma_transaction_type tx_type);
 struct dma_chan *net_dma_find_channel(void);
 #define dma_request_channel(mask, x, y) __dma_request_channel((mask), x, y)
+#define dma_request_slave_channel_compat(mask, x, y, dev, name) \
+__dma_request_slave_channel_compat((mask), x, y, dev, name)
 
 /* --- Helper iov-locking functions --- */
 
___
Davinci-linux-open-source mailing list
Davinci-linux-open-source@linux.davincidsp.com
http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source