# Copyright (c) 2023 Jeroen van Dooren # SPDX-License-Identifier: Apache-2.0 description: | STM32 BDMA controller The STM32 BDMA is a general-purpose direct memory access controller capable of supporting 5 or 6 or 7 or 8 independent BDMA channels. Each channel can have up to 8 requests. BDMA clients connected to the STM32 BDMA controller must use the format described in the dma.txt file, using a four-cell specifier for each channel: a phandle to the BDMA controller plus the following four integer cells: 1. channel: the bdma stream from 0 to 2. slot: bdma request 3. channel-config: A 32bit mask specifying the BDMA 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 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 examples for stm32h7 bdma1: dma-controller@58025400 { compatible = "st,stm32-bdma"; ... st,mem2mem; dma-requests = <7>; status = "disabled"; }; For the client part, example for STM32H743 on BDMA1 instance using dmamux2 &adc3 { dmas = < &dmamux2 0 17 0x2C80 >; dma-names = "dmamux"; }; compatible: "st,stm32-bdma" include: dma-controller.yaml properties: reg: required: true interrupts: required: true st,mem2mem: type: boolean description: If the BDMA controller supports memory to memory transfer dma-offset: type: int description: > offset in the table of channels when mapping to a DMAMUX for 1st dma instance, offset is 0, for 2nd dma instance, offset is the nb of dma channels of the 1st dma, for 3rd dma instance, offset is the nb of dma channels of the 2nd dma plus the nb of dma channels of the 1st dma instance, etc. "#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