Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1344883 > unrolled thread

Re: [PATCH] mtd: nand: pxa3xx_nand: fix dmaengine initialization

Started byEzequiel Garcia <ezequiel@vanguardiasur.com.ar>
First post2016-02-27 03:00 +0100
Last post2016-02-28 20:20 +0100
Articles 3 — 2 participants

Back to article view | Back to linux.kernel

This discussion starts older than the indexed window; earlier articles aren't shown. The article labeled Started by below is the oldest one visible, not the original post.


Contents

  Re: [PATCH] mtd: nand: pxa3xx_nand: fix dmaengine initialization Ezequiel Garcia <ezequiel@vanguardiasur.com.ar> - 2016-02-27 03:00 +0100
    Re: [PATCH] mtd: nand: pxa3xx_nand: fix dmaengine initialization Robert Jarzmik <robert.jarzmik@free.fr> - 2016-02-27 11:50 +0100
      Re: [PATCH] mtd: nand: pxa3xx_nand: fix dmaengine initialization Ezequiel Garcia <ezequiel@vanguardiasur.com.ar> - 2016-02-28 20:20 +0100

#1344883 — Re: [PATCH] mtd: nand: pxa3xx_nand: fix dmaengine initialization

FromEzequiel Garcia <ezequiel@vanguardiasur.com.ar>
Date2016-02-27 03:00 +0100
SubjectRe: [PATCH] mtd: nand: pxa3xx_nand: fix dmaengine initialization
Message-ID<r6CkP-3SQ-11@gated-at.bofh.it>
On 12 February 2016 at 19:29, Robert Jarzmik <robert.jarzmik@free.fr> wrote:
> When the driver is initialized in a pure device-tree platform, the
> driver's probe fails allocating the dma channel :
> [  525.624435] pxa3xx-nand 43100000.nand: no resource defined for data DMA
> [  525.632088] pxa3xx-nand 43100000.nand: alloc nand resource failed
>
> The reason is that the DMA IO resource is not acquired through platform
> resources but by OF bindings.
>
> Fix this by ensuring that DMA IO resources are only queried in the non
> device-tree case.
>
> Fixes: 8f5ba31aa565 ("mtd: nand: pxa3xx-nand: switch to dmaengine")
> Signed-off-by: Robert Jarzmik <robert.jarzmik@free.fr>
> ---
>  drivers/mtd/nand/pxa3xx_nand.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/mtd/nand/pxa3xx_nand.c b/drivers/mtd/nand/pxa3xx_nand.c
> index a168cbcc1086..afd487d4b67f 100644
> --- a/drivers/mtd/nand/pxa3xx_nand.c
> +++ b/drivers/mtd/nand/pxa3xx_nand.c
> @@ -1750,7 +1750,7 @@ static int alloc_nand_resource(struct platform_device *pdev)
>         if (ret < 0)
>                 return ret;
>
> -       if (use_dma) {
> +       if (!np && use_dma) {
>                 r = platform_get_resource(pdev, IORESOURCE_DMA, 0);
>                 if (r == NULL) {
>                         dev_err(&pdev->dev,

Looking through the kernel tree, this change seems to be correct.

However, I'm still wondering how DMA resources are obtained in the
device-tree case. Can you explain it to me?
-- 
Ezequiel García, VanguardiaSur
www.vanguardiasur.com.ar

[toc] | [next] | [standalone]


#1344982

FromRobert Jarzmik <robert.jarzmik@free.fr>
Date2016-02-27 11:50 +0100
Message-ID<r6KBI-1Bx-9@gated-at.bofh.it>
In reply to#1344883
Ezequiel Garcia <ezequiel@vanguardiasur.com.ar> writes:

> On 12 February 2016 at 19:29, Robert Jarzmik <robert.jarzmik@free.fr> wrote:
>> When the driver is initialized in a pure device-tree platform, the
>> driver's probe fails allocating the dma channel :
>> [  525.624435] pxa3xx-nand 43100000.nand: no resource defined for data DMA
>> [  525.632088] pxa3xx-nand 43100000.nand: alloc nand resource failed
>>
>> The reason is that the DMA IO resource is not acquired through platform
>> resources but by OF bindings.
>>
>> Fix this by ensuring that DMA IO resources are only queried in the non
>> device-tree case.
>>
>> Fixes: 8f5ba31aa565 ("mtd: nand: pxa3xx-nand: switch to dmaengine")
>> Signed-off-by: Robert Jarzmik <robert.jarzmik@free.fr>
>> ---
>>  drivers/mtd/nand/pxa3xx_nand.c | 2 +-
>>  1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/drivers/mtd/nand/pxa3xx_nand.c b/drivers/mtd/nand/pxa3xx_nand.c
>> index a168cbcc1086..afd487d4b67f 100644
>> --- a/drivers/mtd/nand/pxa3xx_nand.c
>> +++ b/drivers/mtd/nand/pxa3xx_nand.c
>> @@ -1750,7 +1750,7 @@ static int alloc_nand_resource(struct platform_device *pdev)
>>         if (ret < 0)
>>                 return ret;
>>
>> -       if (use_dma) {
>> +       if (!np && use_dma) {
>>                 r = platform_get_resource(pdev, IORESOURCE_DMA, 0);
>>                 if (r == NULL) {
>>                         dev_err(&pdev->dev,
>
> Looking through the kernel tree, this change seems to be correct.
>
> However, I'm still wondering how DMA resources are obtained in the
> device-tree case. Can you explain it to me?

In the pxa case, look at my extract in [1].
The lines to consider are :
			dmas = <&pdma 97 3>;
			dma-names = "data";

Now have a look at the function pxad_dma_xlate() in drivers/dma/pxa_dma.c.
You'll see that the "97" ends up in the chanel drcmr, and the "3" in the
channel's prio, when the chanel is requested in the nand driver by calling
dma_request_slave_channel_compat(). In the latter case, pxad_filter_fn() is not
used, it's the pxad_dma_xlate() which is used instead.

Is this what you were looking for ?

Cheers.

-- 
Robert

[1] Extract of my zylonite310.dts
		nand0: nand@43100000 {
			compatible = "marvell,pxa3xx-nand";
			reg = <0x43100000 90>;
			interrupts = <45>;
			clocks = <&clks CLK_NAND>;
			dmas = <&pdma 97 3>;
			dma-names = "data";
			#address-cells = <1>;
			#size-cells = <1>;	
			status = "disabled";
		};

[toc] | [prev] | [next] | [standalone]


#1345370

FromEzequiel Garcia <ezequiel@vanguardiasur.com.ar>
Date2016-02-28 20:20 +0100
Message-ID<r7f2N-7dc-3@gated-at.bofh.it>
In reply to#1344982
On 27 February 2016 at 07:45, Robert Jarzmik <robert.jarzmik@free.fr> wrote:
> Ezequiel Garcia <ezequiel@vanguardiasur.com.ar> writes:
>
>> On 12 February 2016 at 19:29, Robert Jarzmik <robert.jarzmik@free.fr> wrote:
>>> When the driver is initialized in a pure device-tree platform, the
>>> driver's probe fails allocating the dma channel :
>>> [  525.624435] pxa3xx-nand 43100000.nand: no resource defined for data DMA
>>> [  525.632088] pxa3xx-nand 43100000.nand: alloc nand resource failed
>>>
>>> The reason is that the DMA IO resource is not acquired through platform
>>> resources but by OF bindings.
>>>
>>> Fix this by ensuring that DMA IO resources are only queried in the non
>>> device-tree case.
>>>
>>> Fixes: 8f5ba31aa565 ("mtd: nand: pxa3xx-nand: switch to dmaengine")
>>> Signed-off-by: Robert Jarzmik <robert.jarzmik@free.fr>
>>> ---
>>>  drivers/mtd/nand/pxa3xx_nand.c | 2 +-
>>>  1 file changed, 1 insertion(+), 1 deletion(-)
>>>
>>> diff --git a/drivers/mtd/nand/pxa3xx_nand.c b/drivers/mtd/nand/pxa3xx_nand.c
>>> index a168cbcc1086..afd487d4b67f 100644
>>> --- a/drivers/mtd/nand/pxa3xx_nand.c
>>> +++ b/drivers/mtd/nand/pxa3xx_nand.c
>>> @@ -1750,7 +1750,7 @@ static int alloc_nand_resource(struct platform_device *pdev)
>>>         if (ret < 0)
>>>                 return ret;
>>>
>>> -       if (use_dma) {
>>> +       if (!np && use_dma) {
>>>                 r = platform_get_resource(pdev, IORESOURCE_DMA, 0);
>>>                 if (r == NULL) {
>>>                         dev_err(&pdev->dev,
>>
>> Looking through the kernel tree, this change seems to be correct.
>>
>> However, I'm still wondering how DMA resources are obtained in the
>> device-tree case. Can you explain it to me?
>
> In the pxa case, look at my extract in [1].
> The lines to consider are :
>                         dmas = <&pdma 97 3>;
>                         dma-names = "data";
>
> Now have a look at the function pxad_dma_xlate() in drivers/dma/pxa_dma.c.
> You'll see that the "97" ends up in the chanel drcmr, and the "3" in the
> channel's prio, when the chanel is requested in the nand driver by calling
> dma_request_slave_channel_compat(). In the latter case, pxad_filter_fn() is not
> used, it's the pxad_dma_xlate() which is used instead.
>
> Is this what you were looking for ?
>

I see. That's exactly what I was missing.

Acked-by: Ezequiel Garcia <ezequiel@vanguardiasur.com.ar>

Thanks,
-- 
Ezequiel García, VanguardiaSur
www.vanguardiasur.com.ar

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web