86 lines
3.4 KiB
YAML
86 lines
3.4 KiB
YAML
# 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
|
|
A name custom DMA flags for channel configuration is used
|
|
which is device dependent see stm32_dma.h:
|
|
-bit 5 : DMA cyclic mode config
|
|
0x0: STM32_DMA_MODE_NORMAL
|
|
0x1: STM32_DMA_MODE_CYCLIC
|
|
-bit 6-7 : Direction (see dma.h)
|
|
0x0: STM32_DMA_MEMORY_TO_MEMORY: MEM to MEM
|
|
0x1: STM32_DMA_MEMORY_TO_PERIPH: MEM to PERIPH
|
|
0x2: STM32_DMA_PERIPH_TO_MEMORY: PERIPH to MEM
|
|
0x3: reserved for PERIPH to PERIPH
|
|
-bit 9 : Peripheral Increment Address
|
|
0x0: STM32_DMA_PERIPH_NO_INC: no address increment between transfers
|
|
0x1: STM32_DMA_PERIPH_INC: increment address between transfers
|
|
-bit 10 : Memory Increment Address
|
|
0x0: STM32_DMA_MEM_NO_INC: no address increment between transfers
|
|
0x1: STM32_DMA_MEM_INC: increment address between transfers
|
|
-bit 11-12 : Peripheral data size
|
|
0x0: STM32_DMA_PERIPH_8BITS: Byte (8 bits)
|
|
0x1: STM32_DMA_PERIPH_16BITS: Half-word (16 bits)
|
|
0x2: STM32_DMA_PERIPH_32BITS: Word (32 bits)
|
|
0x3: reserved
|
|
-bit 13-14 : Memory data size
|
|
0x0: STM32_DMA_MEM_8BITS: Byte (8 bits)
|
|
0x1: STM32_DMA_MEM_16BITS: Half-word (16 bits)
|
|
0x2: STM32_DMA_MEM_32BITS: Word (32 bits)
|
|
0x3: reserved
|
|
-bit 15: Reserved
|
|
-bit 16-17 : Priority level
|
|
0x0: STM32_DMA_PRIORITY_LOW: low
|
|
0x1: STM32_DMA_PRIORITY_MEDIUM: medium
|
|
0x2: STM32_DMA_PRIORITY_HIGH: high
|
|
0x3: STM32_DMA_PRIORITY_VERY_HIGH: very high
|
|
|
|
Example of dma usual combination for peripheral transfer
|
|
#define STM32_DMA_PERIPH_TX (STM32_DMA_MEMORY_TO_PERIPH | STM32_DMA_MEM_INC)
|
|
#define STM32_DMA_PERIPH_RX (STM32_DMA_PERIPH_TO_MEMORY | STM32_DMA_MEM_INC)
|
|
|
|
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 (STM32_DMA_PERIPH_TX | STM32_DMA_PRIORITY_HIGH)>,
|
|
<&dma1 2 (STM32_DMA_PERIPH_RX | STM32_DMA_PRIORITY_HIGH)>;
|
|
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
|