xref: /rk3399_ARM-atf/plat/xilinx/zynqmp/pm_service/pm_api_pinctrl.c (revision e52e10add2adda2bd7bd5257ddf7ec15e40f0f26)
1 /*
2  * Copyright (c) 2018, ARM Limited and Contributors. All rights reserved.
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  */
6 
7 /*
8  * ZynqMP system level PM-API functions for pin control.
9  */
10 
11 #include <arch_helpers.h>
12 #include <platform.h>
13 #include "pm_api_pinctrl.h"
14 #include "pm_api_sys.h"
15 #include "pm_client.h"
16 #include "pm_common.h"
17 #include "pm_ipi.h"
18 
19 #define PINCTRL_FUNCTION_MASK			0xFE
20 #define NFUNCS_PER_PIN				13
21 
22 #define PINMUX_MAP(pin, f0, f1, f2, f3, f4, f5, f6,	\
23 		   f7, f8, f9, f10, f11, f12)		\
24 	[pin] = {					\
25 		.funcs =  {				\
26 			f0,				\
27 			f1,				\
28 			f2,				\
29 			f3,				\
30 			f4,				\
31 			f5,				\
32 			f6,				\
33 			f7,				\
34 			f8,				\
35 			f9,				\
36 			f10,				\
37 			f11,				\
38 			f12,				\
39 		},					\
40 	}
41 
42 struct pm_pinctrl_pinmux_map {
43 	uint8_t funcs[NFUNCS_PER_PIN];
44 };
45 
46 static uint8_t pm_pinctrl_mux[NFUNCS_PER_PIN] = {
47 	0x02, 0x04, 0x08, 0x10, 0x18,
48 	0x00, 0x20, 0x40, 0x60, 0x80,
49 	0xA0, 0xC0, 0xE0
50 };
51 
52 struct pm_pinctrl_pinmux_map pinmux_maps[] = {
53 	PINMUX_MAP(0, NODE_QSPI, NODE_UNKNOWN, NODE_UNKNOWN, NODE_TESTSCAN,
54 		   NODE_UNKNOWN, NODE_GPIO, NODE_CAN_1, NODE_I2C_1, NODE_PJTAG,
55 		   NODE_SPI_0, NODE_TTC_3, NODE_UART_1, NODE_TRACE),
56 	PINMUX_MAP(1, NODE_QSPI, NODE_UNKNOWN, NODE_UNKNOWN, NODE_TESTSCAN,
57 		   NODE_UNKNOWN, NODE_GPIO, NODE_CAN_1, NODE_I2C_1, NODE_PJTAG,
58 		   NODE_SPI_0, NODE_TTC_3, NODE_UART_1, NODE_TRACE),
59 	PINMUX_MAP(2, NODE_QSPI, NODE_UNKNOWN, NODE_UNKNOWN, NODE_TESTSCAN,
60 		   NODE_UNKNOWN, NODE_GPIO, NODE_CAN_0, NODE_I2C_0, NODE_PJTAG,
61 		   NODE_SPI_0, NODE_TTC_2, NODE_UART_0, NODE_TRACE),
62 	PINMUX_MAP(3, NODE_QSPI, NODE_UNKNOWN, NODE_UNKNOWN, NODE_TESTSCAN,
63 		   NODE_UNKNOWN, NODE_GPIO, NODE_CAN_0, NODE_I2C_0, NODE_PJTAG,
64 		   NODE_SPI_0, NODE_TTC_2, NODE_UART_0, NODE_TRACE),
65 	PINMUX_MAP(4, NODE_QSPI, NODE_UNKNOWN, NODE_UNKNOWN, NODE_TESTSCAN,
66 		   NODE_UNKNOWN, NODE_GPIO, NODE_CAN_1, NODE_I2C_1, NODE_SWDT_1,
67 		   NODE_SPI_0, NODE_TTC_1, NODE_UART_1, NODE_TRACE),
68 	PINMUX_MAP(5, NODE_QSPI, NODE_UNKNOWN, NODE_UNKNOWN, NODE_TESTSCAN,
69 		   NODE_UNKNOWN, NODE_GPIO, NODE_CAN_1, NODE_I2C_1, NODE_SWDT_1,
70 		   NODE_SPI_0, NODE_TTC_1, NODE_UART_1, NODE_TRACE),
71 	PINMUX_MAP(6, NODE_QSPI, NODE_UNKNOWN, NODE_UNKNOWN, NODE_TESTSCAN,
72 		   NODE_UNKNOWN, NODE_GPIO, NODE_CAN_0, NODE_I2C_0, NODE_SWDT_0,
73 		   NODE_SPI_1, NODE_TTC_0, NODE_UART_0, NODE_TRACE),
74 	PINMUX_MAP(7, NODE_QSPI, NODE_UNKNOWN, NODE_UNKNOWN, NODE_TESTSCAN,
75 		   NODE_UNKNOWN, NODE_GPIO, NODE_CAN_0, NODE_I2C_0, NODE_SWDT_0,
76 		   NODE_SPI_1, NODE_TTC_0, NODE_UART_0, NODE_TRACE),
77 	PINMUX_MAP(8, NODE_QSPI, NODE_UNKNOWN, NODE_UNKNOWN, NODE_TESTSCAN,
78 		   NODE_UNKNOWN, NODE_GPIO, NODE_CAN_1, NODE_I2C_1, NODE_SWDT_1,
79 		   NODE_SPI_1, NODE_TTC_3, NODE_UART_1, NODE_TRACE),
80 	PINMUX_MAP(9, NODE_QSPI, NODE_NAND, NODE_UNKNOWN, NODE_TESTSCAN,
81 		   NODE_UNKNOWN, NODE_GPIO, NODE_CAN_1, NODE_I2C_1, NODE_SWDT_1,
82 		   NODE_SPI_1, NODE_TTC_3, NODE_UART_1, NODE_TRACE),
83 	PINMUX_MAP(10, NODE_QSPI, NODE_NAND, NODE_UNKNOWN, NODE_TESTSCAN,
84 		   NODE_UNKNOWN, NODE_GPIO, NODE_CAN_0, NODE_I2C_0, NODE_SWDT_0,
85 		   NODE_SPI_1, NODE_TTC_2, NODE_UART_0, NODE_TRACE),
86 	PINMUX_MAP(11, NODE_QSPI, NODE_NAND, NODE_UNKNOWN, NODE_TESTSCAN,
87 		   NODE_UNKNOWN, NODE_GPIO, NODE_CAN_0, NODE_I2C_0, NODE_SWDT_0,
88 		   NODE_SPI_1, NODE_TTC_2, NODE_UART_0, NODE_TRACE),
89 	PINMUX_MAP(12, NODE_QSPI, NODE_NAND, NODE_UNKNOWN, NODE_TESTSCAN,
90 		   NODE_UNKNOWN, NODE_GPIO, NODE_CAN_1, NODE_I2C_1, NODE_PJTAG,
91 		   NODE_SPI_0, NODE_TTC_1, NODE_UART_1, NODE_TRACE),
92 	PINMUX_MAP(13, NODE_UNKNOWN, NODE_NAND, NODE_SD_0, NODE_TESTSCAN,
93 		   NODE_UNKNOWN, NODE_GPIO, NODE_CAN_1, NODE_I2C_1, NODE_PJTAG,
94 		   NODE_SPI_0, NODE_TTC_1, NODE_UART_1, NODE_TRACE),
95 	PINMUX_MAP(14, NODE_UNKNOWN, NODE_NAND, NODE_SD_0, NODE_TESTSCAN,
96 		   NODE_UNKNOWN, NODE_GPIO, NODE_CAN_0, NODE_I2C_0, NODE_PJTAG,
97 		   NODE_SPI_0, NODE_TTC_0, NODE_UART_0, NODE_TRACE),
98 	PINMUX_MAP(15, NODE_UNKNOWN, NODE_NAND, NODE_SD_0, NODE_TESTSCAN,
99 		   NODE_UNKNOWN, NODE_GPIO, NODE_CAN_0, NODE_I2C_0, NODE_PJTAG,
100 		   NODE_SPI_0, NODE_TTC_0, NODE_UART_0, NODE_TRACE),
101 	PINMUX_MAP(16, NODE_UNKNOWN, NODE_NAND, NODE_SD_0, NODE_TESTSCAN,
102 		   NODE_UNKNOWN, NODE_GPIO, NODE_CAN_1, NODE_I2C_1, NODE_SWDT_1,
103 		   NODE_SPI_0, NODE_TTC_3, NODE_UART_1, NODE_TRACE),
104 	PINMUX_MAP(17, NODE_UNKNOWN, NODE_NAND, NODE_SD_0, NODE_TESTSCAN,
105 		   NODE_UNKNOWN, NODE_GPIO, NODE_CAN_1, NODE_I2C_1, NODE_SWDT_1,
106 		   NODE_SPI_0, NODE_TTC_3, NODE_UART_1, NODE_TRACE),
107 	PINMUX_MAP(18, NODE_UNKNOWN, NODE_NAND, NODE_SD_0, NODE_TESTSCAN,
108 		   NODE_UNKNOWN, NODE_GPIO, NODE_CAN_0, NODE_I2C_0, NODE_SWDT_0,
109 		   NODE_SPI_1, NODE_TTC_2, NODE_UART_0, NODE_UNKNOWN),
110 	PINMUX_MAP(19, NODE_UNKNOWN, NODE_NAND, NODE_SD_0, NODE_TESTSCAN,
111 		   NODE_CSU, NODE_GPIO, NODE_CAN_0, NODE_I2C_0, NODE_SWDT_0,
112 		   NODE_SPI_1, NODE_TTC_2, NODE_UART_0, NODE_UNKNOWN),
113 	PINMUX_MAP(20, NODE_UNKNOWN, NODE_NAND, NODE_SD_0, NODE_TESTSCAN,
114 		   NODE_CSU, NODE_GPIO, NODE_CAN_1, NODE_I2C_1, NODE_SWDT_1,
115 		   NODE_SPI_1, NODE_TTC_1, NODE_UART_1, NODE_UNKNOWN),
116 	PINMUX_MAP(21, NODE_UNKNOWN, NODE_NAND, NODE_SD_0, NODE_TESTSCAN,
117 		   NODE_CSU, NODE_GPIO, NODE_CAN_1, NODE_I2C_1, NODE_SWDT_1,
118 		   NODE_SPI_1, NODE_TTC_1, NODE_UART_1, NODE_UNKNOWN),
119 	PINMUX_MAP(22, NODE_UNKNOWN, NODE_NAND, NODE_SD_0, NODE_TESTSCAN,
120 		   NODE_CSU, NODE_GPIO, NODE_CAN_0, NODE_I2C_0, NODE_SWDT_0,
121 		   NODE_SPI_1, NODE_TTC_0, NODE_UART_0, NODE_UNKNOWN),
122 	PINMUX_MAP(23, NODE_UNKNOWN, NODE_NAND, NODE_SD_0, NODE_TESTSCAN,
123 		   NODE_CSU, NODE_GPIO, NODE_CAN_0, NODE_I2C_0, NODE_SWDT_0,
124 		   NODE_SPI_1, NODE_TTC_0, NODE_UART_0, NODE_UNKNOWN),
125 	PINMUX_MAP(24, NODE_UNKNOWN, NODE_NAND, NODE_SD_0, NODE_TESTSCAN,
126 		   NODE_CSU, NODE_GPIO, NODE_CAN_1, NODE_I2C_1, NODE_SWDT_1,
127 		   NODE_UNKNOWN, NODE_TTC_3, NODE_UART_1, NODE_UNKNOWN),
128 	PINMUX_MAP(25, NODE_UNKNOWN, NODE_NAND, NODE_SD_0, NODE_TESTSCAN,
129 		   NODE_CSU, NODE_GPIO, NODE_CAN_1, NODE_I2C_1, NODE_SWDT_1,
130 		   NODE_UNKNOWN, NODE_TTC_3, NODE_UART_1, NODE_UNKNOWN),
131 	PINMUX_MAP(26, NODE_ETH_0, NODE_NAND, NODE_PMU, NODE_TESTSCAN,
132 		   NODE_CSU, NODE_GPIO, NODE_CAN_0, NODE_I2C_0, NODE_PJTAG,
133 		   NODE_SPI_0, NODE_TTC_2, NODE_UART_0, NODE_TRACE),
134 	PINMUX_MAP(27, NODE_ETH_0, NODE_NAND, NODE_PMU, NODE_TESTSCAN,
135 		   NODE_DP, NODE_GPIO, NODE_CAN_0, NODE_I2C_0, NODE_PJTAG,
136 		   NODE_SPI_0, NODE_TTC_2, NODE_UART_0, NODE_TRACE),
137 	PINMUX_MAP(28, NODE_ETH_0, NODE_NAND, NODE_PMU, NODE_TESTSCAN,
138 		   NODE_DP, NODE_GPIO, NODE_CAN_1, NODE_I2C_1, NODE_PJTAG,
139 		   NODE_SPI_0, NODE_TTC_1, NODE_UART_1, NODE_TRACE),
140 	PINMUX_MAP(29, NODE_ETH_0, NODE_PCIE, NODE_PMU, NODE_TESTSCAN,
141 		   NODE_DP, NODE_GPIO, NODE_CAN_1, NODE_I2C_1, NODE_PJTAG,
142 		   NODE_SPI_0, NODE_TTC_1, NODE_UART_1, NODE_TRACE),
143 	PINMUX_MAP(30, NODE_ETH_0, NODE_PCIE, NODE_PMU, NODE_TESTSCAN,
144 		   NODE_DP, NODE_GPIO, NODE_CAN_0, NODE_I2C_0, NODE_SWDT_0,
145 		   NODE_SPI_0, NODE_TTC_0, NODE_UART_0, NODE_TRACE),
146 	PINMUX_MAP(31, NODE_ETH_0, NODE_PCIE, NODE_PMU, NODE_TESTSCAN,
147 		   NODE_CSU, NODE_GPIO, NODE_CAN_0, NODE_I2C_0, NODE_SWDT_0,
148 		   NODE_SPI_0, NODE_TTC_0, NODE_UART_0, NODE_TRACE),
149 	PINMUX_MAP(32, NODE_ETH_0, NODE_NAND, NODE_PMU, NODE_TESTSCAN,
150 		   NODE_CSU, NODE_GPIO, NODE_CAN_1, NODE_I2C_1, NODE_SWDT_1,
151 		   NODE_SPI_1, NODE_TTC_3, NODE_UART_1, NODE_TRACE),
152 	PINMUX_MAP(33, NODE_ETH_0, NODE_PCIE, NODE_PMU, NODE_TESTSCAN,
153 		   NODE_CSU, NODE_GPIO, NODE_CAN_1, NODE_I2C_1, NODE_SWDT_1,
154 		   NODE_SPI_1, NODE_TTC_3, NODE_UART_1, NODE_TRACE),
155 	PINMUX_MAP(34, NODE_ETH_0, NODE_PCIE, NODE_PMU, NODE_TESTSCAN,
156 		   NODE_DP, NODE_GPIO, NODE_CAN_0, NODE_I2C_0, NODE_SWDT_0,
157 		   NODE_SPI_1, NODE_TTC_2, NODE_UART_0, NODE_TRACE),
158 	PINMUX_MAP(35, NODE_ETH_0, NODE_PCIE, NODE_PMU, NODE_TESTSCAN,
159 		   NODE_DP, NODE_GPIO, NODE_CAN_0, NODE_I2C_0, NODE_SWDT_0,
160 		   NODE_SPI_1, NODE_TTC_2, NODE_UART_0, NODE_TRACE),
161 	PINMUX_MAP(36, NODE_ETH_0, NODE_PCIE, NODE_PMU, NODE_TESTSCAN,
162 		   NODE_DP, NODE_GPIO, NODE_CAN_1, NODE_I2C_1, NODE_SWDT_1,
163 		   NODE_SPI_1, NODE_TTC_1, NODE_UART_1, NODE_TRACE),
164 	PINMUX_MAP(37, NODE_ETH_0, NODE_PCIE, NODE_PMU, NODE_TESTSCAN,
165 		   NODE_DP, NODE_GPIO, NODE_CAN_1, NODE_I2C_1, NODE_SWDT_1,
166 		   NODE_SPI_1, NODE_TTC_1, NODE_UART_1, NODE_TRACE),
167 	PINMUX_MAP(38, NODE_ETH_1, NODE_UNKNOWN, NODE_SD_0, NODE_UNKNOWN,
168 		   NODE_UNKNOWN, NODE_GPIO, NODE_CAN_0, NODE_I2C_0, NODE_PJTAG,
169 		   NODE_SPI_0, NODE_TTC_0, NODE_UART_0, NODE_TRACE),
170 	PINMUX_MAP(39, NODE_ETH_1, NODE_UNKNOWN, NODE_SD_0, NODE_SD_1,
171 		   NODE_UNKNOWN, NODE_GPIO, NODE_CAN_0, NODE_I2C_0, NODE_PJTAG,
172 		   NODE_SPI_0, NODE_TTC_0, NODE_UART_0, NODE_TRACE),
173 	PINMUX_MAP(40, NODE_ETH_1, NODE_UNKNOWN, NODE_SD_0, NODE_SD_1,
174 		   NODE_UNKNOWN, NODE_GPIO, NODE_CAN_1, NODE_I2C_1, NODE_PJTAG,
175 		   NODE_SPI_0, NODE_TTC_3, NODE_UART_1, NODE_TRACE),
176 	PINMUX_MAP(41, NODE_ETH_1, NODE_UNKNOWN, NODE_SD_0, NODE_SD_1,
177 		   NODE_UNKNOWN, NODE_GPIO, NODE_CAN_1, NODE_I2C_1, NODE_PJTAG,
178 		   NODE_SPI_0, NODE_TTC_3, NODE_UART_1, NODE_TRACE),
179 	PINMUX_MAP(42, NODE_ETH_1, NODE_UNKNOWN, NODE_SD_0, NODE_SD_1,
180 		   NODE_UNKNOWN, NODE_GPIO, NODE_CAN_0, NODE_I2C_0, NODE_SWDT_0,
181 		   NODE_SPI_0, NODE_TTC_2, NODE_UART_0, NODE_TRACE),
182 	PINMUX_MAP(43, NODE_ETH_1, NODE_UNKNOWN, NODE_SD_0, NODE_SD_1,
183 		   NODE_UNKNOWN, NODE_GPIO, NODE_CAN_0, NODE_I2C_0, NODE_SWDT_0,
184 		   NODE_SPI_0, NODE_TTC_2, NODE_UART_0, NODE_TRACE),
185 	PINMUX_MAP(44, NODE_ETH_1, NODE_UNKNOWN, NODE_SD_0, NODE_SD_1,
186 		   NODE_UNKNOWN, NODE_GPIO, NODE_CAN_1, NODE_I2C_1, NODE_SWDT_1,
187 		   NODE_SPI_1, NODE_TTC_1, NODE_UART_1, NODE_UNKNOWN),
188 	PINMUX_MAP(45, NODE_ETH_1, NODE_UNKNOWN, NODE_SD_0, NODE_SD_1,
189 		   NODE_UNKNOWN, NODE_GPIO, NODE_CAN_1, NODE_I2C_1, NODE_SWDT_1,
190 		   NODE_SPI_1, NODE_TTC_1, NODE_UART_1, NODE_UNKNOWN),
191 	PINMUX_MAP(46, NODE_ETH_1, NODE_UNKNOWN, NODE_SD_0, NODE_SD_1,
192 		   NODE_UNKNOWN, NODE_GPIO, NODE_CAN_0, NODE_I2C_0, NODE_SWDT_0,
193 		   NODE_SPI_1, NODE_TTC_0, NODE_UART_0, NODE_UNKNOWN),
194 	PINMUX_MAP(47, NODE_ETH_1, NODE_UNKNOWN, NODE_SD_0, NODE_SD_1,
195 		   NODE_UNKNOWN, NODE_GPIO, NODE_CAN_0, NODE_I2C_0, NODE_SWDT_0,
196 		   NODE_SPI_1, NODE_TTC_0, NODE_UART_0, NODE_UNKNOWN),
197 	PINMUX_MAP(48, NODE_ETH_1, NODE_UNKNOWN, NODE_SD_0, NODE_SD_1,
198 		   NODE_UNKNOWN, NODE_GPIO, NODE_CAN_1, NODE_I2C_1, NODE_SWDT_1,
199 		   NODE_SPI_1, NODE_TTC_3, NODE_UART_1, NODE_UNKNOWN),
200 	PINMUX_MAP(49, NODE_ETH_1, NODE_UNKNOWN, NODE_SD_0, NODE_SD_1,
201 		   NODE_UNKNOWN, NODE_GPIO, NODE_CAN_1, NODE_I2C_1, NODE_SWDT_1,
202 		   NODE_SPI_1, NODE_TTC_3, NODE_UART_1, NODE_UNKNOWN),
203 	PINMUX_MAP(50, NODE_GEM_TSU, NODE_UNKNOWN, NODE_SD_0, NODE_SD_1,
204 		   NODE_UNKNOWN, NODE_GPIO, NODE_CAN_0, NODE_I2C_0, NODE_SWDT_0,
205 		   NODE_ETH_1, NODE_TTC_2, NODE_UART_0, NODE_UNKNOWN),
206 	PINMUX_MAP(51, NODE_GEM_TSU, NODE_UNKNOWN, NODE_UNKNOWN, NODE_SD_1,
207 		   NODE_UNKNOWN, NODE_GPIO, NODE_CAN_0, NODE_I2C_0, NODE_SWDT_0,
208 		   NODE_ETH_1, NODE_TTC_2, NODE_UART_0, NODE_UNKNOWN),
209 	PINMUX_MAP(52, NODE_ETH_2, NODE_USB_0, NODE_UNKNOWN, NODE_UNKNOWN,
210 		   NODE_UNKNOWN, NODE_GPIO, NODE_CAN_1, NODE_I2C_1, NODE_PJTAG,
211 		   NODE_SPI_0, NODE_TTC_1, NODE_UART_1, NODE_TRACE),
212 	PINMUX_MAP(53, NODE_ETH_2, NODE_USB_0, NODE_UNKNOWN, NODE_UNKNOWN,
213 		   NODE_UNKNOWN, NODE_GPIO, NODE_CAN_1, NODE_I2C_1, NODE_PJTAG,
214 		   NODE_SPI_0, NODE_TTC_1, NODE_UART_1, NODE_TRACE),
215 	PINMUX_MAP(54, NODE_ETH_2, NODE_USB_0, NODE_UNKNOWN, NODE_UNKNOWN,
216 		   NODE_UNKNOWN, NODE_GPIO, NODE_CAN_0, NODE_I2C_0, NODE_PJTAG,
217 		   NODE_SPI_0, NODE_TTC_0, NODE_UART_0, NODE_TRACE),
218 	PINMUX_MAP(55, NODE_ETH_2, NODE_USB_0, NODE_UNKNOWN, NODE_UNKNOWN,
219 		   NODE_UNKNOWN, NODE_GPIO, NODE_CAN_0, NODE_I2C_0, NODE_PJTAG,
220 		   NODE_SPI_0, NODE_TTC_0, NODE_UART_0, NODE_TRACE),
221 	PINMUX_MAP(56, NODE_ETH_2, NODE_USB_0, NODE_UNKNOWN, NODE_UNKNOWN,
222 		   NODE_UNKNOWN, NODE_GPIO, NODE_CAN_1, NODE_I2C_1, NODE_SWDT_1,
223 		   NODE_SPI_0, NODE_TTC_3, NODE_UART_1, NODE_TRACE),
224 	PINMUX_MAP(57, NODE_ETH_2, NODE_USB_0, NODE_UNKNOWN, NODE_UNKNOWN,
225 		   NODE_UNKNOWN, NODE_GPIO, NODE_CAN_1, NODE_I2C_1, NODE_SWDT_1,
226 		   NODE_SPI_0, NODE_TTC_3, NODE_UART_1, NODE_TRACE),
227 	PINMUX_MAP(58, NODE_ETH_2, NODE_USB_0, NODE_UNKNOWN, NODE_UNKNOWN,
228 		   NODE_UNKNOWN, NODE_GPIO, NODE_CAN_0, NODE_I2C_0, NODE_PJTAG,
229 		   NODE_SPI_1, NODE_TTC_2, NODE_UART_0, NODE_TRACE),
230 	PINMUX_MAP(59, NODE_ETH_2, NODE_USB_0, NODE_UNKNOWN, NODE_UNKNOWN,
231 		   NODE_UNKNOWN, NODE_GPIO, NODE_CAN_0, NODE_I2C_0, NODE_PJTAG,
232 		   NODE_SPI_1, NODE_TTC_2, NODE_UART_0, NODE_TRACE),
233 	PINMUX_MAP(60, NODE_ETH_2, NODE_USB_0, NODE_UNKNOWN, NODE_UNKNOWN,
234 		   NODE_UNKNOWN, NODE_GPIO, NODE_CAN_1, NODE_I2C_1, NODE_PJTAG,
235 		   NODE_SPI_1, NODE_TTC_1, NODE_UART_1, NODE_TRACE),
236 	PINMUX_MAP(61, NODE_ETH_2, NODE_USB_0, NODE_UNKNOWN, NODE_UNKNOWN,
237 		   NODE_UNKNOWN, NODE_GPIO, NODE_CAN_1, NODE_I2C_1, NODE_PJTAG,
238 		   NODE_SPI_1, NODE_TTC_1, NODE_UART_1, NODE_TRACE),
239 	PINMUX_MAP(62, NODE_ETH_2, NODE_USB_0, NODE_UNKNOWN, NODE_UNKNOWN,
240 		   NODE_UNKNOWN, NODE_GPIO, NODE_CAN_0, NODE_I2C_0, NODE_SWDT_0,
241 		   NODE_SPI_1, NODE_TTC_0, NODE_UART_0, NODE_TRACE),
242 	PINMUX_MAP(63, NODE_ETH_2, NODE_USB_0, NODE_UNKNOWN, NODE_UNKNOWN,
243 		   NODE_UNKNOWN, NODE_GPIO, NODE_CAN_0, NODE_I2C_0, NODE_SWDT_0,
244 		   NODE_SPI_1, NODE_TTC_0, NODE_UART_0, NODE_TRACE),
245 	PINMUX_MAP(64, NODE_ETH_3, NODE_USB_1, NODE_SD_0, NODE_UNKNOWN,
246 		   NODE_UNKNOWN, NODE_GPIO, NODE_CAN_1, NODE_I2C_1, NODE_SWDT_1,
247 		   NODE_SPI_0, NODE_TTC_3, NODE_UART_1, NODE_TRACE),
248 	PINMUX_MAP(65, NODE_ETH_3, NODE_USB_1, NODE_SD_0, NODE_UNKNOWN,
249 		   NODE_UNKNOWN, NODE_GPIO, NODE_CAN_1, NODE_I2C_1, NODE_SWDT_1,
250 		   NODE_SPI_0, NODE_TTC_3, NODE_UART_1, NODE_TRACE),
251 	PINMUX_MAP(66, NODE_ETH_3, NODE_USB_1, NODE_SD_0, NODE_UNKNOWN,
252 		   NODE_UNKNOWN, NODE_GPIO, NODE_CAN_0, NODE_I2C_0, NODE_SWDT_0,
253 		   NODE_SPI_0, NODE_TTC_2, NODE_UART_0, NODE_TRACE),
254 	PINMUX_MAP(67, NODE_ETH_3, NODE_USB_1, NODE_SD_0, NODE_UNKNOWN,
255 		   NODE_UNKNOWN, NODE_GPIO, NODE_CAN_0, NODE_I2C_0, NODE_SWDT_0,
256 		   NODE_SPI_0, NODE_TTC_2, NODE_UART_0, NODE_TRACE),
257 	PINMUX_MAP(68, NODE_ETH_3, NODE_USB_1, NODE_SD_0, NODE_UNKNOWN,
258 		   NODE_UNKNOWN, NODE_GPIO, NODE_CAN_1, NODE_I2C_1, NODE_SWDT_1,
259 		   NODE_SPI_0, NODE_TTC_1, NODE_UART_1, NODE_TRACE),
260 	PINMUX_MAP(69, NODE_ETH_3, NODE_USB_1, NODE_SD_0, NODE_SD_1,
261 		   NODE_UNKNOWN, NODE_GPIO, NODE_CAN_1, NODE_I2C_1, NODE_SWDT_1,
262 		   NODE_SPI_0, NODE_TTC_1, NODE_UART_1, NODE_TRACE),
263 	PINMUX_MAP(70, NODE_ETH_3, NODE_USB_1, NODE_SD_0, NODE_SD_1,
264 		   NODE_UNKNOWN, NODE_GPIO, NODE_CAN_0, NODE_I2C_0, NODE_SWDT_0,
265 		   NODE_SPI_1, NODE_TTC_0, NODE_UART_0, NODE_UNKNOWN),
266 	PINMUX_MAP(71, NODE_ETH_3, NODE_USB_1, NODE_SD_0, NODE_SD_1,
267 		   NODE_UNKNOWN, NODE_GPIO, NODE_CAN_0, NODE_I2C_0, NODE_SWDT_0,
268 		   NODE_SPI_1, NODE_TTC_0, NODE_UART_0, NODE_UNKNOWN),
269 	PINMUX_MAP(72, NODE_ETH_3, NODE_USB_1, NODE_SD_0, NODE_SD_1,
270 		   NODE_UNKNOWN, NODE_GPIO, NODE_CAN_1, NODE_I2C_1, NODE_SWDT_1,
271 		   NODE_SPI_1, NODE_UNKNOWN, NODE_UART_1, NODE_UNKNOWN),
272 	PINMUX_MAP(73, NODE_ETH_3, NODE_USB_1, NODE_SD_0, NODE_SD_1,
273 		   NODE_UNKNOWN, NODE_GPIO, NODE_CAN_1, NODE_I2C_1, NODE_SWDT_1,
274 		   NODE_SPI_1, NODE_UNKNOWN, NODE_UART_1, NODE_UNKNOWN),
275 	PINMUX_MAP(74, NODE_ETH_3, NODE_USB_1, NODE_SD_0, NODE_SD_1,
276 		   NODE_UNKNOWN, NODE_GPIO, NODE_CAN_0, NODE_I2C_0, NODE_SWDT_0,
277 		   NODE_SPI_1, NODE_UNKNOWN, NODE_UART_0, NODE_UNKNOWN),
278 	PINMUX_MAP(75, NODE_ETH_3, NODE_USB_1, NODE_SD_0, NODE_SD_1,
279 		   NODE_UNKNOWN, NODE_GPIO, NODE_CAN_0, NODE_I2C_0, NODE_SWDT_0,
280 		   NODE_SPI_1, NODE_UNKNOWN, NODE_UART_0, NODE_UNKNOWN),
281 	PINMUX_MAP(76, NODE_UNKNOWN, NODE_UNKNOWN, NODE_SD_0, NODE_SD_1,
282 		   NODE_UNKNOWN, NODE_GPIO, NODE_CAN_1, NODE_I2C_1, NODE_ETH_0,
283 		   NODE_ETH_1, NODE_ETH_2, NODE_ETH_3, NODE_UNKNOWN),
284 	PINMUX_MAP(77, NODE_UNKNOWN, NODE_UNKNOWN, NODE_UNKNOWN, NODE_SD_1,
285 		   NODE_UNKNOWN, NODE_GPIO, NODE_CAN_1, NODE_I2C_1, NODE_ETH_0,
286 		   NODE_ETH_1, NODE_ETH_2, NODE_ETH_3, NODE_UNKNOWN),
287 };
288 
289 /**
290  * pm_api_pinctrl_get_function() - Read function id set for the given pin
291  * @pin		Pin number
292  * @nid		Node ID of function currently set for given pin
293  *
294  * This function provides the function currently set for the given pin.
295  *
296  * @return	Returns status, either success or error+reason
297  */
298 enum pm_ret_status pm_api_pinctrl_get_function(unsigned int pin,
299 					       enum pm_node_id *nid)
300 {
301 	struct pm_pinctrl_pinmux_map *pinmux_map = &pinmux_maps[pin];
302 	int i, ret = PM_RET_SUCCESS;
303 	unsigned int reg, val;
304 
305 	reg = IOU_SLCR_BASEADDR + 4 * pin;
306 	ret = pm_mmio_read(reg, &val);
307 	if (ret)
308 		return ret;
309 
310 	val &= PINCTRL_FUNCTION_MASK;
311 
312 	for (i = 0; i < NFUNCS_PER_PIN; i++)
313 		if (val == pm_pinctrl_mux[i])
314 			break;
315 
316 	if (i == NFUNCS_PER_PIN)
317 		return PM_RET_ERROR_NOTSUPPORTED;
318 
319 	*nid = pinmux_map->funcs[i];
320 
321 	return ret;
322 }
323 
324 /**
325  * pm_api_pinctrl_set_function() - Set function id set for the given pin
326  * @pin		Pin number
327  * @nid		Node ID of function to set for given pin
328  *
329  * This function provides the function currently set for the given pin.
330  *
331  * @return	Returns status, either success or error+reason
332  */
333 enum pm_ret_status pm_api_pinctrl_set_function(unsigned int pin,
334 					       enum pm_node_id nid)
335 {
336 	struct pm_pinctrl_pinmux_map *pinmux_map = &pinmux_maps[pin];
337 	int i;
338 	unsigned int reg, val;
339 
340 	for (i = 0; i < NFUNCS_PER_PIN; i++)
341 		if (nid == pinmux_map->funcs[i])
342 			break;
343 
344 	if (i == NFUNCS_PER_PIN)
345 		return PM_RET_ERROR_NOTSUPPORTED;
346 
347 	reg = IOU_SLCR_BASEADDR + 4 * pin;
348 	val = pm_pinctrl_mux[i];
349 
350 	return pm_mmio_write(reg, PINCTRL_FUNCTION_MASK, val);
351 }
352