diff mbox

[v2,2/2] ARM: shmobile: r8a7791: Enable DMA for HSUSB

Message ID 1428393231-5272-3-git-send-email-yoshihiro.shimoda.uh@renesas.com (mailing list archive)
State Superseded
Delegated to: Simon Horman
Headers show

Commit Message

Yoshihiro Shimoda April 7, 2015, 7:53 a.m. UTC
This patch adds DMA properties to the HSUSB node.

Signed-off-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
---
 arch/arm/boot/dts/r8a7791.dtsi | 3 +++
 1 file changed, 3 insertions(+)

Comments

Geert Uytterhoeven April 7, 2015, 1:34 p.m. UTC | #1
Hi Shimoda-san,

On Tue, Apr 7, 2015 at 9:53 AM, Yoshihiro Shimoda
<yoshihiro.shimoda.uh@renesas.com> wrote:
> This patch adds DMA properties to the HSUSB node.

Thank you for your patch!

> Signed-off-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
> ---
>  arch/arm/boot/dts/r8a7791.dtsi | 3 +++
>  1 file changed, 3 insertions(+)
>
> diff --git a/arch/arm/boot/dts/r8a7791.dtsi b/arch/arm/boot/dts/r8a7791.dtsi
> index db3772e..5f20ad4 100644
> --- a/arch/arm/boot/dts/r8a7791.dtsi
> +++ b/arch/arm/boot/dts/r8a7791.dtsi
> @@ -722,6 +722,9 @@
>                 renesas,buswait = <4>;
>                 phys = <&usb0 1>;
>                 phy-names = "usb";
> +               dmas = <&usb_dmac0 0>, <&usb_dmac0 1>,
> +                      <&usb_dmac1 0>, <&usb_dmac1 1>;
> +               dma-names = "rx0", "tx1", "rx2", "tx3";

The numbering looks a bit strange, given the code looks up both tx and rx
DMA channels for each channel index. Is it correct?

The binding documentation (which lacks on example) states:

  - dma-names : Must contain a list of DMA names:
   - tx0 ... tx<n>
   - rx0 ... rx<n>
    - This <n> means DnFIFO in USBHS module.

As there are 4 DnFIFOs, I'd expect tx0..tx3 and rx0..rx3.

Can you please clarify?
Thanks!

Gr{oetje,eeting}s,

                        Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
                                -- Linus Torvalds
--
To unsubscribe from this list: send the line "unsubscribe linux-sh" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Yoshihiro Shimoda April 8, 2015, 2:20 a.m. UTC | #2
Hi Geert-san,

> Hi Shimoda-san,

> 

> On Tue, Apr 7, 2015 at 9:53 AM, Yoshihiro Shimoda

> <yoshihiro.shimoda.uh@renesas.com> wrote:

> > This patch adds DMA properties to the HSUSB node.

> 

> Thank you for your patch!


Thank you for your review!

> > Signed-off-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>

> > ---

> >  arch/arm/boot/dts/r8a7791.dtsi | 3 +++

> >  1 file changed, 3 insertions(+)

> >

> > diff --git a/arch/arm/boot/dts/r8a7791.dtsi b/arch/arm/boot/dts/r8a7791.dtsi

> > index db3772e..5f20ad4 100644

> > --- a/arch/arm/boot/dts/r8a7791.dtsi

> > +++ b/arch/arm/boot/dts/r8a7791.dtsi

> > @@ -722,6 +722,9 @@

> >                 renesas,buswait = <4>;

> >                 phys = <&usb0 1>;

> >                 phy-names = "usb";

> > +               dmas = <&usb_dmac0 0>, <&usb_dmac0 1>,

> > +                      <&usb_dmac1 0>, <&usb_dmac1 1>;

> > +               dma-names = "rx0", "tx1", "rx2", "tx3";

> 

> The numbering looks a bit strange, given the code looks up both tx and rx

> DMA channels for each channel index. Is it correct?

> 

> The binding documentation (which lacks on example) states:

> 

>   - dma-names : Must contain a list of DMA names:

>    - tx0 ... tx<n>

>    - rx0 ... rx<n>

>     - This <n> means DnFIFO in USBHS module.

> 

> As there are 4 DnFIFOs, I'd expect tx0..tx3 and rx0..rx3.

> 

> Can you please clarify?


I wrote some information below.
But, since it is complex hardware, I don't know I can explain this as well...

At first, R-Car Gen2 has 2 USB-DMACs and 4 channels:
 USB-DMAC 0: ch0
 USB-DMAC 0: ch1
 USB-DMAC 1: ch0
 USB-DMAC 1: ch1
Remarks: I don't know why but performance of USB-DMAC 0 is good than USB-DMAC 1.
          (Please refer to the Table 64.1 of the datasheet.)

So, I wrote dmas parameter in hsusb as the following:

> > +               dmas = <&usb_dmac0 0>, <&usb_dmac0 1>,

> > +                      <&usb_dmac1 0>, <&usb_dmac1 1>;



And, R-Car Gen2 has 4 DnFIFOs in HSUSB. to avoid complex handling for DnFIFOs,
the renesas_usbhs driver uses each DnFIFO as TX or RX direction (not bi-direction).
So, I wrote dma-names parameter as the following:

> > +               dma-names = "rx0", "tx1", "rx2", "tx3";


- D0FIFO as RX (Also it is connected to USB-DMAC 0: ch0)
- D1FIFO as TX (Also it is connected to USB-DMAC 0: ch1)
- D2FIFO as RX (Also it is connected to USB-DMAC 1: ch0)
- D3FIFO as TX (Also it is connected to USB-DMAC 1: ch1)

Best regards,
Yoshihiro Shimoda

> Thanks!

> 

> Gr{oetje,eeting}s,

> 

>                         Geert

> 

> --

> Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

> 

> In personal conversations with technical people, I call myself a hacker. But

> when I'm talking to journalists I just say "programmer" or something like that.

>                                 -- Linus Torvalds
Geert Uytterhoeven April 8, 2015, 7:43 a.m. UTC | #3
Hi Shimoda-san,

On Wed, Apr 8, 2015 at 4:20 AM, Yoshihiro Shimoda
<yoshihiro.shimoda.uh@renesas.com> wrote:
>> On Tue, Apr 7, 2015 at 9:53 AM, Yoshihiro Shimoda
>> <yoshihiro.shimoda.uh@renesas.com> wrote:
>> > diff --git a/arch/arm/boot/dts/r8a7791.dtsi b/arch/arm/boot/dts/r8a7791.dtsi
>> > index db3772e..5f20ad4 100644
>> > --- a/arch/arm/boot/dts/r8a7791.dtsi
>> > +++ b/arch/arm/boot/dts/r8a7791.dtsi
>> > @@ -722,6 +722,9 @@
>> >                 renesas,buswait = <4>;
>> >                 phys = <&usb0 1>;
>> >                 phy-names = "usb";
>> > +               dmas = <&usb_dmac0 0>, <&usb_dmac0 1>,
>> > +                      <&usb_dmac1 0>, <&usb_dmac1 1>;
>> > +               dma-names = "rx0", "tx1", "rx2", "tx3";
>>
>> The numbering looks a bit strange, given the code looks up both tx and rx
>> DMA channels for each channel index. Is it correct?
>>
>> The binding documentation (which lacks on example) states:
>>
>>   - dma-names : Must contain a list of DMA names:
>>    - tx0 ... tx<n>
>>    - rx0 ... rx<n>
>>     - This <n> means DnFIFO in USBHS module.
>>
>> As there are 4 DnFIFOs, I'd expect tx0..tx3 and rx0..rx3.
>>
>> Can you please clarify?
>
> I wrote some information below.
> But, since it is complex hardware, I don't know I can explain this as well...
>
> At first, R-Car Gen2 has 2 USB-DMACs and 4 channels:
>  USB-DMAC 0: ch0
>  USB-DMAC 0: ch1
>  USB-DMAC 1: ch0
>  USB-DMAC 1: ch1
> Remarks: I don't know why but performance of USB-DMAC 0 is good than USB-DMAC 1.
>           (Please refer to the Table 64.1 of the datasheet.)
>
> So, I wrote dmas parameter in hsusb as the following:
>
>> > +               dmas = <&usb_dmac0 0>, <&usb_dmac0 1>,
>> > +                      <&usb_dmac1 0>, <&usb_dmac1 1>;
>
> And, R-Car Gen2 has 4 DnFIFOs in HSUSB. to avoid complex handling for DnFIFOs,
> the renesas_usbhs driver uses each DnFIFO as TX or RX direction (not bi-direction).
> So, I wrote dma-names parameter as the following:
>
>> > +               dma-names = "rx0", "tx1", "rx2", "tx3";
>
> - D0FIFO as RX (Also it is connected to USB-DMAC 0: ch0)
> - D1FIFO as TX (Also it is connected to USB-DMAC 0: ch1)
> - D2FIFO as RX (Also it is connected to USB-DMAC 1: ch0)
> - D3FIFO as TX (Also it is connected to USB-DMAC 1: ch1)

Thanks for the explanation!

Hence the "strange" numbering is a limitation of the driver, not of the
hardware?

In that case I think the DT should describe the hardware, not the driver
limitation. As the FIFOs are bidirectional, there's just a one-to-one mapping
of 4 DnFIFOs to 4 (2 channels x 2 DMACs) DMA channels.
Which DnFIFO/channel is used for TX and which is used for RX is to be chosen
by the driver, and can be fixed (e.g. use even channels for RX, odd for
TX, like the current situation).

What do you (and other people) think?

Gr{oetje,eeting}s,

                        Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
                                -- Linus Torvalds
--
To unsubscribe from this list: send the line "unsubscribe linux-sh" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Yoshihiro Shimoda April 8, 2015, 8:22 a.m. UTC | #4
Hi Geert-san,

> Hi Shimoda-san,

> 

> On Wed, Apr 8, 2015 at 4:20 AM, Yoshihiro Shimoda

> <yoshihiro.shimoda.uh@renesas.com> wrote:

> >> On Tue, Apr 7, 2015 at 9:53 AM, Yoshihiro Shimoda

> >> <yoshihiro.shimoda.uh@renesas.com> wrote:

> >> > diff --git a/arch/arm/boot/dts/r8a7791.dtsi b/arch/arm/boot/dts/r8a7791.dtsi

> >> > index db3772e..5f20ad4 100644

> >> > --- a/arch/arm/boot/dts/r8a7791.dtsi

> >> > +++ b/arch/arm/boot/dts/r8a7791.dtsi

> >> > @@ -722,6 +722,9 @@

> >> >                 renesas,buswait = <4>;

> >> >                 phys = <&usb0 1>;

> >> >                 phy-names = "usb";

> >> > +               dmas = <&usb_dmac0 0>, <&usb_dmac0 1>,

> >> > +                      <&usb_dmac1 0>, <&usb_dmac1 1>;

> >> > +               dma-names = "rx0", "tx1", "rx2", "tx3";

> >>

> >> The numbering looks a bit strange, given the code looks up both tx and rx

> >> DMA channels for each channel index. Is it correct?

> >>

> >> The binding documentation (which lacks on example) states:

> >>

> >>   - dma-names : Must contain a list of DMA names:

> >>    - tx0 ... tx<n>

> >>    - rx0 ... rx<n>

> >>     - This <n> means DnFIFO in USBHS module.

> >>

> >> As there are 4 DnFIFOs, I'd expect tx0..tx3 and rx0..rx3.

> >>

> >> Can you please clarify?

> >

> > I wrote some information below.

> > But, since it is complex hardware, I don't know I can explain this as well...

> >

> > At first, R-Car Gen2 has 2 USB-DMACs and 4 channels:

> >  USB-DMAC 0: ch0

> >  USB-DMAC 0: ch1

> >  USB-DMAC 1: ch0

> >  USB-DMAC 1: ch1

> > Remarks: I don't know why but performance of USB-DMAC 0 is good than USB-DMAC 1.

> >           (Please refer to the Table 64.1 of the datasheet.)

> >

> > So, I wrote dmas parameter in hsusb as the following:

> >

> >> > +               dmas = <&usb_dmac0 0>, <&usb_dmac0 1>,

> >> > +                      <&usb_dmac1 0>, <&usb_dmac1 1>;

> >

> > And, R-Car Gen2 has 4 DnFIFOs in HSUSB. to avoid complex handling for DnFIFOs,

> > the renesas_usbhs driver uses each DnFIFO as TX or RX direction (not bi-direction).

> > So, I wrote dma-names parameter as the following:

> >

> >> > +               dma-names = "rx0", "tx1", "rx2", "tx3";

> >

> > - D0FIFO as RX (Also it is connected to USB-DMAC 0: ch0)

> > - D1FIFO as TX (Also it is connected to USB-DMAC 0: ch1)

> > - D2FIFO as RX (Also it is connected to USB-DMAC 1: ch0)

> > - D3FIFO as TX (Also it is connected to USB-DMAC 1: ch1)

> 

> Thanks for the explanation!

> 

> Hence the "strange" numbering is a limitation of the driver, not of the

> hardware?


Thank you for the point! That's correct.

> In that case I think the DT should describe the hardware, not the driver

> limitation. As the FIFOs are bidirectional, there's just a one-to-one mapping

> of 4 DnFIFOs to 4 (2 channels x 2 DMACs) DMA channels.


I understood it.
(Sometimes I forget that the DT should describe the hardware...)

> Which DnFIFO/channel is used for TX and which is used for RX is to be chosen

> by the driver, and can be fixed (e.g. use even channels for RX, odd for

> TX, like the current situation).

> 

> What do you (and other people) think?


Thank you for the suggestion!
I will modify the renesas_usbhs driver.
Also I would like to revise the binding documentation as the following:

- dma-names : named "ch%u", where %u is the channel number ranging from zero
              to the number of channels (DnFIFOs) minus one.

Best regards,
Yoshihiro Shimoda

> Gr{oetje,eeting}s,

> 

>                         Geert

> 

> --

> Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

> 

> In personal conversations with technical people, I call myself a hacker. But

> when I'm talking to journalists I just say "programmer" or something like that.

>                                 -- Linus Torvalds
diff mbox

Patch

diff --git a/arch/arm/boot/dts/r8a7791.dtsi b/arch/arm/boot/dts/r8a7791.dtsi
index db3772e..5f20ad4 100644
--- a/arch/arm/boot/dts/r8a7791.dtsi
+++ b/arch/arm/boot/dts/r8a7791.dtsi
@@ -722,6 +722,9 @@ 
 		renesas,buswait = <4>;
 		phys = <&usb0 1>;
 		phy-names = "usb";
+		dmas = <&usb_dmac0 0>, <&usb_dmac0 1>,
+		       <&usb_dmac1 0>, <&usb_dmac1 1>;
+		dma-names = "rx0", "tx1", "rx2", "tx3";
 		status = "disabled";
 	};