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  */
18  typedef	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  
45  typedef	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  
61  typedef 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  */
70  typedef 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  */
127  typedef 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  */
151  typedef 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  */
283  typedef 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  */
300  typedef 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   */
314  typedef 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  */
343  typedef 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  */
373  typedef 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  */
399  typedef 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   */
417  typedef 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   */
428  typedef 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  */
445  typedef 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  
460  typedef 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  
475  typedef 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  */
487  typedef 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  */
500  typedef 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  */
515  typedef 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  
529  typedef 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  
538  typedef 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  */
553  typedef 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  
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 __iomem *cpm2_immr;
646  
647  #endif /* __IMMAP_CPM2__ */
648  #endif /* __KERNEL__ */
649