2020-06-09 01:17:02

by Sugar Zhang

[permalink] [raw]
Subject: [PATCH v2 0/13] Patches to improve transfer efficiency for Rockchip SoCs.



Changes in v2:
- fix FATAL ERROR: Unable to parse input tree

Sugar Zhang (13):
dmaengine: pl330: Remove the burst limit for quirk 'NO-FLUSHP'
dmaengine: pl330: Add quirk 'arm,pl330-periph-burst'
dt-bindings: dma: pl330: Document the quirk 'arm,pl330-periph-burst'
ARM: dts: rk3036: Add 'arm,pl330-periph-burst' for dmac
ARM: dts: rk322x: Add 'arm,pl330-periph-burst' for dmac
ARM: dts: rk3288: Add 'arm,pl330-periph-burst' for dmac
ARM: dts: rk3xxx: Add 'arm,pl330-periph-burst' for dmac
ARM: dts: rv1108: Add 'arm,pl330-periph-burst' for dmac
arm64: dts: px30: Add 'arm,pl330-periph-burst' for dmac
arm64: dts: rk3308: Add 'arm,pl330-periph-burst' for dmac
arm64: dts: rk3328: Add 'arm,pl330-periph-burst' for dmac
arm64: dts: rk3368: Add 'arm,pl330-periph-burst' for dmac
arm64: dts: rk3399: Add 'arm,pl330-periph-burst' for dmac

.../devicetree/bindings/dma/arm-pl330.txt | 1 +
arch/arm/boot/dts/rk3036.dtsi | 1 +
arch/arm/boot/dts/rk322x.dtsi | 1 +
arch/arm/boot/dts/rk3288.dtsi | 3 ++
arch/arm/boot/dts/rk3xxx.dtsi | 3 ++
arch/arm/boot/dts/rv1108.dtsi | 1 +
arch/arm64/boot/dts/rockchip/px30.dtsi | 1 +
arch/arm64/boot/dts/rockchip/rk3308.dtsi | 2 +
arch/arm64/boot/dts/rockchip/rk3328.dtsi | 1 +
arch/arm64/boot/dts/rockchip/rk3368.dtsi | 2 +
arch/arm64/boot/dts/rockchip/rk3399.dtsi | 2 +
drivers/dma/pl330.c | 44 +++++++++++++++-------
12 files changed, 49 insertions(+), 13 deletions(-)

--
2.7.4




2020-06-09 01:17:13

by Sugar Zhang

[permalink] [raw]
Subject: [PATCH v2 02/13] dmaengine: pl330: Add quirk 'arm,pl330-periph-burst'

This patch adds the qurik to use busrt transfers only
for pl330 controller, even for request with a length of 1.

Although, the correct way should be: if the peripheral request
length is 1, the peripheral should use SINGLE request, and then
notify the dmac using SINGLE mode by src/dst_maxburst with 1.

For example, on the Rockchip SoCs, all the peripherals can use
SINGLE or BURST request by setting GRF registers. it is possible
that if these peripheral drivers are used only for Rockchip SoCs.
Unfortunately, it's not, such as dw uart, which is used so widely,
and we can't set src/dst_maxburst according to the SoCs' specific
to compatible with all the other SoCs.

So, for convenience, all the peripherals are set as BURST request
by default on the Rockchip SoCs. even for request with a length of 1.
the current pl330 driver will perform SINGLE transfer if the client's
maxburst is 1, which still should be working according to chapter 2.6.6
of datasheet which describe how DMAC performs SINGLE transfers for
a BURST request. unfortunately, it's broken on the Rockchip SoCs,
which support only matching transfers, such as BURST transfer for
BURST request, SINGLE transfer for SINGLE request.

Finaly, we add the quirk to specify pl330 to use burst transfers only.

Signed-off-by: Sugar Zhang <[email protected]>
---

Changes in v2: None

drivers/dma/pl330.c | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/drivers/dma/pl330.c b/drivers/dma/pl330.c
index ff0a91f..1941ec6 100644
--- a/drivers/dma/pl330.c
+++ b/drivers/dma/pl330.c
@@ -33,7 +33,8 @@
#define PL330_MAX_PERI 32
#define PL330_MAX_BURST 16

-#define PL330_QUIRK_BROKEN_NO_FLUSHP BIT(0)
+#define PL330_QUIRK_BROKEN_NO_FLUSHP BIT(0)
+#define PL330_QUIRK_PERIPH_BURST BIT(1)

enum pl330_cachectrl {
CCTRL0, /* Noncacheable and nonbufferable */
@@ -509,6 +510,10 @@ static struct pl330_of_quirks {
{
.quirk = "arm,pl330-broken-no-flushp",
.id = PL330_QUIRK_BROKEN_NO_FLUSHP,
+ },
+ {
+ .quirk = "arm,pl330-periph-burst",
+ .id = PL330_QUIRK_PERIPH_BURST,
}
};

@@ -1206,6 +1211,9 @@ static int _bursts(struct pl330_dmac *pl330, unsigned dry_run, u8 buf[],
int off = 0;
enum pl330_cond cond = BRST_LEN(pxs->ccr) > 1 ? BURST : SINGLE;

+ if (pl330->quirks & PL330_QUIRK_PERIPH_BURST)
+ cond = BURST;
+
switch (pxs->desc->rqtype) {
case DMA_MEM_TO_DEV:
/* fall through */
--
2.7.4



2020-06-09 01:17:30

by Sugar Zhang

[permalink] [raw]
Subject: [PATCH v2 03/13] dt-bindings: dma: pl330: Document the quirk 'arm,pl330-periph-burst'

This patch Adds the quirk 'arm,pl330-periph-burst' for pl330.

Signed-off-by: Sugar Zhang <[email protected]>
---

Changes in v2: None

Documentation/devicetree/bindings/dma/arm-pl330.txt | 1 +
1 file changed, 1 insertion(+)

diff --git a/Documentation/devicetree/bindings/dma/arm-pl330.txt b/Documentation/devicetree/bindings/dma/arm-pl330.txt
index 2c7fd19..315e901 100644
--- a/Documentation/devicetree/bindings/dma/arm-pl330.txt
+++ b/Documentation/devicetree/bindings/dma/arm-pl330.txt
@@ -16,6 +16,7 @@ Optional properties:
- dma-channels: contains the total number of DMA channels supported by the DMAC
- dma-requests: contains the total number of DMA requests supported by the DMAC
- arm,pl330-broken-no-flushp: quirk for avoiding to execute DMAFLUSHP
+ - arm,pl330-periph-burst: quirk for performing burst transfer only
- resets: contains an entry for each entry in reset-names.
See ../reset/reset.txt for details.
- reset-names: must contain at least "dma", and optional is "dma-ocp".
--
2.7.4



2020-06-09 01:19:55

by Sugar Zhang

[permalink] [raw]
Subject: [PATCH v2 04/13] ARM: dts: rk3036: Add 'arm,pl330-periph-burst' for dmac

This patch Add the quirk to specify to use burst transfer
for better compatible and higher performance.

Signed-off-by: Sugar Zhang <[email protected]>

---

Changes in v2:
- fix FATAL ERROR: Unable to parse input tree

arch/arm/boot/dts/rk3036.dtsi | 1 +
1 file changed, 1 insertion(+)

diff --git a/arch/arm/boot/dts/rk3036.dtsi b/arch/arm/boot/dts/rk3036.dtsi
index d9a0c9a2..0935670 100644
--- a/arch/arm/boot/dts/rk3036.dtsi
+++ b/arch/arm/boot/dts/rk3036.dtsi
@@ -67,6 +67,7 @@
<GIC_SPI 1 IRQ_TYPE_LEVEL_HIGH>;
#dma-cells = <1>;
arm,pl330-broken-no-flushp;
+ arm,pl330-periph-burst;
clocks = <&cru ACLK_DMAC2>;
clock-names = "apb_pclk";
};
--
2.7.4



2020-06-12 01:09:09

by Peter Geis

[permalink] [raw]
Subject: Re: [PATCH v2 0/13] Patches to improve transfer efficiency for Rockchip SoCs.

Good Evening,

I am currently testing this on the rk3399-rockpro64, and it appears to
fully fix the gmac problem without using txpbl.
PCIe also seems to be more stable at high load.
I need to conduct long term testing, but it seems to be doing very well.

Unfortunately it doesn't fix the rk3328 gmac controller.

Tested-by: Peter Geis <[email protected]>

On Mon, Jun 8, 2020 at 9:15 PM Sugar Zhang <[email protected]> wrote:
>
>
>
> Changes in v2:
> - fix FATAL ERROR: Unable to parse input tree
>
> Sugar Zhang (13):
> dmaengine: pl330: Remove the burst limit for quirk 'NO-FLUSHP'
> dmaengine: pl330: Add quirk 'arm,pl330-periph-burst'
> dt-bindings: dma: pl330: Document the quirk 'arm,pl330-periph-burst'
> ARM: dts: rk3036: Add 'arm,pl330-periph-burst' for dmac
> ARM: dts: rk322x: Add 'arm,pl330-periph-burst' for dmac
> ARM: dts: rk3288: Add 'arm,pl330-periph-burst' for dmac
> ARM: dts: rk3xxx: Add 'arm,pl330-periph-burst' for dmac
> ARM: dts: rv1108: Add 'arm,pl330-periph-burst' for dmac
> arm64: dts: px30: Add 'arm,pl330-periph-burst' for dmac
> arm64: dts: rk3308: Add 'arm,pl330-periph-burst' for dmac
> arm64: dts: rk3328: Add 'arm,pl330-periph-burst' for dmac
> arm64: dts: rk3368: Add 'arm,pl330-periph-burst' for dmac
> arm64: dts: rk3399: Add 'arm,pl330-periph-burst' for dmac
>
> .../devicetree/bindings/dma/arm-pl330.txt | 1 +
> arch/arm/boot/dts/rk3036.dtsi | 1 +
> arch/arm/boot/dts/rk322x.dtsi | 1 +
> arch/arm/boot/dts/rk3288.dtsi | 3 ++
> arch/arm/boot/dts/rk3xxx.dtsi | 3 ++
> arch/arm/boot/dts/rv1108.dtsi | 1 +
> arch/arm64/boot/dts/rockchip/px30.dtsi | 1 +
> arch/arm64/boot/dts/rockchip/rk3308.dtsi | 2 +
> arch/arm64/boot/dts/rockchip/rk3328.dtsi | 1 +
> arch/arm64/boot/dts/rockchip/rk3368.dtsi | 2 +
> arch/arm64/boot/dts/rockchip/rk3399.dtsi | 2 +
> drivers/dma/pl330.c | 44 +++++++++++++++-------
> 12 files changed, 49 insertions(+), 13 deletions(-)
>
> --
> 2.7.4
>
>
>
>
> _______________________________________________
> Linux-rockchip mailing list
> [email protected]
> http://lists.infradead.org/mailman/listinfo/linux-rockchip

2020-06-12 01:18:03

by Peter Geis

[permalink] [raw]
Subject: Re: [PATCH v2 0/13] Patches to improve transfer efficiency for Rockchip SoCs.

On Thu, Jun 11, 2020 at 9:06 PM Peter Geis <[email protected]> wrote:
>
> Good Evening,
>
> I am currently testing this on the rk3399-rockpro64, and it appears to
> fully fix the gmac problem without using txpbl.
> PCIe also seems to be more stable at high load.
> I need to conduct long term testing, but it seems to be doing very well.

Belay that, it does make it harder to trigger, but the issue still
remains on the rk3399.

>
> Unfortunately it doesn't fix the rk3328 gmac controller.
>
> Tested-by: Peter Geis <[email protected]>
>
> On Mon, Jun 8, 2020 at 9:15 PM Sugar Zhang <[email protected]> wrote:
> >
> >
> >
> > Changes in v2:
> > - fix FATAL ERROR: Unable to parse input tree
> >
> > Sugar Zhang (13):
> > dmaengine: pl330: Remove the burst limit for quirk 'NO-FLUSHP'
> > dmaengine: pl330: Add quirk 'arm,pl330-periph-burst'
> > dt-bindings: dma: pl330: Document the quirk 'arm,pl330-periph-burst'
> > ARM: dts: rk3036: Add 'arm,pl330-periph-burst' for dmac
> > ARM: dts: rk322x: Add 'arm,pl330-periph-burst' for dmac
> > ARM: dts: rk3288: Add 'arm,pl330-periph-burst' for dmac
> > ARM: dts: rk3xxx: Add 'arm,pl330-periph-burst' for dmac
> > ARM: dts: rv1108: Add 'arm,pl330-periph-burst' for dmac
> > arm64: dts: px30: Add 'arm,pl330-periph-burst' for dmac
> > arm64: dts: rk3308: Add 'arm,pl330-periph-burst' for dmac
> > arm64: dts: rk3328: Add 'arm,pl330-periph-burst' for dmac
> > arm64: dts: rk3368: Add 'arm,pl330-periph-burst' for dmac
> > arm64: dts: rk3399: Add 'arm,pl330-periph-burst' for dmac
> >
> > .../devicetree/bindings/dma/arm-pl330.txt | 1 +
> > arch/arm/boot/dts/rk3036.dtsi | 1 +
> > arch/arm/boot/dts/rk322x.dtsi | 1 +
> > arch/arm/boot/dts/rk3288.dtsi | 3 ++
> > arch/arm/boot/dts/rk3xxx.dtsi | 3 ++
> > arch/arm/boot/dts/rv1108.dtsi | 1 +
> > arch/arm64/boot/dts/rockchip/px30.dtsi | 1 +
> > arch/arm64/boot/dts/rockchip/rk3308.dtsi | 2 +
> > arch/arm64/boot/dts/rockchip/rk3328.dtsi | 1 +
> > arch/arm64/boot/dts/rockchip/rk3368.dtsi | 2 +
> > arch/arm64/boot/dts/rockchip/rk3399.dtsi | 2 +
> > drivers/dma/pl330.c | 44 +++++++++++++++-------
> > 12 files changed, 49 insertions(+), 13 deletions(-)
> >
> > --
> > 2.7.4
> >
> >
> >
> >
> > _______________________________________________
> > Linux-rockchip mailing list
> > [email protected]
> > http://lists.infradead.org/mailman/listinfo/linux-rockchip

2020-06-12 09:08:31

by Sugar Zhang

[permalink] [raw]
Subject: Re: [PATCH v2 0/13] Patches to improve transfer efficiency for Rockchip SoCs.

Hi Peter,

Thanks for testing! but, as I know, GMAC does not use the general
dma(pl330) for data transfer,

so, these patchs should not be helpful for your case.

在 2020/6/12 9:15, Peter Geis 写道:
> On Thu, Jun 11, 2020 at 9:06 PM Peter Geis <[email protected]> wrote:
>> Good Evening,
>>
>> I am currently testing this on the rk3399-rockpro64, and it appears to
>> fully fix the gmac problem without using txpbl.
>> PCIe also seems to be more stable at high load.
>> I need to conduct long term testing, but it seems to be doing very well.
> Belay that, it does make it harder to trigger, but the issue still
> remains on the rk3399.
>
>> Unfortunately it doesn't fix the rk3328 gmac controller.
>>
>> Tested-by: Peter Geis <[email protected]>
>>
>> On Mon, Jun 8, 2020 at 9:15 PM Sugar Zhang <[email protected]> wrote:
>>>
>>>
>>> Changes in v2:
>>> - fix FATAL ERROR: Unable to parse input tree
>>>
>>> Sugar Zhang (13):
>>> dmaengine: pl330: Remove the burst limit for quirk 'NO-FLUSHP'
>>> dmaengine: pl330: Add quirk 'arm,pl330-periph-burst'
>>> dt-bindings: dma: pl330: Document the quirk 'arm,pl330-periph-burst'
>>> ARM: dts: rk3036: Add 'arm,pl330-periph-burst' for dmac
>>> ARM: dts: rk322x: Add 'arm,pl330-periph-burst' for dmac
>>> ARM: dts: rk3288: Add 'arm,pl330-periph-burst' for dmac
>>> ARM: dts: rk3xxx: Add 'arm,pl330-periph-burst' for dmac
>>> ARM: dts: rv1108: Add 'arm,pl330-periph-burst' for dmac
>>> arm64: dts: px30: Add 'arm,pl330-periph-burst' for dmac
>>> arm64: dts: rk3308: Add 'arm,pl330-periph-burst' for dmac
>>> arm64: dts: rk3328: Add 'arm,pl330-periph-burst' for dmac
>>> arm64: dts: rk3368: Add 'arm,pl330-periph-burst' for dmac
>>> arm64: dts: rk3399: Add 'arm,pl330-periph-burst' for dmac
>>>
>>> .../devicetree/bindings/dma/arm-pl330.txt | 1 +
>>> arch/arm/boot/dts/rk3036.dtsi | 1 +
>>> arch/arm/boot/dts/rk322x.dtsi | 1 +
>>> arch/arm/boot/dts/rk3288.dtsi | 3 ++
>>> arch/arm/boot/dts/rk3xxx.dtsi | 3 ++
>>> arch/arm/boot/dts/rv1108.dtsi | 1 +
>>> arch/arm64/boot/dts/rockchip/px30.dtsi | 1 +
>>> arch/arm64/boot/dts/rockchip/rk3308.dtsi | 2 +
>>> arch/arm64/boot/dts/rockchip/rk3328.dtsi | 1 +
>>> arch/arm64/boot/dts/rockchip/rk3368.dtsi | 2 +
>>> arch/arm64/boot/dts/rockchip/rk3399.dtsi | 2 +
>>> drivers/dma/pl330.c | 44 +++++++++++++++-------
>>> 12 files changed, 49 insertions(+), 13 deletions(-)
>>>
>>> --
>>> 2.7.4
>>>
>>>
>>>
>>>
>>> _______________________________________________
>>> Linux-rockchip mailing list
>>> [email protected]
>>> http://lists.infradead.org/mailman/listinfo/linux-rockchip
>
--
Best Regards!
张学广/Sugar
福州瑞芯微电子股份有限公司
Fuzhou Rockchip Electronics Co.Ltd



2020-06-17 21:03:04

by Rob Herring (Arm)

[permalink] [raw]
Subject: Re: [PATCH v2 03/13] dt-bindings: dma: pl330: Document the quirk 'arm,pl330-periph-burst'

On Tue, 09 Jun 2020 09:14:17 +0800, Sugar Zhang wrote:
> This patch Adds the quirk 'arm,pl330-periph-burst' for pl330.
>
> Signed-off-by: Sugar Zhang <[email protected]>
> ---
>
> Changes in v2: None
>
> Documentation/devicetree/bindings/dma/arm-pl330.txt | 1 +
> 1 file changed, 1 insertion(+)
>

Acked-by: Rob Herring <[email protected]>

2020-06-24 08:20:33

by Vinod Koul

[permalink] [raw]
Subject: Re: [PATCH v2 02/13] dmaengine: pl330: Add quirk 'arm,pl330-periph-burst'

On 09-06-20, 09:14, Sugar Zhang wrote:
> This patch adds the qurik to use busrt transfers only

s/busrt/burst

> for pl330 controller, even for request with a length of 1.
>
> Although, the correct way should be: if the peripheral request
> length is 1, the peripheral should use SINGLE request, and then
> notify the dmac using SINGLE mode by src/dst_maxburst with 1.
>
> For example, on the Rockchip SoCs, all the peripherals can use
> SINGLE or BURST request by setting GRF registers. it is possible
> that if these peripheral drivers are used only for Rockchip SoCs.
> Unfortunately, it's not, such as dw uart, which is used so widely,
> and we can't set src/dst_maxburst according to the SoCs' specific
> to compatible with all the other SoCs.
>
> So, for convenience, all the peripherals are set as BURST request
> by default on the Rockchip SoCs. even for request with a length of 1.
> the current pl330 driver will perform SINGLE transfer if the client's
> maxburst is 1, which still should be working according to chapter 2.6.6
> of datasheet which describe how DMAC performs SINGLE transfers for
> a BURST request. unfortunately, it's broken on the Rockchip SoCs,

s/unfortunately/Unfortunately

> which support only matching transfers, such as BURST transfer for
> BURST request, SINGLE transfer for SINGLE request.
>
> Finaly, we add the quirk to specify pl330 to use burst transfers only.

s/Finaly/Finally

Below looks fine, pls reorder the series and have binding patch come
first and then the use of binding. Below looks fine though

--
~Vinod