linux-mmc.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2] ARM: EDMA: Fix clearing of unused list for DT DMA resources
@ 2013-07-22 17:59 Joel Fernandes
  2013-07-27 23:32 ` Joel Fernandes
  2013-07-29  7:01 ` Sekhar Nori
  0 siblings, 2 replies; 17+ messages in thread
From: Joel Fernandes @ 2013-07-22 17:59 UTC (permalink / raw)
  To: Tony Lindgren, Sekhar Nori, Vinod Koul, Benoit Cousson,
	Balaji TK, Arnd Bergmann
  Cc: Mark Jackson, Joel Fernandes, Pantel Antoniou, Linux MMC List,
	Linux Kernel Mailing List, Jason Kridner, Linux OMAP List,
	Linux ARM Kernel List

HWMOD removal for MMC is breaking edma_start as the events are being manually
triggered due to unused channel list not being clear, Thanks to Balaji TK for
finding this issue.

This patch fixes the issue, by reading the "dmas" property from the DT node if
it exists and clearing the bits in the unused channel list.

Cc: Balaji T K <balajitk@ti.com>
Cc: Pantel Antoniou <panto@antoniou-consulting.com>
Signed-off-by: Joel Fernandes <joelf@ti.com>
---
v2 changes: Fixed compiler warning

 arch/arm/common/edma.c |   31 +++++++++++++++++++++++--------
 1 file changed, 23 insertions(+), 8 deletions(-)

diff --git a/arch/arm/common/edma.c b/arch/arm/common/edma.c
index a432e6c..765d578 100644
--- a/arch/arm/common/edma.c
+++ b/arch/arm/common/edma.c
@@ -561,14 +561,29 @@ static int reserve_contiguous_slots(int ctlr, unsigned int id,
 static int prepare_unused_channel_list(struct device *dev, void *data)
 {
 	struct platform_device *pdev = to_platform_device(dev);
-	int i, ctlr;
-
-	for (i = 0; i < pdev->num_resources; i++) {
-		if ((pdev->resource[i].flags & IORESOURCE_DMA) &&
-				(int)pdev->resource[i].start >= 0) {
-			ctlr = EDMA_CTLR(pdev->resource[i].start);
-			clear_bit(EDMA_CHAN_SLOT(pdev->resource[i].start),
-					edma_cc[ctlr]->edma_unused);
+	int i = 0, ctlr;
+	u32 dma_chan;
+	const __be32 *dma_chan_p;
+	struct property *prop;
+
+	if (dev->of_node) {
+		of_property_for_each_u32(dev->of_node, "dmas", prop, \
+					 dma_chan_p, dma_chan) {
+			if (i++ & 1) {
+				ctlr = EDMA_CTLR(dma_chan);
+				clear_bit(EDMA_CHAN_SLOT(dma_chan),
+						edma_cc[ctlr]->edma_unused);
+			}
+		}
+	} else {
+		for (; i < pdev->num_resources; i++) {
+			if ((pdev->resource[i].flags & IORESOURCE_DMA) &&
+			    (int)pdev->resource[i].start >= 0) {
+				ctlr = EDMA_CTLR(pdev->resource[i].start);
+				clear_bit(EDMA_CHAN_SLOT(
+					  pdev->resource[i].start),
+					  edma_cc[ctlr]->edma_unused);
+			}
 		}
 	}
 
-- 
1.7.9.5

^ permalink raw reply related	[flat|nested] 17+ messages in thread

* Re: [PATCH v2] ARM: EDMA: Fix clearing of unused list for DT DMA resources
  2013-07-22 17:59 [PATCH v2] ARM: EDMA: Fix clearing of unused list for DT DMA resources Joel Fernandes
@ 2013-07-27 23:32 ` Joel Fernandes
  2013-07-29  7:04   ` Sekhar Nori
  2013-07-29  7:01 ` Sekhar Nori
  1 sibling, 1 reply; 17+ messages in thread
From: Joel Fernandes @ 2013-07-27 23:32 UTC (permalink / raw)
  To: Joel Fernandes
  Cc: Tony Lindgren, Sekhar Nori, Vinod Koul, Benoit Cousson,
	Balaji TK, Arnd Bergmann, Jason Kridner, Mark Jackson,
	Linux OMAP List, Linux ARM Kernel List,
	Linux Kernel Mailing List, Linux MMC List, Pantel Antoniou

Hi Tony or Sekhar,

If this patch looks ok, could you pick it up for -rc cycle?

It fixes DMA breakages after the merge window for devices for which DMA
resources are being populated in device tree instead pdev.

Thanks,

-Joel


On 07/22/2013 12:59 PM, Joel Fernandes wrote:
> HWMOD removal for MMC is breaking edma_start as the events are being manually
> triggered due to unused channel list not being clear, Thanks to Balaji TK for
> finding this issue.
> 
> This patch fixes the issue, by reading the "dmas" property from the DT node if
> it exists and clearing the bits in the unused channel list.
> 
> Cc: Balaji T K <balajitk@ti.com>
> Cc: Pantel Antoniou <panto@antoniou-consulting.com>
> Signed-off-by: Joel Fernandes <joelf@ti.com>
> ---
> v2 changes: Fixed compiler warning
> 
>  arch/arm/common/edma.c |   31 +++++++++++++++++++++++--------
>  1 file changed, 23 insertions(+), 8 deletions(-)
> 
> diff --git a/arch/arm/common/edma.c b/arch/arm/common/edma.c
> index a432e6c..765d578 100644
> --- a/arch/arm/common/edma.c
> +++ b/arch/arm/common/edma.c
> @@ -561,14 +561,29 @@ static int reserve_contiguous_slots(int ctlr, unsigned int id,
>  static int prepare_unused_channel_list(struct device *dev, void *data)
>  {
>  	struct platform_device *pdev = to_platform_device(dev);
> -	int i, ctlr;
> -
> -	for (i = 0; i < pdev->num_resources; i++) {
> -		if ((pdev->resource[i].flags & IORESOURCE_DMA) &&
> -				(int)pdev->resource[i].start >= 0) {
> -			ctlr = EDMA_CTLR(pdev->resource[i].start);
> -			clear_bit(EDMA_CHAN_SLOT(pdev->resource[i].start),
> -					edma_cc[ctlr]->edma_unused);
> +	int i = 0, ctlr;
> +	u32 dma_chan;
> +	const __be32 *dma_chan_p;
> +	struct property *prop;
> +
> +	if (dev->of_node) {
> +		of_property_for_each_u32(dev->of_node, "dmas", prop, \
> +					 dma_chan_p, dma_chan) {
> +			if (i++ & 1) {
> +				ctlr = EDMA_CTLR(dma_chan);
> +				clear_bit(EDMA_CHAN_SLOT(dma_chan),
> +						edma_cc[ctlr]->edma_unused);
> +			}
> +		}
> +	} else {
> +		for (; i < pdev->num_resources; i++) {
> +			if ((pdev->resource[i].flags & IORESOURCE_DMA) &&
> +			    (int)pdev->resource[i].start >= 0) {
> +				ctlr = EDMA_CTLR(pdev->resource[i].start);
> +				clear_bit(EDMA_CHAN_SLOT(
> +					  pdev->resource[i].start),
> +					  edma_cc[ctlr]->edma_unused);
> +			}
>  		}
>  	}
>  
> 


^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH v2] ARM: EDMA: Fix clearing of unused list for DT DMA resources
  2013-07-22 17:59 [PATCH v2] ARM: EDMA: Fix clearing of unused list for DT DMA resources Joel Fernandes
  2013-07-27 23:32 ` Joel Fernandes
@ 2013-07-29  7:01 ` Sekhar Nori
  2013-07-30  3:47   ` Joel Fernandes
  1 sibling, 1 reply; 17+ messages in thread
From: Sekhar Nori @ 2013-07-29  7:01 UTC (permalink / raw)
  To: Joel Fernandes
  Cc: Tony Lindgren, Vinod Koul, Benoit Cousson, Balaji TK,
	Arnd Bergmann, Jason Kridner, Mark Jackson, Linux OMAP List,
	Linux ARM Kernel List, Linux Kernel Mailing List, Linux MMC List,
	Pantel Antoniou

On Monday 22 July 2013 11:29 PM, Joel Fernandes wrote:
> HWMOD removal for MMC is breaking edma_start as the events are being manually
> triggered due to unused channel list not being clear, Thanks to Balaji TK for
> finding this issue.

So, Reported-by: Balaji T K <balajitk@ti.com>

?

> 
> This patch fixes the issue, by reading the "dmas" property from the DT node if
> it exists and clearing the bits in the unused channel list.
> 
> Cc: Balaji T K <balajitk@ti.com>
> Cc: Pantel Antoniou <panto@antoniou-consulting.com>
> Signed-off-by: Joel Fernandes <joelf@ti.com>
> ---
> v2 changes: Fixed compiler warning
> 
>  arch/arm/common/edma.c |   31 +++++++++++++++++++++++--------
>  1 file changed, 23 insertions(+), 8 deletions(-)
> 
> diff --git a/arch/arm/common/edma.c b/arch/arm/common/edma.c
> index a432e6c..765d578 100644
> --- a/arch/arm/common/edma.c
> +++ b/arch/arm/common/edma.c
> @@ -561,14 +561,29 @@ static int reserve_contiguous_slots(int ctlr, unsigned int id,
>  static int prepare_unused_channel_list(struct device *dev, void *data)
>  {
>  	struct platform_device *pdev = to_platform_device(dev);
> -	int i, ctlr;
> -
> -	for (i = 0; i < pdev->num_resources; i++) {
> -		if ((pdev->resource[i].flags & IORESOURCE_DMA) &&
> -				(int)pdev->resource[i].start >= 0) {
> -			ctlr = EDMA_CTLR(pdev->resource[i].start);
> -			clear_bit(EDMA_CHAN_SLOT(pdev->resource[i].start),
> -					edma_cc[ctlr]->edma_unused);
> +	int i = 0, ctlr;
> +	u32 dma_chan;
> +	const __be32 *dma_chan_p;
> +	struct property *prop;
> +
> +	if (dev->of_node) {
> +		of_property_for_each_u32(dev->of_node, "dmas", prop, \
> +					 dma_chan_p, dma_chan) {
> +			if (i++ & 1) {
> +				ctlr = EDMA_CTLR(dma_chan);
> +				clear_bit(EDMA_CHAN_SLOT(dma_chan),
> +						edma_cc[ctlr]->edma_unused);
> +			}

I think it will be cleaner if you use of_property_count_strings() on
dma-names to get the count of DMA channels for this device and then use
of_parse_phandle_with_args() to get access to the args. Honestly, I have
not used these APIs myself, so if this doesn’t work the way I think it
should then let me know and I will try to do some experiments myself.

The current way of skipping over even fields really depends on
#dma-cells for EDMA to be 1. That in itself is not such a bad
assumption, but if you have APIs which already take care of this for
you, why not use them?

> +		}
> +	} else {
> +		for (; i < pdev->num_resources; i++) {
> +			if ((pdev->resource[i].flags & IORESOURCE_DMA) &&
> +			    (int)pdev->resource[i].start >= 0) {
> +				ctlr = EDMA_CTLR(pdev->resource[i].start);
> +				clear_bit(EDMA_CHAN_SLOT(
> +					  pdev->resource[i].start),
> +					  edma_cc[ctlr]->edma_unused);
> +			}

So there is very little in common between OF and non-OF versions of this
function. Why not have two different versions of this function for the
two cases? The OF version can reside under the CONFIG_OF conditional
already in use in the file. This will also save you the ugly line breaks
you had to resort to due to too deep indentation.

Thanks,
Sekhar

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH v2] ARM: EDMA: Fix clearing of unused list for DT DMA resources
  2013-07-27 23:32 ` Joel Fernandes
@ 2013-07-29  7:04   ` Sekhar Nori
  2013-07-30  3:53     ` Joel Fernandes
  0 siblings, 1 reply; 17+ messages in thread
From: Sekhar Nori @ 2013-07-29  7:04 UTC (permalink / raw)
  To: joelf
  Cc: Balaji TK, Arnd Bergmann, Mark Jackson, Tony Lindgren,
	Pantel Antoniou, Linux MMC List, Linux Kernel Mailing List,
	Vinod Koul, Jason Kridner, Benoit Cousson, Linux OMAP List,
	Linux ARM Kernel List

On Sunday 28 July 2013 05:02 AM, Joel Fernandes wrote:
> Hi Tony or Sekhar,
> 
> If this patch looks ok, could you pick it up for -rc cycle?
> 
> It fixes DMA breakages after the merge window for devices for which DMA
> resources are being populated in device tree instead pdev.

But which DT-enabled platform in kernel is using EDMA? A grep for edma
over arch/arm/boot/dts/* brings up nothing.

Does this really have to go into the -rc cycle or can it wait till v3.12?

Thanks,
Sekhar

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH v2] ARM: EDMA: Fix clearing of unused list for DT DMA resources
  2013-07-29  7:01 ` Sekhar Nori
@ 2013-07-30  3:47   ` Joel Fernandes
  2013-07-30 16:29     ` Sekhar Nori
  0 siblings, 1 reply; 17+ messages in thread
From: Joel Fernandes @ 2013-07-30  3:47 UTC (permalink / raw)
  To: Sekhar Nori
  Cc: Tony Lindgren, Vinod Koul, Benoit Cousson, Balaji TK,
	Arnd Bergmann, Jason Kridner, Mark Jackson, Linux OMAP List,
	Linux ARM Kernel List, Linux Kernel Mailing List, Linux MMC List,
	Pantel Antoniou

On 07/29/2013 02:01 AM, Sekhar Nori wrote:> On Monday 22 July 2013 11:29
PM, Joel Fernandes wrote:
>> HWMOD removal for MMC is breaking edma_start as the events are being
manually
>> triggered due to unused channel list not being clear, Thanks to
Balaji TK for
>> finding this issue.
>
> So, Reported-by: Balaji T K <balajitk@ti.com>
>
> ?

Sure, I'll add that as well.

>
>>
>> This patch fixes the issue, by reading the "dmas" property from the
DT node if
>> it exists and clearing the bits in the unused channel list.
>>
>> Cc: Balaji T K <balajitk@ti.com>
>> Cc: Pantel Antoniou <panto@antoniou-consulting.com>
>> Signed-off-by: Joel Fernandes <joelf@ti.com>
>> ---
>> v2 changes: Fixed compiler warning
>>
>>  arch/arm/common/edma.c |   31 +++++++++++++++++++++++--------
>>  1 file changed, 23 insertions(+), 8 deletions(-)
>>
>> diff --git a/arch/arm/common/edma.c b/arch/arm/common/edma.c
>> index a432e6c..765d578 100644
>> --- a/arch/arm/common/edma.c
>> +++ b/arch/arm/common/edma.c
>> @@ -561,14 +561,29 @@ static int reserve_contiguous_slots(int ctlr,
unsigned int id,
>>  static int prepare_unused_channel_list(struct device *dev, void *data)
>>  {
>>  	struct platform_device *pdev = to_platform_device(dev);
>> -	int i, ctlr;
>> -
>> -	for (i = 0; i < pdev->num_resources; i++) {
>> -		if ((pdev->resource[i].flags & IORESOURCE_DMA) &&
>> -				(int)pdev->resource[i].start >= 0) {
>> -			ctlr = EDMA_CTLR(pdev->resource[i].start);
>> -			clear_bit(EDMA_CHAN_SLOT(pdev->resource[i].start),
>> -					edma_cc[ctlr]->edma_unused);
>> +	int i = 0, ctlr;
>> +	u32 dma_chan;
>> +	const __be32 *dma_chan_p;
>> +	struct property *prop;
>> +
>> +	if (dev->of_node) {
>> +		of_property_for_each_u32(dev->of_node, "dmas", prop, \
>> +					 dma_chan_p, dma_chan) {
>> +			if (i++ & 1) {
>> +				ctlr = EDMA_CTLR(dma_chan);
>> +				clear_bit(EDMA_CHAN_SLOT(dma_chan),
>> +						edma_cc[ctlr]->edma_unused);
>> +			}
>
> I think it will be cleaner if you use of_property_count_strings() on
> dma-names to get the count of DMA channels for this device and then use
> of_parse_phandle_with_args() to get access to the args. Honestly, I have
> not used these APIs myself, so if this doesn’t work the way I think it
> should then let me know and I will try to do some experiments myself.
>
> The current way of skipping over even fields really depends on
> #dma-cells for EDMA to be 1. That in itself is not such a bad
> assumption, but if you have APIs which already take care of this for
> you, why not use them?

Sure, looks like of_dma_request_slave_channel does same thing in
drive/dma/of-dma.c. Let me follow up with a patch that does it this way.
I agree its cleaner.

>> +		}
>> +	} else {
>> +		for (; i < pdev->num_resources; i++) {
>> +			if ((pdev->resource[i].flags & IORESOURCE_DMA) &&
>> +			    (int)pdev->resource[i].start >= 0) {
>> +				ctlr = EDMA_CTLR(pdev->resource[i].start);
>> +				clear_bit(EDMA_CHAN_SLOT(
>> +					  pdev->resource[i].start),
>> +					  edma_cc[ctlr]->edma_unused);
>> +			}
>
> So there is very little in common between OF and non-OF versions of this
> function. Why not have two different versions of this function for the
> two cases? The OF version can reside under the CONFIG_OF conditional
> already in use in the file. This will also save you the ugly line breaks
> you had to resort to due to too deep indentation.

Actually those line breaks are not necessary and wouldn't result in
compilation errors. I was planning to drop them. I'll go ahead and split
it out anyway, now that also the OF version of the function is going to
be bit longer if we use the of_parse functions.

Thanks for your review,

Regards,

-Joel

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH v2] ARM: EDMA: Fix clearing of unused list for DT DMA resources
  2013-07-29  7:04   ` Sekhar Nori
@ 2013-07-30  3:53     ` Joel Fernandes
  2013-07-30  4:52       ` Sekhar Nori
  0 siblings, 1 reply; 17+ messages in thread
From: Joel Fernandes @ 2013-07-30  3:53 UTC (permalink / raw)
  To: Sekhar Nori
  Cc: Tony Lindgren, Vinod Koul, Benoit Cousson, Balaji TK,
	Arnd Bergmann, Jason Kridner, Mark Jackson, Linux OMAP List,
	Linux ARM Kernel List, Linux Kernel Mailing List, Linux MMC List,
	Pantel Antoniou

On 07/29/2013 02:04 AM, Sekhar Nori wrote:
> On Sunday 28 July 2013 05:02 AM, Joel Fernandes wrote:
>> Hi Tony or Sekhar,
>>
>> If this patch looks ok, could you pick it up for -rc cycle?
>>
>> It fixes DMA breakages after the merge window for devices for which DMA
>> resources are being populated in device tree instead pdev.
> 
> But which DT-enabled platform in kernel is using EDMA? A grep for edma
> over arch/arm/boot/dts/* brings up nothing.
> Does this really have to go into the -rc cycle or can it wait till
> v3.12?


But unused channel list is also populated for private EDMA callers like
davinci-pcm no? IIRC, HWMOD data is also removed for McASP so EDMA for
those may break.

Thanks,

-Joel

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH v2] ARM: EDMA: Fix clearing of unused list for DT DMA resources
  2013-07-30  3:53     ` Joel Fernandes
@ 2013-07-30  4:52       ` Sekhar Nori
  2013-07-30  5:05         ` Joel Fernandes
  0 siblings, 1 reply; 17+ messages in thread
From: Sekhar Nori @ 2013-07-30  4:52 UTC (permalink / raw)
  To: joelf
  Cc: Balaji TK, Arnd Bergmann, Mark Jackson, Tony Lindgren,
	Pantel Antoniou, Linux MMC List, Linux Kernel Mailing List,
	Vinod Koul, Jason Kridner, Benoit Cousson, Linux OMAP List,
	Linux ARM Kernel List

On Tuesday 30 July 2013 09:23 AM, Joel Fernandes wrote:
> On 07/29/2013 02:04 AM, Sekhar Nori wrote:
>> On Sunday 28 July 2013 05:02 AM, Joel Fernandes wrote:
>>> Hi Tony or Sekhar,
>>>
>>> If this patch looks ok, could you pick it up for -rc cycle?
>>>
>>> It fixes DMA breakages after the merge window for devices for which DMA
>>> resources are being populated in device tree instead pdev.
>>
>> But which DT-enabled platform in kernel is using EDMA? A grep for edma
>> over arch/arm/boot/dts/* brings up nothing.
>> Does this really have to go into the -rc cycle or can it wait till
>> v3.12?
> 
> 
> But unused channel list is also populated for private EDMA callers like
> davinci-pcm no? IIRC, HWMOD data is also removed for McASP so EDMA for
> those may break.

Yes, but which DT-enabled platform has davinci-pcm working today?
AFAICS, this bug affects DT-enabled platforms only.

Thanks,
Sekhar

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH v2] ARM: EDMA: Fix clearing of unused list for DT DMA resources
  2013-07-30  4:52       ` Sekhar Nori
@ 2013-07-30  5:05         ` Joel Fernandes
  0 siblings, 0 replies; 17+ messages in thread
From: Joel Fernandes @ 2013-07-30  5:05 UTC (permalink / raw)
  To: Sekhar Nori
  Cc: Balaji TK, Arnd Bergmann, Mark Jackson, Tony Lindgren,
	Pantel Antoniou, Linux MMC List, Linux Kernel Mailing List,
	Vinod Koul, Jason Kridner, Benoit Cousson, Linux OMAP List,
	Linux ARM Kernel List

On 07/29/2013 11:52 PM, Sekhar Nori wrote:> On Tuesday 30 July 2013
09:23 AM, Joel Fernandes wrote:
>> On 07/29/2013 02:04 AM, Sekhar Nori wrote:
>>> On Sunday 28 July 2013 05:02 AM, Joel Fernandes wrote:
>>>> Hi Tony or Sekhar,
>>>>
>>>> If this patch looks ok, could you pick it up for -rc cycle?
>>>>
>>>> It fixes DMA breakages after the merge window for devices for which DMA
>>>> resources are being populated in device tree instead pdev.
>>>
>>> But which DT-enabled platform in kernel is using EDMA? A grep for edma
>>> over arch/arm/boot/dts/* brings up nothing.
>>> Does this really have to go into the -rc cycle or can it wait till
>>> v3.12?
>>
>>
>> But unused channel list is also populated for private EDMA callers like
>> davinci-pcm no? IIRC, HWMOD data is also removed for McASP so EDMA for
>> those may break.
>
> Yes, but which DT-enabled platform has davinci-pcm working today?
> AFAICS, this bug affects DT-enabled platforms only.

Yes, you're right. I didn't realize nothing else is working yet. I guess
its fine then for next kernel release.

Thanks,

-Joel

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH v2] ARM: EDMA: Fix clearing of unused list for DT DMA resources
  2013-07-30  3:47   ` Joel Fernandes
@ 2013-07-30 16:29     ` Sekhar Nori
  2013-07-31  5:06       ` Joel Fernandes
  0 siblings, 1 reply; 17+ messages in thread
From: Sekhar Nori @ 2013-07-30 16:29 UTC (permalink / raw)
  To: joelf
  Cc: Tony Lindgren, Vinod Koul, Benoit Cousson, Balaji TK,
	Arnd Bergmann, Jason Kridner, Mark Jackson, Linux OMAP List,
	Linux ARM Kernel List, Linux Kernel Mailing List, Linux MMC List,
	Pantel Antoniou

On 7/30/2013 9:17 AM, Joel Fernandes wrote:

>>> diff --git a/arch/arm/common/edma.c b/arch/arm/common/edma.c
>>> index a432e6c..765d578 100644
>>> --- a/arch/arm/common/edma.c
>>> +++ b/arch/arm/common/edma.c

>>> +	} else {
>>> +		for (; i < pdev->num_resources; i++) {
>>> +			if ((pdev->resource[i].flags & IORESOURCE_DMA) &&
>>> +			    (int)pdev->resource[i].start >= 0) {
>>> +				ctlr = EDMA_CTLR(pdev->resource[i].start);
>>> +				clear_bit(EDMA_CHAN_SLOT(
>>> +					  pdev->resource[i].start),
>>> +					  edma_cc[ctlr]->edma_unused);
>>> +			}
>>
>> So there is very little in common between OF and non-OF versions of this
>> function. Why not have two different versions of this function for the
>> two cases? The OF version can reside under the CONFIG_OF conditional
>> already in use in the file. This will also save you the ugly line breaks
>> you had to resort to due to too deep indentation.
> 
> Actually those line breaks are not necessary and wouldn't result in
> compilation errors. I was planning to drop them. I'll go ahead and split
> it out anyway, now that also the OF version of the function is going to
> be bit longer if we use the of_parse functions.
> 
> Thanks for your review,

It turns out, I gave a bad idea. What I suggested will break the case of
non-DT boot with CONFIG_OF enabled. So what you had was fine. May be
just return from "if (dev->of_node)" so you don't need to have an else
block and can save on the indentation.

Thanks,
Sekhar

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH v2] ARM: EDMA: Fix clearing of unused list for DT DMA resources
  2013-07-30 16:29     ` Sekhar Nori
@ 2013-07-31  5:06       ` Joel Fernandes
  0 siblings, 0 replies; 17+ messages in thread
From: Joel Fernandes @ 2013-07-31  5:06 UTC (permalink / raw)
  To: Sekhar Nori
  Cc: Tony Lindgren, Vinod Koul, Benoit Cousson, Balaji TK,
	Arnd Bergmann, Jason Kridner, Mark Jackson, Linux OMAP List,
	Linux ARM Kernel List, Linux Kernel Mailing List, Linux MMC List,
	Pantel Antoniou

On 07/30/2013 11:29 AM, Sekhar Nori wrote:
> On 7/30/2013 9:17 AM, Joel Fernandes wrote:
> 
>>>> diff --git a/arch/arm/common/edma.c b/arch/arm/common/edma.c
>>>> index a432e6c..765d578 100644
>>>> --- a/arch/arm/common/edma.c
>>>> +++ b/arch/arm/common/edma.c
> 
>>>> +	} else {
>>>> +		for (; i < pdev->num_resources; i++) {
>>>> +			if ((pdev->resource[i].flags & IORESOURCE_DMA) &&
>>>> +			    (int)pdev->resource[i].start >= 0) {
>>>> +				ctlr = EDMA_CTLR(pdev->resource[i].start);
>>>> +				clear_bit(EDMA_CHAN_SLOT(
>>>> +					  pdev->resource[i].start),
>>>> +					  edma_cc[ctlr]->edma_unused);
>>>> +			}
>>>
>>> So there is very little in common between OF and non-OF versions of this
>>> function. Why not have two different versions of this function for the
>>> two cases? The OF version can reside under the CONFIG_OF conditional
>>> already in use in the file. This will also save you the ugly line breaks
>>> you had to resort to due to too deep indentation.
>>
>> Actually those line breaks are not necessary and wouldn't result in
>> compilation errors. I was planning to drop them. I'll go ahead and split
>> it out anyway, now that also the OF version of the function is going to
>> be bit longer if we use the of_parse functions.
>>
>> Thanks for your review,
> 
> It turns out, I gave a bad idea. What I suggested will break the case of
> non-DT boot with CONFIG_OF enabled. So what you had was fine. May be
> just return from "if (dev->of_node)" so you don't need to have an else
> block and can save on the indentation.>

Ok, sure. I will go ahead and return from the if block.

Thanks,

-Joel



^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH v2] ARM: EDMA: Fix clearing of unused list for DT DMA resources
       [not found]       ` <522A29CF.2090001-2FZW7xY0fHgqdlJmJB21zg@public.gmane.org>
@ 2013-09-06 19:51         ` Joel Fernandes
  0 siblings, 0 replies; 17+ messages in thread
From: Joel Fernandes @ 2013-09-06 19:51 UTC (permalink / raw)
  To: Mark Jackson
  Cc: Linux DaVinci Kernel List, Russell King, Tony Lindgren,
	Linux MMC List, Linux Kernel Mailing List, Vinod Koul,
	Pantel Antoniou, Dan Williams, Linux OMAP List,
	Linux ARM Kernel List

On 09/06/2013 02:15 PM, Mark Jackson wrote:
> On 06/09/13 20:13, Mark Jackson wrote:
>> On 23/08/13 20:53, Joel Fernandes wrote:
>>> HWMOD removal for MMC and Crypto is breaking edma_start as the events are
>>> being manually triggered due to unused channel list not being clear. Atleast
>>> breakage has been seen on these peripherals, but it is expected Audio (McASP)
>>> maybe breaking too.
>>>
>>> This patch fixes the issue, by reading the "dmas" property from the DT node if
>>> it exists and clearing the bits in the unused channel list so that these channels
>>> are not manually triggered.
>>>
>>> v2 changes:
>>> Reduced indendation by returning from if block.
>>>
>>> Reviewed-by: Sekhar Nori <nsekhar-l0cyMroinI0@public.gmane.org>
>>> Reported-by: Balaji T K <balajitk-l0cyMroinI0@public.gmane.org>
>>> Cc: Pantel Antoniou <panto-wVdstyuyKrO8r51toPun2/C9HSW9iNxf@public.gmane.org>
>>> Signed-off-by: Joel Fernandes <joelf-l0cyMroinI0@public.gmane.org>
>>> ---
>>> Note:
>>> Patch should go in for -rc cycle as it fixes existing crypto drivers.
>>>
>>>  arch/arm/common/edma.c | 22 +++++++++++++++++++---
>>>  1 file changed, 19 insertions(+), 3 deletions(-)
>>>
>>> diff --git a/arch/arm/common/edma.c b/arch/arm/common/edma.c
>>> index 39ad030..3867e7e 100644
>>> --- a/arch/arm/common/edma.c
>>> +++ b/arch/arm/common/edma.c
>>> @@ -560,14 +560,30 @@ static int reserve_contiguous_slots(int ctlr, unsigned int id,
>>>  static int prepare_unused_channel_list(struct device *dev, void *data)
>>>  {
>>>  	struct platform_device *pdev = to_platform_device(dev);
>>> -	int i, ctlr;
>>> +	int i = 0, ctlr;
>>> +	u32 dma_chan;
>>> +	const __be32 *dma_chan_p;
>>> +	struct property *prop;
>>> +
>>> +	if (dev->of_node) {
>>> +		of_property_for_each_u32(dev->of_node, "dmas", prop,
>>> +					 dma_chan_p, dma_chan) {
>>> +			if (i++ & 1) {
>>> +				ctlr = EDMA_CTLR(dma_chan);
>>> +				clear_bit(EDMA_CHAN_SLOT(dma_chan),
>>> +					  edma_cc[ctlr]->edma_unused);
>>> +			}
>>> +		}
>>> +		return;
>>
>> This should return something here, otherwise we get:-
>>
>> arch/arm/common/edma.c: In function 'prepare_unused_channel_list':
>> arch/arm/common/edma.c:577:3: warning: 'return' with no value, in function returning non-void [-Wreturn-type]
> 
> Other than that I can confirm it fixes the issue for me ...

Thanks for pointing that out. Will fix it in the next revision.


Regards,

-Joel

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH v2] ARM: EDMA: Fix clearing of unused list for DT DMA resources
  2013-09-06 19:13   ` Mark Jackson
@ 2013-09-06 19:15     ` Mark Jackson
       [not found]       ` <522A29CF.2090001-2FZW7xY0fHgqdlJmJB21zg@public.gmane.org>
  0 siblings, 1 reply; 17+ messages in thread
From: Mark Jackson @ 2013-09-06 19:15 UTC (permalink / raw)
  To: Joel Fernandes
  Cc: Sekhar Nori, Tony Lindgren, Matt Porter, Vinod Koul,
	Dan Williams, Russell King, Linux OMAP List,
	Linux ARM Kernel List, Linux DaVinci Kernel List,
	Linux Kernel Mailing List, Linux MMC List, Pantel Antoniou

On 06/09/13 20:13, Mark Jackson wrote:
> On 23/08/13 20:53, Joel Fernandes wrote:
>> HWMOD removal for MMC and Crypto is breaking edma_start as the events are
>> being manually triggered due to unused channel list not being clear. Atleast
>> breakage has been seen on these peripherals, but it is expected Audio (McASP)
>> maybe breaking too.
>>
>> This patch fixes the issue, by reading the "dmas" property from the DT node if
>> it exists and clearing the bits in the unused channel list so that these channels
>> are not manually triggered.
>>
>> v2 changes:
>> Reduced indendation by returning from if block.
>>
>> Reviewed-by: Sekhar Nori <nsekhar@ti.com>
>> Reported-by: Balaji T K <balajitk@ti.com>
>> Cc: Pantel Antoniou <panto@antoniou-consulting.com>
>> Signed-off-by: Joel Fernandes <joelf@ti.com>
>> ---
>> Note:
>> Patch should go in for -rc cycle as it fixes existing crypto drivers.
>>
>>  arch/arm/common/edma.c | 22 +++++++++++++++++++---
>>  1 file changed, 19 insertions(+), 3 deletions(-)
>>
>> diff --git a/arch/arm/common/edma.c b/arch/arm/common/edma.c
>> index 39ad030..3867e7e 100644
>> --- a/arch/arm/common/edma.c
>> +++ b/arch/arm/common/edma.c
>> @@ -560,14 +560,30 @@ static int reserve_contiguous_slots(int ctlr, unsigned int id,
>>  static int prepare_unused_channel_list(struct device *dev, void *data)
>>  {
>>  	struct platform_device *pdev = to_platform_device(dev);
>> -	int i, ctlr;
>> +	int i = 0, ctlr;
>> +	u32 dma_chan;
>> +	const __be32 *dma_chan_p;
>> +	struct property *prop;
>> +
>> +	if (dev->of_node) {
>> +		of_property_for_each_u32(dev->of_node, "dmas", prop,
>> +					 dma_chan_p, dma_chan) {
>> +			if (i++ & 1) {
>> +				ctlr = EDMA_CTLR(dma_chan);
>> +				clear_bit(EDMA_CHAN_SLOT(dma_chan),
>> +					  edma_cc[ctlr]->edma_unused);
>> +			}
>> +		}
>> +		return;
> 
> This should return something here, otherwise we get:-
> 
> arch/arm/common/edma.c: In function 'prepare_unused_channel_list':
> arch/arm/common/edma.c:577:3: warning: 'return' with no value, in function returning non-void [-Wreturn-type]

Other than that I can confirm it fixes the issue for me ...

Tested-by: Mark Jackson <mpfj@newflow.co.uk>

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH v2] ARM: EDMA: Fix clearing of unused list for DT DMA resources
       [not found] ` <1377287613-16491-1-git-send-email-joelf-l0cyMroinI0@public.gmane.org>
  2013-08-26 10:46   ` Sekhar Nori
@ 2013-09-06 19:13   ` Mark Jackson
  2013-09-06 19:15     ` Mark Jackson
  1 sibling, 1 reply; 17+ messages in thread
From: Mark Jackson @ 2013-09-06 19:13 UTC (permalink / raw)
  To: Joel Fernandes
  Cc: Linux DaVinci Kernel List, Russell King, Tony Lindgren,
	Linux MMC List, Linux Kernel Mailing List, Vinod Koul,
	Pantel Antoniou, Dan Williams, Linux OMAP List,
	Linux ARM Kernel List

On 23/08/13 20:53, Joel Fernandes wrote:
> HWMOD removal for MMC and Crypto is breaking edma_start as the events are
> being manually triggered due to unused channel list not being clear. Atleast
> breakage has been seen on these peripherals, but it is expected Audio (McASP)
> maybe breaking too.
> 
> This patch fixes the issue, by reading the "dmas" property from the DT node if
> it exists and clearing the bits in the unused channel list so that these channels
> are not manually triggered.
> 
> v2 changes:
> Reduced indendation by returning from if block.
> 
> Reviewed-by: Sekhar Nori <nsekhar-l0cyMroinI0@public.gmane.org>
> Reported-by: Balaji T K <balajitk-l0cyMroinI0@public.gmane.org>
> Cc: Pantel Antoniou <panto-wVdstyuyKrO8r51toPun2/C9HSW9iNxf@public.gmane.org>
> Signed-off-by: Joel Fernandes <joelf-l0cyMroinI0@public.gmane.org>
> ---
> Note:
> Patch should go in for -rc cycle as it fixes existing crypto drivers.
> 
>  arch/arm/common/edma.c | 22 +++++++++++++++++++---
>  1 file changed, 19 insertions(+), 3 deletions(-)
> 
> diff --git a/arch/arm/common/edma.c b/arch/arm/common/edma.c
> index 39ad030..3867e7e 100644
> --- a/arch/arm/common/edma.c
> +++ b/arch/arm/common/edma.c
> @@ -560,14 +560,30 @@ static int reserve_contiguous_slots(int ctlr, unsigned int id,
>  static int prepare_unused_channel_list(struct device *dev, void *data)
>  {
>  	struct platform_device *pdev = to_platform_device(dev);
> -	int i, ctlr;
> +	int i = 0, ctlr;
> +	u32 dma_chan;
> +	const __be32 *dma_chan_p;
> +	struct property *prop;
> +
> +	if (dev->of_node) {
> +		of_property_for_each_u32(dev->of_node, "dmas", prop,
> +					 dma_chan_p, dma_chan) {
> +			if (i++ & 1) {
> +				ctlr = EDMA_CTLR(dma_chan);
> +				clear_bit(EDMA_CHAN_SLOT(dma_chan),
> +					  edma_cc[ctlr]->edma_unused);
> +			}
> +		}
> +		return;

This should return something here, otherwise we get:-

arch/arm/common/edma.c: In function 'prepare_unused_channel_list':
arch/arm/common/edma.c:577:3: warning: 'return' with no value, in function returning non-void [-Wreturn-type]

Mark J.

> +	}
>  
> -	for (i = 0; i < pdev->num_resources; i++) {
> +	/* For non-OF case */
> +	for (; i < pdev->num_resources; i++) {
>  		if ((pdev->resource[i].flags & IORESOURCE_DMA) &&
>  				(int)pdev->resource[i].start >= 0) {
>  			ctlr = EDMA_CTLR(pdev->resource[i].start);
>  			clear_bit(EDMA_CHAN_SLOT(pdev->resource[i].start),
> -					edma_cc[ctlr]->edma_unused);
> +				  edma_cc[ctlr]->edma_unused);
>  		}
>  	}

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH v2] ARM: EDMA: Fix clearing of unused list for DT DMA resources
       [not found]         ` <521B87C0.1090507-l0cyMroinI0@public.gmane.org>
@ 2013-08-26 19:34           ` Sekhar Nori
  0 siblings, 0 replies; 17+ messages in thread
From: Sekhar Nori @ 2013-08-26 19:34 UTC (permalink / raw)
  To: Joel Fernandes
  Cc: Linux DaVinci Kernel List, Russell King, Tony Lindgren,
	Pantel Antoniou, Linux MMC List, Linux Kernel Mailing List,
	Vinod Koul, Dan Williams, Linux OMAP List, Linux ARM Kernel List


On 8/26/2013 10:22 PM, Joel Fernandes wrote:
> On 08/26/2013 05:46 AM, Sekhar Nori wrote:
>> On Saturday 24 August 2013 01:23 AM, Joel Fernandes wrote:
>>> HWMOD removal for MMC and Crypto is breaking edma_start as the events are
>>> being manually triggered due to unused channel list not being clear. Atleast
>>> breakage has been seen on these peripherals, but it is expected Audio (McASP)
>>> maybe breaking too.
>>>
>>> This patch fixes the issue, by reading the "dmas" property from the DT node if
>>> it exists and clearing the bits in the unused channel list so that these channels
>>> are not manually triggered.
>>>
>>> v2 changes:
>>> Reduced indendation by returning from if block.
>>
>> Is this a v2 or v3 since you already sent a v2 about a month back?
> 
> No, there aren't any changes since v2, I just resubmitted the same patch.

Heh, it does seem to contain some indentation changes per your
documentation :)

> 
>>>
>>> Reviewed-by: Sekhar Nori <nsekhar-l0cyMroinI0@public.gmane.org>
>>> Reported-by: Balaji T K <balajitk-l0cyMroinI0@public.gmane.org>
>>> Cc: Pantel Antoniou <panto-wVdstyuyKrO8r51toPun2/C9HSW9iNxf@public.gmane.org>
>>> Signed-off-by: Joel Fernandes <joelf-l0cyMroinI0@public.gmane.org>
>>> ---
>>> Note:
>>> Patch should go in for -rc cycle as it fixes existing crypto drivers.
>>
>> We agreed the patch is not needed in -rc cycle since there are no
>> current EDMA users in DT-boot?
> 
> There is now, crypto and EDMA DT patches are being merged in.

They are being merged in v3.12, right? So you meant the -rc cycle of
v3.12? If yes, no need to wait for a broken v3.12-rc1 to come out. It is
possible to queue fixes during merge window too.

Thanks,
Sekhar

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH v2] ARM: EDMA: Fix clearing of unused list for DT DMA resources
       [not found]     ` <521B3212.3050405-l0cyMroinI0@public.gmane.org>
@ 2013-08-26 16:52       ` Joel Fernandes
       [not found]         ` <521B87C0.1090507-l0cyMroinI0@public.gmane.org>
  0 siblings, 1 reply; 17+ messages in thread
From: Joel Fernandes @ 2013-08-26 16:52 UTC (permalink / raw)
  To: Sekhar Nori
  Cc: Linux DaVinci Kernel List, Russell King, Tony Lindgren,
	Pantel Antoniou, Linux MMC List, Linux Kernel Mailing List,
	Vinod Koul, Dan Williams, Linux OMAP List, Linux ARM Kernel List

On 08/26/2013 05:46 AM, Sekhar Nori wrote:
> On Saturday 24 August 2013 01:23 AM, Joel Fernandes wrote:
>> HWMOD removal for MMC and Crypto is breaking edma_start as the events are
>> being manually triggered due to unused channel list not being clear. Atleast
>> breakage has been seen on these peripherals, but it is expected Audio (McASP)
>> maybe breaking too.
>>
>> This patch fixes the issue, by reading the "dmas" property from the DT node if
>> it exists and clearing the bits in the unused channel list so that these channels
>> are not manually triggered.
>>
>> v2 changes:
>> Reduced indendation by returning from if block.
> 
> Is this a v2 or v3 since you already sent a v2 about a month back?

No, there aren't any changes since v2, I just resubmitted the same patch.

>>
>> Reviewed-by: Sekhar Nori <nsekhar-l0cyMroinI0@public.gmane.org>
>> Reported-by: Balaji T K <balajitk-l0cyMroinI0@public.gmane.org>
>> Cc: Pantel Antoniou <panto-wVdstyuyKrO8r51toPun2/C9HSW9iNxf@public.gmane.org>
>> Signed-off-by: Joel Fernandes <joelf-l0cyMroinI0@public.gmane.org>
>> ---
>> Note:
>> Patch should go in for -rc cycle as it fixes existing crypto drivers.
> 
> We agreed the patch is not needed in -rc cycle since there are no
> current EDMA users in DT-boot?

There is now, crypto and EDMA DT patches are being merged in.

>>
>>  arch/arm/common/edma.c | 22 +++++++++++++++++++---
>>  1 file changed, 19 insertions(+), 3 deletions(-)
>>
>> diff --git a/arch/arm/common/edma.c b/arch/arm/common/edma.c
>> index 39ad030..3867e7e 100644
>> --- a/arch/arm/common/edma.c
>> +++ b/arch/arm/common/edma.c
>> @@ -560,14 +560,30 @@ static int reserve_contiguous_slots(int ctlr, unsigned int id,
>>  static int prepare_unused_channel_list(struct device *dev, void *data)
>>  {
>>  	struct platform_device *pdev = to_platform_device(dev);
>> -	int i, ctlr;
>> +	int i = 0, ctlr;
>> +	u32 dma_chan;
>> +	const __be32 *dma_chan_p;
>> +	struct property *prop;
>> +
>> +	if (dev->of_node) {
>> +		of_property_for_each_u32(dev->of_node, "dmas", prop,
>> +					 dma_chan_p, dma_chan) {
>> +			if (i++ & 1) {
>> +				ctlr = EDMA_CTLR(dma_chan);
>> +				clear_bit(EDMA_CHAN_SLOT(dma_chan),
>> +					  edma_cc[ctlr]->edma_unused);
>> +			}
> 
> I thought we agreed to do this differently using
> of_property_count_strings() and of_parse_phandle_with_args(). I seemed
> to have missed any discussion on why this cannot be done (if such a
> discussion took place on the list).

I kind of missed that particular review comment after reading [1]. Because I
thought only change left was the indentation. Let me work on that comment and
resubmit as v3.

Regards,

-Joel

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH v2] ARM: EDMA: Fix clearing of unused list for DT DMA resources
       [not found] ` <1377287613-16491-1-git-send-email-joelf-l0cyMroinI0@public.gmane.org>
@ 2013-08-26 10:46   ` Sekhar Nori
       [not found]     ` <521B3212.3050405-l0cyMroinI0@public.gmane.org>
  2013-09-06 19:13   ` Mark Jackson
  1 sibling, 1 reply; 17+ messages in thread
From: Sekhar Nori @ 2013-08-26 10:46 UTC (permalink / raw)
  To: Joel Fernandes
  Cc: Linux DaVinci Kernel List, Russell King, Tony Lindgren,
	Pantel Antoniou, Linux MMC List, Linux Kernel Mailing List,
	Vinod Koul, Dan Williams, Linux OMAP List, Linux ARM Kernel List

On Saturday 24 August 2013 01:23 AM, Joel Fernandes wrote:
> HWMOD removal for MMC and Crypto is breaking edma_start as the events are
> being manually triggered due to unused channel list not being clear. Atleast
> breakage has been seen on these peripherals, but it is expected Audio (McASP)
> maybe breaking too.
> 
> This patch fixes the issue, by reading the "dmas" property from the DT node if
> it exists and clearing the bits in the unused channel list so that these channels
> are not manually triggered.
> 
> v2 changes:
> Reduced indendation by returning from if block.

Is this a v2 or v3 since you already sent a v2 about a month back?

> 
> Reviewed-by: Sekhar Nori <nsekhar-l0cyMroinI0@public.gmane.org>
> Reported-by: Balaji T K <balajitk-l0cyMroinI0@public.gmane.org>
> Cc: Pantel Antoniou <panto-wVdstyuyKrO8r51toPun2/C9HSW9iNxf@public.gmane.org>
> Signed-off-by: Joel Fernandes <joelf-l0cyMroinI0@public.gmane.org>
> ---
> Note:
> Patch should go in for -rc cycle as it fixes existing crypto drivers.

We agreed the patch is not needed in -rc cycle since there are no
current EDMA users in DT-boot?

> 
>  arch/arm/common/edma.c | 22 +++++++++++++++++++---
>  1 file changed, 19 insertions(+), 3 deletions(-)
> 
> diff --git a/arch/arm/common/edma.c b/arch/arm/common/edma.c
> index 39ad030..3867e7e 100644
> --- a/arch/arm/common/edma.c
> +++ b/arch/arm/common/edma.c
> @@ -560,14 +560,30 @@ static int reserve_contiguous_slots(int ctlr, unsigned int id,
>  static int prepare_unused_channel_list(struct device *dev, void *data)
>  {
>  	struct platform_device *pdev = to_platform_device(dev);
> -	int i, ctlr;
> +	int i = 0, ctlr;
> +	u32 dma_chan;
> +	const __be32 *dma_chan_p;
> +	struct property *prop;
> +
> +	if (dev->of_node) {
> +		of_property_for_each_u32(dev->of_node, "dmas", prop,
> +					 dma_chan_p, dma_chan) {
> +			if (i++ & 1) {
> +				ctlr = EDMA_CTLR(dma_chan);
> +				clear_bit(EDMA_CHAN_SLOT(dma_chan),
> +					  edma_cc[ctlr]->edma_unused);
> +			}

I thought we agreed to do this differently using
of_property_count_strings() and of_parse_phandle_with_args(). I seemed
to have missed any discussion on why this cannot be done (if such a
discussion took place on the list).

Thanks,
Sekhar

^ permalink raw reply	[flat|nested] 17+ messages in thread

* [PATCH v2] ARM: EDMA: Fix clearing of unused list for DT DMA resources
@ 2013-08-23 19:53 Joel Fernandes
       [not found] ` <1377287613-16491-1-git-send-email-joelf-l0cyMroinI0@public.gmane.org>
  0 siblings, 1 reply; 17+ messages in thread
From: Joel Fernandes @ 2013-08-23 19:53 UTC (permalink / raw)
  To: Sekhar Nori, Tony Lindgren, Matt Porter, Vinod Koul,
	Dan Williams, Russell King
  Cc: Linux DaVinci Kernel List, Joel Fernandes, Linux MMC List,
	Pantel Antoniou, Linux Kernel Mailing List, Linux OMAP List,
	Linux ARM Kernel List

HWMOD removal for MMC and Crypto is breaking edma_start as the events are
being manually triggered due to unused channel list not being clear. Atleast
breakage has been seen on these peripherals, but it is expected Audio (McASP)
maybe breaking too.

This patch fixes the issue, by reading the "dmas" property from the DT node if
it exists and clearing the bits in the unused channel list so that these channels
are not manually triggered.

v2 changes:
Reduced indendation by returning from if block.

Reviewed-by: Sekhar Nori <nsekhar-l0cyMroinI0@public.gmane.org>
Reported-by: Balaji T K <balajitk-l0cyMroinI0@public.gmane.org>
Cc: Pantel Antoniou <panto-wVdstyuyKrO8r51toPun2/C9HSW9iNxf@public.gmane.org>
Signed-off-by: Joel Fernandes <joelf-l0cyMroinI0@public.gmane.org>
---
Note:
Patch should go in for -rc cycle as it fixes existing crypto drivers.

 arch/arm/common/edma.c | 22 +++++++++++++++++++---
 1 file changed, 19 insertions(+), 3 deletions(-)

diff --git a/arch/arm/common/edma.c b/arch/arm/common/edma.c
index 39ad030..3867e7e 100644
--- a/arch/arm/common/edma.c
+++ b/arch/arm/common/edma.c
@@ -560,14 +560,30 @@ static int reserve_contiguous_slots(int ctlr, unsigned int id,
 static int prepare_unused_channel_list(struct device *dev, void *data)
 {
 	struct platform_device *pdev = to_platform_device(dev);
-	int i, ctlr;
+	int i = 0, ctlr;
+	u32 dma_chan;
+	const __be32 *dma_chan_p;
+	struct property *prop;
+
+	if (dev->of_node) {
+		of_property_for_each_u32(dev->of_node, "dmas", prop,
+					 dma_chan_p, dma_chan) {
+			if (i++ & 1) {
+				ctlr = EDMA_CTLR(dma_chan);
+				clear_bit(EDMA_CHAN_SLOT(dma_chan),
+					  edma_cc[ctlr]->edma_unused);
+			}
+		}
+		return;
+	}
 
-	for (i = 0; i < pdev->num_resources; i++) {
+	/* For non-OF case */
+	for (; i < pdev->num_resources; i++) {
 		if ((pdev->resource[i].flags & IORESOURCE_DMA) &&
 				(int)pdev->resource[i].start >= 0) {
 			ctlr = EDMA_CTLR(pdev->resource[i].start);
 			clear_bit(EDMA_CHAN_SLOT(pdev->resource[i].start),
-					edma_cc[ctlr]->edma_unused);
+				  edma_cc[ctlr]->edma_unused);
 		}
 	}
 
-- 
1.8.1.2

^ permalink raw reply related	[flat|nested] 17+ messages in thread

end of thread, other threads:[~2013-09-06 19:51 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-07-22 17:59 [PATCH v2] ARM: EDMA: Fix clearing of unused list for DT DMA resources Joel Fernandes
2013-07-27 23:32 ` Joel Fernandes
2013-07-29  7:04   ` Sekhar Nori
2013-07-30  3:53     ` Joel Fernandes
2013-07-30  4:52       ` Sekhar Nori
2013-07-30  5:05         ` Joel Fernandes
2013-07-29  7:01 ` Sekhar Nori
2013-07-30  3:47   ` Joel Fernandes
2013-07-30 16:29     ` Sekhar Nori
2013-07-31  5:06       ` Joel Fernandes
2013-08-23 19:53 Joel Fernandes
     [not found] ` <1377287613-16491-1-git-send-email-joelf-l0cyMroinI0@public.gmane.org>
2013-08-26 10:46   ` Sekhar Nori
     [not found]     ` <521B3212.3050405-l0cyMroinI0@public.gmane.org>
2013-08-26 16:52       ` Joel Fernandes
     [not found]         ` <521B87C0.1090507-l0cyMroinI0@public.gmane.org>
2013-08-26 19:34           ` Sekhar Nori
2013-09-06 19:13   ` Mark Jackson
2013-09-06 19:15     ` Mark Jackson
     [not found]       ` <522A29CF.2090001-2FZW7xY0fHgqdlJmJB21zg@public.gmane.org>
2013-09-06 19:51         ` Joel Fernandes

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).