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