1/*
2 * Tables with info on how to manipulate the 32 & 64 bit windows on the
3 * various types of Marvell bridge chips.
4 *
5 * Author: Mark A. Greer <mgreer@mvista.com>
6 *
7 * 2004 (c) MontaVista, Software, Inc.  This file is licensed under
8 * the terms of the GNU General Public License version 2.  This program
9 * is licensed "as is" without any warranty of any kind, whether express
10 * or implied.
11 */
12#include <linux/kernel.h>
13#include <linux/init.h>
14#include <linux/pci.h>
15#include <linux/slab.h>
16#include <linux/module.h>
17#include <linux/string.h>
18#include <linux/mv643xx.h>
19
20#include <asm/byteorder.h>
21#include <asm/io.h>
22#include <asm/irq.h>
23#include <asm/uaccess.h>
24#include <asm/machdep.h>
25#include <asm/pci-bridge.h>
26#include <asm/delay.h>
27#include <asm/mv64x60.h>
28
29
30/*
31 *****************************************************************************
32 *
33 *	Tables describing how to set up windows on each type of bridge
34 *
35 *****************************************************************************
36 */
37struct mv64x60_32bit_window
38	gt64260_32bit_windows[MV64x60_32BIT_WIN_COUNT] __initdata = {
39	/* CPU->MEM Windows */
40	[MV64x60_CPU2MEM_0_WIN] = {
41		.base_reg		= MV64x60_CPU2MEM_0_BASE,
42		.size_reg		= MV64x60_CPU2MEM_0_SIZE,
43		.base_bits		= 12,
44		.size_bits		= 12,
45		.get_from_field		= mv64x60_shift_left,
46		.map_to_field		= mv64x60_shift_right,
47		.extra			= 0 },
48	[MV64x60_CPU2MEM_1_WIN] = {
49		.base_reg		= MV64x60_CPU2MEM_1_BASE,
50		.size_reg		= MV64x60_CPU2MEM_1_SIZE,
51		.base_bits		= 12,
52		.size_bits		= 12,
53		.get_from_field		= mv64x60_shift_left,
54		.map_to_field		= mv64x60_shift_right,
55		.extra			= 0 },
56	[MV64x60_CPU2MEM_2_WIN] = {
57		.base_reg		= MV64x60_CPU2MEM_2_BASE,
58		.size_reg		= MV64x60_CPU2MEM_2_SIZE,
59		.base_bits		= 12,
60		.size_bits		= 12,
61		.get_from_field		= mv64x60_shift_left,
62		.map_to_field		= mv64x60_shift_right,
63		.extra			= 0 },
64	[MV64x60_CPU2MEM_3_WIN] = {
65		.base_reg		= MV64x60_CPU2MEM_3_BASE,
66		.size_reg		= MV64x60_CPU2MEM_3_SIZE,
67		.base_bits		= 12,
68		.size_bits		= 12,
69		.get_from_field		= mv64x60_shift_left,
70		.map_to_field		= mv64x60_shift_right,
71		.extra			= 0 },
72	/* CPU->Device Windows */
73	[MV64x60_CPU2DEV_0_WIN] = {
74		.base_reg		= MV64x60_CPU2DEV_0_BASE,
75		.size_reg		= MV64x60_CPU2DEV_0_SIZE,
76		.base_bits		= 12,
77		.size_bits		= 12,
78		.get_from_field		= mv64x60_shift_left,
79		.map_to_field		= mv64x60_shift_right,
80		.extra			= 0 },
81	[MV64x60_CPU2DEV_1_WIN] = {
82		.base_reg		= MV64x60_CPU2DEV_1_BASE,
83		.size_reg		= MV64x60_CPU2DEV_1_SIZE,
84		.base_bits		= 12,
85		.size_bits		= 12,
86		.get_from_field		= mv64x60_shift_left,
87		.map_to_field		= mv64x60_shift_right,
88		.extra			= 0 },
89	[MV64x60_CPU2DEV_2_WIN] = {
90		.base_reg		= MV64x60_CPU2DEV_2_BASE,
91		.size_reg		= MV64x60_CPU2DEV_2_SIZE,
92		.base_bits		= 12,
93		.size_bits		= 12,
94		.get_from_field		= mv64x60_shift_left,
95		.map_to_field		= mv64x60_shift_right,
96		.extra			= 0 },
97	[MV64x60_CPU2DEV_3_WIN] = {
98		.base_reg		= MV64x60_CPU2DEV_3_BASE,
99		.size_reg		= MV64x60_CPU2DEV_3_SIZE,
100		.base_bits		= 12,
101		.size_bits		= 12,
102		.get_from_field		= mv64x60_shift_left,
103		.map_to_field		= mv64x60_shift_right,
104		.extra			= 0 },
105	/* CPU->Boot Window */
106	[MV64x60_CPU2BOOT_WIN] = {
107		.base_reg		= MV64x60_CPU2BOOT_0_BASE,
108		.size_reg		= MV64x60_CPU2BOOT_0_SIZE,
109		.base_bits		= 12,
110		.size_bits		= 12,
111		.get_from_field		= mv64x60_shift_left,
112		.map_to_field		= mv64x60_shift_right,
113		.extra			= 0 },
114	/* CPU->PCI 0 Windows */
115	[MV64x60_CPU2PCI0_IO_WIN] = {
116		.base_reg		= MV64x60_CPU2PCI0_IO_BASE,
117		.size_reg		= MV64x60_CPU2PCI0_IO_SIZE,
118		.base_bits		= 12,
119		.size_bits		= 12,
120		.get_from_field		= mv64x60_shift_left,
121		.map_to_field		= mv64x60_shift_right,
122		.extra			= 0 },
123	[MV64x60_CPU2PCI0_MEM_0_WIN] = {
124		.base_reg		= MV64x60_CPU2PCI0_MEM_0_BASE,
125		.size_reg		= MV64x60_CPU2PCI0_MEM_0_SIZE,
126		.base_bits		= 12,
127		.size_bits		= 12,
128		.get_from_field		= mv64x60_shift_left,
129		.map_to_field		= mv64x60_shift_right,
130		.extra			= 0 },
131	[MV64x60_CPU2PCI0_MEM_1_WIN] = {
132		.base_reg		= MV64x60_CPU2PCI0_MEM_1_BASE,
133		.size_reg		= MV64x60_CPU2PCI0_MEM_1_SIZE,
134		.base_bits		= 12,
135		.size_bits		= 12,
136		.get_from_field		= mv64x60_shift_left,
137		.map_to_field		= mv64x60_shift_right,
138		.extra			= 0 },
139	[MV64x60_CPU2PCI0_MEM_2_WIN] = {
140		.base_reg		= MV64x60_CPU2PCI0_MEM_2_BASE,
141		.size_reg		= MV64x60_CPU2PCI0_MEM_2_SIZE,
142		.base_bits		= 12,
143		.size_bits		= 12,
144		.get_from_field		= mv64x60_shift_left,
145		.map_to_field		= mv64x60_shift_right,
146		.extra			= 0 },
147	[MV64x60_CPU2PCI0_MEM_3_WIN] = {
148		.base_reg		= MV64x60_CPU2PCI0_MEM_3_BASE,
149		.size_reg		= MV64x60_CPU2PCI0_MEM_3_SIZE,
150		.base_bits		= 12,
151		.size_bits		= 12,
152		.get_from_field		= mv64x60_shift_left,
153		.map_to_field		= mv64x60_shift_right,
154		.extra			= 0 },
155	/* CPU->PCI 1 Windows */
156	[MV64x60_CPU2PCI1_IO_WIN] = {
157		.base_reg		= MV64x60_CPU2PCI1_IO_BASE,
158		.size_reg		= MV64x60_CPU2PCI1_IO_SIZE,
159		.base_bits		= 12,
160		.size_bits		= 12,
161		.get_from_field		= mv64x60_shift_left,
162		.map_to_field		= mv64x60_shift_right,
163		.extra			= 0 },
164	[MV64x60_CPU2PCI1_MEM_0_WIN] = {
165		.base_reg		= MV64x60_CPU2PCI1_MEM_0_BASE,
166		.size_reg		= MV64x60_CPU2PCI1_MEM_0_SIZE,
167		.base_bits		= 12,
168		.size_bits		= 12,
169		.get_from_field		= mv64x60_shift_left,
170		.map_to_field		= mv64x60_shift_right,
171		.extra			= 0 },
172	[MV64x60_CPU2PCI1_MEM_1_WIN] = {
173		.base_reg		= MV64x60_CPU2PCI1_MEM_1_BASE,
174		.size_reg		= MV64x60_CPU2PCI1_MEM_1_SIZE,
175		.base_bits		= 12,
176		.size_bits		= 12,
177		.get_from_field		= mv64x60_shift_left,
178		.map_to_field		= mv64x60_shift_right,
179		.extra			= 0 },
180	[MV64x60_CPU2PCI1_MEM_2_WIN] = {
181		.base_reg		= MV64x60_CPU2PCI1_MEM_2_BASE,
182		.size_reg		= MV64x60_CPU2PCI1_MEM_2_SIZE,
183		.base_bits		= 12,
184		.size_bits		= 12,
185		.get_from_field		= mv64x60_shift_left,
186		.map_to_field		= mv64x60_shift_right,
187		.extra			= 0 },
188	[MV64x60_CPU2PCI1_MEM_3_WIN] = {
189		.base_reg		= MV64x60_CPU2PCI1_MEM_3_BASE,
190		.size_reg		= MV64x60_CPU2PCI1_MEM_3_SIZE,
191		.base_bits		= 12,
192		.size_bits		= 12,
193		.get_from_field		= mv64x60_shift_left,
194		.map_to_field		= mv64x60_shift_right,
195		.extra			= 0 },
196	/* CPU->SRAM Window (64260 has no integrated SRAM) */
197	/* CPU->PCI 0 Remap I/O Window */
198	[MV64x60_CPU2PCI0_IO_REMAP_WIN] = {
199		.base_reg		= MV64x60_CPU2PCI0_IO_REMAP,
200		.size_reg		= 0,
201		.base_bits		= 12,
202		.size_bits		= 0,
203		.get_from_field		= mv64x60_shift_left,
204		.map_to_field		= mv64x60_shift_right,
205		.extra			= 0 },
206	/* CPU->PCI 1 Remap I/O Window */
207	[MV64x60_CPU2PCI1_IO_REMAP_WIN] = {
208		.base_reg		= MV64x60_CPU2PCI1_IO_REMAP,
209		.size_reg		= 0,
210		.base_bits		= 12,
211		.size_bits		= 0,
212		.get_from_field		= mv64x60_shift_left,
213		.map_to_field		= mv64x60_shift_right,
214		.extra			= 0 },
215	/* CPU Memory Protection Windows */
216	[MV64x60_CPU_PROT_0_WIN] = {
217		.base_reg		= MV64x60_CPU_PROT_BASE_0,
218		.size_reg		= MV64x60_CPU_PROT_SIZE_0,
219		.base_bits		= 12,
220		.size_bits		= 12,
221		.get_from_field		= mv64x60_shift_left,
222		.map_to_field		= mv64x60_shift_right,
223		.extra			= 0 },
224	[MV64x60_CPU_PROT_1_WIN] = {
225		.base_reg		= MV64x60_CPU_PROT_BASE_1,
226		.size_reg		= MV64x60_CPU_PROT_SIZE_1,
227		.base_bits		= 12,
228		.size_bits		= 12,
229		.get_from_field		= mv64x60_shift_left,
230		.map_to_field		= mv64x60_shift_right,
231		.extra			= 0 },
232	[MV64x60_CPU_PROT_2_WIN] = {
233		.base_reg		= MV64x60_CPU_PROT_BASE_2,
234		.size_reg		= MV64x60_CPU_PROT_SIZE_2,
235		.base_bits		= 12,
236		.size_bits		= 12,
237		.get_from_field		= mv64x60_shift_left,
238		.map_to_field		= mv64x60_shift_right,
239		.extra			= 0 },
240	[MV64x60_CPU_PROT_3_WIN] = {
241		.base_reg		= MV64x60_CPU_PROT_BASE_3,
242		.size_reg		= MV64x60_CPU_PROT_SIZE_3,
243		.base_bits		= 12,
244		.size_bits		= 12,
245		.get_from_field		= mv64x60_shift_left,
246		.map_to_field		= mv64x60_shift_right,
247		.extra			= 0 },
248	/* CPU Snoop Windows */
249	[MV64x60_CPU_SNOOP_0_WIN] = {
250		.base_reg		= GT64260_CPU_SNOOP_BASE_0,
251		.size_reg		= GT64260_CPU_SNOOP_SIZE_0,
252		.base_bits		= 12,
253		.size_bits		= 12,
254		.get_from_field		= mv64x60_shift_left,
255		.map_to_field		= mv64x60_shift_right,
256		.extra			= 0 },
257	[MV64x60_CPU_SNOOP_1_WIN] = {
258		.base_reg		= GT64260_CPU_SNOOP_BASE_1,
259		.size_reg		= GT64260_CPU_SNOOP_SIZE_1,
260		.base_bits		= 12,
261		.size_bits		= 12,
262		.get_from_field		= mv64x60_shift_left,
263		.map_to_field		= mv64x60_shift_right,
264		.extra			= 0 },
265	[MV64x60_CPU_SNOOP_2_WIN] = {
266		.base_reg		= GT64260_CPU_SNOOP_BASE_2,
267		.size_reg		= GT64260_CPU_SNOOP_SIZE_2,
268		.base_bits		= 12,
269		.size_bits		= 12,
270		.get_from_field		= mv64x60_shift_left,
271		.map_to_field		= mv64x60_shift_right,
272		.extra			= 0 },
273	[MV64x60_CPU_SNOOP_3_WIN] = {
274		.base_reg		= GT64260_CPU_SNOOP_BASE_3,
275		.size_reg		= GT64260_CPU_SNOOP_SIZE_3,
276		.base_bits		= 12,
277		.size_bits		= 12,
278		.get_from_field		= mv64x60_shift_left,
279		.map_to_field		= mv64x60_shift_right,
280		.extra			= 0 },
281	/* PCI 0->System Memory Remap Windows */
282	[MV64x60_PCI02MEM_REMAP_0_WIN] = {
283		.base_reg		= MV64x60_PCI0_SLAVE_MEM_0_REMAP,
284		.size_reg		= 0,
285		.base_bits		= 20,
286		.size_bits		= 0,
287		.get_from_field		= mv64x60_mask,
288		.map_to_field		= mv64x60_mask,
289		.extra			= 0 },
290	[MV64x60_PCI02MEM_REMAP_1_WIN] = {
291		.base_reg		= MV64x60_PCI0_SLAVE_MEM_1_REMAP,
292		.size_reg		= 0,
293		.base_bits		= 20,
294		.size_bits		= 0,
295		.get_from_field		= mv64x60_mask,
296		.map_to_field		= mv64x60_mask,
297		.extra			= 0 },
298	[MV64x60_PCI02MEM_REMAP_2_WIN] = {
299		.base_reg		= MV64x60_PCI0_SLAVE_MEM_1_REMAP,
300		.size_reg		= 0,
301		.base_bits		= 20,
302		.size_bits		= 0,
303		.get_from_field		= mv64x60_mask,
304		.map_to_field		= mv64x60_mask,
305		.extra			= 0 },
306	[MV64x60_PCI02MEM_REMAP_3_WIN] = {
307		.base_reg		= MV64x60_PCI0_SLAVE_MEM_1_REMAP,
308		.size_reg		= 0,
309		.base_bits		= 20,
310		.size_bits		= 0,
311		.get_from_field		= mv64x60_mask,
312		.map_to_field		= mv64x60_mask,
313		.extra			= 0 },
314	/* PCI 1->System Memory Remap Windows */
315	[MV64x60_PCI12MEM_REMAP_0_WIN] = {
316		.base_reg		= MV64x60_PCI1_SLAVE_MEM_0_REMAP,
317		.size_reg		= 0,
318		.base_bits		= 20,
319		.size_bits		= 0,
320		.get_from_field		= mv64x60_mask,
321		.map_to_field		= mv64x60_mask,
322		.extra			= 0 },
323	[MV64x60_PCI12MEM_REMAP_1_WIN] = {
324		.base_reg		= MV64x60_PCI1_SLAVE_MEM_1_REMAP,
325		.size_reg		= 0,
326		.base_bits		= 20,
327		.size_bits		= 0,
328		.get_from_field		= mv64x60_mask,
329		.map_to_field		= mv64x60_mask,
330		.extra			= 0 },
331	[MV64x60_PCI12MEM_REMAP_2_WIN] = {
332		.base_reg		= MV64x60_PCI1_SLAVE_MEM_1_REMAP,
333		.size_reg		= 0,
334		.base_bits		= 20,
335		.size_bits		= 0,
336		.get_from_field		= mv64x60_mask,
337		.map_to_field		= mv64x60_mask,
338		.extra			= 0 },
339	[MV64x60_PCI12MEM_REMAP_3_WIN] = {
340		.base_reg		= MV64x60_PCI1_SLAVE_MEM_1_REMAP,
341		.size_reg		= 0,
342		.base_bits		= 20,
343		.size_bits		= 0,
344		.get_from_field		= mv64x60_mask,
345		.map_to_field		= mv64x60_mask,
346		.extra			= 0 },
347	/* ENET->SRAM Window (64260 doesn't have separate windows) */
348	/* MPSC->SRAM Window (64260 doesn't have separate windows) */
349	/* IDMA->SRAM Window (64260 doesn't have separate windows) */
350};
351
352struct mv64x60_64bit_window
353	gt64260_64bit_windows[MV64x60_64BIT_WIN_COUNT] __initdata = {
354	/* CPU->PCI 0 MEM Remap Windows */
355	[MV64x60_CPU2PCI0_MEM_0_REMAP_WIN] = {
356		.base_hi_reg		= MV64x60_CPU2PCI0_MEM_0_REMAP_HI,
357		.base_lo_reg		= MV64x60_CPU2PCI0_MEM_0_REMAP_LO,
358		.size_reg		= 0,
359		.base_lo_bits		= 12,
360		.size_bits		= 0,
361		.get_from_field		= mv64x60_shift_left,
362		.map_to_field		= mv64x60_shift_right,
363		.extra			= 0 },
364	[MV64x60_CPU2PCI0_MEM_1_REMAP_WIN] = {
365		.base_hi_reg		= MV64x60_CPU2PCI0_MEM_1_REMAP_HI,
366		.base_lo_reg		= MV64x60_CPU2PCI0_MEM_1_REMAP_LO,
367		.size_reg		= 0,
368		.base_lo_bits		= 12,
369		.size_bits		= 0,
370		.get_from_field		= mv64x60_shift_left,
371		.map_to_field		= mv64x60_shift_right,
372		.extra			= 0 },
373	[MV64x60_CPU2PCI0_MEM_2_REMAP_WIN] = {
374		.base_hi_reg		= MV64x60_CPU2PCI0_MEM_2_REMAP_HI,
375		.base_lo_reg		= MV64x60_CPU2PCI0_MEM_2_REMAP_LO,
376		.size_reg		= 0,
377		.base_lo_bits		= 12,
378		.size_bits		= 0,
379		.get_from_field		= mv64x60_shift_left,
380		.map_to_field		= mv64x60_shift_right,
381		.extra			= 0 },
382	[MV64x60_CPU2PCI0_MEM_3_REMAP_WIN] = {
383		.base_hi_reg		= MV64x60_CPU2PCI0_MEM_3_REMAP_HI,
384		.base_lo_reg		= MV64x60_CPU2PCI0_MEM_3_REMAP_LO,
385		.size_reg		= 0,
386		.base_lo_bits		= 12,
387		.size_bits		= 0,
388		.get_from_field		= mv64x60_shift_left,
389		.map_to_field		= mv64x60_shift_right,
390		.extra			= 0 },
391	/* CPU->PCI 1 MEM Remap Windows */
392	[MV64x60_CPU2PCI1_MEM_0_REMAP_WIN] = {
393		.base_hi_reg		= MV64x60_CPU2PCI1_MEM_0_REMAP_HI,
394		.base_lo_reg		= MV64x60_CPU2PCI1_MEM_0_REMAP_LO,
395		.size_reg		= 0,
396		.base_lo_bits		= 12,
397		.size_bits		= 0,
398		.get_from_field		= mv64x60_shift_left,
399		.map_to_field		= mv64x60_shift_right,
400		.extra			= 0 },
401	[MV64x60_CPU2PCI1_MEM_1_REMAP_WIN] = {
402		.base_hi_reg		= MV64x60_CPU2PCI1_MEM_1_REMAP_HI,
403		.base_lo_reg		= MV64x60_CPU2PCI1_MEM_1_REMAP_LO,
404		.size_reg		= 0,
405		.base_lo_bits		= 12,
406		.size_bits		= 0,
407		.get_from_field		= mv64x60_shift_left,
408		.map_to_field		= mv64x60_shift_right,
409		.extra			= 0 },
410	[MV64x60_CPU2PCI1_MEM_2_REMAP_WIN] = {
411		.base_hi_reg		= MV64x60_CPU2PCI1_MEM_2_REMAP_HI,
412		.base_lo_reg		= MV64x60_CPU2PCI1_MEM_2_REMAP_LO,
413		.size_reg		= 0,
414		.base_lo_bits		= 12,
415		.size_bits		= 0,
416		.get_from_field		= mv64x60_shift_left,
417		.map_to_field		= mv64x60_shift_right,
418		.extra			= 0 },
419	[MV64x60_CPU2PCI1_MEM_3_REMAP_WIN] = {
420		.base_hi_reg		= MV64x60_CPU2PCI1_MEM_3_REMAP_HI,
421		.base_lo_reg		= MV64x60_CPU2PCI1_MEM_3_REMAP_LO,
422		.size_reg		= 0,
423		.base_lo_bits		= 12,
424		.size_bits		= 0,
425		.get_from_field		= mv64x60_shift_left,
426		.map_to_field		= mv64x60_shift_right,
427		.extra			= 0 },
428	/* PCI 0->MEM Access Control Windows */
429	[MV64x60_PCI02MEM_ACC_CNTL_0_WIN] = {
430		.base_hi_reg		= MV64x60_PCI0_ACC_CNTL_0_BASE_HI,
431		.base_lo_reg		= MV64x60_PCI0_ACC_CNTL_0_BASE_LO,
432		.size_reg		= MV64x60_PCI0_ACC_CNTL_0_SIZE,
433		.base_lo_bits		= 12,
434		.size_bits		= 12,
435		.get_from_field		= mv64x60_shift_left,
436		.map_to_field		= mv64x60_shift_right,
437		.extra			= 0 },
438	[MV64x60_PCI02MEM_ACC_CNTL_1_WIN] = {
439		.base_hi_reg		= MV64x60_PCI0_ACC_CNTL_1_BASE_HI,
440		.base_lo_reg		= MV64x60_PCI0_ACC_CNTL_1_BASE_LO,
441		.size_reg		= MV64x60_PCI0_ACC_CNTL_1_SIZE,
442		.base_lo_bits		= 12,
443		.size_bits		= 12,
444		.get_from_field		= mv64x60_shift_left,
445		.map_to_field		= mv64x60_shift_right,
446		.extra			= 0 },
447	[MV64x60_PCI02MEM_ACC_CNTL_2_WIN] = {
448		.base_hi_reg		= MV64x60_PCI0_ACC_CNTL_2_BASE_HI,
449		.base_lo_reg		= MV64x60_PCI0_ACC_CNTL_2_BASE_LO,
450		.size_reg		= MV64x60_PCI0_ACC_CNTL_2_SIZE,
451		.base_lo_bits		= 12,
452		.size_bits		= 12,
453		.get_from_field		= mv64x60_shift_left,
454		.map_to_field		= mv64x60_shift_right,
455		.extra			= 0 },
456	[MV64x60_PCI02MEM_ACC_CNTL_3_WIN] = {
457		.base_hi_reg		= MV64x60_PCI0_ACC_CNTL_3_BASE_HI,
458		.base_lo_reg		= MV64x60_PCI0_ACC_CNTL_3_BASE_LO,
459		.size_reg		= MV64x60_PCI0_ACC_CNTL_3_SIZE,
460		.base_lo_bits		= 12,
461		.size_bits		= 12,
462		.get_from_field		= mv64x60_shift_left,
463		.map_to_field		= mv64x60_shift_right,
464		.extra			= 0 },
465	/* PCI 1->MEM Access Control Windows */
466	[MV64x60_PCI12MEM_ACC_CNTL_0_WIN] = {
467		.base_hi_reg		= MV64x60_PCI1_ACC_CNTL_0_BASE_HI,
468		.base_lo_reg		= MV64x60_PCI1_ACC_CNTL_0_BASE_LO,
469		.size_reg		= MV64x60_PCI1_ACC_CNTL_0_SIZE,
470		.base_lo_bits		= 12,
471		.size_bits		= 12,
472		.get_from_field		= mv64x60_shift_left,
473		.map_to_field		= mv64x60_shift_right,
474		.extra			= 0 },
475	[MV64x60_PCI12MEM_ACC_CNTL_1_WIN] = {
476		.base_hi_reg		= MV64x60_PCI1_ACC_CNTL_1_BASE_HI,
477		.base_lo_reg		= MV64x60_PCI1_ACC_CNTL_1_BASE_LO,
478		.size_reg		= MV64x60_PCI1_ACC_CNTL_1_SIZE,
479		.base_lo_bits		= 12,
480		.size_bits		= 12,
481		.get_from_field		= mv64x60_shift_left,
482		.map_to_field		= mv64x60_shift_right,
483		.extra			= 0 },
484	[MV64x60_PCI12MEM_ACC_CNTL_2_WIN] = {
485		.base_hi_reg		= MV64x60_PCI1_ACC_CNTL_2_BASE_HI,
486		.base_lo_reg		= MV64x60_PCI1_ACC_CNTL_2_BASE_LO,
487		.size_reg		= MV64x60_PCI1_ACC_CNTL_2_SIZE,
488		.base_lo_bits		= 12,
489		.size_bits		= 12,
490		.get_from_field		= mv64x60_shift_left,
491		.map_to_field		= mv64x60_shift_right,
492		.extra			= 0 },
493	[MV64x60_PCI12MEM_ACC_CNTL_3_WIN] = {
494		.base_hi_reg		= MV64x60_PCI1_ACC_CNTL_3_BASE_HI,
495		.base_lo_reg		= MV64x60_PCI1_ACC_CNTL_3_BASE_LO,
496		.size_reg		= MV64x60_PCI1_ACC_CNTL_3_SIZE,
497		.base_lo_bits		= 12,
498		.size_bits		= 12,
499		.get_from_field		= mv64x60_shift_left,
500		.map_to_field		= mv64x60_shift_right,
501		.extra			= 0 },
502	/* PCI 0->MEM Snoop Windows */
503	[MV64x60_PCI02MEM_SNOOP_0_WIN] = {
504		.base_hi_reg		= GT64260_PCI0_SNOOP_0_BASE_HI,
505		.base_lo_reg		= GT64260_PCI0_SNOOP_0_BASE_LO,
506		.size_reg		= GT64260_PCI0_SNOOP_0_SIZE,
507		.base_lo_bits		= 12,
508		.size_bits		= 12,
509		.get_from_field		= mv64x60_shift_left,
510		.map_to_field		= mv64x60_shift_right,
511		.extra			= 0 },
512	[MV64x60_PCI02MEM_SNOOP_1_WIN] = {
513		.base_hi_reg		= GT64260_PCI0_SNOOP_1_BASE_HI,
514		.base_lo_reg		= GT64260_PCI0_SNOOP_1_BASE_LO,
515		.size_reg		= GT64260_PCI0_SNOOP_1_SIZE,
516		.base_lo_bits		= 12,
517		.size_bits		= 12,
518		.get_from_field		= mv64x60_shift_left,
519		.map_to_field		= mv64x60_shift_right,
520		.extra			= 0 },
521	[MV64x60_PCI02MEM_SNOOP_2_WIN] = {
522		.base_hi_reg		= GT64260_PCI0_SNOOP_2_BASE_HI,
523		.base_lo_reg		= GT64260_PCI0_SNOOP_2_BASE_LO,
524		.size_reg		= GT64260_PCI0_SNOOP_2_SIZE,
525		.base_lo_bits		= 12,
526		.size_bits		= 12,
527		.get_from_field		= mv64x60_shift_left,
528		.map_to_field		= mv64x60_shift_right,
529		.extra			= 0 },
530	[MV64x60_PCI02MEM_SNOOP_3_WIN] = {
531		.base_hi_reg		= GT64260_PCI0_SNOOP_3_BASE_HI,
532		.base_lo_reg		= GT64260_PCI0_SNOOP_3_BASE_LO,
533		.size_reg		= GT64260_PCI0_SNOOP_3_SIZE,
534		.base_lo_bits		= 12,
535		.size_bits		= 12,
536		.get_from_field		= mv64x60_shift_left,
537		.map_to_field		= mv64x60_shift_right,
538		.extra			= 0 },
539	/* PCI 1->MEM Snoop Windows */
540	[MV64x60_PCI12MEM_SNOOP_0_WIN] = {
541		.base_hi_reg		= GT64260_PCI1_SNOOP_0_BASE_HI,
542		.base_lo_reg		= GT64260_PCI1_SNOOP_0_BASE_LO,
543		.size_reg		= GT64260_PCI1_SNOOP_0_SIZE,
544		.base_lo_bits		= 12,
545		.size_bits		= 12,
546		.get_from_field		= mv64x60_shift_left,
547		.map_to_field		= mv64x60_shift_right,
548		.extra			= 0 },
549	[MV64x60_PCI12MEM_SNOOP_1_WIN] = {
550		.base_hi_reg		= GT64260_PCI1_SNOOP_1_BASE_HI,
551		.base_lo_reg		= GT64260_PCI1_SNOOP_1_BASE_LO,
552		.size_reg		= GT64260_PCI1_SNOOP_1_SIZE,
553		.base_lo_bits		= 12,
554		.size_bits		= 12,
555		.get_from_field		= mv64x60_shift_left,
556		.map_to_field		= mv64x60_shift_right,
557		.extra			= 0 },
558	[MV64x60_PCI12MEM_SNOOP_2_WIN] = {
559		.base_hi_reg		= GT64260_PCI1_SNOOP_2_BASE_HI,
560		.base_lo_reg		= GT64260_PCI1_SNOOP_2_BASE_LO,
561		.size_reg		= GT64260_PCI1_SNOOP_2_SIZE,
562		.base_lo_bits		= 12,
563		.size_bits		= 12,
564		.get_from_field		= mv64x60_shift_left,
565		.map_to_field		= mv64x60_shift_right,
566		.extra			= 0 },
567	[MV64x60_PCI12MEM_SNOOP_3_WIN] = {
568		.base_hi_reg		= GT64260_PCI1_SNOOP_3_BASE_HI,
569		.base_lo_reg		= GT64260_PCI1_SNOOP_3_BASE_LO,
570		.size_reg		= GT64260_PCI1_SNOOP_3_SIZE,
571		.base_lo_bits		= 12,
572		.size_bits		= 12,
573		.get_from_field		= mv64x60_shift_left,
574		.map_to_field		= mv64x60_shift_right,
575		.extra			= 0 },
576};
577
578struct mv64x60_32bit_window
579	mv64360_32bit_windows[MV64x60_32BIT_WIN_COUNT] __initdata = {
580	/* CPU->MEM Windows */
581	[MV64x60_CPU2MEM_0_WIN] = {
582		.base_reg		= MV64x60_CPU2MEM_0_BASE,
583		.size_reg		= MV64x60_CPU2MEM_0_SIZE,
584		.base_bits		= 16,
585		.size_bits		= 16,
586		.get_from_field		= mv64x60_shift_left,
587		.map_to_field		= mv64x60_shift_right,
588		.extra			= MV64x60_EXTRA_CPUWIN_ENAB | 0 },
589	[MV64x60_CPU2MEM_1_WIN] = {
590		.base_reg		= MV64x60_CPU2MEM_1_BASE,
591		.size_reg		= MV64x60_CPU2MEM_1_SIZE,
592		.base_bits		= 16,
593		.size_bits		= 16,
594		.get_from_field		= mv64x60_shift_left,
595		.map_to_field		= mv64x60_shift_right,
596		.extra			= MV64x60_EXTRA_CPUWIN_ENAB | 1 },
597	[MV64x60_CPU2MEM_2_WIN] = {
598		.base_reg		= MV64x60_CPU2MEM_2_BASE,
599		.size_reg		= MV64x60_CPU2MEM_2_SIZE,
600		.base_bits		= 16,
601		.size_bits		= 16,
602		.get_from_field		= mv64x60_shift_left,
603		.map_to_field		= mv64x60_shift_right,
604		.extra			= MV64x60_EXTRA_CPUWIN_ENAB | 2 },
605	[MV64x60_CPU2MEM_3_WIN] = {
606		.base_reg		= MV64x60_CPU2MEM_3_BASE,
607		.size_reg		= MV64x60_CPU2MEM_3_SIZE,
608		.base_bits		= 16,
609		.size_bits		= 16,
610		.get_from_field		= mv64x60_shift_left,
611		.map_to_field		= mv64x60_shift_right,
612		.extra			= MV64x60_EXTRA_CPUWIN_ENAB | 3 },
613	/* CPU->Device Windows */
614	[MV64x60_CPU2DEV_0_WIN] = {
615		.base_reg		= MV64x60_CPU2DEV_0_BASE,
616		.size_reg		= MV64x60_CPU2DEV_0_SIZE,
617		.base_bits		= 16,
618		.size_bits		= 16,
619		.get_from_field		= mv64x60_shift_left,
620		.map_to_field		= mv64x60_shift_right,
621		.extra			= MV64x60_EXTRA_CPUWIN_ENAB | 4 },
622	[MV64x60_CPU2DEV_1_WIN] = {
623		.base_reg		= MV64x60_CPU2DEV_1_BASE,
624		.size_reg		= MV64x60_CPU2DEV_1_SIZE,
625		.base_bits		= 16,
626		.size_bits		= 16,
627		.get_from_field		= mv64x60_shift_left,
628		.map_to_field		= mv64x60_shift_right,
629		.extra			= MV64x60_EXTRA_CPUWIN_ENAB | 5 },
630	[MV64x60_CPU2DEV_2_WIN] = {
631		.base_reg		= MV64x60_CPU2DEV_2_BASE,
632		.size_reg		= MV64x60_CPU2DEV_2_SIZE,
633		.base_bits		= 16,
634		.size_bits		= 16,
635		.get_from_field		= mv64x60_shift_left,
636		.map_to_field		= mv64x60_shift_right,
637		.extra			= MV64x60_EXTRA_CPUWIN_ENAB | 6 },
638	[MV64x60_CPU2DEV_3_WIN] = {
639		.base_reg		= MV64x60_CPU2DEV_3_BASE,
640		.size_reg		= MV64x60_CPU2DEV_3_SIZE,
641		.base_bits		= 16,
642		.size_bits		= 16,
643		.get_from_field		= mv64x60_shift_left,
644		.map_to_field		= mv64x60_shift_right,
645		.extra			= MV64x60_EXTRA_CPUWIN_ENAB | 7 },
646	/* CPU->Boot Window */
647	[MV64x60_CPU2BOOT_WIN] = {
648		.base_reg		= MV64x60_CPU2BOOT_0_BASE,
649		.size_reg		= MV64x60_CPU2BOOT_0_SIZE,
650		.base_bits		= 16,
651		.size_bits		= 16,
652		.get_from_field		= mv64x60_shift_left,
653		.map_to_field		= mv64x60_shift_right,
654		.extra			= MV64x60_EXTRA_CPUWIN_ENAB | 8 },
655	/* CPU->PCI 0 Windows */
656	[MV64x60_CPU2PCI0_IO_WIN] = {
657		.base_reg		= MV64x60_CPU2PCI0_IO_BASE,
658		.size_reg		= MV64x60_CPU2PCI0_IO_SIZE,
659		.base_bits		= 16,
660		.size_bits		= 16,
661		.get_from_field		= mv64x60_shift_left,
662		.map_to_field		= mv64x60_shift_right,
663		.extra			= MV64x60_EXTRA_CPUWIN_ENAB | 9 },
664	[MV64x60_CPU2PCI0_MEM_0_WIN] = {
665		.base_reg		= MV64x60_CPU2PCI0_MEM_0_BASE,
666		.size_reg		= MV64x60_CPU2PCI0_MEM_0_SIZE,
667		.base_bits		= 16,
668		.size_bits		= 16,
669		.get_from_field		= mv64x60_shift_left,
670		.map_to_field		= mv64x60_shift_right,
671		.extra			= MV64x60_EXTRA_CPUWIN_ENAB | 10 },
672	[MV64x60_CPU2PCI0_MEM_1_WIN] = {
673		.base_reg		= MV64x60_CPU2PCI0_MEM_1_BASE,
674		.size_reg		= MV64x60_CPU2PCI0_MEM_1_SIZE,
675		.base_bits		= 16,
676		.size_bits		= 16,
677		.get_from_field		= mv64x60_shift_left,
678		.map_to_field		= mv64x60_shift_right,
679		.extra			= MV64x60_EXTRA_CPUWIN_ENAB | 11 },
680	[MV64x60_CPU2PCI0_MEM_2_WIN] = {
681		.base_reg		= MV64x60_CPU2PCI0_MEM_2_BASE,
682		.size_reg		= MV64x60_CPU2PCI0_MEM_2_SIZE,
683		.base_bits		= 16,
684		.size_bits		= 16,
685		.get_from_field		= mv64x60_shift_left,
686		.map_to_field		= mv64x60_shift_right,
687		.extra			= MV64x60_EXTRA_CPUWIN_ENAB | 12 },
688	[MV64x60_CPU2PCI0_MEM_3_WIN] = {
689		.base_reg		= MV64x60_CPU2PCI0_MEM_3_BASE,
690		.size_reg		= MV64x60_CPU2PCI0_MEM_3_SIZE,
691		.base_bits		= 16,
692		.size_bits		= 16,
693		.get_from_field		= mv64x60_shift_left,
694		.map_to_field		= mv64x60_shift_right,
695		.extra			= MV64x60_EXTRA_CPUWIN_ENAB | 13 },
696	/* CPU->PCI 1 Windows */
697	[MV64x60_CPU2PCI1_IO_WIN] = {
698		.base_reg		= MV64x60_CPU2PCI1_IO_BASE,
699		.size_reg		= MV64x60_CPU2PCI1_IO_SIZE,
700		.base_bits		= 16,
701		.size_bits		= 16,
702		.get_from_field		= mv64x60_shift_left,
703		.map_to_field		= mv64x60_shift_right,
704		.extra			= MV64x60_EXTRA_CPUWIN_ENAB | 14 },
705	[MV64x60_CPU2PCI1_MEM_0_WIN] = {
706		.base_reg		= MV64x60_CPU2PCI1_MEM_0_BASE,
707		.size_reg		= MV64x60_CPU2PCI1_MEM_0_SIZE,
708		.base_bits		= 16,
709		.size_bits		= 16,
710		.get_from_field		= mv64x60_shift_left,
711		.map_to_field		= mv64x60_shift_right,
712		.extra			= MV64x60_EXTRA_CPUWIN_ENAB | 15 },
713	[MV64x60_CPU2PCI1_MEM_1_WIN] = {
714		.base_reg		= MV64x60_CPU2PCI1_MEM_1_BASE,
715		.size_reg		= MV64x60_CPU2PCI1_MEM_1_SIZE,
716		.base_bits		= 16,
717		.size_bits		= 16,
718		.get_from_field		= mv64x60_shift_left,
719		.map_to_field		= mv64x60_shift_right,
720		.extra			= MV64x60_EXTRA_CPUWIN_ENAB | 16 },
721	[MV64x60_CPU2PCI1_MEM_2_WIN] = {
722		.base_reg		= MV64x60_CPU2PCI1_MEM_2_BASE,
723		.size_reg		= MV64x60_CPU2PCI1_MEM_2_SIZE,
724		.base_bits		= 16,
725		.size_bits		= 16,
726		.get_from_field		= mv64x60_shift_left,
727		.map_to_field		= mv64x60_shift_right,
728		.extra			= MV64x60_EXTRA_CPUWIN_ENAB | 17 },
729	[MV64x60_CPU2PCI1_MEM_3_WIN] = {
730		.base_reg		= MV64x60_CPU2PCI1_MEM_3_BASE,
731		.size_reg		= MV64x60_CPU2PCI1_MEM_3_SIZE,
732		.base_bits		= 16,
733		.size_bits		= 16,
734		.get_from_field		= mv64x60_shift_left,
735		.map_to_field		= mv64x60_shift_right,
736		.extra			= MV64x60_EXTRA_CPUWIN_ENAB | 18 },
737	/* CPU->SRAM Window */
738	[MV64x60_CPU2SRAM_WIN] = {
739		.base_reg		= MV64360_CPU2SRAM_BASE,
740		.size_reg		= 0,
741		.base_bits		= 16,
742		.size_bits		= 0,
743		.get_from_field		= mv64x60_shift_left,
744		.map_to_field		= mv64x60_shift_right,
745		.extra			= MV64x60_EXTRA_CPUWIN_ENAB | 19 },
746	/* CPU->PCI 0 Remap I/O Window */
747	[MV64x60_CPU2PCI0_IO_REMAP_WIN] = {
748		.base_reg		= MV64x60_CPU2PCI0_IO_REMAP,
749		.size_reg		= 0,
750		.base_bits		= 16,
751		.size_bits		= 0,
752		.get_from_field		= mv64x60_shift_left,
753		.map_to_field		= mv64x60_shift_right,
754		.extra			= 0 },
755	/* CPU->PCI 1 Remap I/O Window */
756	[MV64x60_CPU2PCI1_IO_REMAP_WIN] = {
757		.base_reg		= MV64x60_CPU2PCI1_IO_REMAP,
758		.size_reg		= 0,
759		.base_bits		= 16,
760		.size_bits		= 0,
761		.get_from_field		= mv64x60_shift_left,
762		.map_to_field		= mv64x60_shift_right,
763		.extra			= 0 },
764	/* CPU Memory Protection Windows */
765	[MV64x60_CPU_PROT_0_WIN] = {
766		.base_reg		= MV64x60_CPU_PROT_BASE_0,
767		.size_reg		= MV64x60_CPU_PROT_SIZE_0,
768		.base_bits		= 16,
769		.size_bits		= 16,
770		.get_from_field		= mv64x60_shift_left,
771		.map_to_field		= mv64x60_shift_right,
772		.extra			= MV64x60_EXTRA_CPUPROT_ENAB | 31 },
773	[MV64x60_CPU_PROT_1_WIN] = {
774		.base_reg		= MV64x60_CPU_PROT_BASE_1,
775		.size_reg		= MV64x60_CPU_PROT_SIZE_1,
776		.base_bits		= 16,
777		.size_bits		= 16,
778		.get_from_field		= mv64x60_shift_left,
779		.map_to_field		= mv64x60_shift_right,
780		.extra			= MV64x60_EXTRA_CPUPROT_ENAB | 31 },
781	[MV64x60_CPU_PROT_2_WIN] = {
782		.base_reg		= MV64x60_CPU_PROT_BASE_2,
783		.size_reg		= MV64x60_CPU_PROT_SIZE_2,
784		.base_bits		= 16,
785		.size_bits		= 16,
786		.get_from_field		= mv64x60_shift_left,
787		.map_to_field		= mv64x60_shift_right,
788		.extra			= MV64x60_EXTRA_CPUPROT_ENAB | 31 },
789	[MV64x60_CPU_PROT_3_WIN] = {
790		.base_reg		= MV64x60_CPU_PROT_BASE_3,
791		.size_reg		= MV64x60_CPU_PROT_SIZE_3,
792		.base_bits		= 16,
793		.size_bits		= 16,
794		.get_from_field		= mv64x60_shift_left,
795		.map_to_field		= mv64x60_shift_right,
796		.extra			= MV64x60_EXTRA_CPUPROT_ENAB | 31 },
797	/* CPU Snoop Windows -- don't exist on 64360 */
798	/* PCI 0->System Memory Remap Windows */
799	[MV64x60_PCI02MEM_REMAP_0_WIN] = {
800		.base_reg		= MV64x60_PCI0_SLAVE_MEM_0_REMAP,
801		.size_reg		= 0,
802		.base_bits		= 20,
803		.size_bits		= 0,
804		.get_from_field		= mv64x60_mask,
805		.map_to_field		= mv64x60_mask,
806		.extra			= 0 },
807	[MV64x60_PCI02MEM_REMAP_1_WIN] = {
808		.base_reg		= MV64x60_PCI0_SLAVE_MEM_1_REMAP,
809		.size_reg		= 0,
810		.base_bits		= 20,
811		.size_bits		= 0,
812		.get_from_field		= mv64x60_mask,
813		.map_to_field		= mv64x60_mask,
814		.extra			= 0 },
815	[MV64x60_PCI02MEM_REMAP_2_WIN] = {
816		.base_reg		= MV64x60_PCI0_SLAVE_MEM_1_REMAP,
817		.size_reg		= 0,
818		.base_bits		= 20,
819		.size_bits		= 0,
820		.get_from_field		= mv64x60_mask,
821		.map_to_field		= mv64x60_mask,
822		.extra			= 0 },
823	[MV64x60_PCI02MEM_REMAP_3_WIN] = {
824		.base_reg		= MV64x60_PCI0_SLAVE_MEM_1_REMAP,
825		.size_reg		= 0,
826		.base_bits		= 20,
827		.size_bits		= 0,
828		.get_from_field		= mv64x60_mask,
829		.map_to_field		= mv64x60_mask,
830		.extra			= 0 },
831	/* PCI 1->System Memory Remap Windows */
832	[MV64x60_PCI12MEM_REMAP_0_WIN] = {
833		.base_reg		= MV64x60_PCI1_SLAVE_MEM_0_REMAP,
834		.size_reg		= 0,
835		.base_bits		= 20,
836		.size_bits		= 0,
837		.get_from_field		= mv64x60_mask,
838		.map_to_field		= mv64x60_mask,
839		.extra			= 0 },
840	[MV64x60_PCI12MEM_REMAP_1_WIN] = {
841		.base_reg		= MV64x60_PCI1_SLAVE_MEM_1_REMAP,
842		.size_reg		= 0,
843		.base_bits		= 20,
844		.size_bits		= 0,
845		.get_from_field		= mv64x60_mask,
846		.map_to_field		= mv64x60_mask,
847		.extra			= 0 },
848	[MV64x60_PCI12MEM_REMAP_2_WIN] = {
849		.base_reg		= MV64x60_PCI1_SLAVE_MEM_1_REMAP,
850		.size_reg		= 0,
851		.base_bits		= 20,
852		.size_bits		= 0,
853		.get_from_field		= mv64x60_mask,
854		.map_to_field		= mv64x60_mask,
855		.extra			= 0 },
856	[MV64x60_PCI12MEM_REMAP_3_WIN] = {
857		.base_reg		= MV64x60_PCI1_SLAVE_MEM_1_REMAP,
858		.size_reg		= 0,
859		.base_bits		= 20,
860		.size_bits		= 0,
861		.get_from_field		= mv64x60_mask,
862		.map_to_field		= mv64x60_mask,
863		.extra			= 0 },
864	/* ENET->System Memory Windows */
865	[MV64x60_ENET2MEM_0_WIN] = {
866		.base_reg		= MV64360_ENET2MEM_0_BASE,
867		.size_reg		= MV64360_ENET2MEM_0_SIZE,
868		.base_bits		= 16,
869		.size_bits		= 16,
870		.get_from_field		= mv64x60_mask,
871		.map_to_field		= mv64x60_mask,
872		.extra			= MV64x60_EXTRA_ENET_ENAB | 0 },
873	[MV64x60_ENET2MEM_1_WIN] = {
874		.base_reg		= MV64360_ENET2MEM_1_BASE,
875		.size_reg		= MV64360_ENET2MEM_1_SIZE,
876		.base_bits		= 16,
877		.size_bits		= 16,
878		.get_from_field		= mv64x60_mask,
879		.map_to_field		= mv64x60_mask,
880		.extra			= MV64x60_EXTRA_ENET_ENAB | 1 },
881	[MV64x60_ENET2MEM_2_WIN] = {
882		.base_reg		= MV64360_ENET2MEM_2_BASE,
883		.size_reg		= MV64360_ENET2MEM_2_SIZE,
884		.base_bits		= 16,
885		.size_bits		= 16,
886		.get_from_field		= mv64x60_mask,
887		.map_to_field		= mv64x60_mask,
888		.extra			= MV64x60_EXTRA_ENET_ENAB | 2 },
889	[MV64x60_ENET2MEM_3_WIN] = {
890		.base_reg		= MV64360_ENET2MEM_3_BASE,
891		.size_reg		= MV64360_ENET2MEM_3_SIZE,
892		.base_bits		= 16,
893		.size_bits		= 16,
894		.get_from_field		= mv64x60_mask,
895		.map_to_field		= mv64x60_mask,
896		.extra			= MV64x60_EXTRA_ENET_ENAB | 3 },
897	[MV64x60_ENET2MEM_4_WIN] = {
898		.base_reg		= MV64360_ENET2MEM_4_BASE,
899		.size_reg		= MV64360_ENET2MEM_4_SIZE,
900		.base_bits		= 16,
901		.size_bits		= 16,
902		.get_from_field		= mv64x60_mask,
903		.map_to_field		= mv64x60_mask,
904		.extra			= MV64x60_EXTRA_ENET_ENAB | 4 },
905	[MV64x60_ENET2MEM_5_WIN] = {
906		.base_reg		= MV64360_ENET2MEM_5_BASE,
907		.size_reg		= MV64360_ENET2MEM_5_SIZE,
908		.base_bits		= 16,
909		.size_bits		= 16,
910		.get_from_field		= mv64x60_mask,
911		.map_to_field		= mv64x60_mask,
912		.extra			= MV64x60_EXTRA_ENET_ENAB | 5 },
913	/* MPSC->System Memory Windows */
914	[MV64x60_MPSC2MEM_0_WIN] = {
915		.base_reg		= MV64360_MPSC2MEM_0_BASE,
916		.size_reg		= MV64360_MPSC2MEM_0_SIZE,
917		.base_bits		= 16,
918		.size_bits		= 16,
919		.get_from_field		= mv64x60_mask,
920		.map_to_field		= mv64x60_mask,
921		.extra			= MV64x60_EXTRA_MPSC_ENAB | 0 },
922	[MV64x60_MPSC2MEM_1_WIN] = {
923		.base_reg		= MV64360_MPSC2MEM_1_BASE,
924		.size_reg		= MV64360_MPSC2MEM_1_SIZE,
925		.base_bits		= 16,
926		.size_bits		= 16,
927		.get_from_field		= mv64x60_mask,
928		.map_to_field		= mv64x60_mask,
929		.extra			= MV64x60_EXTRA_MPSC_ENAB | 1 },
930	[MV64x60_MPSC2MEM_2_WIN] = {
931		.base_reg		= MV64360_MPSC2MEM_2_BASE,
932		.size_reg		= MV64360_MPSC2MEM_2_SIZE,
933		.base_bits		= 16,
934		.size_bits		= 16,
935		.get_from_field		= mv64x60_mask,
936		.map_to_field		= mv64x60_mask,
937		.extra			= MV64x60_EXTRA_MPSC_ENAB | 2 },
938	[MV64x60_MPSC2MEM_3_WIN] = {
939		.base_reg		= MV64360_MPSC2MEM_3_BASE,
940		.size_reg		= MV64360_MPSC2MEM_3_SIZE,
941		.base_bits		= 16,
942		.size_bits		= 16,
943		.get_from_field		= mv64x60_mask,
944		.map_to_field		= mv64x60_mask,
945		.extra			= MV64x60_EXTRA_MPSC_ENAB | 3 },
946	/* IDMA->System Memory Windows */
947	[MV64x60_IDMA2MEM_0_WIN] = {
948		.base_reg		= MV64360_IDMA2MEM_0_BASE,
949		.size_reg		= MV64360_IDMA2MEM_0_SIZE,
950		.base_bits		= 16,
951		.size_bits		= 16,
952		.get_from_field		= mv64x60_mask,
953		.map_to_field		= mv64x60_mask,
954		.extra			= MV64x60_EXTRA_IDMA_ENAB | 0 },
955	[MV64x60_IDMA2MEM_1_WIN] = {
956		.base_reg		= MV64360_IDMA2MEM_1_BASE,
957		.size_reg		= MV64360_IDMA2MEM_1_SIZE,
958		.base_bits		= 16,
959		.size_bits		= 16,
960		.get_from_field		= mv64x60_mask,
961		.map_to_field		= mv64x60_mask,
962		.extra			= MV64x60_EXTRA_IDMA_ENAB | 1 },
963	[MV64x60_IDMA2MEM_2_WIN] = {
964		.base_reg		= MV64360_IDMA2MEM_2_BASE,
965		.size_reg		= MV64360_IDMA2MEM_2_SIZE,
966		.base_bits		= 16,
967		.size_bits		= 16,
968		.get_from_field		= mv64x60_mask,
969		.map_to_field		= mv64x60_mask,
970		.extra			= MV64x60_EXTRA_IDMA_ENAB | 2 },
971	[MV64x60_IDMA2MEM_3_WIN] = {
972		.base_reg		= MV64360_IDMA2MEM_3_BASE,
973		.size_reg		= MV64360_IDMA2MEM_3_SIZE,
974		.base_bits		= 16,
975		.size_bits		= 16,
976		.get_from_field		= mv64x60_mask,
977		.map_to_field		= mv64x60_mask,
978		.extra			= MV64x60_EXTRA_IDMA_ENAB | 3 },
979	[MV64x60_IDMA2MEM_4_WIN] = {
980		.base_reg		= MV64360_IDMA2MEM_4_BASE,
981		.size_reg		= MV64360_IDMA2MEM_4_SIZE,
982		.base_bits		= 16,
983		.size_bits		= 16,
984		.get_from_field		= mv64x60_mask,
985		.map_to_field		= mv64x60_mask,
986		.extra			= MV64x60_EXTRA_IDMA_ENAB | 4 },
987	[MV64x60_IDMA2MEM_5_WIN] = {
988		.base_reg		= MV64360_IDMA2MEM_5_BASE,
989		.size_reg		= MV64360_IDMA2MEM_5_SIZE,
990		.base_bits		= 16,
991		.size_bits		= 16,
992		.get_from_field		= mv64x60_mask,
993		.map_to_field		= mv64x60_mask,
994		.extra			= MV64x60_EXTRA_IDMA_ENAB | 5 },
995	[MV64x60_IDMA2MEM_6_WIN] = {
996		.base_reg		= MV64360_IDMA2MEM_6_BASE,
997		.size_reg		= MV64360_IDMA2MEM_6_SIZE,
998		.base_bits		= 16,
999		.size_bits		= 16,
1000		.get_from_field		= mv64x60_mask,
1001		.map_to_field		= mv64x60_mask,
1002		.extra			= MV64x60_EXTRA_IDMA_ENAB | 6 },
1003	[MV64x60_IDMA2MEM_7_WIN] = {
1004		.base_reg		= MV64360_IDMA2MEM_7_BASE,
1005		.size_reg		= MV64360_IDMA2MEM_7_SIZE,
1006		.base_bits		= 16,
1007		.size_bits		= 16,
1008		.get_from_field		= mv64x60_mask,
1009		.map_to_field		= mv64x60_mask,
1010		.extra			= MV64x60_EXTRA_IDMA_ENAB | 7 },
1011};
1012
1013struct mv64x60_64bit_window
1014	mv64360_64bit_windows[MV64x60_64BIT_WIN_COUNT] __initdata = {
1015	/* CPU->PCI 0 MEM Remap Windows */
1016	[MV64x60_CPU2PCI0_MEM_0_REMAP_WIN] = {
1017		.base_hi_reg		= MV64x60_CPU2PCI0_MEM_0_REMAP_HI,
1018		.base_lo_reg		= MV64x60_CPU2PCI0_MEM_0_REMAP_LO,
1019		.size_reg		= 0,
1020		.base_lo_bits		= 16,
1021		.size_bits		= 0,
1022		.get_from_field		= mv64x60_shift_left,
1023		.map_to_field		= mv64x60_shift_right,
1024		.extra			= 0 },
1025	[MV64x60_CPU2PCI0_MEM_1_REMAP_WIN] = {
1026		.base_hi_reg		= MV64x60_CPU2PCI0_MEM_1_REMAP_HI,
1027		.base_lo_reg		= MV64x60_CPU2PCI0_MEM_1_REMAP_LO,
1028		.size_reg		= 0,
1029		.base_lo_bits		= 16,
1030		.size_bits		= 0,
1031		.get_from_field		= mv64x60_shift_left,
1032		.map_to_field		= mv64x60_shift_right,
1033		.extra			= 0 },
1034	[MV64x60_CPU2PCI0_MEM_2_REMAP_WIN] = {
1035		.base_hi_reg		= MV64x60_CPU2PCI0_MEM_2_REMAP_HI,
1036		.base_lo_reg		= MV64x60_CPU2PCI0_MEM_2_REMAP_LO,
1037		.size_reg		= 0,
1038		.base_lo_bits		= 16,
1039		.size_bits		= 0,
1040		.get_from_field		= mv64x60_shift_left,
1041		.map_to_field		= mv64x60_shift_right,
1042		.extra			= 0 },
1043	[MV64x60_CPU2PCI0_MEM_3_REMAP_WIN] = {
1044		.base_hi_reg		= MV64x60_CPU2PCI0_MEM_3_REMAP_HI,
1045		.base_lo_reg		= MV64x60_CPU2PCI0_MEM_3_REMAP_LO,
1046		.size_reg		= 0,
1047		.base_lo_bits		= 16,
1048		.size_bits		= 0,
1049		.get_from_field		= mv64x60_shift_left,
1050		.map_to_field		= mv64x60_shift_right,
1051		.extra			= 0 },
1052	/* CPU->PCI 1 MEM Remap Windows */
1053	[MV64x60_CPU2PCI1_MEM_0_REMAP_WIN] = {
1054		.base_hi_reg		= MV64x60_CPU2PCI1_MEM_0_REMAP_HI,
1055		.base_lo_reg		= MV64x60_CPU2PCI1_MEM_0_REMAP_LO,
1056		.size_reg		= 0,
1057		.base_lo_bits		= 16,
1058		.size_bits		= 0,
1059		.get_from_field		= mv64x60_shift_left,
1060		.map_to_field		= mv64x60_shift_right,
1061		.extra			= 0 },
1062	[MV64x60_CPU2PCI1_MEM_1_REMAP_WIN] = {
1063		.base_hi_reg		= MV64x60_CPU2PCI1_MEM_1_REMAP_HI,
1064		.base_lo_reg		= MV64x60_CPU2PCI1_MEM_1_REMAP_LO,
1065		.size_reg		= 0,
1066		.base_lo_bits		= 16,
1067		.size_bits		= 0,
1068		.get_from_field		= mv64x60_shift_left,
1069		.map_to_field		= mv64x60_shift_right,
1070		.extra			= 0 },
1071	[MV64x60_CPU2PCI1_MEM_2_REMAP_WIN] = {
1072		.base_hi_reg		= MV64x60_CPU2PCI1_MEM_2_REMAP_HI,
1073		.base_lo_reg		= MV64x60_CPU2PCI1_MEM_2_REMAP_LO,
1074		.size_reg		= 0,
1075		.base_lo_bits		= 16,
1076		.size_bits		= 0,
1077		.get_from_field		= mv64x60_shift_left,
1078		.map_to_field		= mv64x60_shift_right,
1079		.extra			= 0 },
1080	[MV64x60_CPU2PCI1_MEM_3_REMAP_WIN] = {
1081		.base_hi_reg		= MV64x60_CPU2PCI1_MEM_3_REMAP_HI,
1082		.base_lo_reg		= MV64x60_CPU2PCI1_MEM_3_REMAP_LO,
1083		.size_reg		= 0,
1084		.base_lo_bits		= 16,
1085		.size_bits		= 0,
1086		.get_from_field		= mv64x60_shift_left,
1087		.map_to_field		= mv64x60_shift_right,
1088		.extra			= 0 },
1089	/* PCI 0->MEM Access Control Windows */
1090	[MV64x60_PCI02MEM_ACC_CNTL_0_WIN] = {
1091		.base_hi_reg		= MV64x60_PCI0_ACC_CNTL_0_BASE_HI,
1092		.base_lo_reg		= MV64x60_PCI0_ACC_CNTL_0_BASE_LO,
1093		.size_reg		= MV64x60_PCI0_ACC_CNTL_0_SIZE,
1094		.base_lo_bits		= 20,
1095		.size_bits		= 20,
1096		.get_from_field		= mv64x60_mask,
1097		.map_to_field		= mv64x60_mask,
1098		.extra			= MV64x60_EXTRA_PCIACC_ENAB | 0 },
1099	[MV64x60_PCI02MEM_ACC_CNTL_1_WIN] = {
1100		.base_hi_reg		= MV64x60_PCI0_ACC_CNTL_1_BASE_HI,
1101		.base_lo_reg		= MV64x60_PCI0_ACC_CNTL_1_BASE_LO,
1102		.size_reg		= MV64x60_PCI0_ACC_CNTL_1_SIZE,
1103		.base_lo_bits		= 20,
1104		.size_bits		= 20,
1105		.get_from_field		= mv64x60_mask,
1106		.map_to_field		= mv64x60_mask,
1107		.extra			= MV64x60_EXTRA_PCIACC_ENAB | 0 },
1108	[MV64x60_PCI02MEM_ACC_CNTL_2_WIN] = {
1109		.base_hi_reg		= MV64x60_PCI0_ACC_CNTL_2_BASE_HI,
1110		.base_lo_reg		= MV64x60_PCI0_ACC_CNTL_2_BASE_LO,
1111		.size_reg		= MV64x60_PCI0_ACC_CNTL_2_SIZE,
1112		.base_lo_bits		= 20,
1113		.size_bits		= 20,
1114		.get_from_field		= mv64x60_mask,
1115		.map_to_field		= mv64x60_mask,
1116		.extra			= MV64x60_EXTRA_PCIACC_ENAB | 0 },
1117	[MV64x60_PCI02MEM_ACC_CNTL_3_WIN] = {
1118		.base_hi_reg		= MV64x60_PCI0_ACC_CNTL_3_BASE_HI,
1119		.base_lo_reg		= MV64x60_PCI0_ACC_CNTL_3_BASE_LO,
1120		.size_reg		= MV64x60_PCI0_ACC_CNTL_3_SIZE,
1121		.base_lo_bits		= 20,
1122		.size_bits		= 20,
1123		.get_from_field		= mv64x60_mask,
1124		.map_to_field		= mv64x60_mask,
1125		.extra			= MV64x60_EXTRA_PCIACC_ENAB | 0 },
1126	/* PCI 1->MEM Access Control Windows */
1127	[MV64x60_PCI12MEM_ACC_CNTL_0_WIN] = {
1128		.base_hi_reg		= MV64x60_PCI1_ACC_CNTL_0_BASE_HI,
1129		.base_lo_reg		= MV64x60_PCI1_ACC_CNTL_0_BASE_LO,
1130		.size_reg		= MV64x60_PCI1_ACC_CNTL_0_SIZE,
1131		.base_lo_bits		= 20,
1132		.size_bits		= 20,
1133		.get_from_field		= mv64x60_mask,
1134		.map_to_field		= mv64x60_mask,
1135		.extra			= MV64x60_EXTRA_PCIACC_ENAB | 0 },
1136	[MV64x60_PCI12MEM_ACC_CNTL_1_WIN] = {
1137		.base_hi_reg		= MV64x60_PCI1_ACC_CNTL_1_BASE_HI,
1138		.base_lo_reg		= MV64x60_PCI1_ACC_CNTL_1_BASE_LO,
1139		.size_reg		= MV64x60_PCI1_ACC_CNTL_1_SIZE,
1140		.base_lo_bits		= 20,
1141		.size_bits		= 20,
1142		.get_from_field		= mv64x60_mask,
1143		.map_to_field		= mv64x60_mask,
1144		.extra			= MV64x60_EXTRA_PCIACC_ENAB | 0 },
1145	[MV64x60_PCI12MEM_ACC_CNTL_2_WIN] = {
1146		.base_hi_reg		= MV64x60_PCI1_ACC_CNTL_2_BASE_HI,
1147		.base_lo_reg		= MV64x60_PCI1_ACC_CNTL_2_BASE_LO,
1148		.size_reg		= MV64x60_PCI1_ACC_CNTL_2_SIZE,
1149		.base_lo_bits		= 20,
1150		.size_bits		= 20,
1151		.get_from_field		= mv64x60_mask,
1152		.map_to_field		= mv64x60_mask,
1153		.extra			= MV64x60_EXTRA_PCIACC_ENAB | 0 },
1154	[MV64x60_PCI12MEM_ACC_CNTL_3_WIN] = {
1155		.base_hi_reg		= MV64x60_PCI1_ACC_CNTL_3_BASE_HI,
1156		.base_lo_reg		= MV64x60_PCI1_ACC_CNTL_3_BASE_LO,
1157		.size_reg		= MV64x60_PCI1_ACC_CNTL_3_SIZE,
1158		.base_lo_bits		= 20,
1159		.size_bits		= 20,
1160		.get_from_field		= mv64x60_mask,
1161		.map_to_field		= mv64x60_mask,
1162		.extra			= MV64x60_EXTRA_PCIACC_ENAB | 0 },
1163	/* PCI 0->MEM Snoop Windows -- don't exist on 64360 */
1164	/* PCI 1->MEM Snoop Windows -- don't exist on 64360 */
1165};
1166