2013-08-23 19:54:42

by Joel Fernandes

[permalink] [raw]
Subject: [PATCH v2] ARM: EDMA: Fix clearing of unused list for DT DMA resources

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 <[email protected]>
Reported-by: Balaji T K <[email protected]>
Cc: Pantel Antoniou <[email protected]>
Signed-off-by: Joel Fernandes <[email protected]>
---
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


2013-08-26 10:51:34

by Sekhar Nori

[permalink] [raw]
Subject: Re: [PATCH v2] ARM: EDMA: Fix clearing of unused list for DT DMA resources

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 <[email protected]>
> Reported-by: Balaji T K <[email protected]>
> Cc: Pantel Antoniou <[email protected]>
> Signed-off-by: Joel Fernandes <[email protected]>
> ---
> 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

2013-08-26 16:52:53

by Joel Fernandes

[permalink] [raw]
Subject: Re: [PATCH v2] ARM: EDMA: Fix clearing of unused list for DT DMA resources

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 <[email protected]>
>> Reported-by: Balaji T K <[email protected]>
>> Cc: Pantel Antoniou <[email protected]>
>> Signed-off-by: Joel Fernandes <[email protected]>
>> ---
>> 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

2013-08-26 19:37:41

by Sekhar Nori

[permalink] [raw]
Subject: Re: [PATCH v2] ARM: EDMA: Fix clearing of unused list for DT DMA resources


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 <[email protected]>
>>> Reported-by: Balaji T K <[email protected]>
>>> Cc: Pantel Antoniou <[email protected]>
>>> Signed-off-by: Joel Fernandes <[email protected]>
>>> ---
>>> 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

2013-09-06 19:13:33

by Mark Jackson

[permalink] [raw]
Subject: Re: [PATCH v2] ARM: EDMA: Fix clearing of unused list for DT DMA resources

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 <[email protected]>
> Reported-by: Balaji T K <[email protected]>
> Cc: Pantel Antoniou <[email protected]>
> Signed-off-by: Joel Fernandes <[email protected]>
> ---
> 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);
> }
> }

2013-09-06 19:15:31

by Mark Jackson

[permalink] [raw]
Subject: Re: [PATCH v2] ARM: EDMA: Fix clearing of unused list for DT DMA resources

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 <[email protected]>
>> Reported-by: Balaji T K <[email protected]>
>> Cc: Pantel Antoniou <[email protected]>
>> Signed-off-by: Joel Fernandes <[email protected]>
>> ---
>> 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 <[email protected]>

2013-09-06 19:51:54

by Joel Fernandes

[permalink] [raw]
Subject: Re: [PATCH v2] ARM: EDMA: Fix clearing of unused list for DT DMA resources

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 <[email protected]>
>>> Reported-by: Balaji T K <[email protected]>
>>> Cc: Pantel Antoniou <[email protected]>
>>> Signed-off-by: Joel Fernandes <[email protected]>
>>> ---
>>> 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