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