# Copyright (c) 2021, STMicroelectronics
# SPDX-License-Identifier: Apache-2.0

description: |
  STM32 DMA controller (V2bis) for the stm32F0, stm32F1 and stm32L1 soc families

  This DMA controller includes several channels with different requests.
  All the requests ar ORed before entering the DMA, so that only one request
  must be enabled at a time.
  DMA clients connected to the STM32 DMA controller must use the format
  described in the dma.txt file, using a 2-cell specifier for each
  channel: a phandle to the DMA controller plus the following four integer cells:
    1. channel: the dma stream from 1 to <dma-requests>
    2. channel-config: A 32bit mask specifying the DMA channel configuration
    which is device dependent:
        -bit 6-7 : Direction  (see dma.h)
               0x0: MEM to MEM
               0x1: MEM to PERIPH
               0x2: PERIPH to MEM
               0x3: reserved for PERIPH to PERIPH
        -bit 9 : Peripheral Increment Address
               0x0: no address increment between transfers
               0x1: increment address between transfers
        -bit 10 : Memory Increment Address
               0x0: no address increment between transfers
               0x1: increment address between transfers
        -bit 11-12 : Peripheral data size
               0x0: Byte (8 bits)
               0x1: Half-word (16 bits)
               0x2: Word (32 bits)
               0x3: reserved
        -bit 13-14 : Memory data size
               0x0: Byte (8 bits)
               0x1: Half-word (16 bits)
               0x2: Word (32 bits)
               0x3: reserved
        -bit 15: Reserved
        -bit 16-17 : Priority level
               0x0: low
               0x1: medium
               0x2: high
               0x3: very high
  Example of dma node for stm32f103
     dma1: dma-controller@40020400 {
         compatible = "st,stm32-dma-v2bis";
         ...
         dma-requests = <7>;
         status = "disabled";
        };

  For the client part, example for stm32f103 on DMA1 instance
    Tx using channel 3
    Rx using channel 2
    spi1 {
     compatible = "st,stm32-spi";
     dmas = <&dma1 3 0x20440>,
            <&dma1 2 0x20480>;
     dma-names = "tx", "rx";
    };

compatible: "st,stm32-dma-v2bis"

include:
  - name: st,stm32-dma.yaml

properties:
    "#dma-cells":
      const: 2

# Parameter syntax of stm32 follows the dma client dts syntax
# in the Linux kernel declared in
# https://git.kernel.org/pub/scm/linux/kernel/git/devicetree/devicetree-rebasing.git/plain/Bindings/dma/st,stm32-dma.yaml

dma-cells:
  - channel
  - channel-config
