xref: /OK3568_Linux_fs/kernel/arch/powerpc/include/asm/immap_cpm2.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  * CPM2 Internal Memory Map
4*4882a593Smuzhiyun  * Copyright (c) 1999 Dan Malek (dmalek@jlc.net)
5*4882a593Smuzhiyun  *
6*4882a593Smuzhiyun  * The Internal Memory Map for devices with CPM2 on them.  This
7*4882a593Smuzhiyun  * is the superset of all CPM2 devices (8260, 8266, 8280, 8272,
8*4882a593Smuzhiyun  * 8560).
9*4882a593Smuzhiyun  */
10*4882a593Smuzhiyun #ifdef __KERNEL__
11*4882a593Smuzhiyun #ifndef __IMMAP_CPM2__
12*4882a593Smuzhiyun #define __IMMAP_CPM2__
13*4882a593Smuzhiyun 
14*4882a593Smuzhiyun #include <linux/types.h>
15*4882a593Smuzhiyun 
16*4882a593Smuzhiyun /* System configuration registers.
17*4882a593Smuzhiyun */
18*4882a593Smuzhiyun typedef	struct sys_82xx_conf {
19*4882a593Smuzhiyun 	u32	sc_siumcr;
20*4882a593Smuzhiyun 	u32	sc_sypcr;
21*4882a593Smuzhiyun 	u8	res1[6];
22*4882a593Smuzhiyun 	u16	sc_swsr;
23*4882a593Smuzhiyun 	u8	res2[20];
24*4882a593Smuzhiyun 	u32	sc_bcr;
25*4882a593Smuzhiyun 	u8	sc_ppc_acr;
26*4882a593Smuzhiyun 	u8	res3[3];
27*4882a593Smuzhiyun 	u32	sc_ppc_alrh;
28*4882a593Smuzhiyun 	u32	sc_ppc_alrl;
29*4882a593Smuzhiyun 	u8	sc_lcl_acr;
30*4882a593Smuzhiyun 	u8	res4[3];
31*4882a593Smuzhiyun 	u32	sc_lcl_alrh;
32*4882a593Smuzhiyun 	u32	sc_lcl_alrl;
33*4882a593Smuzhiyun 	u32	sc_tescr1;
34*4882a593Smuzhiyun 	u32	sc_tescr2;
35*4882a593Smuzhiyun 	u32	sc_ltescr1;
36*4882a593Smuzhiyun 	u32	sc_ltescr2;
37*4882a593Smuzhiyun 	u32	sc_pdtea;
38*4882a593Smuzhiyun 	u8	sc_pdtem;
39*4882a593Smuzhiyun 	u8	res5[3];
40*4882a593Smuzhiyun 	u32	sc_ldtea;
41*4882a593Smuzhiyun 	u8	sc_ldtem;
42*4882a593Smuzhiyun 	u8	res6[163];
43*4882a593Smuzhiyun } sysconf_82xx_cpm2_t;
44*4882a593Smuzhiyun 
45*4882a593Smuzhiyun typedef	struct sys_85xx_conf {
46*4882a593Smuzhiyun 	u32	sc_cear;
47*4882a593Smuzhiyun 	u16	sc_ceer;
48*4882a593Smuzhiyun 	u16	sc_cemr;
49*4882a593Smuzhiyun 	u8	res1[70];
50*4882a593Smuzhiyun 	u32	sc_smaer;
51*4882a593Smuzhiyun 	u8	res2[4];
52*4882a593Smuzhiyun 	u32	sc_smevr;
53*4882a593Smuzhiyun 	u32	sc_smctr;
54*4882a593Smuzhiyun 	u32	sc_lmaer;
55*4882a593Smuzhiyun 	u8	res3[4];
56*4882a593Smuzhiyun 	u32	sc_lmevr;
57*4882a593Smuzhiyun 	u32	sc_lmctr;
58*4882a593Smuzhiyun 	u8	res4[144];
59*4882a593Smuzhiyun } sysconf_85xx_cpm2_t;
60*4882a593Smuzhiyun 
61*4882a593Smuzhiyun typedef union sys_conf {
62*4882a593Smuzhiyun 	sysconf_82xx_cpm2_t	siu_82xx;
63*4882a593Smuzhiyun 	sysconf_85xx_cpm2_t	siu_85xx;
64*4882a593Smuzhiyun } sysconf_cpm2_t;
65*4882a593Smuzhiyun 
66*4882a593Smuzhiyun 
67*4882a593Smuzhiyun 
68*4882a593Smuzhiyun /* Memory controller registers.
69*4882a593Smuzhiyun */
70*4882a593Smuzhiyun typedef struct	mem_ctlr {
71*4882a593Smuzhiyun 	u32	memc_br0;
72*4882a593Smuzhiyun 	u32	memc_or0;
73*4882a593Smuzhiyun 	u32	memc_br1;
74*4882a593Smuzhiyun 	u32	memc_or1;
75*4882a593Smuzhiyun 	u32	memc_br2;
76*4882a593Smuzhiyun 	u32	memc_or2;
77*4882a593Smuzhiyun 	u32	memc_br3;
78*4882a593Smuzhiyun 	u32	memc_or3;
79*4882a593Smuzhiyun 	u32	memc_br4;
80*4882a593Smuzhiyun 	u32	memc_or4;
81*4882a593Smuzhiyun 	u32	memc_br5;
82*4882a593Smuzhiyun 	u32	memc_or5;
83*4882a593Smuzhiyun 	u32	memc_br6;
84*4882a593Smuzhiyun 	u32	memc_or6;
85*4882a593Smuzhiyun 	u32	memc_br7;
86*4882a593Smuzhiyun 	u32	memc_or7;
87*4882a593Smuzhiyun 	u32	memc_br8;
88*4882a593Smuzhiyun 	u32	memc_or8;
89*4882a593Smuzhiyun 	u32	memc_br9;
90*4882a593Smuzhiyun 	u32	memc_or9;
91*4882a593Smuzhiyun 	u32	memc_br10;
92*4882a593Smuzhiyun 	u32	memc_or10;
93*4882a593Smuzhiyun 	u32	memc_br11;
94*4882a593Smuzhiyun 	u32	memc_or11;
95*4882a593Smuzhiyun 	u8	res1[8];
96*4882a593Smuzhiyun 	u32	memc_mar;
97*4882a593Smuzhiyun 	u8	res2[4];
98*4882a593Smuzhiyun 	u32	memc_mamr;
99*4882a593Smuzhiyun 	u32	memc_mbmr;
100*4882a593Smuzhiyun 	u32	memc_mcmr;
101*4882a593Smuzhiyun 	u8	res3[8];
102*4882a593Smuzhiyun 	u16	memc_mptpr;
103*4882a593Smuzhiyun 	u8	res4[2];
104*4882a593Smuzhiyun 	u32	memc_mdr;
105*4882a593Smuzhiyun 	u8	res5[4];
106*4882a593Smuzhiyun 	u32	memc_psdmr;
107*4882a593Smuzhiyun 	u32	memc_lsdmr;
108*4882a593Smuzhiyun 	u8	memc_purt;
109*4882a593Smuzhiyun 	u8	res6[3];
110*4882a593Smuzhiyun 	u8	memc_psrt;
111*4882a593Smuzhiyun 	u8	res7[3];
112*4882a593Smuzhiyun 	u8	memc_lurt;
113*4882a593Smuzhiyun 	u8	res8[3];
114*4882a593Smuzhiyun 	u8	memc_lsrt;
115*4882a593Smuzhiyun 	u8	res9[3];
116*4882a593Smuzhiyun 	u32	memc_immr;
117*4882a593Smuzhiyun 	u32	memc_pcibr0;
118*4882a593Smuzhiyun 	u32	memc_pcibr1;
119*4882a593Smuzhiyun 	u8	res10[16];
120*4882a593Smuzhiyun 	u32	memc_pcimsk0;
121*4882a593Smuzhiyun 	u32	memc_pcimsk1;
122*4882a593Smuzhiyun 	u8	res11[52];
123*4882a593Smuzhiyun } memctl_cpm2_t;
124*4882a593Smuzhiyun 
125*4882a593Smuzhiyun /* System Integration Timers.
126*4882a593Smuzhiyun */
127*4882a593Smuzhiyun typedef struct	sys_int_timers {
128*4882a593Smuzhiyun 	u8	res1[32];
129*4882a593Smuzhiyun 	u16	sit_tmcntsc;
130*4882a593Smuzhiyun 	u8	res2[2];
131*4882a593Smuzhiyun 	u32	sit_tmcnt;
132*4882a593Smuzhiyun 	u8	res3[4];
133*4882a593Smuzhiyun 	u32	sit_tmcntal;
134*4882a593Smuzhiyun 	u8	res4[16];
135*4882a593Smuzhiyun 	u16	sit_piscr;
136*4882a593Smuzhiyun 	u8	res5[2];
137*4882a593Smuzhiyun 	u32	sit_pitc;
138*4882a593Smuzhiyun 	u32	sit_pitr;
139*4882a593Smuzhiyun 	u8      res6[94];
140*4882a593Smuzhiyun 	u8	res7[390];
141*4882a593Smuzhiyun } sit_cpm2_t;
142*4882a593Smuzhiyun 
143*4882a593Smuzhiyun #define PISCR_PIRQ_MASK		((u16)0xff00)
144*4882a593Smuzhiyun #define PISCR_PS		((u16)0x0080)
145*4882a593Smuzhiyun #define PISCR_PIE		((u16)0x0004)
146*4882a593Smuzhiyun #define PISCR_PTF		((u16)0x0002)
147*4882a593Smuzhiyun #define PISCR_PTE		((u16)0x0001)
148*4882a593Smuzhiyun 
149*4882a593Smuzhiyun /* PCI Controller.
150*4882a593Smuzhiyun */
151*4882a593Smuzhiyun typedef struct pci_ctlr {
152*4882a593Smuzhiyun 	u32	pci_omisr;
153*4882a593Smuzhiyun 	u32	pci_omimr;
154*4882a593Smuzhiyun 	u8	res1[8];
155*4882a593Smuzhiyun 	u32	pci_ifqpr;
156*4882a593Smuzhiyun 	u32	pci_ofqpr;
157*4882a593Smuzhiyun 	u8	res2[8];
158*4882a593Smuzhiyun 	u32	pci_imr0;
159*4882a593Smuzhiyun 	u32	pci_imr1;
160*4882a593Smuzhiyun 	u32	pci_omr0;
161*4882a593Smuzhiyun 	u32	pci_omr1;
162*4882a593Smuzhiyun 	u32	pci_odr;
163*4882a593Smuzhiyun 	u8	res3[4];
164*4882a593Smuzhiyun 	u32	pci_idr;
165*4882a593Smuzhiyun 	u8	res4[20];
166*4882a593Smuzhiyun 	u32	pci_imisr;
167*4882a593Smuzhiyun 	u32	pci_imimr;
168*4882a593Smuzhiyun 	u8	res5[24];
169*4882a593Smuzhiyun 	u32	pci_ifhpr;
170*4882a593Smuzhiyun 	u8	res6[4];
171*4882a593Smuzhiyun 	u32	pci_iftpr;
172*4882a593Smuzhiyun 	u8	res7[4];
173*4882a593Smuzhiyun 	u32	pci_iphpr;
174*4882a593Smuzhiyun 	u8	res8[4];
175*4882a593Smuzhiyun 	u32	pci_iptpr;
176*4882a593Smuzhiyun 	u8	res9[4];
177*4882a593Smuzhiyun 	u32	pci_ofhpr;
178*4882a593Smuzhiyun 	u8	res10[4];
179*4882a593Smuzhiyun 	u32	pci_oftpr;
180*4882a593Smuzhiyun 	u8	res11[4];
181*4882a593Smuzhiyun 	u32	pci_ophpr;
182*4882a593Smuzhiyun 	u8	res12[4];
183*4882a593Smuzhiyun 	u32	pci_optpr;
184*4882a593Smuzhiyun 	u8	res13[8];
185*4882a593Smuzhiyun 	u32	pci_mucr;
186*4882a593Smuzhiyun 	u8	res14[8];
187*4882a593Smuzhiyun 	u32	pci_qbar;
188*4882a593Smuzhiyun 	u8	res15[12];
189*4882a593Smuzhiyun 	u32	pci_dmamr0;
190*4882a593Smuzhiyun 	u32	pci_dmasr0;
191*4882a593Smuzhiyun 	u32	pci_dmacdar0;
192*4882a593Smuzhiyun 	u8	res16[4];
193*4882a593Smuzhiyun 	u32	pci_dmasar0;
194*4882a593Smuzhiyun 	u8	res17[4];
195*4882a593Smuzhiyun 	u32	pci_dmadar0;
196*4882a593Smuzhiyun 	u8	res18[4];
197*4882a593Smuzhiyun 	u32	pci_dmabcr0;
198*4882a593Smuzhiyun 	u32	pci_dmandar0;
199*4882a593Smuzhiyun 	u8	res19[86];
200*4882a593Smuzhiyun 	u32	pci_dmamr1;
201*4882a593Smuzhiyun 	u32	pci_dmasr1;
202*4882a593Smuzhiyun 	u32	pci_dmacdar1;
203*4882a593Smuzhiyun 	u8	res20[4];
204*4882a593Smuzhiyun 	u32	pci_dmasar1;
205*4882a593Smuzhiyun 	u8	res21[4];
206*4882a593Smuzhiyun 	u32	pci_dmadar1;
207*4882a593Smuzhiyun 	u8	res22[4];
208*4882a593Smuzhiyun 	u32	pci_dmabcr1;
209*4882a593Smuzhiyun 	u32	pci_dmandar1;
210*4882a593Smuzhiyun 	u8	res23[88];
211*4882a593Smuzhiyun 	u32	pci_dmamr2;
212*4882a593Smuzhiyun 	u32	pci_dmasr2;
213*4882a593Smuzhiyun 	u32	pci_dmacdar2;
214*4882a593Smuzhiyun 	u8	res24[4];
215*4882a593Smuzhiyun 	u32	pci_dmasar2;
216*4882a593Smuzhiyun 	u8	res25[4];
217*4882a593Smuzhiyun 	u32	pci_dmadar2;
218*4882a593Smuzhiyun 	u8	res26[4];
219*4882a593Smuzhiyun 	u32	pci_dmabcr2;
220*4882a593Smuzhiyun 	u32	pci_dmandar2;
221*4882a593Smuzhiyun 	u8	res27[88];
222*4882a593Smuzhiyun 	u32	pci_dmamr3;
223*4882a593Smuzhiyun 	u32	pci_dmasr3;
224*4882a593Smuzhiyun 	u32	pci_dmacdar3;
225*4882a593Smuzhiyun 	u8	res28[4];
226*4882a593Smuzhiyun 	u32	pci_dmasar3;
227*4882a593Smuzhiyun 	u8	res29[4];
228*4882a593Smuzhiyun 	u32	pci_dmadar3;
229*4882a593Smuzhiyun 	u8	res30[4];
230*4882a593Smuzhiyun 	u32	pci_dmabcr3;
231*4882a593Smuzhiyun 	u32	pci_dmandar3;
232*4882a593Smuzhiyun 	u8	res31[344];
233*4882a593Smuzhiyun 	u32	pci_potar0;
234*4882a593Smuzhiyun 	u8	res32[4];
235*4882a593Smuzhiyun 	u32	pci_pobar0;
236*4882a593Smuzhiyun 	u8	res33[4];
237*4882a593Smuzhiyun 	u32	pci_pocmr0;
238*4882a593Smuzhiyun 	u8	res34[4];
239*4882a593Smuzhiyun 	u32	pci_potar1;
240*4882a593Smuzhiyun 	u8	res35[4];
241*4882a593Smuzhiyun 	u32	pci_pobar1;
242*4882a593Smuzhiyun 	u8	res36[4];
243*4882a593Smuzhiyun 	u32	pci_pocmr1;
244*4882a593Smuzhiyun 	u8	res37[4];
245*4882a593Smuzhiyun 	u32	pci_potar2;
246*4882a593Smuzhiyun 	u8	res38[4];
247*4882a593Smuzhiyun 	u32	pci_pobar2;
248*4882a593Smuzhiyun 	u8	res39[4];
249*4882a593Smuzhiyun 	u32	pci_pocmr2;
250*4882a593Smuzhiyun 	u8	res40[50];
251*4882a593Smuzhiyun 	u32	pci_ptcr;
252*4882a593Smuzhiyun 	u32	pci_gpcr;
253*4882a593Smuzhiyun 	u32	pci_gcr;
254*4882a593Smuzhiyun 	u32	pci_esr;
255*4882a593Smuzhiyun 	u32	pci_emr;
256*4882a593Smuzhiyun 	u32	pci_ecr;
257*4882a593Smuzhiyun 	u32	pci_eacr;
258*4882a593Smuzhiyun 	u8	res41[4];
259*4882a593Smuzhiyun 	u32	pci_edcr;
260*4882a593Smuzhiyun 	u8	res42[4];
261*4882a593Smuzhiyun 	u32	pci_eccr;
262*4882a593Smuzhiyun 	u8	res43[44];
263*4882a593Smuzhiyun 	u32	pci_pitar1;
264*4882a593Smuzhiyun 	u8	res44[4];
265*4882a593Smuzhiyun 	u32	pci_pibar1;
266*4882a593Smuzhiyun 	u8	res45[4];
267*4882a593Smuzhiyun 	u32	pci_picmr1;
268*4882a593Smuzhiyun 	u8	res46[4];
269*4882a593Smuzhiyun 	u32	pci_pitar0;
270*4882a593Smuzhiyun 	u8	res47[4];
271*4882a593Smuzhiyun 	u32	pci_pibar0;
272*4882a593Smuzhiyun 	u8	res48[4];
273*4882a593Smuzhiyun 	u32	pci_picmr0;
274*4882a593Smuzhiyun 	u8	res49[4];
275*4882a593Smuzhiyun 	u32	pci_cfg_addr;
276*4882a593Smuzhiyun 	u32	pci_cfg_data;
277*4882a593Smuzhiyun 	u32	pci_int_ack;
278*4882a593Smuzhiyun 	u8	res50[756];
279*4882a593Smuzhiyun } pci_cpm2_t;
280*4882a593Smuzhiyun 
281*4882a593Smuzhiyun /* Interrupt Controller.
282*4882a593Smuzhiyun */
283*4882a593Smuzhiyun typedef struct interrupt_controller {
284*4882a593Smuzhiyun 	u16	ic_sicr;
285*4882a593Smuzhiyun 	u8	res1[2];
286*4882a593Smuzhiyun 	u32	ic_sivec;
287*4882a593Smuzhiyun 	u32	ic_sipnrh;
288*4882a593Smuzhiyun 	u32	ic_sipnrl;
289*4882a593Smuzhiyun 	u32	ic_siprr;
290*4882a593Smuzhiyun 	u32	ic_scprrh;
291*4882a593Smuzhiyun 	u32	ic_scprrl;
292*4882a593Smuzhiyun 	u32	ic_simrh;
293*4882a593Smuzhiyun 	u32	ic_simrl;
294*4882a593Smuzhiyun 	u32	ic_siexr;
295*4882a593Smuzhiyun 	u8	res2[88];
296*4882a593Smuzhiyun } intctl_cpm2_t;
297*4882a593Smuzhiyun 
298*4882a593Smuzhiyun /* Clocks and Reset.
299*4882a593Smuzhiyun */
300*4882a593Smuzhiyun typedef struct clk_and_reset {
301*4882a593Smuzhiyun 	u32	car_sccr;
302*4882a593Smuzhiyun 	u8	res1[4];
303*4882a593Smuzhiyun 	u32	car_scmr;
304*4882a593Smuzhiyun 	u8	res2[4];
305*4882a593Smuzhiyun 	u32	car_rsr;
306*4882a593Smuzhiyun 	u32	car_rmr;
307*4882a593Smuzhiyun 	u8	res[104];
308*4882a593Smuzhiyun } car_cpm2_t;
309*4882a593Smuzhiyun 
310*4882a593Smuzhiyun /* Input/Output Port control/status registers.
311*4882a593Smuzhiyun  * Names consistent with processor manual, although they are different
312*4882a593Smuzhiyun  * from the original 8xx names.......
313*4882a593Smuzhiyun  */
314*4882a593Smuzhiyun typedef struct io_port {
315*4882a593Smuzhiyun 	u32	iop_pdira;
316*4882a593Smuzhiyun 	u32	iop_ppara;
317*4882a593Smuzhiyun 	u32	iop_psora;
318*4882a593Smuzhiyun 	u32	iop_podra;
319*4882a593Smuzhiyun 	u32	iop_pdata;
320*4882a593Smuzhiyun 	u8	res1[12];
321*4882a593Smuzhiyun 	u32	iop_pdirb;
322*4882a593Smuzhiyun 	u32	iop_pparb;
323*4882a593Smuzhiyun 	u32	iop_psorb;
324*4882a593Smuzhiyun 	u32	iop_podrb;
325*4882a593Smuzhiyun 	u32	iop_pdatb;
326*4882a593Smuzhiyun 	u8	res2[12];
327*4882a593Smuzhiyun 	u32	iop_pdirc;
328*4882a593Smuzhiyun 	u32	iop_pparc;
329*4882a593Smuzhiyun 	u32	iop_psorc;
330*4882a593Smuzhiyun 	u32	iop_podrc;
331*4882a593Smuzhiyun 	u32	iop_pdatc;
332*4882a593Smuzhiyun 	u8	res3[12];
333*4882a593Smuzhiyun 	u32	iop_pdird;
334*4882a593Smuzhiyun 	u32	iop_ppard;
335*4882a593Smuzhiyun 	u32	iop_psord;
336*4882a593Smuzhiyun 	u32	iop_podrd;
337*4882a593Smuzhiyun 	u32	iop_pdatd;
338*4882a593Smuzhiyun 	u8	res4[12];
339*4882a593Smuzhiyun } iop_cpm2_t;
340*4882a593Smuzhiyun 
341*4882a593Smuzhiyun /* Communication Processor Module Timers
342*4882a593Smuzhiyun */
343*4882a593Smuzhiyun typedef struct cpm_timers {
344*4882a593Smuzhiyun 	u8	cpmt_tgcr1;
345*4882a593Smuzhiyun 	u8	res1[3];
346*4882a593Smuzhiyun 	u8	cpmt_tgcr2;
347*4882a593Smuzhiyun 	u8	res2[11];
348*4882a593Smuzhiyun 	u16	cpmt_tmr1;
349*4882a593Smuzhiyun 	u16	cpmt_tmr2;
350*4882a593Smuzhiyun 	u16	cpmt_trr1;
351*4882a593Smuzhiyun 	u16	cpmt_trr2;
352*4882a593Smuzhiyun 	u16	cpmt_tcr1;
353*4882a593Smuzhiyun 	u16	cpmt_tcr2;
354*4882a593Smuzhiyun 	u16	cpmt_tcn1;
355*4882a593Smuzhiyun 	u16	cpmt_tcn2;
356*4882a593Smuzhiyun 	u16	cpmt_tmr3;
357*4882a593Smuzhiyun 	u16	cpmt_tmr4;
358*4882a593Smuzhiyun 	u16	cpmt_trr3;
359*4882a593Smuzhiyun 	u16	cpmt_trr4;
360*4882a593Smuzhiyun 	u16	cpmt_tcr3;
361*4882a593Smuzhiyun 	u16	cpmt_tcr4;
362*4882a593Smuzhiyun 	u16	cpmt_tcn3;
363*4882a593Smuzhiyun 	u16	cpmt_tcn4;
364*4882a593Smuzhiyun 	u16	cpmt_ter1;
365*4882a593Smuzhiyun 	u16	cpmt_ter2;
366*4882a593Smuzhiyun 	u16	cpmt_ter3;
367*4882a593Smuzhiyun 	u16	cpmt_ter4;
368*4882a593Smuzhiyun 	u8	res3[584];
369*4882a593Smuzhiyun } cpmtimer_cpm2_t;
370*4882a593Smuzhiyun 
371*4882a593Smuzhiyun /* DMA control/status registers.
372*4882a593Smuzhiyun */
373*4882a593Smuzhiyun typedef struct sdma_csr {
374*4882a593Smuzhiyun 	u8	res0[24];
375*4882a593Smuzhiyun 	u8	sdma_sdsr;
376*4882a593Smuzhiyun 	u8	res1[3];
377*4882a593Smuzhiyun 	u8	sdma_sdmr;
378*4882a593Smuzhiyun 	u8	res2[3];
379*4882a593Smuzhiyun 	u8	sdma_idsr1;
380*4882a593Smuzhiyun 	u8	res3[3];
381*4882a593Smuzhiyun 	u8	sdma_idmr1;
382*4882a593Smuzhiyun 	u8	res4[3];
383*4882a593Smuzhiyun 	u8	sdma_idsr2;
384*4882a593Smuzhiyun 	u8	res5[3];
385*4882a593Smuzhiyun 	u8	sdma_idmr2;
386*4882a593Smuzhiyun 	u8	res6[3];
387*4882a593Smuzhiyun 	u8	sdma_idsr3;
388*4882a593Smuzhiyun 	u8	res7[3];
389*4882a593Smuzhiyun 	u8	sdma_idmr3;
390*4882a593Smuzhiyun 	u8	res8[3];
391*4882a593Smuzhiyun 	u8	sdma_idsr4;
392*4882a593Smuzhiyun 	u8	res9[3];
393*4882a593Smuzhiyun 	u8	sdma_idmr4;
394*4882a593Smuzhiyun 	u8	res10[707];
395*4882a593Smuzhiyun } sdma_cpm2_t;
396*4882a593Smuzhiyun 
397*4882a593Smuzhiyun /* Fast controllers
398*4882a593Smuzhiyun */
399*4882a593Smuzhiyun typedef struct fcc {
400*4882a593Smuzhiyun 	u32	fcc_gfmr;
401*4882a593Smuzhiyun 	u32	fcc_fpsmr;
402*4882a593Smuzhiyun 	u16	fcc_ftodr;
403*4882a593Smuzhiyun 	u8	res1[2];
404*4882a593Smuzhiyun 	u16	fcc_fdsr;
405*4882a593Smuzhiyun 	u8	res2[2];
406*4882a593Smuzhiyun 	u16	fcc_fcce;
407*4882a593Smuzhiyun 	u8	res3[2];
408*4882a593Smuzhiyun 	u16	fcc_fccm;
409*4882a593Smuzhiyun 	u8	res4[2];
410*4882a593Smuzhiyun 	u8	fcc_fccs;
411*4882a593Smuzhiyun 	u8	res5[3];
412*4882a593Smuzhiyun 	u8	fcc_ftirr_phy[4];
413*4882a593Smuzhiyun } fcc_t;
414*4882a593Smuzhiyun 
415*4882a593Smuzhiyun /* Fast controllers continued
416*4882a593Smuzhiyun  */
417*4882a593Smuzhiyun typedef struct fcc_c {
418*4882a593Smuzhiyun 	u32	fcc_firper;
419*4882a593Smuzhiyun 	u32	fcc_firer;
420*4882a593Smuzhiyun 	u32	fcc_firsr_hi;
421*4882a593Smuzhiyun 	u32	fcc_firsr_lo;
422*4882a593Smuzhiyun 	u8	fcc_gfemr;
423*4882a593Smuzhiyun 	u8	res1[15];
424*4882a593Smuzhiyun } fcc_c_t;
425*4882a593Smuzhiyun 
426*4882a593Smuzhiyun /* TC Layer
427*4882a593Smuzhiyun  */
428*4882a593Smuzhiyun typedef struct tclayer {
429*4882a593Smuzhiyun 	u16	tc_tcmode;
430*4882a593Smuzhiyun 	u16	tc_cdsmr;
431*4882a593Smuzhiyun 	u16	tc_tcer;
432*4882a593Smuzhiyun 	u16	tc_rcc;
433*4882a593Smuzhiyun 	u16	tc_tcmr;
434*4882a593Smuzhiyun 	u16	tc_fcc;
435*4882a593Smuzhiyun 	u16	tc_ccc;
436*4882a593Smuzhiyun 	u16	tc_icc;
437*4882a593Smuzhiyun 	u16	tc_tcc;
438*4882a593Smuzhiyun 	u16	tc_ecc;
439*4882a593Smuzhiyun 	u8	res1[12];
440*4882a593Smuzhiyun } tclayer_t;
441*4882a593Smuzhiyun 
442*4882a593Smuzhiyun 
443*4882a593Smuzhiyun /* I2C
444*4882a593Smuzhiyun */
445*4882a593Smuzhiyun typedef struct i2c {
446*4882a593Smuzhiyun 	u8	i2c_i2mod;
447*4882a593Smuzhiyun 	u8	res1[3];
448*4882a593Smuzhiyun 	u8	i2c_i2add;
449*4882a593Smuzhiyun 	u8	res2[3];
450*4882a593Smuzhiyun 	u8	i2c_i2brg;
451*4882a593Smuzhiyun 	u8	res3[3];
452*4882a593Smuzhiyun 	u8	i2c_i2com;
453*4882a593Smuzhiyun 	u8	res4[3];
454*4882a593Smuzhiyun 	u8	i2c_i2cer;
455*4882a593Smuzhiyun 	u8	res5[3];
456*4882a593Smuzhiyun 	u8	i2c_i2cmr;
457*4882a593Smuzhiyun 	u8	res6[331];
458*4882a593Smuzhiyun } i2c_cpm2_t;
459*4882a593Smuzhiyun 
460*4882a593Smuzhiyun typedef struct scc {		/* Serial communication channels */
461*4882a593Smuzhiyun 	u32	scc_gsmrl;
462*4882a593Smuzhiyun 	u32	scc_gsmrh;
463*4882a593Smuzhiyun 	u16	scc_psmr;
464*4882a593Smuzhiyun 	u8	res1[2];
465*4882a593Smuzhiyun 	u16	scc_todr;
466*4882a593Smuzhiyun 	u16	scc_dsr;
467*4882a593Smuzhiyun 	u16	scc_scce;
468*4882a593Smuzhiyun 	u8	res2[2];
469*4882a593Smuzhiyun 	u16	scc_sccm;
470*4882a593Smuzhiyun 	u8	res3;
471*4882a593Smuzhiyun 	u8	scc_sccs;
472*4882a593Smuzhiyun 	u8	res4[8];
473*4882a593Smuzhiyun } scc_t;
474*4882a593Smuzhiyun 
475*4882a593Smuzhiyun typedef struct smc {		/* Serial management channels */
476*4882a593Smuzhiyun 	u8	res1[2];
477*4882a593Smuzhiyun 	u16	smc_smcmr;
478*4882a593Smuzhiyun 	u8	res2[2];
479*4882a593Smuzhiyun 	u8	smc_smce;
480*4882a593Smuzhiyun 	u8	res3[3];
481*4882a593Smuzhiyun 	u8	smc_smcm;
482*4882a593Smuzhiyun 	u8	res4[5];
483*4882a593Smuzhiyun } smc_t;
484*4882a593Smuzhiyun 
485*4882a593Smuzhiyun /* Serial Peripheral Interface.
486*4882a593Smuzhiyun */
487*4882a593Smuzhiyun typedef struct spi_ctrl {
488*4882a593Smuzhiyun 	u16	spi_spmode;
489*4882a593Smuzhiyun 	u8	res1[4];
490*4882a593Smuzhiyun 	u8	spi_spie;
491*4882a593Smuzhiyun 	u8	res2[3];
492*4882a593Smuzhiyun 	u8	spi_spim;
493*4882a593Smuzhiyun 	u8	res3[2];
494*4882a593Smuzhiyun 	u8	spi_spcom;
495*4882a593Smuzhiyun 	u8	res4[82];
496*4882a593Smuzhiyun } spictl_cpm2_t;
497*4882a593Smuzhiyun 
498*4882a593Smuzhiyun /* CPM Mux.
499*4882a593Smuzhiyun */
500*4882a593Smuzhiyun typedef struct cpmux {
501*4882a593Smuzhiyun 	u8	cmx_si1cr;
502*4882a593Smuzhiyun 	u8	res1;
503*4882a593Smuzhiyun 	u8	cmx_si2cr;
504*4882a593Smuzhiyun 	u8	res2;
505*4882a593Smuzhiyun 	u32	cmx_fcr;
506*4882a593Smuzhiyun 	u32	cmx_scr;
507*4882a593Smuzhiyun 	u8	cmx_smr;
508*4882a593Smuzhiyun 	u8	res3;
509*4882a593Smuzhiyun 	u16	cmx_uar;
510*4882a593Smuzhiyun 	u8	res4[16];
511*4882a593Smuzhiyun } cpmux_t;
512*4882a593Smuzhiyun 
513*4882a593Smuzhiyun /* SIRAM control
514*4882a593Smuzhiyun */
515*4882a593Smuzhiyun typedef struct siram {
516*4882a593Smuzhiyun 	u16	si_amr;
517*4882a593Smuzhiyun 	u16	si_bmr;
518*4882a593Smuzhiyun 	u16	si_cmr;
519*4882a593Smuzhiyun 	u16	si_dmr;
520*4882a593Smuzhiyun 	u8	si_gmr;
521*4882a593Smuzhiyun 	u8	res1;
522*4882a593Smuzhiyun 	u8	si_cmdr;
523*4882a593Smuzhiyun 	u8	res2;
524*4882a593Smuzhiyun 	u8	si_str;
525*4882a593Smuzhiyun 	u8	res3;
526*4882a593Smuzhiyun 	u16	si_rsr;
527*4882a593Smuzhiyun } siramctl_t;
528*4882a593Smuzhiyun 
529*4882a593Smuzhiyun typedef struct mcc {
530*4882a593Smuzhiyun 	u16	mcc_mcce;
531*4882a593Smuzhiyun 	u8	res1[2];
532*4882a593Smuzhiyun 	u16	mcc_mccm;
533*4882a593Smuzhiyun 	u8	res2[2];
534*4882a593Smuzhiyun 	u8	mcc_mccf;
535*4882a593Smuzhiyun 	u8	res3[7];
536*4882a593Smuzhiyun } mcc_t;
537*4882a593Smuzhiyun 
538*4882a593Smuzhiyun typedef struct comm_proc {
539*4882a593Smuzhiyun 	u32	cp_cpcr;
540*4882a593Smuzhiyun 	u32	cp_rccr;
541*4882a593Smuzhiyun 	u8	res1[14];
542*4882a593Smuzhiyun 	u16	cp_rter;
543*4882a593Smuzhiyun 	u8	res2[2];
544*4882a593Smuzhiyun 	u16	cp_rtmr;
545*4882a593Smuzhiyun 	u16	cp_rtscr;
546*4882a593Smuzhiyun 	u8	res3[2];
547*4882a593Smuzhiyun 	u32	cp_rtsr;
548*4882a593Smuzhiyun 	u8	res4[12];
549*4882a593Smuzhiyun } cpm_cpm2_t;
550*4882a593Smuzhiyun 
551*4882a593Smuzhiyun /* USB Controller.
552*4882a593Smuzhiyun */
553*4882a593Smuzhiyun typedef struct cpm_usb_ctlr {
554*4882a593Smuzhiyun 	u8	usb_usmod;
555*4882a593Smuzhiyun 	u8	usb_usadr;
556*4882a593Smuzhiyun 	u8	usb_uscom;
557*4882a593Smuzhiyun 	u8	res1[1];
558*4882a593Smuzhiyun 	__be16  usb_usep[4];
559*4882a593Smuzhiyun 	u8	res2[4];
560*4882a593Smuzhiyun 	__be16  usb_usber;
561*4882a593Smuzhiyun 	u8	res3[2];
562*4882a593Smuzhiyun 	__be16  usb_usbmr;
563*4882a593Smuzhiyun 	u8	usb_usbs;
564*4882a593Smuzhiyun 	u8	res4[7];
565*4882a593Smuzhiyun } usb_cpm2_t;
566*4882a593Smuzhiyun 
567*4882a593Smuzhiyun /* ...and the whole thing wrapped up....
568*4882a593Smuzhiyun */
569*4882a593Smuzhiyun 
570*4882a593Smuzhiyun typedef struct immap {
571*4882a593Smuzhiyun 	/* Some references are into the unique and known dpram spaces,
572*4882a593Smuzhiyun 	 * others are from the generic base.
573*4882a593Smuzhiyun 	 */
574*4882a593Smuzhiyun #define im_dprambase	im_dpram1
575*4882a593Smuzhiyun 	u8		im_dpram1[16*1024];
576*4882a593Smuzhiyun 	u8		res1[16*1024];
577*4882a593Smuzhiyun 	u8		im_dpram2[4*1024];
578*4882a593Smuzhiyun 	u8		res2[8*1024];
579*4882a593Smuzhiyun 	u8		im_dpram3[4*1024];
580*4882a593Smuzhiyun 	u8		res3[16*1024];
581*4882a593Smuzhiyun 
582*4882a593Smuzhiyun 	sysconf_cpm2_t	im_siu_conf;	/* SIU Configuration */
583*4882a593Smuzhiyun 	memctl_cpm2_t	im_memctl;	/* Memory Controller */
584*4882a593Smuzhiyun 	sit_cpm2_t	im_sit;		/* System Integration Timers */
585*4882a593Smuzhiyun 	pci_cpm2_t	im_pci;		/* PCI Controller */
586*4882a593Smuzhiyun 	intctl_cpm2_t	im_intctl;	/* Interrupt Controller */
587*4882a593Smuzhiyun 	car_cpm2_t	im_clkrst;	/* Clocks and reset */
588*4882a593Smuzhiyun 	iop_cpm2_t	im_ioport;	/* IO Port control/status */
589*4882a593Smuzhiyun 	cpmtimer_cpm2_t	im_cpmtimer;	/* CPM timers */
590*4882a593Smuzhiyun 	sdma_cpm2_t	im_sdma;	/* SDMA control/status */
591*4882a593Smuzhiyun 
592*4882a593Smuzhiyun 	fcc_t		im_fcc[3];	/* Three FCCs */
593*4882a593Smuzhiyun 	u8		res4z[32];
594*4882a593Smuzhiyun 	fcc_c_t		im_fcc_c[3];	/* Continued FCCs */
595*4882a593Smuzhiyun 
596*4882a593Smuzhiyun 	u8		res4[32];
597*4882a593Smuzhiyun 
598*4882a593Smuzhiyun 	tclayer_t	im_tclayer[8];	/* Eight TCLayers */
599*4882a593Smuzhiyun 	u16		tc_tcgsr;
600*4882a593Smuzhiyun 	u16		tc_tcger;
601*4882a593Smuzhiyun 
602*4882a593Smuzhiyun 	/* First set of baud rate generators.
603*4882a593Smuzhiyun 	*/
604*4882a593Smuzhiyun 	u8		res[236];
605*4882a593Smuzhiyun 	u32		im_brgc5;
606*4882a593Smuzhiyun 	u32		im_brgc6;
607*4882a593Smuzhiyun 	u32		im_brgc7;
608*4882a593Smuzhiyun 	u32		im_brgc8;
609*4882a593Smuzhiyun 
610*4882a593Smuzhiyun 	u8		res5[608];
611*4882a593Smuzhiyun 
612*4882a593Smuzhiyun 	i2c_cpm2_t	im_i2c;		/* I2C control/status */
613*4882a593Smuzhiyun 	cpm_cpm2_t	im_cpm;		/* Communication processor */
614*4882a593Smuzhiyun 
615*4882a593Smuzhiyun 	/* Second set of baud rate generators.
616*4882a593Smuzhiyun 	*/
617*4882a593Smuzhiyun 	u32		im_brgc1;
618*4882a593Smuzhiyun 	u32		im_brgc2;
619*4882a593Smuzhiyun 	u32		im_brgc3;
620*4882a593Smuzhiyun 	u32		im_brgc4;
621*4882a593Smuzhiyun 
622*4882a593Smuzhiyun 	scc_t		im_scc[4];	/* Four SCCs */
623*4882a593Smuzhiyun 	smc_t		im_smc[2];	/* Couple of SMCs */
624*4882a593Smuzhiyun 	spictl_cpm2_t	im_spi;		/* A SPI */
625*4882a593Smuzhiyun 	cpmux_t		im_cpmux;	/* CPM clock route mux */
626*4882a593Smuzhiyun 	siramctl_t	im_siramctl1;	/* First SI RAM Control */
627*4882a593Smuzhiyun 	mcc_t		im_mcc1;	/* First MCC */
628*4882a593Smuzhiyun 	siramctl_t	im_siramctl2;	/* Second SI RAM Control */
629*4882a593Smuzhiyun 	mcc_t		im_mcc2;	/* Second MCC */
630*4882a593Smuzhiyun 	usb_cpm2_t	im_usb;		/* USB Controller */
631*4882a593Smuzhiyun 
632*4882a593Smuzhiyun 	u8		res6[1153];
633*4882a593Smuzhiyun 
634*4882a593Smuzhiyun 	u16		im_si1txram[256];
635*4882a593Smuzhiyun 	u8		res7[512];
636*4882a593Smuzhiyun 	u16		im_si1rxram[256];
637*4882a593Smuzhiyun 	u8		res8[512];
638*4882a593Smuzhiyun 	u16		im_si2txram[256];
639*4882a593Smuzhiyun 	u8		res9[512];
640*4882a593Smuzhiyun 	u16		im_si2rxram[256];
641*4882a593Smuzhiyun 	u8		res10[512];
642*4882a593Smuzhiyun 	u8		res11[4096];
643*4882a593Smuzhiyun } cpm2_map_t;
644*4882a593Smuzhiyun 
645*4882a593Smuzhiyun extern cpm2_map_t __iomem *cpm2_immr;
646*4882a593Smuzhiyun 
647*4882a593Smuzhiyun #endif /* __IMMAP_CPM2__ */
648*4882a593Smuzhiyun #endif /* __KERNEL__ */
649