1# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
2# Copyright (C) 2020 Texas Instruments Incorporated
3# Author: Peter Ujfalusi <peter.ujfalusi@ti.com>
4%YAML 1.2
5---
6$id: http://devicetree.org/schemas/dma/ti/k3-bcdma.yaml#
7$schema: http://devicetree.org/meta-schemas/core.yaml#
8
9title: Texas Instruments K3 DMSS BCDMA
10
11maintainers:
12  - Peter Ujfalusi <peter.ujfalusi@gmail.com>
13
14description: |
15  The Block Copy DMA (BCDMA) is intended to perform similar functions as the TR
16  mode channels of K3 UDMA-P.
17  BCDMA includes block copy channels and Split channels.
18
19  Block copy channels mainly used for memory to memory transfers, but with
20  optional triggers a block copy channel can service peripherals by accessing
21  directly to memory mapped registers or area.
22
23  Split channels can be used to service PSI-L based peripherals.
24  The peripherals can be PSI-L native or legacy, non PSI-L native peripherals
25  with PDMAs. PDMA is tasked to act as a bridge between the PSI-L fabric and the
26  legacy peripheral.
27
28  PDMAs can be configured via BCDMA split channel's peer registers to match with
29  the configuration of the legacy peripheral.
30
31allOf:
32  - $ref: /schemas/dma/dma-controller.yaml#
33  - $ref: /schemas/arm/keystone/ti,k3-sci-common.yaml#
34
35properties:
36  compatible:
37    const: ti,am64-dmss-bcdma
38
39  "#dma-cells":
40    const: 3
41    description: |
42      cell 1: type of the BCDMA channel to be used to service the peripheral:
43        0 - split channel
44        1 - block copy channel using global trigger 1
45        2 - block copy channel using global trigger 2
46        3 - block copy channel using local trigger
47
48      cell 2: parameter for the channel:
49        if cell 1 is 0 (split channel):
50          PSI-L thread ID of the remote (to BCDMA) end.
51          Valid ranges for thread ID depends on the data movement direction:
52          for source thread IDs (rx): 0 - 0x7fff
53          for destination thread IDs (tx): 0x8000 - 0xffff
54
55          Please refer to the device documentation for the PSI-L thread map and
56          also the PSI-L peripheral chapter for the correct thread ID.
57        if cell 1 is 1 or 2 (block copy channel using global trigger):
58          Unused, ignored
59
60          The trigger must be configured for the channel externally to BCDMA,
61          channels using global triggers should not be requested directly, but
62          via DMA event router.
63        if cell 1 is 3 (block copy channel using local trigger):
64          bchan number of the locally triggered channel
65
66      cell 3: ASEL value for the channel
67
68  reg:
69    maxItems: 5
70
71  reg-names:
72    items:
73      - const: gcfg
74      - const: bchanrt
75      - const: rchanrt
76      - const: tchanrt
77      - const: ringrt
78
79  msi-parent: true
80
81  ti,asel:
82    $ref: /schemas/types.yaml#/definitions/uint32
83    description: ASEL value for non slave channels
84
85  ti,sci-rm-range-bchan:
86    $ref: /schemas/types.yaml#/definitions/uint32-array
87    description: |
88      Array of BCDMA block-copy channel resource subtypes for resource
89      allocation for this host
90    minItems: 1
91    # Should be enough
92    maxItems: 255
93    items:
94      maximum: 0x3f
95
96  ti,sci-rm-range-tchan:
97    $ref: /schemas/types.yaml#/definitions/uint32-array
98    description: |
99      Array of BCDMA split tx channel resource subtypes for resource allocation
100      for this host
101    minItems: 1
102    # Should be enough
103    maxItems: 255
104    items:
105      maximum: 0x3f
106
107  ti,sci-rm-range-rchan:
108    $ref: /schemas/types.yaml#/definitions/uint32-array
109    description: |
110      Array of BCDMA split rx channel resource subtypes for resource allocation
111      for this host
112    minItems: 1
113    # Should be enough
114    maxItems: 255
115    items:
116      maximum: 0x3f
117
118required:
119  - compatible
120  - "#dma-cells"
121  - reg
122  - reg-names
123  - msi-parent
124  - ti,sci
125  - ti,sci-dev-id
126  - ti,sci-rm-range-bchan
127  - ti,sci-rm-range-tchan
128  - ti,sci-rm-range-rchan
129
130unevaluatedProperties: false
131
132examples:
133  - |+
134    cbass_main {
135        #address-cells = <2>;
136        #size-cells = <2>;
137
138        main_dmss {
139            compatible = "simple-mfd";
140            #address-cells = <2>;
141            #size-cells = <2>;
142            dma-ranges;
143            ranges;
144
145            ti,sci-dev-id = <25>;
146
147            main_bcdma: dma-controller@485c0100 {
148                compatible = "ti,am64-dmss-bcdma";
149
150                reg = <0x0 0x485c0100 0x0 0x100>,
151                      <0x0 0x4c000000 0x0 0x20000>,
152                      <0x0 0x4a820000 0x0 0x20000>,
153                      <0x0 0x4aa40000 0x0 0x20000>,
154                      <0x0 0x4bc00000 0x0 0x100000>;
155                reg-names = "gcfg", "bchanrt", "rchanrt", "tchanrt", "ringrt";
156                msi-parent = <&inta_main_dmss>;
157                #dma-cells = <3>;
158
159                ti,sci = <&dmsc>;
160                ti,sci-dev-id = <26>;
161
162                ti,sci-rm-range-bchan = <0x20>; /* BLOCK_COPY_CHAN */
163                ti,sci-rm-range-rchan = <0x21>; /* SPLIT_TR_RX_CHAN */
164                ti,sci-rm-range-tchan = <0x22>; /* SPLIT_TR_TX_CHAN */
165            };
166        };
167    };
168