blob: 01cc0c8a25df93611517f5a8397178dbfe7918e0 [file] [log] [blame]
Rajan Vaja0ac2be12018-01-17 02:39:21 -08001/*
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
42struct pm_pinctrl_pinmux_map {
43 uint8_t funcs[NFUNCS_PER_PIN];
44};
45
46static 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
52struct 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 */
298enum 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 */
333enum 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}