1 /*
2  * Copyright 2022, 2024 NXP
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  */
6 
7 #ifndef ZEPHYR_INCLUDE_DT_BINDINGS_PINCTRL_NXP_S32_PINCTRL_H_
8 #define ZEPHYR_INCLUDE_DT_BINDINGS_PINCTRL_NXP_S32_PINCTRL_H_
9 
10 #include <zephyr/dt-bindings/dt-util.h>
11 
12 /*
13  * The NXP S32 pinmux configuration is encoded in a 32-bit field value as follows:
14  *
15  * - 0..2:   Output mux Source Signal Selection (MSCR.SSS)
16  * - 3..6:   Input mux Source Signal Selection (IMCR.SSS)
17  * - 7..15:  Input Multiplexed Signal Configuration Register (IMCR) index
18  * - 16..24: Multiplexed Signal Configuration Register (MSCR) index
19  * - 25..27: MSCR SIUL2 instance index (0..7)
20  * - 28..30: IMCR SIUL2 instance index (0..7)
21  * - 31:     Reserved for future use
22  */
23 #define NXP_S32_MSCR_SSS_SHIFT       0U
24 #define NXP_S32_MSCR_SSS_MASK        BIT_MASK(3)
25 #define NXP_S32_IMCR_SSS_SHIFT       3U
26 #define NXP_S32_IMCR_SSS_MASK        BIT_MASK(4)
27 #define NXP_S32_IMCR_IDX_SHIFT       7U
28 #define NXP_S32_IMCR_IDX_MASK        BIT_MASK(9)
29 #define NXP_S32_MSCR_IDX_SHIFT       16U
30 #define NXP_S32_MSCR_IDX_MASK        BIT_MASK(9)
31 #define NXP_S32_MSCR_SIUL2_IDX_SHIFT 25U
32 #define NXP_S32_MSCR_SIUL2_IDX_MASK  BIT_MASK(3)
33 #define NXP_S32_IMCR_SIUL2_IDX_SHIFT 28U
34 #define NXP_S32_IMCR_SIUL2_IDX_MASK  BIT_MASK(3)
35 
36 #define NXP_S32_PINMUX_MSCR_SSS(cfg)	\
37 	(((cfg) & NXP_S32_MSCR_SSS_MASK) << NXP_S32_MSCR_SSS_SHIFT)
38 
39 #define NXP_S32_PINMUX_IMCR_SSS(cfg)	\
40 	(((cfg) & NXP_S32_IMCR_SSS_MASK) << NXP_S32_IMCR_SSS_SHIFT)
41 
42 #define NXP_S32_PINMUX_IMCR_IDX(cfg)	\
43 	(((cfg) & NXP_S32_IMCR_IDX_MASK) << NXP_S32_IMCR_IDX_SHIFT)
44 
45 #define NXP_S32_PINMUX_MSCR_IDX(cfg)	\
46 	(((cfg) & NXP_S32_MSCR_IDX_MASK) << NXP_S32_MSCR_IDX_SHIFT)
47 
48 #define NXP_S32_PINMUX_MSCR_SIUL2_IDX(cfg)	\
49 	(((cfg) & NXP_S32_MSCR_SIUL2_IDX_MASK) << NXP_S32_MSCR_SIUL2_IDX_SHIFT)
50 
51 #define NXP_S32_PINMUX_IMCR_SIUL2_IDX(cfg)	\
52 	(((cfg) & NXP_S32_IMCR_SIUL2_IDX_MASK) << NXP_S32_IMCR_SIUL2_IDX_SHIFT)
53 
54 #define NXP_S32_PINMUX_GET_MSCR_SSS(cfg)	\
55 	(((cfg) >> NXP_S32_MSCR_SSS_SHIFT) & NXP_S32_MSCR_SSS_MASK)
56 
57 #define NXP_S32_PINMUX_GET_IMCR_SSS(cfg)	\
58 	(((cfg) >> NXP_S32_IMCR_SSS_SHIFT) & NXP_S32_IMCR_SSS_MASK)
59 
60 #define NXP_S32_PINMUX_GET_IMCR_IDX(cfg)	\
61 	(((cfg) >> NXP_S32_IMCR_IDX_SHIFT) & NXP_S32_IMCR_IDX_MASK)
62 
63 #define NXP_S32_PINMUX_GET_MSCR_IDX(cfg)	\
64 	(((cfg) >> NXP_S32_MSCR_IDX_SHIFT) & NXP_S32_MSCR_IDX_MASK)
65 
66 #define NXP_S32_PINMUX_GET_MSCR_SIUL2_IDX(cfg)	\
67 	(((cfg) >> NXP_S32_MSCR_SIUL2_IDX_SHIFT) & NXP_S32_MSCR_SIUL2_IDX_MASK)
68 
69 #define NXP_S32_PINMUX_GET_IMCR_SIUL2_IDX(cfg)	\
70 	(((cfg) >> NXP_S32_IMCR_SIUL2_IDX_SHIFT) & NXP_S32_IMCR_SIUL2_IDX_MASK)
71 
72 /**
73  * @brief Utility macro to build NXP S32 pinmux property for pinctrl nodes.
74  *
75  * @param mscr_siul2_idx MSCR SIUL2 instance index
76  * @param imcr_siul2_idx IMCR SIUL2 instance index
77  * @param mscr_idx Multiplexed Signal Configuration Register (MSCR) index
78  * @param mscr_sss Output mux Source Signal Selection (MSCR.SSS)
79  * @param imcr_idx Input Multiplexed Signal Configuration Register (IMCR) index
80  * @param imcr_sss Input mux Source Signal Selection (IMCR.SSS)
81  */
82 #define NXP_S32_PINMUX(mscr_siul2_idx, imcr_siul2_idx, mscr_idx, mscr_sss, imcr_idx, imcr_sss)     \
83 	(NXP_S32_PINMUX_MSCR_SIUL2_IDX(mscr_siul2_idx) |                                           \
84 	 NXP_S32_PINMUX_IMCR_SIUL2_IDX(imcr_siul2_idx) |                                           \
85 	 NXP_S32_PINMUX_MSCR_IDX(mscr_idx) |                                                       \
86 	 NXP_S32_PINMUX_MSCR_SSS(mscr_sss) |                                                       \
87 	 NXP_S32_PINMUX_IMCR_IDX(imcr_idx) |                                                       \
88 	 NXP_S32_PINMUX_IMCR_SSS(imcr_sss))
89 
90 #endif	/* ZEPHYR_INCLUDE_DT_BINDINGS_PINCTRL_NXP_NXP_S32_PINCTRL_H_ */
91