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