18c2ecf20Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0-only
28c2ecf20Sopenharmony_ci%YAML 1.2
38c2ecf20Sopenharmony_ci---
48c2ecf20Sopenharmony_ci$id: http://devicetree.org/schemas/dma/snps,dma-spear1340.yaml#
58c2ecf20Sopenharmony_ci$schema: http://devicetree.org/meta-schemas/core.yaml#
68c2ecf20Sopenharmony_ci
78c2ecf20Sopenharmony_cititle: Synopsys Designware DMA Controller
88c2ecf20Sopenharmony_ci
98c2ecf20Sopenharmony_cimaintainers:
108c2ecf20Sopenharmony_ci  - Viresh Kumar <vireshk@kernel.org>
118c2ecf20Sopenharmony_ci  - Andy Shevchenko <andriy.shevchenko@linux.intel.com>
128c2ecf20Sopenharmony_ci
138c2ecf20Sopenharmony_ciallOf:
148c2ecf20Sopenharmony_ci  - $ref: "dma-controller.yaml#"
158c2ecf20Sopenharmony_ci
168c2ecf20Sopenharmony_ciproperties:
178c2ecf20Sopenharmony_ci  compatible:
188c2ecf20Sopenharmony_ci    const: snps,dma-spear1340
198c2ecf20Sopenharmony_ci
208c2ecf20Sopenharmony_ci  "#dma-cells":
218c2ecf20Sopenharmony_ci    minimum: 3
228c2ecf20Sopenharmony_ci    maximum: 4
238c2ecf20Sopenharmony_ci    description: |
248c2ecf20Sopenharmony_ci      First cell is a phandle pointing to the DMA controller. Second one is
258c2ecf20Sopenharmony_ci      the DMA request line number. Third cell is the memory master identifier
268c2ecf20Sopenharmony_ci      for transfers on dynamically allocated channel. Fourth cell is the
278c2ecf20Sopenharmony_ci      peripheral master identifier for transfers on an allocated channel. Fifth
288c2ecf20Sopenharmony_ci      cell is an optional mask of the DMA channels permitted to be allocated
298c2ecf20Sopenharmony_ci      for the corresponding client device.
308c2ecf20Sopenharmony_ci
318c2ecf20Sopenharmony_ci  reg:
328c2ecf20Sopenharmony_ci    maxItems: 1
338c2ecf20Sopenharmony_ci
348c2ecf20Sopenharmony_ci  interrupts:
358c2ecf20Sopenharmony_ci    maxItems: 1
368c2ecf20Sopenharmony_ci
378c2ecf20Sopenharmony_ci  clocks:
388c2ecf20Sopenharmony_ci    maxItems: 1
398c2ecf20Sopenharmony_ci
408c2ecf20Sopenharmony_ci  clock-names:
418c2ecf20Sopenharmony_ci    description: AHB interface reference clock.
428c2ecf20Sopenharmony_ci    const: hclk
438c2ecf20Sopenharmony_ci
448c2ecf20Sopenharmony_ci  dma-channels:
458c2ecf20Sopenharmony_ci    description: |
468c2ecf20Sopenharmony_ci      Number of DMA channels supported by the controller. In case if
478c2ecf20Sopenharmony_ci      not specified the driver will try to auto-detect this and
488c2ecf20Sopenharmony_ci      the rest of the optional parameters.
498c2ecf20Sopenharmony_ci    minimum: 1
508c2ecf20Sopenharmony_ci    maximum: 8
518c2ecf20Sopenharmony_ci
528c2ecf20Sopenharmony_ci  dma-requests:
538c2ecf20Sopenharmony_ci    minimum: 1
548c2ecf20Sopenharmony_ci    maximum: 16
558c2ecf20Sopenharmony_ci
568c2ecf20Sopenharmony_ci  dma-masters:
578c2ecf20Sopenharmony_ci    $ref: /schemas/types.yaml#definitions/uint32
588c2ecf20Sopenharmony_ci    description: |
598c2ecf20Sopenharmony_ci      Number of DMA masters supported by the controller. In case if
608c2ecf20Sopenharmony_ci      not specified the driver will try to auto-detect this and
618c2ecf20Sopenharmony_ci      the rest of the optional parameters.
628c2ecf20Sopenharmony_ci    minimum: 1
638c2ecf20Sopenharmony_ci    maximum: 4
648c2ecf20Sopenharmony_ci
658c2ecf20Sopenharmony_ci  chan_allocation_order:
668c2ecf20Sopenharmony_ci    $ref: /schemas/types.yaml#definitions/uint32
678c2ecf20Sopenharmony_ci    description: |
688c2ecf20Sopenharmony_ci      DMA channels allocation order specifier. Zero means ascending order
698c2ecf20Sopenharmony_ci      (first free allocated), while one - descending (last free allocated).
708c2ecf20Sopenharmony_ci    default: 0
718c2ecf20Sopenharmony_ci    enum: [0, 1]
728c2ecf20Sopenharmony_ci
738c2ecf20Sopenharmony_ci  chan_priority:
748c2ecf20Sopenharmony_ci    $ref: /schemas/types.yaml#definitions/uint32
758c2ecf20Sopenharmony_ci    description: |
768c2ecf20Sopenharmony_ci      DMA channels priority order. Zero means ascending channels priority
778c2ecf20Sopenharmony_ci      so the very first channel has the highest priority. While 1 means
788c2ecf20Sopenharmony_ci      descending priority (the last channel has the highest priority).
798c2ecf20Sopenharmony_ci    default: 0
808c2ecf20Sopenharmony_ci    enum: [0, 1]
818c2ecf20Sopenharmony_ci
828c2ecf20Sopenharmony_ci  block_size:
838c2ecf20Sopenharmony_ci    $ref: /schemas/types.yaml#definitions/uint32
848c2ecf20Sopenharmony_ci    description: Maximum block size supported by the DMA controller.
858c2ecf20Sopenharmony_ci    enum: [3, 7, 15, 31, 63, 127, 255, 511, 1023, 2047, 4095]
868c2ecf20Sopenharmony_ci
878c2ecf20Sopenharmony_ci  data-width:
888c2ecf20Sopenharmony_ci    $ref: /schemas/types.yaml#/definitions/uint32-array
898c2ecf20Sopenharmony_ci    description: Data bus width per each DMA master in bytes.
908c2ecf20Sopenharmony_ci    items:
918c2ecf20Sopenharmony_ci      maxItems: 4
928c2ecf20Sopenharmony_ci      items:
938c2ecf20Sopenharmony_ci        enum: [4, 8, 16, 32]
948c2ecf20Sopenharmony_ci
958c2ecf20Sopenharmony_ci  data_width:
968c2ecf20Sopenharmony_ci    $ref: /schemas/types.yaml#/definitions/uint32-array
978c2ecf20Sopenharmony_ci    deprecated: true
988c2ecf20Sopenharmony_ci    description: |
998c2ecf20Sopenharmony_ci      Data bus width per each DMA master in (2^n * 8) bits. This property is
1008c2ecf20Sopenharmony_ci      deprecated. It' usage is discouraged in favor of data-width one. Moreover
1018c2ecf20Sopenharmony_ci      the property incorrectly permits to define data-bus width of 8 and 16
1028c2ecf20Sopenharmony_ci      bits, which is impossible in accordance with DW DMAC IP-core data book.
1038c2ecf20Sopenharmony_ci    items:
1048c2ecf20Sopenharmony_ci      maxItems: 4
1058c2ecf20Sopenharmony_ci      items:
1068c2ecf20Sopenharmony_ci        enum:
1078c2ecf20Sopenharmony_ci          - 0 # 8 bits
1088c2ecf20Sopenharmony_ci          - 1 # 16 bits
1098c2ecf20Sopenharmony_ci          - 2 # 32 bits
1108c2ecf20Sopenharmony_ci          - 3 # 64 bits
1118c2ecf20Sopenharmony_ci          - 4 # 128 bits
1128c2ecf20Sopenharmony_ci          - 5 # 256 bits
1138c2ecf20Sopenharmony_ci        default: 0
1148c2ecf20Sopenharmony_ci
1158c2ecf20Sopenharmony_ci  multi-block:
1168c2ecf20Sopenharmony_ci    $ref: /schemas/types.yaml#/definitions/uint32-array
1178c2ecf20Sopenharmony_ci    description: |
1188c2ecf20Sopenharmony_ci      LLP-based multi-block transfer supported by hardware per
1198c2ecf20Sopenharmony_ci      each DMA channel.
1208c2ecf20Sopenharmony_ci    items:
1218c2ecf20Sopenharmony_ci      maxItems: 8
1228c2ecf20Sopenharmony_ci      items:
1238c2ecf20Sopenharmony_ci        enum: [0, 1]
1248c2ecf20Sopenharmony_ci        default: 1
1258c2ecf20Sopenharmony_ci
1268c2ecf20Sopenharmony_ci  snps,max-burst-len:
1278c2ecf20Sopenharmony_ci    $ref: /schemas/types.yaml#/definitions/uint32-array
1288c2ecf20Sopenharmony_ci    description: |
1298c2ecf20Sopenharmony_ci      Maximum length of the burst transactions supported by the controller.
1308c2ecf20Sopenharmony_ci      This property defines the upper limit of the run-time burst setting
1318c2ecf20Sopenharmony_ci      (CTLx.SRC_MSIZE/CTLx.DST_MSIZE fields) so the allowed burst length
1328c2ecf20Sopenharmony_ci      will be from 1 to max-burst-len words. It's an array property with one
1338c2ecf20Sopenharmony_ci      cell per channel in the units determined by the value set in the
1348c2ecf20Sopenharmony_ci      CTLx.SRC_TR_WIDTH/CTLx.DST_TR_WIDTH fields (data width).
1358c2ecf20Sopenharmony_ci    items:
1368c2ecf20Sopenharmony_ci      maxItems: 8
1378c2ecf20Sopenharmony_ci      items:
1388c2ecf20Sopenharmony_ci        enum: [4, 8, 16, 32, 64, 128, 256]
1398c2ecf20Sopenharmony_ci        default: 256
1408c2ecf20Sopenharmony_ci
1418c2ecf20Sopenharmony_ci  snps,dma-protection-control:
1428c2ecf20Sopenharmony_ci    $ref: /schemas/types.yaml#definitions/uint32
1438c2ecf20Sopenharmony_ci    description: |
1448c2ecf20Sopenharmony_ci      Bits one-to-one passed to the AHB HPROT[3:1] bus. Each bit setting
1458c2ecf20Sopenharmony_ci      indicates the following features: bit 0 - privileged mode,
1468c2ecf20Sopenharmony_ci      bit 1 - DMA is bufferable, bit 2 - DMA is cacheable.
1478c2ecf20Sopenharmony_ci    default: 0
1488c2ecf20Sopenharmony_ci    minimum: 0
1498c2ecf20Sopenharmony_ci    maximum: 7
1508c2ecf20Sopenharmony_ci
1518c2ecf20Sopenharmony_ciunevaluatedProperties: false
1528c2ecf20Sopenharmony_ci
1538c2ecf20Sopenharmony_cirequired:
1548c2ecf20Sopenharmony_ci  - compatible
1558c2ecf20Sopenharmony_ci  - "#dma-cells"
1568c2ecf20Sopenharmony_ci  - reg
1578c2ecf20Sopenharmony_ci  - interrupts
1588c2ecf20Sopenharmony_ci
1598c2ecf20Sopenharmony_ciexamples:
1608c2ecf20Sopenharmony_ci  - |
1618c2ecf20Sopenharmony_ci    dma-controller@fc000000 {
1628c2ecf20Sopenharmony_ci      compatible = "snps,dma-spear1340";
1638c2ecf20Sopenharmony_ci      reg = <0xfc000000 0x1000>;
1648c2ecf20Sopenharmony_ci      interrupt-parent = <&vic1>;
1658c2ecf20Sopenharmony_ci      interrupts = <12>;
1668c2ecf20Sopenharmony_ci
1678c2ecf20Sopenharmony_ci      dma-channels = <8>;
1688c2ecf20Sopenharmony_ci      dma-requests = <16>;
1698c2ecf20Sopenharmony_ci      dma-masters = <4>;
1708c2ecf20Sopenharmony_ci      #dma-cells = <3>;
1718c2ecf20Sopenharmony_ci
1728c2ecf20Sopenharmony_ci      chan_allocation_order = <1>;
1738c2ecf20Sopenharmony_ci      chan_priority = <1>;
1748c2ecf20Sopenharmony_ci      block_size = <0xfff>;
1758c2ecf20Sopenharmony_ci      data-width = <8 8>;
1768c2ecf20Sopenharmony_ci      multi-block = <0 0 0 0 0 0 0 0>;
1778c2ecf20Sopenharmony_ci      snps,max-burst-len = <16 16 4 4 4 4 4 4>;
1788c2ecf20Sopenharmony_ci    };
1798c2ecf20Sopenharmony_ci...
180