This is a dedicated patchset of Allwinner V3s DMA support, which used
to be part of the audio codec support patchset.
It's a derivation of the DMA part of v3 of the codec patchset.
Icenowy Zheng (2):
dmaengine: sun6i: make gate bit in sun8i's DMA engines a common quirk
dmaengine: sun6i: support V3s SoC variant
.../devicetree/bindings/dma/sun6i-dma.txt | 1 +
drivers/dma/sun6i-dma.c | 33 +++++++++++++++++-----
2 files changed, 27 insertions(+), 7 deletions(-)
--
2.12.2
From: Icenowy Zheng <redacted>
Originally we enable a special gate bit when the compatible indicates
A23/33.
But according to BSP sources and user manuals, more SoCs will need this
gate bit.
So make it a common quirk configured in the config struct.
Signed-off-by: Icenowy Zheng <redacted>
---
Changes since original codec patchset v3:
- Refactored comments to cover some words found in official documents.
- Removed the comments when toggling the gate bit.
drivers/dma/sun6i-dma.c | 20 +++++++++++++-------
1 file changed, 13 insertions(+), 7 deletions(-)
From: Icenowy Zheng <redacted>
Allwinner V3s has a DMA engine similar to the ones from A31, but with
fewer channels and DRQs.
Add support for it.
Signed-off-by: Icenowy Zheng <redacted>
Acked-by: Chen-Yu Tsai <redacted>
Acked-by: Rob Herring <robh@kernel.org>
---
Changes since the original codec patchset v3:
- Added Rob's ACK.
Documentation/devicetree/bindings/dma/sun6i-dma.txt | 1 +
drivers/dma/sun6i-dma.c | 13 +++++++++++++
2 files changed, 14 insertions(+)
@@ -9,6 +9,7 @@ Required properties: "allwinner,sun8i-a23-dma" "allwinner,sun8i-a83t-dma" "allwinner,sun8i-h3-dma"+ "allwinner,sun8i-v3s-dma" - reg: Should contain the registers base address and length - interrupts: Should contain a reference to the interrupt used by this device - clocks: Should contain a reference to the parent AHB clock
On Mon, Jun 5, 2017 at 8:33 PM, Icenowy Zheng [off-list ref] wrote:
From: Icenowy Zheng <redacted>
Originally we enable a special gate bit when the compatible indicates
A23/33.
But according to BSP sources and user manuals, more SoCs will need this
gate bit.
So make it a common quirk configured in the config struct.
Signed-off-by: Icenowy Zheng <redacted>
On Mon, Jun 05, 2017 at 08:33:47PM +0800, Icenowy Zheng wrote:
quoted hunk
From: Icenowy Zheng <redacted>
Originally we enable a special gate bit when the compatible indicates
A23/33.
But according to BSP sources and user manuals, more SoCs will need this
gate bit.
So make it a common quirk configured in the config struct.
Signed-off-by: Icenowy Zheng <redacted>
---
Changes since original codec patchset v3:
- Refactored comments to cover some words found in official documents.
- Removed the comments when toggling the gate bit.
drivers/dma/sun6i-dma.c | 20 +++++++++++++-------
1 file changed, 13 insertions(+), 7 deletions(-)
@@ -1174,13 +1186,7 @@ static int sun6i_dma_probe(struct platform_device *pdev) goto err_dma_unregister; }- /*- * sun8i variant requires us to toggle a dma gating register,- * as seen in Allwinner's SDK. This register is not documented- * in the A23 user manual.- */- if (of_device_is_compatible(pdev->dev.of_node,- "allwinner,sun8i-a23-dma"))+ if (sdc->cfg->gate_needed) writel(SUN8I_DMA_GATE_ENABLE, sdc->base + SUN8I_DMA_GATE); return 0;
On Mon, Jun 05, 2017 at 08:33:47PM +0800, Icenowy Zheng wrote:
quoted
From: Icenowy Zheng <redacted>
Originally we enable a special gate bit when the compatible indicates
A23/33.
But according to BSP sources and user manuals, more SoCs will need
this
quoted
gate bit.
So make it a common quirk configured in the config struct.
Signed-off-by: Icenowy Zheng <redacted>
---
Changes since original codec patchset v3:
- Refactored comments to cover some words found in official
documents.
quoted
- Removed the comments when toggling the gate bit.
drivers/dma/sun6i-dma.c | 20 +++++++++++++-------
1 file changed, 13 insertions(+), 7 deletions(-)
+ * bit (bit 2 at register 0x20) is present.
+ * It's named "DMA MCLK interface circuit auto gating bit" in the
+ * documents, and the footnote of this register says that this bit
+ * should be set up when initializing the DMA controller.
+ * Allwinner A23/A33 user manuals do not have this bit documented,
+ * however these SoCs really have and need this bit, as seen in the
+ * BSP kernel source code.
+ */
+ bool gate_needed;
Since this is a hw property, why is this not added as an optional DT
property?
As it's SoC-specified.
Some SoCs need it, and some don't.
SoC info is in compatible, so there's no reason to make it a property.
@@ -1174,13 +1186,7 @@ static int sun6i_dma_probe(struct
platform_device *pdev)
quoted
goto err_dma_unregister;
}
- /*
- * sun8i variant requires us to toggle a dma gating register,
- * as seen in Allwinner's SDK. This register is not documented
- * in the A23 user manual.
- */
- if (of_device_is_compatible(pdev->dev.of_node,
- "allwinner,sun8i-a23-dma"))
+ if (sdc->cfg->gate_needed)
writel(SUN8I_DMA_GATE_ENABLE, sdc->base + SUN8I_DMA_GATE);
return 0;
--
2.12.2
On Mon, Jun 05, 2017 at 08:33:47PM +0800, Icenowy Zheng wrote:
quoted
From: Icenowy Zheng <redacted>
Originally we enable a special gate bit when the compatible indicates
A23/33.
But according to BSP sources and user manuals, more SoCs will need
this
quoted
gate bit.
So make it a common quirk configured in the config struct.
Signed-off-by: Icenowy Zheng <redacted>
---
Changes since original codec patchset v3:
- Refactored comments to cover some words found in official
documents.
quoted
- Removed the comments when toggling the gate bit.
drivers/dma/sun6i-dma.c | 20 +++++++++++++-------
1 file changed, 13 insertions(+), 7 deletions(-)
+ * bit (bit 2 at register 0x20) is present.
+ * It's named "DMA MCLK interface circuit auto gating bit" in the
+ * documents, and the footnote of this register says that this bit
+ * should be set up when initializing the DMA controller.
+ * Allwinner A23/A33 user manuals do not have this bit documented,
+ * however these SoCs really have and need this bit, as seen in the
+ * BSP kernel source code.
+ */
+ bool gate_needed;
Since this is a hw property, why is this not added as an optional DT
property?
As it's SoC-specified.
Some SoCs need it, and some don't.
and that is the reason it should be a property
SoC info is in compatible, so there's no reason to make it a property.
that's why it would need to be optional for the SoC's that needs these..
@@ -1174,13 +1186,7 @@ static int sun6i_dma_probe(struct
platform_device *pdev)
quoted
goto err_dma_unregister;
}
- /*
- * sun8i variant requires us to toggle a dma gating register,
- * as seen in Allwinner's SDK. This register is not documented
- * in the A23 user manual.
- */
- if (of_device_is_compatible(pdev->dev.of_node,
- "allwinner,sun8i-a23-dma"))
+ if (sdc->cfg->gate_needed)
writel(SUN8I_DMA_GATE_ENABLE, sdc->base + SUN8I_DMA_GATE);
return 0;
--
2.12.2
On Mon, Jun 05, 2017 at 08:33:47PM +0800, Icenowy Zheng wrote:
quoted
From: Icenowy Zheng <redacted>
Originally we enable a special gate bit when the compatible
indicates
quoted
quoted
quoted
A23/33.
But according to BSP sources and user manuals, more SoCs will need
this
quoted
gate bit.
So make it a common quirk configured in the config struct.
Signed-off-by: Icenowy Zheng <redacted>
---
Changes since original codec patchset v3:
- Refactored comments to cover some words found in official
documents.
quoted
- Removed the comments when toggling the gate bit.
drivers/dma/sun6i-dma.c | 20 +++++++++++++-------
1 file changed, 13 insertions(+), 7 deletions(-)
Since this is a hw property, why is this not added as an optional DT
property?
As it's SoC-specified.
Some SoCs need it, and some don't.
and that is the reason it should be a property
quoted
SoC info is in compatible, so there's no reason to make it a
property.
that's why it would need to be optional for the SoC's that needs
these..
I don't think it proper to add block-specified properties
that can be bound to compatible.
I added Rob Herring to the recipient list.
Rob, do you think this can be added as a property?
This is SoC-specific and compatibles are also SoC-specific.
@@ -1174,13 +1186,7 @@ static int sun6i_dma_probe(struct
platform_device *pdev)
quoted
goto err_dma_unregister;
}
- /*
- * sun8i variant requires us to toggle a dma gating register,
- * as seen in Allwinner's SDK. This register is not documented
- * in the A23 user manual.
- */
- if (of_device_is_compatible(pdev->dev.of_node,
- "allwinner,sun8i-a23-dma"))
+ if (sdc->cfg->gate_needed)
writel(SUN8I_DMA_GATE_ENABLE, sdc->base + SUN8I_DMA_GATE);
return 0;
--
2.12.2
From: Maxime Ripard <hidden> Date: 2017-06-14 09:05:01
On Wed, Jun 14, 2017 at 02:15:29PM +0530, Vinod Koul wrote:
quoted
SoC info is in compatible, so there's no reason to make it a property.
that's why it would need to be optional for the SoC's that needs these..
There's nothing optional about that behaviour, it's mandatory for the
SoC that need it, and useless on the SoC that don't.
Plus, that would require changing the DT binding, which isn't
something we can do.
Maxime
--
Maxime Ripard, Free Electrons
Embedded Linux and Kernel engineering
http://free-electrons.com
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 801 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20170614/803c9893/attachment.sig>
On Wed, Jun 14, 2017 at 11:04:39AM +0200, Maxime Ripard wrote:
On Wed, Jun 14, 2017 at 02:15:29PM +0530, Vinod Koul wrote:
quoted
quoted
SoC info is in compatible, so there's no reason to make it a property.
that's why it would need to be optional for the SoC's that needs these..
There's nothing optional about that behaviour, it's mandatory for the
SoC that need it, and useless on the SoC that don't.
And why should kernel put strings for each hw behaviour. I am expecting DT
to tell me if this SoC is a special case or not and kernel shall handle
accordingly
Plus, that would require changing the DT binding, which isn't
something we can do.
Any reason why bindings can't change..? I though this was support for new
SoC...
--
~Vinod
On Wed, Jun 14, 2017 at 11:04:39AM +0200, Maxime Ripard wrote:
quoted
On Wed, Jun 14, 2017 at 02:15:29PM +0530, Vinod Koul wrote:
quoted
quoted
SoC info is in compatible, so there's no reason to make it a
property.
quoted
quoted
that's why it would need to be optional for the SoC's that needs
these..
quoted
There's nothing optional about that behaviour, it's mandatory for the
SoC that need it, and useless on the SoC that don't.
And why should kernel put strings for each hw behaviour. I am expecting
DT
to tell me if this SoC is a special case or not and kernel shall handle
accordingly
I don't think this kind of behavior should be described in DT.
Rob, do you agree?
quoted
Plus, that would require changing the DT binding, which isn't
something we can do.
Any reason why bindings can't change..? I though this was support for
new
SoC...
This is a behavior that exists on a SoC that is already
supported (A23/A33).
From: Maxime Ripard <hidden> Date: 2017-06-20 08:45:31
On Thu, Jun 15, 2017 at 09:24:08AM +0530, Vinod Koul wrote:
On Wed, Jun 14, 2017 at 11:04:39AM +0200, Maxime Ripard wrote:
quoted
On Wed, Jun 14, 2017 at 02:15:29PM +0530, Vinod Koul wrote:
quoted
quoted
SoC info is in compatible, so there's no reason to make it a property.
that's why it would need to be optional for the SoC's that needs these..
There's nothing optional about that behaviour, it's mandatory for the
SoC that need it, and useless on the SoC that don't.
And why should kernel put strings for each hw behaviour.
You will have strings in the kernel for each hw behaviour,
disregarding on whether you base the behaviour on the compatible or a
set of properties. In fact, you will have *much* more strings in the
kernel in the latter case.
I am expecting DT to tell me if this SoC is a special case or not
and kernel shall handle accordingly
How is this not the case here?
The DT tells you that this SoC is a special case through a compatible
already.
quoted
Plus, that would require changing the DT binding, which isn't
something we can do.
Any reason why bindings can't change..? I though this was support for new
SoC...
No, this is a rework of an existing code to support a new SoC. The
code is already there, and the binding too. It has been for 3 years.
Maxime
--
Maxime Ripard, Free Electrons
Embedded Linux and Kernel engineering
http://free-electrons.com
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 801 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20170620/88a09bac/attachment.sig>