1 /*
2  * Copyright (c) 2023 STMicroelectronics
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  */
6 #ifndef ZEPHYR_INCLUDE_DT_BINDINGS_STM32_DMA_H_
7 #define ZEPHYR_INCLUDE_DT_BINDINGS_STM32_DMA_H_
8 
9 /**
10  * @name custom DMA flags for channel configuration
11  * @{
12  */
13 /** DMA  cyclic mode config on bit 5*/
14 #define STM32_DMA_CH_CFG_MODE(val)		((val & 0x1) << 5)
15 #define STM32_DMA_MODE_NORMAL			STM32_DMA_CH_CFG_MODE(0)
16 #define STM32_DMA_MODE_CYCLIC			STM32_DMA_CH_CFG_MODE(1)
17 
18 /** DMA  transfer direction config on bits 6-7 */
19 #define STM32_DMA_CH_CFG_DIRECTION(val)		((val & 0x3) << 6)
20 #define STM32_DMA_MEMORY_TO_MEMORY		STM32_DMA_CH_CFG_DIRECTION(0)
21 #define STM32_DMA_MEMORY_TO_PERIPH		STM32_DMA_CH_CFG_DIRECTION(1)
22 #define STM32_DMA_PERIPH_TO_MEMORY		STM32_DMA_CH_CFG_DIRECTION(2)
23 #define STM32_DMA_PERIPH_TO_PERIPH		STM32_DMA_CH_CFG_DIRECTION(3)
24 
25 /** DMA  Peripheral increment Address config on bit 9 */
26 #define STM32_DMA_CH_CFG_PERIPH_ADDR_INC(val)	((val & 0x1) << 9)
27 #define STM32_DMA_PERIPH_NO_INC			STM32_DMA_CH_CFG_PERIPH_ADDR_INC(0)
28 #define STM32_DMA_PERIPH_INC			STM32_DMA_CH_CFG_PERIPH_ADDR_INC(1)
29 
30 /** DMA  Memory increment Address config on bit 10 */
31 #define STM32_DMA_CH_CFG_MEM_ADDR_INC(val)	((val & 0x1) << 10)
32 #define STM32_DMA_MEM_NO_INC			STM32_DMA_CH_CFG_MEM_ADDR_INC(0)
33 #define STM32_DMA_MEM_INC			STM32_DMA_CH_CFG_MEM_ADDR_INC(1)
34 
35 /** DMA  Peripheral data size config on bits 11, 12 */
36 #define STM32_DMA_CH_CFG_PERIPH_WIDTH(val)	((val & 0x3) << 11)
37 #define STM32_DMA_PERIPH_8BITS			STM32_DMA_CH_CFG_PERIPH_WIDTH(0)
38 #define STM32_DMA_PERIPH_16BITS			STM32_DMA_CH_CFG_PERIPH_WIDTH(1)
39 #define STM32_DMA_PERIPH_32BITS			STM32_DMA_CH_CFG_PERIPH_WIDTH(2)
40 
41 /** DMA  Memory data size config on bits 13, 14 */
42 #define STM32_DMA_CH_CFG_MEM_WIDTH(val)		((val & 0x3) << 13)
43 #define STM32_DMA_MEM_8BITS			STM32_DMA_CH_CFG_MEM_WIDTH(0)
44 #define STM32_DMA_MEM_16BITS			STM32_DMA_CH_CFG_MEM_WIDTH(1)
45 #define STM32_DMA_MEM_32BITS			STM32_DMA_CH_CFG_MEM_WIDTH(2)
46 
47 /** DMA  Peripheral increment offset config on bit 15 */
48 #define STM32_DMA_CH_CFG_PERIPH_INC_FIXED(val)	((val & 0x1) << 15)
49 #define STM32_DMA_OFFSET_LINKED_BUS		STM32_DMA_CH_CFG_PERIPH_INC_FIXED(0)
50 #define STM32_DMA_OFFSET_FIXED_4		STM32_DMA_CH_CFG_PERIPH_INC_FIXED(1)
51 
52 /** DMA  Priority config  on bits 16, 17*/
53 #define STM32_DMA_CH_CFG_PRIORITY(val)		((val & 0x3) << 16)
54 #define STM32_DMA_PRIORITY_LOW			STM32_DMA_CH_CFG_PRIORITY(0)
55 #define STM32_DMA_PRIORITY_MEDIUM		STM32_DMA_CH_CFG_PRIORITY(1)
56 #define STM32_DMA_PRIORITY_HIGH			STM32_DMA_CH_CFG_PRIORITY(2)
57 #define STM32_DMA_PRIORITY_VERY_HIGH		STM32_DMA_CH_CFG_PRIORITY(3)
58 
59 /** DMA  FIFO threshold feature */
60 #define STM32_DMA_FIFO_1_4			0U
61 #define STM32_DMA_FIFO_HALF			1U
62 #define STM32_DMA_FIFO_3_4			2U
63 #define STM32_DMA_FIFO_FULL			3U
64 
65 /* DMA  usual combination for peripheral transfer */
66 #define STM32_DMA_PERIPH_TX	(STM32_DMA_MEMORY_TO_PERIPH | STM32_DMA_MEM_INC)
67 #define STM32_DMA_PERIPH_RX	(STM32_DMA_PERIPH_TO_MEMORY | STM32_DMA_MEM_INC)
68 
69 #define STM32_DMA_16BITS	(STM32_DMA_PERIPH_16BITS | STM32_DMA_MEM_16BITS)
70 
71 /** @} */
72 
73 #endif /* ZEPHYR_INCLUDE_DT_BINDINGS_STM32_DMA_H_ */
74