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