tx39ioreg.h revision 1.4 1 /* $NetBSD: tx39ioreg.h,v 1.4 2005/06/07 12:19:46 he Exp $ */
2
3 /*-
4 * Copyright (c) 1999, 2000 The NetBSD Foundation, Inc.
5 * All rights reserved.
6 *
7 * This code is derived from software contributed to The NetBSD Foundation
8 * by UCHIYAMA Yasushi.
9 *
10 * Redistribution and use in source and binary forms, with or without
11 * modification, are permitted provided that the following conditions
12 * are met:
13 * 1. Redistributions of source code must retain the above copyright
14 * notice, this list of conditions and the following disclaimer.
15 * 2. Redistributions in binary form must reproduce the above copyright
16 * notice, this list of conditions and the following disclaimer in the
17 * documentation and/or other materials provided with the distribution.
18 * 3. All advertising materials mentioning features or use of this software
19 * must display the following acknowledgement:
20 * This product includes software developed by the NetBSD
21 * Foundation, Inc. and its contributors.
22 * 4. Neither the name of The NetBSD Foundation nor the names of its
23 * contributors may be used to endorse or promote products derived
24 * from this software without specific prior written permission.
25 *
26 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
27 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
28 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
29 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
30 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
31 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
32 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
33 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
34 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
35 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
36 * POSSIBILITY OF SUCH DAMAGE.
37 */
38 /*
39 * TOSHIBA TX3912/TX3922 IO module
40 */
41
42 #ifndef __TX39IO_PRIVATE
43 #error "don't include this file"
44 #else /* !__TX39IO_PRIVATE */
45 #define TX39_IOCTRL_REG 0x180
46 #define TX39_IOMFIODATAOUT_REG 0x184
47 #define TX39_IOMFIODATADIR_REG 0x188
48 #define TX39_IOMFIODATAIN_REG 0x18c
49 #define TX39_IOMFIODATASEL_REG 0x190
50 #define TX39_IOIOPOWERDWN_REG 0x194
51 #define TX39_IOMFIOPOWERDWN_REG 0x198
52 #ifdef TX392X
53 #define TX392X_IODATAINOUT_REG 0x19c
54 #endif /* TX392X */
55
56 #define TX39_IO_MFIO_MAX 32
57 #ifdef TX391X
58 #define TX391X_IO_IO_MAX 7
59 #endif /* TX391X */
60 #ifdef TX392X
61 #define TX392X_IO_IO_MAX 16
62 #endif /* TX392X */
63
64 /*
65 * IO Control Register
66 */
67 #ifdef TX391X
68 #define TX391X_IOCTRL_IODEBSEL_SHIFT 24
69 #define TX391X_IOCTRL_IODEBSEL_MASK 0x7f
70 #define TX391X_IOCTRL_IODEBSEL(cr) \
71 (((cr) >> TX391X_IOCTRL_IODEBSEL_SHIFT) & \
72 TX391X_IOCTRL_IODEBSEL_MASK)
73 #define TX391X_IOCTRL_IODEBSEL_SET(cr, val) \
74 ((cr) | (((val) << TX391X_IOCTRL_IODEBSEL_SHIFT) & \
75 (TX391X_IOCTRL_IODEBSEL_MASK << TX391X_IOCTRL_IODEBSEL_SHIFT)))
76
77 #define TX391X_IOCTRL_IODIREC_SHIFT 16
78 #define TX391X_IOCTRL_IODIREC_MASK 0x7f
79 #define TX391X_IOCTRL_IODIREC(cr) \
80 (((cr) >> TX391X_IOCTRL_IODIREC_SHIFT) & \
81 TX391X_IOCTRL_IODIREC_MASK)
82 #define TX391X_IOCTRL_IODIREC_SET(cr, val) \
83 ((cr) | (((val) << TX391X_IOCTRL_IODIREC_SHIFT) & \
84 (TX391X_IOCTRL_IODIREC_MASK << TX391X_IOCTRL_IODIREC_SHIFT)))
85
86 #define TX391X_IOCTRL_IODOUT_SHIFT 8
87 #define TX391X_IOCTRL_IODOUT_MASK 0x7f
88 #define TX391X_IOCTRL_IODOUT(cr) \
89 (((cr) >> TX391X_IOCTRL_IODOUT_SHIFT) & \
90 TX391X_IOCTRL_IODOUT_MASK)
91 #define TX391X_IOCTRL_IODOUT_CLR(cr) \
92 ((cr) &= ~(TX391X_IOCTRL_IODOUT_MASK << TX391X_IOCTRL_IODOUT_SHIFT))
93 #define TX391X_IOCTRL_IODOUT_SET(cr, val) \
94 ((cr) | (((val) << TX391X_IOCTRL_IODOUT_SHIFT) & \
95 (TX391X_IOCTRL_IODOUT_MASK << TX391X_IOCTRL_IODOUT_SHIFT)))
96
97 #define TX391X_IOCTRL_IODIN_SHIFT 0
98 #define TX391X_IOCTRL_IODIN_MASK 0x7f
99 #define TX391X_IOCTRL_IODIN(cr) \
100 (((cr) >> TX391X_IOCTRL_IODIN_SHIFT) & \
101 TX391X_IOCTRL_IODIN_MASK)
102 #endif /* TX391X */
103
104 #ifdef TX392X
105 #define TX392X_IOCTRL_IODEBSEL_SHIFT 16
106 #define TX392X_IOCTRL_IODEBSEL_MASK 0xffff
107 #define TX392X_IOCTRL_IODEBSEL(cr) \
108 (((cr) >> TX392X_IOCTRL_IODEBSEL_SHIFT) & \
109 TX392X_IOCTRL_IODEBSEL_MASK)
110 #define TX392X_IOCTRL_IODEBSEL_SET(cr, val) \
111 ((cr) | (((val) << TX392X_IOCTRL_IODEBSEL_SHIFT) & \
112 (TX392X_IOCTRL_IODEBSEL_MASK << TX392X_IOCTRL_IODEBSEL_SHIFT)))
113
114 #define TX392X_IOCTRL_IODIREC_SHIFT 0
115 #define TX392X_IOCTRL_IODIREC_MASK 0xffff
116 #define TX392X_IOCTRL_IODIREC(cr) \
117 (((cr) >> TX392X_IOCTRL_IODIREC_SHIFT) & \
118 TX392X_IOCTRL_IODIREC_MASK)
119 #define TX392X_IOCTRL_IODIREC_SET(cr, val) \
120 ((cr) | (((val) << TX392X_IOCTRL_IODIREC_SHIFT) & \
121 (TX392X_IOCTRL_IODIREC_MASK << TX392X_IOCTRL_IODIREC_SHIFT)))
122
123 #define TX392X_IODATAINOUT_DOUT_SHIFT 16
124 #define TX392X_IODATAINOUT_DOUT_MASK 0xffff
125 #define TX392X_IODATAINOUT_DOUT(cr) \
126 (((cr) >> TX392X_IODATAINOUT_DOUT_SHIFT) & \
127 TX392X_IODATAINOUT_DOUT_MASK)
128 #define TX392X_IODATAINOUT_DOUT_SET(cr, val) \
129 ((cr) | (((val) << TX392X_IODATAINOUT_DOUT_SHIFT) & \
130 (TX392X_IODATAINOUT_DOUT_MASK << TX392X_IODATAINOUT_DOUT_SHIFT)))
131 #define TX392X_IODATAINOUT_DOUT_CLR(cr) \
132 ((cr) &= ~(TX392X_IODATAINOUT_DOUT_MASK << \
133 TX392X_IODATAINOUT_DOUT_SHIFT))
134
135 #define TX392X_IODATAINOUT_DIN_SHIFT 0
136 #define TX392X_IODATAINOUT_DIN_MASK 0xffff
137 #define TX392X_IODATAINOUT_DIN(cr) \
138 (((cr) >> TX392X_IODATAINOUT_DIN_SHIFT) & \
139 TX392X_IODATAINOUT_DIN_MASK)
140 #define TX392X_IODATAINOUT_DIN_SET(cr, val) \
141 ((cr) | (((val) << TX392X_IODATAINOUT_DIN_SHIFT) & \
142 (TX392X_IODATAINOUT_DIN_MASK << TX392X_IODATAINOUT_DIN_SHIFT)))
143 #endif /* TX392X */
144 /*
145 * MFIO Data Output Register
146 */
147 #define TX39_IOMFIODATAOUT_MFIODOUT 0
148
149 /*
150 * MFIO Data Direction Register
151 */
152 #define TX39_IOMFIODATADIR_MFIODIREC 0
153
154 /*
155 * MFIO Data Input Register
156 */
157 #define TX39_IOMFIODATAIN_MFIODIN 0
158
159 /*
160 * MFIO Data Select Register
161 */
162 #define TX39_IOMFIODATASEL_MFIOSEL 0
163 #define TX39_IOMFIODATASEL_MFIOSEL_RESET 0xf20f0fff
164
165 /*
166 * IO Power Down Register
167 */
168 #ifdef TX391X
169 #define TX391X_IOIOPOWERDWN_IOPD_SHIFT 0
170 #define TX391X_IOIOPOWERDWN_IOPD_MASK 0x7f
171 #define TX391X_IOIOPOWERDWN_IOPD_RESET 0x7f
172 #define TX391X_IOIOPOWERDWN_IOPD(cr) \
173 (((cr) >> TX391X_IOIOPOWERDWN_IOPD_SHIFT) & \
174 TX391X_IOIOPOWERDWN_IOPD_MASK)
175 #define TX391X_IOIOPOWERDWN_IOPD_SET(cr, val) \
176 ((cr) | (((val) << TX391X_IOIOPOWERDWN_IOPD_SHIFT) & \
177 (TX391X_IOIOPOWERDWN_IOPD_MASK << TX391X_IOIOPOWERDOWN_IOPD_SHIFT)))
178 #endif /* TX391X */
179 #ifdef TX392X
180 #define TX392X_IOIOPOWERDWN_IOPD_SHIFT 0
181 #define TX392X_IOIOPOWERDWN_IOPD_MASK 0xffff
182 #define TX392X_IOIOPOWERDWN_IOPD_RESET 0x0fff
183 #define TX392X_IOIOPOWERDWN_IOPD(cr) \
184 (((cr) >> TX392X_IOIOPOWERDWN_IOPD_SHIFT) & \
185 TX392X_IOIOPOWERDWN_IOPD_MASK)
186 #define TX392X_IOIOPOWERDWN_IOPD_SET(cr, val) \
187 ((cr) | (((val) << TX392X_IOIOPOWERDWN_IOPD_SHIFT) & \
188 (TX392X_IOIOPOWERDWN_IOPD_MASK << TX392X_IOIOPOWERDOWN_IOPD_SHIFT)))
189 #endif /* TX392X */
190
191
192 /*
193 * MFIO Power Down Register
194 */
195 #define TX39_IOMFIOPOWERDWN_MFIOPD 0
196 #define TX39_IOMFIOPOWERDWN_MFIOPD_RESET 0xfaf03ffc
197
198 /*
199 * MFIO mapping
200 */
201 struct tx39io_mfio_map {
202 const char *std_pin_name;
203 int std_type;
204 #define STD_IN 1
205 #define STD_OUT 2
206 #define STD_INOUT 3
207 };
208
209 #ifdef TX391X
210 static const struct tx39io_mfio_map
211 tx391x_mfio_map[TX39_IO_MFIO_MAX] = {
212 [31] = {"CHIFS", STD_INOUT},
213 [30] = {"CHICLK", STD_INOUT},
214 [29] = {"CHIDOUT", STD_OUT},
215 [28] = {"CHIDIN", STD_IN},
216 [27] = {"DREQ", STD_IN},
217 [26] = {"DGRINT", STD_OUT},
218 [25] = {"BC32K", STD_OUT},
219 [24] = {"TXD", STD_OUT},
220 [23] = {"RXD", STD_IN},
221 [22] = {"CS1", STD_OUT},
222 [21] = {"CS2", STD_OUT},
223 [20] = {"CS3", STD_OUT},
224 [19] = {"MCS0", STD_OUT},
225 [18] = {"MCS1", STD_OUT},
226 [17] = {"MCS2", STD_OUT},
227 [16] = {"MCS3", STD_OUT},
228 [15] = {"SPICLK", STD_OUT},
229 [14] = {"SPIOUT", STD_OUT},
230 [13] = {"SPIN", STD_IN},
231 [12] = {"SIBMCLK", STD_INOUT},
232 [11] = {"CARDREG", STD_OUT},
233 [10] = {"CARDIOWR", STD_OUT},
234 [9] = {"CARDIORD", STD_OUT},
235 [8] = {"CARD1CSL", STD_OUT},
236 [7] = {"CARD1CSH", STD_OUT},
237 [6] = {"CARD2CSL", STD_OUT},
238 [5] = {"CARD2CSH", STD_OUT},
239 [4] = {"CARD1WAIT", STD_IN},
240 [3] = {"CARD2WAIT", STD_IN},
241 [2] = {"CARDDIR", STD_OUT},
242 [1] = {"MFIO[1]", 0},
243 [0] = {"MFIO[0]", 0}
244 };
245 #endif /* TX391X */
246
247 #ifdef TX392X
248 static const struct tx39io_mfio_map
249 tx392x_mfio_map[TX39_IO_MFIO_MAX] = {
250 [31] = {"CHIFS", STD_INOUT},
251 [30] = {"CHICLK", STD_INOUT},
252 [29] = {"CHIDOUT", STD_OUT},
253 [28] = {"CHIDIN", STD_IN},
254 [27] = {"DREQ", STD_IN},
255 [26] = {"DGRINT", STD_OUT},
256 [25] = {"BC32K", STD_OUT},
257 [24] = {"TXD", STD_OUT},
258 [23] = {"RXD", STD_IN},
259 [22] = {"CS1", STD_OUT},
260 [21] = {"CS2", STD_OUT},
261 [20] = {"CS3", STD_OUT},
262 [19] = {"MCS0", STD_OUT},
263 [18] = {"MCS1", STD_OUT},
264 [17] = {"RXPWR", STD_OUT},
265 [16] = {"IROUT", STD_OUT},
266 [15] = {"SPICLK", STD_OUT},
267 [14] = {"SPIOUT", STD_OUT},
268 [13] = {"SPIN", STD_IN},
269 [12] = {"SIBMCLK", STD_INOUT},
270 [11] = {"CARDREG", STD_OUT},
271 [10] = {"CARDIOWR", STD_OUT},
272 [9] = {"CARDIORD", STD_OUT},
273 [8] = {"CARD1CSL", STD_OUT},
274 [7] = {"CARD1CSH", STD_OUT},
275 [6] = {"CARD2CSL", STD_OUT},
276 [5] = {"CARD2CSH", STD_OUT},
277 [4] = {"CARD1WAIT", STD_IN},
278 [3] = {"CARD2WAIT", STD_IN},
279 [2] = {"CARDDIR", STD_OUT},
280 [1] = {"MCS1WAIT", 0},
281 [0] = {"MCS0WAIT", 0}
282 };
283 #endif /* TX392X */
284
285 #if defined TX391X && defined TX392X
286 #define tx39io_get_mfio_map(c) \
287 (IS_TX391X(c) ? tx391x_mfio_map : tx392x_mfio_map)
288 #define tx39io_get_io_max(c) \
289 (IS_TX391X(c) ? TX391X_IO_IO_MAX : TX392X_IO_IO_MAX)
290 #elif defined TX391X
291 #define tx39io_get_mfio_map(c) tx391x_mfio_map
292 #define tx39io_get_io_max(c) TX391X_IO_IO_MAX
293 #elif defined TX392X
294 #define tx39io_get_mfio_map(c) tx392x_mfio_map
295 #define tx39io_get_io_max(c) TX392X_IO_IO_MAX
296 #endif
297
298 #endif /* !__TX39IO_PRIVATE */
299
300