2022-12-06 04:53:08

by Vignesh Raghavendra

[permalink] [raw]
Subject: [PATCH 0/5] dmaengine: Add support for AM62A SoC DMAs

This series introduces support for various DMAs on TI's AM62A SoC under
K3 family of devices.

Apart from usual BCDMA and PKTDMA thats present on K3 family, AM62A has
a dedicated BCDMA for camera (CSI) with only RX DMA Channels.

Patch 1 adds bindings for this new DMA instance
Patch 2 fixes a bug that gets exposed due to RX only DMA
Patch 3 and 4 add base support for AM62A DMA
Patch 5 does BCDMA CSI RX specific enhancements.

Jai Luthra (1):
dmaengine: ti: k3-psil-am62a: Add AM62Ax PSIL and PDMA data

Vignesh Raghavendra (4):
dt-bindings: dma: ti: k3-bcdma: Add bindings for BCDMA CSI RX
dmaengine: ti: k3-udma: Fix BCDMA for case w/o BCHAN
dmaengine: ti: k3-udma: Add support for DMAs on AM62A SoC
dmaengine: ti: k3-udma: Add support for BCDMA CSI RX

.../devicetree/bindings/dma/ti/k3-bcdma.yaml | 87 +++++---
drivers/dma/ti/Makefile | 3 +-
drivers/dma/ti/k3-psil-am62a.c | 196 ++++++++++++++++++
drivers/dma/ti/k3-psil-priv.h | 1 +
drivers/dma/ti/k3-psil.c | 1 +
drivers/dma/ti/k3-udma.c | 39 +++-
6 files changed, 297 insertions(+), 30 deletions(-)
create mode 100644 drivers/dma/ti/k3-psil-am62a.c

--
2.38.1


2022-12-06 04:58:17

by Vignesh Raghavendra

[permalink] [raw]
Subject: [PATCH 5/5] dmaengine: ti: k3-udma: Add support for BCDMA CSI RX

BCDMA CSI RX present on AM62Ax SoC is a dedicated DMA for servicing
Camera Serial Interface (CSI) IP. Add support for the same.

Signed-off-by: Vignesh Raghavendra <[email protected]>
---
drivers/dma/ti/k3-udma.c | 37 ++++++++++++++++++++++++++++++++-----
1 file changed, 32 insertions(+), 5 deletions(-)

diff --git a/drivers/dma/ti/k3-udma.c b/drivers/dma/ti/k3-udma.c
index 19fce52a9b53..a8b497ed3f30 100644
--- a/drivers/dma/ti/k3-udma.c
+++ b/drivers/dma/ti/k3-udma.c
@@ -135,6 +135,7 @@ struct udma_match_data {
u32 flags;
u32 statictr_z_mask;
u8 burst_size[3];
+ struct udma_soc_data *soc_data;
};

struct udma_soc_data {
@@ -4295,6 +4296,25 @@ static struct udma_match_data j721e_mcu_data = {
},
};

+static struct udma_soc_data am62a_dmss_csi_soc_data = {
+ .oes = {
+ .bcdma_rchan_data = 0xe00,
+ .bcdma_rchan_ring = 0x1000,
+ },
+};
+
+static struct udma_match_data am62a_bcdma_csirx_data = {
+ .type = DMA_TYPE_BCDMA,
+ .psil_base = 0x3100,
+ .enable_memcpy_support = false,
+ .burst_size = {
+ TI_SCI_RM_UDMAP_CHAN_BURST_SIZE_64_BYTES, /* Normal Channels */
+ 0, /* No H Channels */
+ 0, /* No UH Channels */
+ },
+ .soc_data = &am62a_dmss_csi_soc_data,
+};
+
static struct udma_match_data am64_bcdma_data = {
.type = DMA_TYPE_BCDMA,
.psil_base = 0x2000, /* for tchan and rchan, not applicable to bchan */
@@ -4344,6 +4364,10 @@ static const struct of_device_id udma_of_match[] = {
.compatible = "ti,am64-dmss-pktdma",
.data = &am64_pktdma_data,
},
+ {
+ .compatible = "ti,am62a-dmss-bcdma-csirx",
+ .data = &am62a_bcdma_csirx_data,
+ },
{ /* Sentinel */ },
};

@@ -5272,12 +5296,15 @@ static int udma_probe(struct platform_device *pdev)
}
ud->match_data = match->data;

- soc = soc_device_match(k3_soc_devices);
- if (!soc) {
- dev_err(dev, "No compatible SoC found\n");
- return -ENODEV;
+ ud->soc_data = ud->match_data->soc_data;
+ if (!ud->soc_data) {
+ soc = soc_device_match(k3_soc_devices);
+ if (!soc) {
+ dev_err(dev, "No compatible SoC found\n");
+ return -ENODEV;
+ }
+ ud->soc_data = soc->data;
}
- ud->soc_data = soc->data;

ret = udma_get_mmrs(pdev, ud);
if (ret)
--
2.38.1

2022-12-06 04:59:23

by Vignesh Raghavendra

[permalink] [raw]
Subject: [PATCH 1/5] dt-bindings: dma: ti: k3-bcdma: Add bindings for BCDMA CSI RX

AM62A SoC has a dedicated BCDMA that serves Camera Serial Interface
(CSI) IP. Add new compatible for the same. Unlike system
BCDMA, this instance only has RX DMA channels and lack TX or block copy
channel. Thus make those properties optional. Additionally CSI RX has
independent power domain, add the binding for the same.

Signed-off-by: Vignesh Raghavendra <[email protected]>
---
.../devicetree/bindings/dma/ti/k3-bcdma.yaml | 87 ++++++++++++++-----
1 file changed, 63 insertions(+), 24 deletions(-)

diff --git a/Documentation/devicetree/bindings/dma/ti/k3-bcdma.yaml b/Documentation/devicetree/bindings/dma/ti/k3-bcdma.yaml
index 08627d91e607..d7b5adbb9b2e 100644
--- a/Documentation/devicetree/bindings/dma/ti/k3-bcdma.yaml
+++ b/Documentation/devicetree/bindings/dma/ti/k3-bcdma.yaml
@@ -32,9 +32,66 @@ allOf:
- $ref: /schemas/dma/dma-controller.yaml#
- $ref: /schemas/arm/keystone/ti,k3-sci-common.yaml#

+ - if:
+ properties:
+ compatible:
+ contains:
+ const: ti,am62a-dmss-bcdma-csirx
+ then:
+ properties:
+ ti,sci-rm-range-bchan: false
+ ti,sci-rm-range-tchan: false
+
+ reg:
+ maxItems: 3
+
+ reg-names:
+ items:
+ - const: gcfg
+ - const: rchanrt
+ - const: ringrt
+
+ required:
+ - compatible
+ - "#dma-cells"
+ - reg
+ - reg-names
+ - msi-parent
+ - ti,sci
+ - ti,sci-dev-id
+ - ti,sci-rm-range-rchan
+ - power-domains
+
+ else:
+ properties:
+ reg:
+ maxItems: 5
+
+ reg-names:
+ items:
+ - const: gcfg
+ - const: bchanrt
+ - const: rchanrt
+ - const: tchanrt
+ - const: ringrt
+
+ required:
+ - compatible
+ - "#dma-cells"
+ - reg
+ - reg-names
+ - msi-parent
+ - ti,sci
+ - ti,sci-dev-id
+ - ti,sci-rm-range-bchan
+ - ti,sci-rm-range-tchan
+ - ti,sci-rm-range-rchan
+
properties:
compatible:
- const: ti,am64-dmss-bcdma
+ enum:
+ - ti,am64-dmss-bcdma
+ - ti,am62a-dmss-bcdma-csirx

"#dma-cells":
const: 3
@@ -65,19 +122,13 @@ properties:

cell 3: ASEL value for the channel

- reg:
- maxItems: 5
-
- reg-names:
- items:
- - const: gcfg
- - const: bchanrt
- - const: rchanrt
- - const: tchanrt
- - const: ringrt
-
msi-parent: true

+ power-domains:
+ description:
+ Power domain if available
+ maxItems: 1
+
ti,asel:
$ref: /schemas/types.yaml#/definitions/uint32
description: ASEL value for non slave channels
@@ -115,18 +166,6 @@ properties:
items:
maximum: 0x3f

-required:
- - compatible
- - "#dma-cells"
- - reg
- - reg-names
- - msi-parent
- - ti,sci
- - ti,sci-dev-id
- - ti,sci-rm-range-bchan
- - ti,sci-rm-range-tchan
- - ti,sci-rm-range-rchan
-
unevaluatedProperties: false

examples:
--
2.38.1

2022-12-06 05:00:47

by Vignesh Raghavendra

[permalink] [raw]
Subject: [PATCH 4/5] dmaengine: ti: k3-udma: Add support for DMAs on AM62A SoC

AM62A SoC has a BCDMA and PKTDMA as systems DMAs for service various
peripherals similar to AM64 SoC. Add support for the same.

Signed-off-by: Vignesh Raghavendra <[email protected]>
---
drivers/dma/ti/k3-udma.c | 1 +
1 file changed, 1 insertion(+)

diff --git a/drivers/dma/ti/k3-udma.c b/drivers/dma/ti/k3-udma.c
index 791cf6354946..19fce52a9b53 100644
--- a/drivers/dma/ti/k3-udma.c
+++ b/drivers/dma/ti/k3-udma.c
@@ -4386,6 +4386,7 @@ static const struct soc_device_attribute k3_soc_devices[] = {
{ .family = "AM64X", .data = &am64_soc_data },
{ .family = "J721S2", .data = &j721e_soc_data},
{ .family = "AM62X", .data = &am64_soc_data },
+ { .family = "AM62AX", .data = &am64_soc_data },
{ /* sentinel */ }
};

--
2.38.1

2022-12-06 09:14:39

by Krzysztof Kozlowski

[permalink] [raw]
Subject: Re: [PATCH 1/5] dt-bindings: dma: ti: k3-bcdma: Add bindings for BCDMA CSI RX

On 06/12/2022 05:35, Vignesh Raghavendra wrote:
> AM62A SoC has a dedicated BCDMA that serves Camera Serial Interface
> (CSI) IP. Add new compatible for the same. Unlike system
> BCDMA, this instance only has RX DMA channels and lack TX or block copy
> channel. Thus make those properties optional. Additionally CSI RX has
> independent power domain, add the binding for the same.
>
> Signed-off-by: Vignesh Raghavendra <[email protected]>
> ---
> .../devicetree/bindings/dma/ti/k3-bcdma.yaml | 87 ++++++++++++++-----
> 1 file changed, 63 insertions(+), 24 deletions(-)
>
> diff --git a/Documentation/devicetree/bindings/dma/ti/k3-bcdma.yaml b/Documentation/devicetree/bindings/dma/ti/k3-bcdma.yaml
> index 08627d91e607..d7b5adbb9b2e 100644
> --- a/Documentation/devicetree/bindings/dma/ti/k3-bcdma.yaml
> +++ b/Documentation/devicetree/bindings/dma/ti/k3-bcdma.yaml
> @@ -32,9 +32,66 @@ allOf:
> - $ref: /schemas/dma/dma-controller.yaml#
> - $ref: /schemas/arm/keystone/ti,k3-sci-common.yaml#
>

When adding if:then:, please move entire allOf after "required:" part.

> + - if:
> + properties:
> + compatible:
> + contains:
> + const: ti,am62a-dmss-bcdma-csirx
> + then:
> + properties:
> + ti,sci-rm-range-bchan: false
> + ti,sci-rm-range-tchan: false
> +
> + reg:
> + maxItems: 3
> +
> + reg-names:
> + items:
> + - const: gcfg
> + - const: rchanrt
> + - const: ringrt

With my changes further this can be only "maxItems: 3"

> +
> + required:
> + - compatible
> + - "#dma-cells"
> + - reg
> + - reg-names
> + - msi-parent
> + - ti,sci
> + - ti,sci-dev-id
> + - ti,sci-rm-range-rchan
> + - power-domains
> +
> + else:
> + properties:
> + reg:
> + maxItems: 5
> +
> + reg-names:
> + items:
> + - const: gcfg
> + - const: bchanrt
> + - const: rchanrt
> + - const: tchanrt
> + - const: ringrt

With my changes further this can be only "minItems: 5"

> +
> + required:
> + - compatible
> + - "#dma-cells"
> + - reg
> + - reg-names
> + - msi-parent
> + - ti,sci
> + - ti,sci-dev-id
> + - ti,sci-rm-range-bchan
> + - ti,sci-rm-range-tchan
> + - ti,sci-rm-range-rchan
> +
> properties:
> compatible:
> - const: ti,am64-dmss-bcdma
> + enum:
> + - ti,am64-dmss-bcdma
> + - ti,am62a-dmss-bcdma-csirx

Keep some order, e.g. alphabetical. This reduces later conflicts on
simultaneous edits.

>
> "#dma-cells":
> const: 3
> @@ -65,19 +122,13 @@ properties:
>
> cell 3: ASEL value for the channel
>
> - reg:
> - maxItems: 5

Keep it here with widest constrains - minItems: 3, maxItems: 5

> -
> - reg-names:
> - items:
> - - const: gcfg
> - - const: bchanrt
> - - const: rchanrt
> - - const: tchanrt
> - - const: ringrt

Keep the list here with minItems: 3

> -
> msi-parent: true
>
> + power-domains:
> + description:
> + Power domain if available
> + maxItems: 1
> +
> ti,asel:
> $ref: /schemas/types.yaml#/definitions/uint32
> description: ASEL value for non slave channels
> @@ -115,18 +166,6 @@ properties:
> items:
> maximum: 0x3f
>
> -required:
> - - compatible
> - - "#dma-cells"
> - - reg
> - - reg-names
> - - msi-parent
> - - ti,sci
> - - ti,sci-dev-id
> - - ti,sci-rm-range-bchan
> - - ti,sci-rm-range-tchan
> - - ti,sci-rm-range-rchan

Keep required here. Customize it if needed in if:then:else.

> -
> unevaluatedProperties: false
>
> examples:

Best regards,
Krzysztof

2022-12-07 06:31:29

by Vignesh Raghavendra

[permalink] [raw]
Subject: Re: [PATCH 1/5] dt-bindings: dma: ti: k3-bcdma: Add bindings for BCDMA CSI RX

Hi Krzysztof,

On 06/12/22 14:02, Krzysztof Kozlowski wrote:
> On 06/12/2022 05:35, Vignesh Raghavendra wrote:
>> AM62A SoC has a dedicated BCDMA that serves Camera Serial Interface
>> (CSI) IP. Add new compatible for the same. Unlike system
>> BCDMA, this instance only has RX DMA channels and lack TX or block copy
>> channel. Thus make those properties optional. Additionally CSI RX has
>> independent power domain, add the binding for the same.
>>
>> Signed-off-by: Vignesh Raghavendra <[email protected]>
>> ---
>> .../devicetree/bindings/dma/ti/k3-bcdma.yaml | 87 ++++++++++++++-----
>> 1 file changed, 63 insertions(+), 24 deletions(-)
>>
>> diff --git a/Documentation/devicetree/bindings/dma/ti/k3-bcdma.yaml b/Documentation/devicetree/bindings/dma/ti/k3-bcdma.yaml
>> index 08627d91e607..d7b5adbb9b2e 100644
>> --- a/Documentation/devicetree/bindings/dma/ti/k3-bcdma.yaml
>> +++ b/Documentation/devicetree/bindings/dma/ti/k3-bcdma.yaml
>> @@ -32,9 +32,66 @@ allOf:
>> - $ref: /schemas/dma/dma-controller.yaml#
>> - $ref: /schemas/arm/keystone/ti,k3-sci-common.yaml#
>>
>
> When adding if:then:, please move entire allOf after "required:" part.

Sure, will do

>
>> + - if:
>> + properties:
>> + compatible:
>> + contains:
>> + const: ti,am62a-dmss-bcdma-csirx
>> + then:
>> + properties:
>> + ti,sci-rm-range-bchan: false
>> + ti,sci-rm-range-tchan: false
>> +
>> + reg:
>> + maxItems: 3
>> +
>> + reg-names:
>> + items:
>> + - const: gcfg
>> + - const: rchanrt
>> + - const: ringrt
>
> With my changes further this can be only "maxItems: 3"

Yes, but wont that mean any of the 3 reg-names out of the 5? Would it
not be better to further restrict specifically to above 3 reg-names (as
thats how the IP is)

>
>> +
>> + required:
>> + - compatible
>> + - "#dma-cells"
>> + - reg
>> + - reg-names
>> + - msi-parent
>> + - ti,sci
>> + - ti,sci-dev-id
>> + - ti,sci-rm-range-rchan
>> + - power-domains
>> +
>> + else:
>> + properties:
>> + reg:
>> + maxItems: 5
>> +
>> + reg-names:
>> + items:
>> + - const: gcfg
>> + - const: bchanrt
>> + - const: rchanrt
>> + - const: tchanrt
>> + - const: ringrt
>
> With my changes further this can be only "minItems: 5"

Ok.

>
>> +
>> + required:
>> + - compatible
>> + - "#dma-cells"
>> + - reg
>> + - reg-names
>> + - msi-parent
>> + - ti,sci
>> + - ti,sci-dev-id
>> + - ti,sci-rm-range-bchan
>> + - ti,sci-rm-range-tchan
>> + - ti,sci-rm-range-rchan
>> +
>> properties:
>> compatible:
>> - const: ti,am64-dmss-bcdma
>> + enum:
>> + - ti,am64-dmss-bcdma
>> + - ti,am62a-dmss-bcdma-csirx
>
> Keep some order, e.g. alphabetical. This reduces later conflicts on
> simultaneous edits.

Will fix!

>
>>
>> "#dma-cells":
>> const: 3
>> @@ -65,19 +122,13 @@ properties:
>>
>> cell 3: ASEL value for the channel
>>
>> - reg:
>> - maxItems: 5
>
> Keep it here with widest constrains - minItems: 3, maxItems: 5
>
>> -
>> - reg-names:
>> - items:
>> - - const: gcfg
>> - - const: bchanrt
>> - - const: rchanrt
>> - - const: tchanrt
>> - - const: ringrt
>
> Keep the list here with minItems: 3
>
>> -
>> msi-parent: true
>>
>> + power-domains:
>> + description:
>> + Power domain if available
>> + maxItems: 1
>> +
>> ti,asel:
>> $ref: /schemas/types.yaml#/definitions/uint32
>> description: ASEL value for non slave channels
>> @@ -115,18 +166,6 @@ properties:
>> items:
>> maximum: 0x3f
>>
>> -required:
>> - - compatible
>> - - "#dma-cells"
>> - - reg
>> - - reg-names
>> - - msi-parent
>> - - ti,sci
>> - - ti,sci-dev-id
>> - - ti,sci-rm-range-bchan
>> - - ti,sci-rm-range-tchan
>> - - ti,sci-rm-range-rchan
>
> Keep required here. Customize it if needed in if:then:else.

Got it, will fix accordingly...

>
>> -
>> unevaluatedProperties: false
>>
>> examples:
>
> Best regards,
> Krzysztof
>

Thanks for the review!


--
Regards
Vignesh

2022-12-07 08:43:56

by Krzysztof Kozlowski

[permalink] [raw]
Subject: Re: [PATCH 1/5] dt-bindings: dma: ti: k3-bcdma: Add bindings for BCDMA CSI RX

On 07/12/2022 07:09, Vignesh Raghavendra wrote:
> Hi Krzysztof,
>
> On 06/12/22 14:02, Krzysztof Kozlowski wrote:
>> On 06/12/2022 05:35, Vignesh Raghavendra wrote:
>>> AM62A SoC has a dedicated BCDMA that serves Camera Serial Interface
>>> (CSI) IP. Add new compatible for the same. Unlike system
>>> BCDMA, this instance only has RX DMA channels and lack TX or block copy
>>> channel. Thus make those properties optional. Additionally CSI RX has
>>> independent power domain, add the binding for the same.
>>>
>>> Signed-off-by: Vignesh Raghavendra <[email protected]>
>>> ---
>>> .../devicetree/bindings/dma/ti/k3-bcdma.yaml | 87 ++++++++++++++-----
>>> 1 file changed, 63 insertions(+), 24 deletions(-)
>>>
>>> diff --git a/Documentation/devicetree/bindings/dma/ti/k3-bcdma.yaml b/Documentation/devicetree/bindings/dma/ti/k3-bcdma.yaml
>>> index 08627d91e607..d7b5adbb9b2e 100644
>>> --- a/Documentation/devicetree/bindings/dma/ti/k3-bcdma.yaml
>>> +++ b/Documentation/devicetree/bindings/dma/ti/k3-bcdma.yaml
>>> @@ -32,9 +32,66 @@ allOf:
>>> - $ref: /schemas/dma/dma-controller.yaml#
>>> - $ref: /schemas/arm/keystone/ti,k3-sci-common.yaml#
>>>
>>
>> When adding if:then:, please move entire allOf after "required:" part.
>
> Sure, will do
>
>>
>>> + - if:
>>> + properties:
>>> + compatible:
>>> + contains:
>>> + const: ti,am62a-dmss-bcdma-csirx
>>> + then:
>>> + properties:
>>> + ti,sci-rm-range-bchan: false
>>> + ti,sci-rm-range-tchan: false
>>> +
>>> + reg:
>>> + maxItems: 3
>>> +
>>> + reg-names:
>>> + items:
>>> + - const: gcfg
>>> + - const: rchanrt
>>> + - const: ringrt
>>
>> With my changes further this can be only "maxItems: 3"
>
> Yes, but wont that mean any of the 3 reg-names out of the 5? Would it
> not be better to further restrict specifically to above 3 reg-names (as
> thats how the IP is)

I thought that first three entries are the same, but they are not, so
indeed keep it like you have it now.

>
>>
>>> +
>>> + required:
>>> + - compatible
>>> + - "#dma-cells"
>>> + - reg
>>> + - reg-names
>>> + - msi-parent
>>> + - ti,sci
>>> + - ti,sci-dev-id
>>> + - ti,sci-rm-range-rchan
>>> + - power-domains
>>> +
>>> + else:
>>> + properties:
>>> + reg:
>>> + maxItems: 5
>>> +
>>> + reg-names:
>>> + items:
>>> + - const: gcfg
>>> + - const: bchanrt
>>> + - const: rchanrt
>>> + - const: tchanrt
>>> + - const: ringrt
>>
>> With my changes further this can be only "minItems: 5"
>
> Ok.

I was wrong, keep it.

>
>>
>>> +
>>> + required:
>>> + - compatible
>>> + - "#dma-cells"
>>> + - reg
>>> + - reg-names
>>> + - msi-parent
>>> + - ti,sci
>>> + - ti,sci-dev-id
>>> + - ti,sci-rm-range-bchan
>>> + - ti,sci-rm-range-tchan
>>> + - ti,sci-rm-range-rchan
>>> +
>>> properties:
>>> compatible:
>>> - const: ti,am64-dmss-bcdma
>>> + enum:
>>> + - ti,am64-dmss-bcdma
>>> + - ti,am62a-dmss-bcdma-csirx
>>
>> Keep some order, e.g. alphabetical. This reduces later conflicts on
>> simultaneous edits.
>
> Will fix!
>
>>
>>>
>>> "#dma-cells":
>>> const: 3
>>> @@ -65,19 +122,13 @@ properties:
>>>
>>> cell 3: ASEL value for the channel
>>>
>>> - reg:
>>> - maxItems: 5
>>
>> Keep it here with widest constrains - minItems: 3, maxItems: 5
>>
>>> -
>>> - reg-names:
>>> - items:
>>> - - const: gcfg
>>> - - const: bchanrt
>>> - - const: rchanrt
>>> - - const: tchanrt
>>> - - const: ringrt
>>
>> Keep the list here with minItems: 3

So here minItems:3, maxItems:5


Best regards,
Krzysztof

2022-12-10 09:02:48

by Péter Ujfalusi

[permalink] [raw]
Subject: Re: [PATCH 5/5] dmaengine: ti: k3-udma: Add support for BCDMA CSI RX



On 12/6/22 06:35, Vignesh Raghavendra wrote:
> BCDMA CSI RX present on AM62Ax SoC is a dedicated DMA for servicing
> Camera Serial Interface (CSI) IP. Add support for the same.
>
> Signed-off-by: Vignesh Raghavendra <[email protected]>
> ---
> drivers/dma/ti/k3-udma.c | 37 ++++++++++++++++++++++++++++++++-----
> 1 file changed, 32 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/dma/ti/k3-udma.c b/drivers/dma/ti/k3-udma.c
> index 19fce52a9b53..a8b497ed3f30 100644
> --- a/drivers/dma/ti/k3-udma.c
> +++ b/drivers/dma/ti/k3-udma.c
> @@ -135,6 +135,7 @@ struct udma_match_data {
> u32 flags;
> u32 statictr_z_mask;
> u8 burst_size[3];
> + struct udma_soc_data *soc_data;
> };
>
> struct udma_soc_data {
> @@ -4295,6 +4296,25 @@ static struct udma_match_data j721e_mcu_data = {
> },
> };
>
> +static struct udma_soc_data am62a_dmss_csi_soc_data = {
> + .oes = {
> + .bcdma_rchan_data = 0xe00,
> + .bcdma_rchan_ring = 0x1000,
> + },
> +};
> +
> +static struct udma_match_data am62a_bcdma_csirx_data = {
> + .type = DMA_TYPE_BCDMA,
> + .psil_base = 0x3100,
> + .enable_memcpy_support = false,
> + .burst_size = {
> + TI_SCI_RM_UDMAP_CHAN_BURST_SIZE_64_BYTES, /* Normal Channels */
> + 0, /* No H Channels */
> + 0, /* No UH Channels */
> + },
> + .soc_data = &am62a_dmss_csi_soc_data,
> +};
> +
> static struct udma_match_data am64_bcdma_data = {
> .type = DMA_TYPE_BCDMA,
> .psil_base = 0x2000, /* for tchan and rchan, not applicable to bchan */
> @@ -4344,6 +4364,10 @@ static const struct of_device_id udma_of_match[] = {
> .compatible = "ti,am64-dmss-pktdma",
> .data = &am64_pktdma_data,
> },
> + {
> + .compatible = "ti,am62a-dmss-bcdma-csirx",
> + .data = &am62a_bcdma_csirx_data,
> + },
> { /* Sentinel */ },
> };
>
> @@ -5272,12 +5296,15 @@ static int udma_probe(struct platform_device *pdev)
> }
> ud->match_data = match->data;
>
> - soc = soc_device_match(k3_soc_devices);
> - if (!soc) {
> - dev_err(dev, "No compatible SoC found\n");
> - return -ENODEV;
> + ud->soc_data = ud->match_data->soc_data;
> + if (!ud->soc_data) {
> + soc = soc_device_match(k3_soc_devices);
> + if (!soc) {
> + dev_err(dev, "No compatible SoC found\n");
> + return -ENODEV;
> + }
> + ud->soc_data = soc->data;
> }
> - ud->soc_data = soc->data;

Right, the original design was based on the promise that a DMSS will
contain maximum 1 BCDMA and/or 1 PKTDMA, looks like now a DMSS have 2
BCDMAs?

The only possible issue I can see is that if in future SoCs the Output
Event Offsets got shuffled for the BCDMAs, but then a new compatible for
each SoC might just work.

Nice solution with minimal change! ;)

>
> ret = udma_get_mmrs(pdev, ud);
> if (ret)

--
Péter

2022-12-12 05:35:44

by Vignesh Raghavendra

[permalink] [raw]
Subject: Re: [PATCH 5/5] dmaengine: ti: k3-udma: Add support for BCDMA CSI RX



On 10/12/22 14:19, Péter Ujfalusi wrote:
>
>
> On 12/6/22 06:35, Vignesh Raghavendra wrote:
>> BCDMA CSI RX present on AM62Ax SoC is a dedicated DMA for servicing
>> Camera Serial Interface (CSI) IP. Add support for the same.
>>
>> Signed-off-by: Vignesh Raghavendra <[email protected]>
>> ---
>> drivers/dma/ti/k3-udma.c | 37 ++++++++++++++++++++++++++++++++-----
>> 1 file changed, 32 insertions(+), 5 deletions(-)
>>
>> diff --git a/drivers/dma/ti/k3-udma.c b/drivers/dma/ti/k3-udma.c
>> index 19fce52a9b53..a8b497ed3f30 100644
>> --- a/drivers/dma/ti/k3-udma.c
>> +++ b/drivers/dma/ti/k3-udma.c
>> @@ -135,6 +135,7 @@ struct udma_match_data {
>> u32 flags;
>> u32 statictr_z_mask;
>> u8 burst_size[3];
>> + struct udma_soc_data *soc_data;
>> };
>>
>> struct udma_soc_data {
>> @@ -4295,6 +4296,25 @@ static struct udma_match_data j721e_mcu_data = {
>> },
>> };
>>
>> +static struct udma_soc_data am62a_dmss_csi_soc_data = {
>> + .oes = {
>> + .bcdma_rchan_data = 0xe00,
>> + .bcdma_rchan_ring = 0x1000,
>> + },
>> +};
>> +
>> +static struct udma_match_data am62a_bcdma_csirx_data = {
>> + .type = DMA_TYPE_BCDMA,
>> + .psil_base = 0x3100,
>> + .enable_memcpy_support = false,
>> + .burst_size = {
>> + TI_SCI_RM_UDMAP_CHAN_BURST_SIZE_64_BYTES, /* Normal Channels */
>> + 0, /* No H Channels */
>> + 0, /* No UH Channels */
>> + },
>> + .soc_data = &am62a_dmss_csi_soc_data,
>> +};
>> +
>> static struct udma_match_data am64_bcdma_data = {
>> .type = DMA_TYPE_BCDMA,
>> .psil_base = 0x2000, /* for tchan and rchan, not applicable to bchan */
>> @@ -4344,6 +4364,10 @@ static const struct of_device_id udma_of_match[] = {
>> .compatible = "ti,am64-dmss-pktdma",
>> .data = &am64_pktdma_data,
>> },
>> + {
>> + .compatible = "ti,am62a-dmss-bcdma-csirx",
>> + .data = &am62a_bcdma_csirx_data,
>> + },
>> { /* Sentinel */ },
>> };
>>
>> @@ -5272,12 +5296,15 @@ static int udma_probe(struct platform_device *pdev)
>> }
>> ud->match_data = match->data;
>>
>> - soc = soc_device_match(k3_soc_devices);
>> - if (!soc) {
>> - dev_err(dev, "No compatible SoC found\n");
>> - return -ENODEV;
>> + ud->soc_data = ud->match_data->soc_data;
>> + if (!ud->soc_data) {
>> + soc = soc_device_match(k3_soc_devices);
>> + if (!soc) {
>> + dev_err(dev, "No compatible SoC found\n");
>> + return -ENODEV;
>> + }
>> + ud->soc_data = soc->data;
>> }
>> - ud->soc_data = soc->data;
>
> Right, the original design was based on the promise that a DMSS will
> contain maximum 1 BCDMA and/or 1 PKTDMA, looks like now a DMSS have 2
> BCDMAs?
>

Thats correct. IPs requiring dedicated B/W paths (its just CSI today)
would probably have dedicated BCDMA.

> The only possible issue I can see is that if in future SoCs the Output
> Event Offsets got shuffled for the BCDMAs, but then a new compatible for
> each SoC might just work.
>

We have ensured all BCDMAs for CSI follow the same offsets across the
SoCs. So, this compatible should work for all BCDMA_CSIs. But yes, this
can be expanded by adding new compatible is third BCDMA variant shows up
(doesn't exist today though).

> Nice solution with minimal change! ;)

Thanks! appreciate the review comments.


>
>>
>> ret = udma_get_mmrs(pdev, ud);
>> if (ret)
>

--
Regards
Vignesh