# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/dma/stericsson,dma40.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: ST-Ericsson DMA40 DMA Engine

maintainers:
  - Linus Walleij <linus.walleij@linaro.org>

allOf:
  - $ref: dma-controller.yaml#

properties:
  "#dma-cells":
    const: 3
    description: |
      The first cell is the unique device channel number as indicated by this
      table for DB8500 which is the only ASIC known to use DMA40:

      0:  SPI controller 0
      1:  SD/MMC controller 0 (unused)
      2:  SD/MMC controller 1 (unused)
      3:  SD/MMC controller 2 (unused)
      4:  I2C port 1
      5:  I2C port 3
      6:  I2C port 2
      7:  I2C port 4
      8:  Synchronous Serial Port SSP0
      9:  Synchronous Serial Port SSP1
      10: Multi-Channel Display Engine MCDE RX
      11: UART port 2
      12: UART port 1
      13: UART port 0
      14: Multirate Serial Port MSP2
      15: I2C port 0
      16: USB OTG in/out endpoints 7 & 15
      17: USB OTG in/out endpoints 6 & 14
      18: USB OTG in/out endpoints 5 & 13
      19: USB OTG in/out endpoints 4 & 12
      20: SLIMbus or HSI channel 0
      21: SLIMbus or HSI channel 1
      22: SLIMbus or HSI channel 2
      23: SLIMbus or HSI channel 3
      24: Multimedia DSP SXA0
      25: Multimedia DSP SXA1
      26: Multimedia DSP SXA2
      27: Multimedia DSP SXA3
      28: SD/MMC controller 2
      29: SD/MMC controller 0
      30: MSP port 1 on DB8500 v1, MSP port 3 on DB8500 v2
      31: MSP port 0 or SLIMbus channel 0
      32: SD/MMC controller 1
      33: SPI controller 2
      34: i2c3 RX2 TX2
      35: SPI controller 1
      36: USB OTG in/out endpoints 3 & 11
      37: USB OTG in/out endpoints 2 & 10
      38: USB OTG in/out endpoints 1 & 9
      39: USB OTG in/out endpoints 8
      40: SPI controller 3
      41: SD/MMC controller 3
      42: SD/MMC controller 4
      43: SD/MMC controller 5
      44: Multimedia DSP SXA4
      45: Multimedia DSP SXA5
      46: SLIMbus channel 8 or Multimedia DSP SXA6
      47: SLIMbus channel 9 or Multimedia DSP SXA7
      48: Crypto Accelerator 1
      49: Crypto Accelerator 1 TX or Hash Accelerator 1 TX
      50: Hash Accelerator 1 TX
      51: memcpy TX (to be used by the DMA driver for memcpy operations)
      52: SLIMbus or HSI channel 4
      53: SLIMbus or HSI channel 5
      54: SLIMbus or HSI channel 6
      55: SLIMbus or HSI channel 7
      56: memcpy (to be used by the DMA driver for memcpy operations)
      57: memcpy (to be used by the DMA driver for memcpy operations)
      58: memcpy (to be used by the DMA driver for memcpy operations)
      59: memcpy (to be used by the DMA driver for memcpy operations)
      60: memcpy (to be used by the DMA driver for memcpy operations)
      61: Crypto Accelerator 0
      62: Crypto Accelerator 0 TX or Hash Accelerator 0 TX
      63: Hash Accelerator 0 TX

      The second cell is the DMA request line number. This is only used when
      a fixed channel is allocated, and indicated by setting bit 3 in the
      flags field (see below).

      The third cell is a 32bit flags bitfield with the following possible
      bits set:
      0x00000001 (bit 0) - mode:
        Logical channel when unset
        Physical channel when set
      0x00000002 (bit 1) - direction:
        Memory to Device when unset
        Device to Memory when set
      0x00000004 (bit 2) - endianness:
        Little endian when unset
        Big endian when set
      0x00000008 (bit 3) - use fixed channel:
        Use automatic channel selection when unset
        Use DMA request line number when set
      0x00000010 (bit 4) - set channel as high priority:
        Normal priority when unset
        High priority when set

  compatible:
    items:
      - const: stericsson,db8500-dma40
      - const: stericsson,dma40

  reg:
    oneOf:
      - items:
          - description: DMA40 memory base
      - items:
          - description: DMA40 memory base
          - description: LCPA memory base, deprecated, use eSRAM pool instead
        deprecated: true


  reg-names:
    oneOf:
      - items:
          - const: base
      - items:
          - const: base
          - const: lcpa
        deprecated: true

  interrupts:
    maxItems: 1

  clocks:
    maxItems: 1

  sram:
    $ref: /schemas/types.yaml#/definitions/phandle-array
    description: A phandle array with inner size 1 (no arg cells).
      First phandle is the LCPA (Logical Channel Parameter Address) memory.
      Second phandle is the  LCLA (Logical Channel Link base Address) memory.
    maxItems: 2
    items:
      maxItems: 1

  memcpy-channels:
    $ref: /schemas/types.yaml#/definitions/uint32-array
    description: Array of u32 elements indicating which channels on the DMA
      engine are eligible for memcpy transfers

required:
  - "#dma-cells"
  - compatible
  - reg
  - interrupts
  - clocks
  - sram
  - memcpy-channels

additionalProperties: false

examples:
  - |
    #include <dt-bindings/interrupt-controller/irq.h>
    #include <dt-bindings/interrupt-controller/arm-gic.h>
    #include <dt-bindings/mfd/dbx500-prcmu.h>
    dma-controller@801c0000 {
        compatible = "stericsson,db8500-dma40", "stericsson,dma40";
        reg = <0x801c0000 0x1000>;
        reg-names = "base";
        sram = <&lcpa>, <&lcla>;
        interrupts = <GIC_SPI 25 IRQ_TYPE_LEVEL_HIGH>;
        #dma-cells = <3>;
        memcpy-channels = <56 57 58 59 60>;
        clocks = <&prcmu_clk PRCMU_DMACLK>;
    };
...
