blob: cc5cd2237d02a9fb30a6bb81f9bbe4d1451ca4aa [file] [log] [blame]
# Copyright (c) 2019, Song Qiang <songqiang1304521@gmail.com>
# SPDX-License-Identifier: Apache-2.0
description: STM32 DMA controller
compatible: "st,stm32-dma"
include: dma-controller.yaml
properties:
reg:
required: true
interrupts:
required: true
st,mem2mem:
type: boolean
description: If the DMA controller V1 supports memory to memory transfer
"#dma-cells":
const: 4
# 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
- slot
- channel-config
- features
description: |
The STM32 DMA is a general-purpose direct memory access controller
capable of supporting 5 or 6 or 7 or 8 independent DMA channels.
Each channel can have up to 8 requests.
DMA clients connected to the STM32 DMA controller must use the format
described in the dma.txt file, using a four-cell specifier for each
channel: a phandle to the DMA controller plus the following four integer cells:
1. channel: the dma stream from 0 in V1 or 1 in V2 to <dma-requests>
2. slot: DMA periph request ID in DMA_V2 or DMAMUX, dma request in V1
3. 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: Peripheral Increment Offset Size (not USED for DMA V2)
0x0: offset size is linked to the peripheral bus width
0x1: offset size is fixed to 4 (32-bit alignment)
-bit 16-17 : Priority level
0x0: low
0x1: medium
0x2: high
0x3: very high
4. features: A 32bit bitfield value specifying DMA features
-bit 0-1: DMA FIFO threshold selection (not USED for DMA V2)
0x0: 1/4 full FIFO
0x1: 1/2 full FIFO
0x2: 3/4 full FIFO
0x3: full FIFO
examples for stm32wb55x
dma2: dma-controller@40020400 {
compatible = "st,stm32-dma";
...
st,mem2mem;
dma-requests = <7>;
status = "disabled";
label = "DMA_2";
};
For the client part, example for stm32f411 DMA V1 on DMA2 instance
Tx using stream 5 on channel 3 (stream 2 on channel 2 is also possible)
Rx using stream 2 on channel 3 (stream 0 on channel 3 is also possible)
spi1 {
dmas = <&dma2 5 3 0x28440 0x03>,
<&dma2 2 3 0x28480 0x03>;
dma-names = "tx", "rx";
};
For the client part, example for stm32l476 DMA V2 on DMA1 instance
Tx using channel 3 with request 1
Rx using channel 2 with request 1
spi1 {
compatible = "st,stm32-spi";
dmas = <&dma1 3 1 0x20440 0x04>,
<&dma1 2 1 0x20480 0x04>;
dma-names = "tx", "rx";
};