162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * CPM2 Internal Memory Map
462306a36Sopenharmony_ci * Copyright (c) 1999 Dan Malek (dmalek@jlc.net)
562306a36Sopenharmony_ci *
662306a36Sopenharmony_ci * The Internal Memory Map for devices with CPM2 on them.  This
762306a36Sopenharmony_ci * is the superset of all CPM2 devices (8260, 8266, 8280, 8272,
862306a36Sopenharmony_ci * 8560).
962306a36Sopenharmony_ci */
1062306a36Sopenharmony_ci#ifdef __KERNEL__
1162306a36Sopenharmony_ci#ifndef __IMMAP_CPM2__
1262306a36Sopenharmony_ci#define __IMMAP_CPM2__
1362306a36Sopenharmony_ci
1462306a36Sopenharmony_ci#include <linux/types.h>
1562306a36Sopenharmony_ci
1662306a36Sopenharmony_ci/* System configuration registers.
1762306a36Sopenharmony_ci*/
1862306a36Sopenharmony_citypedef	struct sys_82xx_conf {
1962306a36Sopenharmony_ci	u32	sc_siumcr;
2062306a36Sopenharmony_ci	u32	sc_sypcr;
2162306a36Sopenharmony_ci	u8	res1[6];
2262306a36Sopenharmony_ci	u16	sc_swsr;
2362306a36Sopenharmony_ci	u8	res2[20];
2462306a36Sopenharmony_ci	u32	sc_bcr;
2562306a36Sopenharmony_ci	u8	sc_ppc_acr;
2662306a36Sopenharmony_ci	u8	res3[3];
2762306a36Sopenharmony_ci	u32	sc_ppc_alrh;
2862306a36Sopenharmony_ci	u32	sc_ppc_alrl;
2962306a36Sopenharmony_ci	u8	sc_lcl_acr;
3062306a36Sopenharmony_ci	u8	res4[3];
3162306a36Sopenharmony_ci	u32	sc_lcl_alrh;
3262306a36Sopenharmony_ci	u32	sc_lcl_alrl;
3362306a36Sopenharmony_ci	u32	sc_tescr1;
3462306a36Sopenharmony_ci	u32	sc_tescr2;
3562306a36Sopenharmony_ci	u32	sc_ltescr1;
3662306a36Sopenharmony_ci	u32	sc_ltescr2;
3762306a36Sopenharmony_ci	u32	sc_pdtea;
3862306a36Sopenharmony_ci	u8	sc_pdtem;
3962306a36Sopenharmony_ci	u8	res5[3];
4062306a36Sopenharmony_ci	u32	sc_ldtea;
4162306a36Sopenharmony_ci	u8	sc_ldtem;
4262306a36Sopenharmony_ci	u8	res6[163];
4362306a36Sopenharmony_ci} sysconf_82xx_cpm2_t;
4462306a36Sopenharmony_ci
4562306a36Sopenharmony_citypedef	struct sys_85xx_conf {
4662306a36Sopenharmony_ci	u32	sc_cear;
4762306a36Sopenharmony_ci	u16	sc_ceer;
4862306a36Sopenharmony_ci	u16	sc_cemr;
4962306a36Sopenharmony_ci	u8	res1[70];
5062306a36Sopenharmony_ci	u32	sc_smaer;
5162306a36Sopenharmony_ci	u8	res2[4];
5262306a36Sopenharmony_ci	u32	sc_smevr;
5362306a36Sopenharmony_ci	u32	sc_smctr;
5462306a36Sopenharmony_ci	u32	sc_lmaer;
5562306a36Sopenharmony_ci	u8	res3[4];
5662306a36Sopenharmony_ci	u32	sc_lmevr;
5762306a36Sopenharmony_ci	u32	sc_lmctr;
5862306a36Sopenharmony_ci	u8	res4[144];
5962306a36Sopenharmony_ci} sysconf_85xx_cpm2_t;
6062306a36Sopenharmony_ci
6162306a36Sopenharmony_citypedef union sys_conf {
6262306a36Sopenharmony_ci	sysconf_82xx_cpm2_t	siu_82xx;
6362306a36Sopenharmony_ci	sysconf_85xx_cpm2_t	siu_85xx;
6462306a36Sopenharmony_ci} sysconf_cpm2_t;
6562306a36Sopenharmony_ci
6662306a36Sopenharmony_ci
6762306a36Sopenharmony_ci
6862306a36Sopenharmony_ci/* Memory controller registers.
6962306a36Sopenharmony_ci*/
7062306a36Sopenharmony_citypedef struct	mem_ctlr {
7162306a36Sopenharmony_ci	u32	memc_br0;
7262306a36Sopenharmony_ci	u32	memc_or0;
7362306a36Sopenharmony_ci	u32	memc_br1;
7462306a36Sopenharmony_ci	u32	memc_or1;
7562306a36Sopenharmony_ci	u32	memc_br2;
7662306a36Sopenharmony_ci	u32	memc_or2;
7762306a36Sopenharmony_ci	u32	memc_br3;
7862306a36Sopenharmony_ci	u32	memc_or3;
7962306a36Sopenharmony_ci	u32	memc_br4;
8062306a36Sopenharmony_ci	u32	memc_or4;
8162306a36Sopenharmony_ci	u32	memc_br5;
8262306a36Sopenharmony_ci	u32	memc_or5;
8362306a36Sopenharmony_ci	u32	memc_br6;
8462306a36Sopenharmony_ci	u32	memc_or6;
8562306a36Sopenharmony_ci	u32	memc_br7;
8662306a36Sopenharmony_ci	u32	memc_or7;
8762306a36Sopenharmony_ci	u32	memc_br8;
8862306a36Sopenharmony_ci	u32	memc_or8;
8962306a36Sopenharmony_ci	u32	memc_br9;
9062306a36Sopenharmony_ci	u32	memc_or9;
9162306a36Sopenharmony_ci	u32	memc_br10;
9262306a36Sopenharmony_ci	u32	memc_or10;
9362306a36Sopenharmony_ci	u32	memc_br11;
9462306a36Sopenharmony_ci	u32	memc_or11;
9562306a36Sopenharmony_ci	u8	res1[8];
9662306a36Sopenharmony_ci	u32	memc_mar;
9762306a36Sopenharmony_ci	u8	res2[4];
9862306a36Sopenharmony_ci	u32	memc_mamr;
9962306a36Sopenharmony_ci	u32	memc_mbmr;
10062306a36Sopenharmony_ci	u32	memc_mcmr;
10162306a36Sopenharmony_ci	u8	res3[8];
10262306a36Sopenharmony_ci	u16	memc_mptpr;
10362306a36Sopenharmony_ci	u8	res4[2];
10462306a36Sopenharmony_ci	u32	memc_mdr;
10562306a36Sopenharmony_ci	u8	res5[4];
10662306a36Sopenharmony_ci	u32	memc_psdmr;
10762306a36Sopenharmony_ci	u32	memc_lsdmr;
10862306a36Sopenharmony_ci	u8	memc_purt;
10962306a36Sopenharmony_ci	u8	res6[3];
11062306a36Sopenharmony_ci	u8	memc_psrt;
11162306a36Sopenharmony_ci	u8	res7[3];
11262306a36Sopenharmony_ci	u8	memc_lurt;
11362306a36Sopenharmony_ci	u8	res8[3];
11462306a36Sopenharmony_ci	u8	memc_lsrt;
11562306a36Sopenharmony_ci	u8	res9[3];
11662306a36Sopenharmony_ci	u32	memc_immr;
11762306a36Sopenharmony_ci	u32	memc_pcibr0;
11862306a36Sopenharmony_ci	u32	memc_pcibr1;
11962306a36Sopenharmony_ci	u8	res10[16];
12062306a36Sopenharmony_ci	u32	memc_pcimsk0;
12162306a36Sopenharmony_ci	u32	memc_pcimsk1;
12262306a36Sopenharmony_ci	u8	res11[52];
12362306a36Sopenharmony_ci} memctl_cpm2_t;
12462306a36Sopenharmony_ci
12562306a36Sopenharmony_ci/* System Integration Timers.
12662306a36Sopenharmony_ci*/
12762306a36Sopenharmony_citypedef struct	sys_int_timers {
12862306a36Sopenharmony_ci	u8	res1[32];
12962306a36Sopenharmony_ci	u16	sit_tmcntsc;
13062306a36Sopenharmony_ci	u8	res2[2];
13162306a36Sopenharmony_ci	u32	sit_tmcnt;
13262306a36Sopenharmony_ci	u8	res3[4];
13362306a36Sopenharmony_ci	u32	sit_tmcntal;
13462306a36Sopenharmony_ci	u8	res4[16];
13562306a36Sopenharmony_ci	u16	sit_piscr;
13662306a36Sopenharmony_ci	u8	res5[2];
13762306a36Sopenharmony_ci	u32	sit_pitc;
13862306a36Sopenharmony_ci	u32	sit_pitr;
13962306a36Sopenharmony_ci	u8      res6[94];
14062306a36Sopenharmony_ci	u8	res7[390];
14162306a36Sopenharmony_ci} sit_cpm2_t;
14262306a36Sopenharmony_ci
14362306a36Sopenharmony_ci#define PISCR_PIRQ_MASK		((u16)0xff00)
14462306a36Sopenharmony_ci#define PISCR_PS		((u16)0x0080)
14562306a36Sopenharmony_ci#define PISCR_PIE		((u16)0x0004)
14662306a36Sopenharmony_ci#define PISCR_PTF		((u16)0x0002)
14762306a36Sopenharmony_ci#define PISCR_PTE		((u16)0x0001)
14862306a36Sopenharmony_ci
14962306a36Sopenharmony_ci/* PCI Controller.
15062306a36Sopenharmony_ci*/
15162306a36Sopenharmony_citypedef struct pci_ctlr {
15262306a36Sopenharmony_ci	u32	pci_omisr;
15362306a36Sopenharmony_ci	u32	pci_omimr;
15462306a36Sopenharmony_ci	u8	res1[8];
15562306a36Sopenharmony_ci	u32	pci_ifqpr;
15662306a36Sopenharmony_ci	u32	pci_ofqpr;
15762306a36Sopenharmony_ci	u8	res2[8];
15862306a36Sopenharmony_ci	u32	pci_imr0;
15962306a36Sopenharmony_ci	u32	pci_imr1;
16062306a36Sopenharmony_ci	u32	pci_omr0;
16162306a36Sopenharmony_ci	u32	pci_omr1;
16262306a36Sopenharmony_ci	u32	pci_odr;
16362306a36Sopenharmony_ci	u8	res3[4];
16462306a36Sopenharmony_ci	u32	pci_idr;
16562306a36Sopenharmony_ci	u8	res4[20];
16662306a36Sopenharmony_ci	u32	pci_imisr;
16762306a36Sopenharmony_ci	u32	pci_imimr;
16862306a36Sopenharmony_ci	u8	res5[24];
16962306a36Sopenharmony_ci	u32	pci_ifhpr;
17062306a36Sopenharmony_ci	u8	res6[4];
17162306a36Sopenharmony_ci	u32	pci_iftpr;
17262306a36Sopenharmony_ci	u8	res7[4];
17362306a36Sopenharmony_ci	u32	pci_iphpr;
17462306a36Sopenharmony_ci	u8	res8[4];
17562306a36Sopenharmony_ci	u32	pci_iptpr;
17662306a36Sopenharmony_ci	u8	res9[4];
17762306a36Sopenharmony_ci	u32	pci_ofhpr;
17862306a36Sopenharmony_ci	u8	res10[4];
17962306a36Sopenharmony_ci	u32	pci_oftpr;
18062306a36Sopenharmony_ci	u8	res11[4];
18162306a36Sopenharmony_ci	u32	pci_ophpr;
18262306a36Sopenharmony_ci	u8	res12[4];
18362306a36Sopenharmony_ci	u32	pci_optpr;
18462306a36Sopenharmony_ci	u8	res13[8];
18562306a36Sopenharmony_ci	u32	pci_mucr;
18662306a36Sopenharmony_ci	u8	res14[8];
18762306a36Sopenharmony_ci	u32	pci_qbar;
18862306a36Sopenharmony_ci	u8	res15[12];
18962306a36Sopenharmony_ci	u32	pci_dmamr0;
19062306a36Sopenharmony_ci	u32	pci_dmasr0;
19162306a36Sopenharmony_ci	u32	pci_dmacdar0;
19262306a36Sopenharmony_ci	u8	res16[4];
19362306a36Sopenharmony_ci	u32	pci_dmasar0;
19462306a36Sopenharmony_ci	u8	res17[4];
19562306a36Sopenharmony_ci	u32	pci_dmadar0;
19662306a36Sopenharmony_ci	u8	res18[4];
19762306a36Sopenharmony_ci	u32	pci_dmabcr0;
19862306a36Sopenharmony_ci	u32	pci_dmandar0;
19962306a36Sopenharmony_ci	u8	res19[86];
20062306a36Sopenharmony_ci	u32	pci_dmamr1;
20162306a36Sopenharmony_ci	u32	pci_dmasr1;
20262306a36Sopenharmony_ci	u32	pci_dmacdar1;
20362306a36Sopenharmony_ci	u8	res20[4];
20462306a36Sopenharmony_ci	u32	pci_dmasar1;
20562306a36Sopenharmony_ci	u8	res21[4];
20662306a36Sopenharmony_ci	u32	pci_dmadar1;
20762306a36Sopenharmony_ci	u8	res22[4];
20862306a36Sopenharmony_ci	u32	pci_dmabcr1;
20962306a36Sopenharmony_ci	u32	pci_dmandar1;
21062306a36Sopenharmony_ci	u8	res23[88];
21162306a36Sopenharmony_ci	u32	pci_dmamr2;
21262306a36Sopenharmony_ci	u32	pci_dmasr2;
21362306a36Sopenharmony_ci	u32	pci_dmacdar2;
21462306a36Sopenharmony_ci	u8	res24[4];
21562306a36Sopenharmony_ci	u32	pci_dmasar2;
21662306a36Sopenharmony_ci	u8	res25[4];
21762306a36Sopenharmony_ci	u32	pci_dmadar2;
21862306a36Sopenharmony_ci	u8	res26[4];
21962306a36Sopenharmony_ci	u32	pci_dmabcr2;
22062306a36Sopenharmony_ci	u32	pci_dmandar2;
22162306a36Sopenharmony_ci	u8	res27[88];
22262306a36Sopenharmony_ci	u32	pci_dmamr3;
22362306a36Sopenharmony_ci	u32	pci_dmasr3;
22462306a36Sopenharmony_ci	u32	pci_dmacdar3;
22562306a36Sopenharmony_ci	u8	res28[4];
22662306a36Sopenharmony_ci	u32	pci_dmasar3;
22762306a36Sopenharmony_ci	u8	res29[4];
22862306a36Sopenharmony_ci	u32	pci_dmadar3;
22962306a36Sopenharmony_ci	u8	res30[4];
23062306a36Sopenharmony_ci	u32	pci_dmabcr3;
23162306a36Sopenharmony_ci	u32	pci_dmandar3;
23262306a36Sopenharmony_ci	u8	res31[344];
23362306a36Sopenharmony_ci	u32	pci_potar0;
23462306a36Sopenharmony_ci	u8	res32[4];
23562306a36Sopenharmony_ci	u32	pci_pobar0;
23662306a36Sopenharmony_ci	u8	res33[4];
23762306a36Sopenharmony_ci	u32	pci_pocmr0;
23862306a36Sopenharmony_ci	u8	res34[4];
23962306a36Sopenharmony_ci	u32	pci_potar1;
24062306a36Sopenharmony_ci	u8	res35[4];
24162306a36Sopenharmony_ci	u32	pci_pobar1;
24262306a36Sopenharmony_ci	u8	res36[4];
24362306a36Sopenharmony_ci	u32	pci_pocmr1;
24462306a36Sopenharmony_ci	u8	res37[4];
24562306a36Sopenharmony_ci	u32	pci_potar2;
24662306a36Sopenharmony_ci	u8	res38[4];
24762306a36Sopenharmony_ci	u32	pci_pobar2;
24862306a36Sopenharmony_ci	u8	res39[4];
24962306a36Sopenharmony_ci	u32	pci_pocmr2;
25062306a36Sopenharmony_ci	u8	res40[50];
25162306a36Sopenharmony_ci	u32	pci_ptcr;
25262306a36Sopenharmony_ci	u32	pci_gpcr;
25362306a36Sopenharmony_ci	u32	pci_gcr;
25462306a36Sopenharmony_ci	u32	pci_esr;
25562306a36Sopenharmony_ci	u32	pci_emr;
25662306a36Sopenharmony_ci	u32	pci_ecr;
25762306a36Sopenharmony_ci	u32	pci_eacr;
25862306a36Sopenharmony_ci	u8	res41[4];
25962306a36Sopenharmony_ci	u32	pci_edcr;
26062306a36Sopenharmony_ci	u8	res42[4];
26162306a36Sopenharmony_ci	u32	pci_eccr;
26262306a36Sopenharmony_ci	u8	res43[44];
26362306a36Sopenharmony_ci	u32	pci_pitar1;
26462306a36Sopenharmony_ci	u8	res44[4];
26562306a36Sopenharmony_ci	u32	pci_pibar1;
26662306a36Sopenharmony_ci	u8	res45[4];
26762306a36Sopenharmony_ci	u32	pci_picmr1;
26862306a36Sopenharmony_ci	u8	res46[4];
26962306a36Sopenharmony_ci	u32	pci_pitar0;
27062306a36Sopenharmony_ci	u8	res47[4];
27162306a36Sopenharmony_ci	u32	pci_pibar0;
27262306a36Sopenharmony_ci	u8	res48[4];
27362306a36Sopenharmony_ci	u32	pci_picmr0;
27462306a36Sopenharmony_ci	u8	res49[4];
27562306a36Sopenharmony_ci	u32	pci_cfg_addr;
27662306a36Sopenharmony_ci	u32	pci_cfg_data;
27762306a36Sopenharmony_ci	u32	pci_int_ack;
27862306a36Sopenharmony_ci	u8	res50[756];
27962306a36Sopenharmony_ci} pci_cpm2_t;
28062306a36Sopenharmony_ci
28162306a36Sopenharmony_ci/* Interrupt Controller.
28262306a36Sopenharmony_ci*/
28362306a36Sopenharmony_citypedef struct interrupt_controller {
28462306a36Sopenharmony_ci	u16	ic_sicr;
28562306a36Sopenharmony_ci	u8	res1[2];
28662306a36Sopenharmony_ci	u32	ic_sivec;
28762306a36Sopenharmony_ci	u32	ic_sipnrh;
28862306a36Sopenharmony_ci	u32	ic_sipnrl;
28962306a36Sopenharmony_ci	u32	ic_siprr;
29062306a36Sopenharmony_ci	u32	ic_scprrh;
29162306a36Sopenharmony_ci	u32	ic_scprrl;
29262306a36Sopenharmony_ci	u32	ic_simrh;
29362306a36Sopenharmony_ci	u32	ic_simrl;
29462306a36Sopenharmony_ci	u32	ic_siexr;
29562306a36Sopenharmony_ci	u8	res2[88];
29662306a36Sopenharmony_ci} intctl_cpm2_t;
29762306a36Sopenharmony_ci
29862306a36Sopenharmony_ci/* Clocks and Reset.
29962306a36Sopenharmony_ci*/
30062306a36Sopenharmony_citypedef struct clk_and_reset {
30162306a36Sopenharmony_ci	u32	car_sccr;
30262306a36Sopenharmony_ci	u8	res1[4];
30362306a36Sopenharmony_ci	u32	car_scmr;
30462306a36Sopenharmony_ci	u8	res2[4];
30562306a36Sopenharmony_ci	u32	car_rsr;
30662306a36Sopenharmony_ci	u32	car_rmr;
30762306a36Sopenharmony_ci	u8	res[104];
30862306a36Sopenharmony_ci} car_cpm2_t;
30962306a36Sopenharmony_ci
31062306a36Sopenharmony_ci/* Input/Output Port control/status registers.
31162306a36Sopenharmony_ci * Names consistent with processor manual, although they are different
31262306a36Sopenharmony_ci * from the original 8xx names.......
31362306a36Sopenharmony_ci */
31462306a36Sopenharmony_citypedef struct io_port {
31562306a36Sopenharmony_ci	u32	iop_pdira;
31662306a36Sopenharmony_ci	u32	iop_ppara;
31762306a36Sopenharmony_ci	u32	iop_psora;
31862306a36Sopenharmony_ci	u32	iop_podra;
31962306a36Sopenharmony_ci	u32	iop_pdata;
32062306a36Sopenharmony_ci	u8	res1[12];
32162306a36Sopenharmony_ci	u32	iop_pdirb;
32262306a36Sopenharmony_ci	u32	iop_pparb;
32362306a36Sopenharmony_ci	u32	iop_psorb;
32462306a36Sopenharmony_ci	u32	iop_podrb;
32562306a36Sopenharmony_ci	u32	iop_pdatb;
32662306a36Sopenharmony_ci	u8	res2[12];
32762306a36Sopenharmony_ci	u32	iop_pdirc;
32862306a36Sopenharmony_ci	u32	iop_pparc;
32962306a36Sopenharmony_ci	u32	iop_psorc;
33062306a36Sopenharmony_ci	u32	iop_podrc;
33162306a36Sopenharmony_ci	u32	iop_pdatc;
33262306a36Sopenharmony_ci	u8	res3[12];
33362306a36Sopenharmony_ci	u32	iop_pdird;
33462306a36Sopenharmony_ci	u32	iop_ppard;
33562306a36Sopenharmony_ci	u32	iop_psord;
33662306a36Sopenharmony_ci	u32	iop_podrd;
33762306a36Sopenharmony_ci	u32	iop_pdatd;
33862306a36Sopenharmony_ci	u8	res4[12];
33962306a36Sopenharmony_ci} iop_cpm2_t;
34062306a36Sopenharmony_ci
34162306a36Sopenharmony_ci/* Communication Processor Module Timers
34262306a36Sopenharmony_ci*/
34362306a36Sopenharmony_citypedef struct cpm_timers {
34462306a36Sopenharmony_ci	u8	cpmt_tgcr1;
34562306a36Sopenharmony_ci	u8	res1[3];
34662306a36Sopenharmony_ci	u8	cpmt_tgcr2;
34762306a36Sopenharmony_ci	u8	res2[11];
34862306a36Sopenharmony_ci	u16	cpmt_tmr1;
34962306a36Sopenharmony_ci	u16	cpmt_tmr2;
35062306a36Sopenharmony_ci	u16	cpmt_trr1;
35162306a36Sopenharmony_ci	u16	cpmt_trr2;
35262306a36Sopenharmony_ci	u16	cpmt_tcr1;
35362306a36Sopenharmony_ci	u16	cpmt_tcr2;
35462306a36Sopenharmony_ci	u16	cpmt_tcn1;
35562306a36Sopenharmony_ci	u16	cpmt_tcn2;
35662306a36Sopenharmony_ci	u16	cpmt_tmr3;
35762306a36Sopenharmony_ci	u16	cpmt_tmr4;
35862306a36Sopenharmony_ci	u16	cpmt_trr3;
35962306a36Sopenharmony_ci	u16	cpmt_trr4;
36062306a36Sopenharmony_ci	u16	cpmt_tcr3;
36162306a36Sopenharmony_ci	u16	cpmt_tcr4;
36262306a36Sopenharmony_ci	u16	cpmt_tcn3;
36362306a36Sopenharmony_ci	u16	cpmt_tcn4;
36462306a36Sopenharmony_ci	u16	cpmt_ter1;
36562306a36Sopenharmony_ci	u16	cpmt_ter2;
36662306a36Sopenharmony_ci	u16	cpmt_ter3;
36762306a36Sopenharmony_ci	u16	cpmt_ter4;
36862306a36Sopenharmony_ci	u8	res3[584];
36962306a36Sopenharmony_ci} cpmtimer_cpm2_t;
37062306a36Sopenharmony_ci
37162306a36Sopenharmony_ci/* DMA control/status registers.
37262306a36Sopenharmony_ci*/
37362306a36Sopenharmony_citypedef struct sdma_csr {
37462306a36Sopenharmony_ci	u8	res0[24];
37562306a36Sopenharmony_ci	u8	sdma_sdsr;
37662306a36Sopenharmony_ci	u8	res1[3];
37762306a36Sopenharmony_ci	u8	sdma_sdmr;
37862306a36Sopenharmony_ci	u8	res2[3];
37962306a36Sopenharmony_ci	u8	sdma_idsr1;
38062306a36Sopenharmony_ci	u8	res3[3];
38162306a36Sopenharmony_ci	u8	sdma_idmr1;
38262306a36Sopenharmony_ci	u8	res4[3];
38362306a36Sopenharmony_ci	u8	sdma_idsr2;
38462306a36Sopenharmony_ci	u8	res5[3];
38562306a36Sopenharmony_ci	u8	sdma_idmr2;
38662306a36Sopenharmony_ci	u8	res6[3];
38762306a36Sopenharmony_ci	u8	sdma_idsr3;
38862306a36Sopenharmony_ci	u8	res7[3];
38962306a36Sopenharmony_ci	u8	sdma_idmr3;
39062306a36Sopenharmony_ci	u8	res8[3];
39162306a36Sopenharmony_ci	u8	sdma_idsr4;
39262306a36Sopenharmony_ci	u8	res9[3];
39362306a36Sopenharmony_ci	u8	sdma_idmr4;
39462306a36Sopenharmony_ci	u8	res10[707];
39562306a36Sopenharmony_ci} sdma_cpm2_t;
39662306a36Sopenharmony_ci
39762306a36Sopenharmony_ci/* Fast controllers
39862306a36Sopenharmony_ci*/
39962306a36Sopenharmony_citypedef struct fcc {
40062306a36Sopenharmony_ci	u32	fcc_gfmr;
40162306a36Sopenharmony_ci	u32	fcc_fpsmr;
40262306a36Sopenharmony_ci	u16	fcc_ftodr;
40362306a36Sopenharmony_ci	u8	res1[2];
40462306a36Sopenharmony_ci	u16	fcc_fdsr;
40562306a36Sopenharmony_ci	u8	res2[2];
40662306a36Sopenharmony_ci	u16	fcc_fcce;
40762306a36Sopenharmony_ci	u8	res3[2];
40862306a36Sopenharmony_ci	u16	fcc_fccm;
40962306a36Sopenharmony_ci	u8	res4[2];
41062306a36Sopenharmony_ci	u8	fcc_fccs;
41162306a36Sopenharmony_ci	u8	res5[3];
41262306a36Sopenharmony_ci	u8	fcc_ftirr_phy[4];
41362306a36Sopenharmony_ci} fcc_t;
41462306a36Sopenharmony_ci
41562306a36Sopenharmony_ci/* Fast controllers continued
41662306a36Sopenharmony_ci */
41762306a36Sopenharmony_citypedef struct fcc_c {
41862306a36Sopenharmony_ci	u32	fcc_firper;
41962306a36Sopenharmony_ci	u32	fcc_firer;
42062306a36Sopenharmony_ci	u32	fcc_firsr_hi;
42162306a36Sopenharmony_ci	u32	fcc_firsr_lo;
42262306a36Sopenharmony_ci	u8	fcc_gfemr;
42362306a36Sopenharmony_ci	u8	res1[15];
42462306a36Sopenharmony_ci} fcc_c_t;
42562306a36Sopenharmony_ci
42662306a36Sopenharmony_ci/* TC Layer
42762306a36Sopenharmony_ci */
42862306a36Sopenharmony_citypedef struct tclayer {
42962306a36Sopenharmony_ci	u16	tc_tcmode;
43062306a36Sopenharmony_ci	u16	tc_cdsmr;
43162306a36Sopenharmony_ci	u16	tc_tcer;
43262306a36Sopenharmony_ci	u16	tc_rcc;
43362306a36Sopenharmony_ci	u16	tc_tcmr;
43462306a36Sopenharmony_ci	u16	tc_fcc;
43562306a36Sopenharmony_ci	u16	tc_ccc;
43662306a36Sopenharmony_ci	u16	tc_icc;
43762306a36Sopenharmony_ci	u16	tc_tcc;
43862306a36Sopenharmony_ci	u16	tc_ecc;
43962306a36Sopenharmony_ci	u8	res1[12];
44062306a36Sopenharmony_ci} tclayer_t;
44162306a36Sopenharmony_ci
44262306a36Sopenharmony_ci
44362306a36Sopenharmony_ci/* I2C
44462306a36Sopenharmony_ci*/
44562306a36Sopenharmony_citypedef struct i2c {
44662306a36Sopenharmony_ci	u8	i2c_i2mod;
44762306a36Sopenharmony_ci	u8	res1[3];
44862306a36Sopenharmony_ci	u8	i2c_i2add;
44962306a36Sopenharmony_ci	u8	res2[3];
45062306a36Sopenharmony_ci	u8	i2c_i2brg;
45162306a36Sopenharmony_ci	u8	res3[3];
45262306a36Sopenharmony_ci	u8	i2c_i2com;
45362306a36Sopenharmony_ci	u8	res4[3];
45462306a36Sopenharmony_ci	u8	i2c_i2cer;
45562306a36Sopenharmony_ci	u8	res5[3];
45662306a36Sopenharmony_ci	u8	i2c_i2cmr;
45762306a36Sopenharmony_ci	u8	res6[331];
45862306a36Sopenharmony_ci} i2c_cpm2_t;
45962306a36Sopenharmony_ci
46062306a36Sopenharmony_citypedef struct scc {		/* Serial communication channels */
46162306a36Sopenharmony_ci	u32	scc_gsmrl;
46262306a36Sopenharmony_ci	u32	scc_gsmrh;
46362306a36Sopenharmony_ci	u16	scc_psmr;
46462306a36Sopenharmony_ci	u8	res1[2];
46562306a36Sopenharmony_ci	u16	scc_todr;
46662306a36Sopenharmony_ci	u16	scc_dsr;
46762306a36Sopenharmony_ci	u16	scc_scce;
46862306a36Sopenharmony_ci	u8	res2[2];
46962306a36Sopenharmony_ci	u16	scc_sccm;
47062306a36Sopenharmony_ci	u8	res3;
47162306a36Sopenharmony_ci	u8	scc_sccs;
47262306a36Sopenharmony_ci	u8	res4[8];
47362306a36Sopenharmony_ci} scc_t;
47462306a36Sopenharmony_ci
47562306a36Sopenharmony_citypedef struct smc {		/* Serial management channels */
47662306a36Sopenharmony_ci	u8	res1[2];
47762306a36Sopenharmony_ci	u16	smc_smcmr;
47862306a36Sopenharmony_ci	u8	res2[2];
47962306a36Sopenharmony_ci	u8	smc_smce;
48062306a36Sopenharmony_ci	u8	res3[3];
48162306a36Sopenharmony_ci	u8	smc_smcm;
48262306a36Sopenharmony_ci	u8	res4[5];
48362306a36Sopenharmony_ci} smc_t;
48462306a36Sopenharmony_ci
48562306a36Sopenharmony_ci/* Serial Peripheral Interface.
48662306a36Sopenharmony_ci*/
48762306a36Sopenharmony_citypedef struct spi_ctrl {
48862306a36Sopenharmony_ci	u16	spi_spmode;
48962306a36Sopenharmony_ci	u8	res1[4];
49062306a36Sopenharmony_ci	u8	spi_spie;
49162306a36Sopenharmony_ci	u8	res2[3];
49262306a36Sopenharmony_ci	u8	spi_spim;
49362306a36Sopenharmony_ci	u8	res3[2];
49462306a36Sopenharmony_ci	u8	spi_spcom;
49562306a36Sopenharmony_ci	u8	res4[82];
49662306a36Sopenharmony_ci} spictl_cpm2_t;
49762306a36Sopenharmony_ci
49862306a36Sopenharmony_ci/* CPM Mux.
49962306a36Sopenharmony_ci*/
50062306a36Sopenharmony_citypedef struct cpmux {
50162306a36Sopenharmony_ci	u8	cmx_si1cr;
50262306a36Sopenharmony_ci	u8	res1;
50362306a36Sopenharmony_ci	u8	cmx_si2cr;
50462306a36Sopenharmony_ci	u8	res2;
50562306a36Sopenharmony_ci	u32	cmx_fcr;
50662306a36Sopenharmony_ci	u32	cmx_scr;
50762306a36Sopenharmony_ci	u8	cmx_smr;
50862306a36Sopenharmony_ci	u8	res3;
50962306a36Sopenharmony_ci	u16	cmx_uar;
51062306a36Sopenharmony_ci	u8	res4[16];
51162306a36Sopenharmony_ci} cpmux_t;
51262306a36Sopenharmony_ci
51362306a36Sopenharmony_ci/* SIRAM control
51462306a36Sopenharmony_ci*/
51562306a36Sopenharmony_citypedef struct siram {
51662306a36Sopenharmony_ci	u16	si_amr;
51762306a36Sopenharmony_ci	u16	si_bmr;
51862306a36Sopenharmony_ci	u16	si_cmr;
51962306a36Sopenharmony_ci	u16	si_dmr;
52062306a36Sopenharmony_ci	u8	si_gmr;
52162306a36Sopenharmony_ci	u8	res1;
52262306a36Sopenharmony_ci	u8	si_cmdr;
52362306a36Sopenharmony_ci	u8	res2;
52462306a36Sopenharmony_ci	u8	si_str;
52562306a36Sopenharmony_ci	u8	res3;
52662306a36Sopenharmony_ci	u16	si_rsr;
52762306a36Sopenharmony_ci} siramctl_t;
52862306a36Sopenharmony_ci
52962306a36Sopenharmony_citypedef struct mcc {
53062306a36Sopenharmony_ci	u16	mcc_mcce;
53162306a36Sopenharmony_ci	u8	res1[2];
53262306a36Sopenharmony_ci	u16	mcc_mccm;
53362306a36Sopenharmony_ci	u8	res2[2];
53462306a36Sopenharmony_ci	u8	mcc_mccf;
53562306a36Sopenharmony_ci	u8	res3[7];
53662306a36Sopenharmony_ci} mcc_t;
53762306a36Sopenharmony_ci
53862306a36Sopenharmony_citypedef struct comm_proc {
53962306a36Sopenharmony_ci	u32	cp_cpcr;
54062306a36Sopenharmony_ci	u32	cp_rccr;
54162306a36Sopenharmony_ci	u8	res1[14];
54262306a36Sopenharmony_ci	u16	cp_rter;
54362306a36Sopenharmony_ci	u8	res2[2];
54462306a36Sopenharmony_ci	u16	cp_rtmr;
54562306a36Sopenharmony_ci	u16	cp_rtscr;
54662306a36Sopenharmony_ci	u8	res3[2];
54762306a36Sopenharmony_ci	u32	cp_rtsr;
54862306a36Sopenharmony_ci	u8	res4[12];
54962306a36Sopenharmony_ci} cpm_cpm2_t;
55062306a36Sopenharmony_ci
55162306a36Sopenharmony_ci/* USB Controller.
55262306a36Sopenharmony_ci*/
55362306a36Sopenharmony_citypedef struct cpm_usb_ctlr {
55462306a36Sopenharmony_ci	u8	usb_usmod;
55562306a36Sopenharmony_ci	u8	usb_usadr;
55662306a36Sopenharmony_ci	u8	usb_uscom;
55762306a36Sopenharmony_ci	u8	res1[1];
55862306a36Sopenharmony_ci	__be16  usb_usep[4];
55962306a36Sopenharmony_ci	u8	res2[4];
56062306a36Sopenharmony_ci	__be16  usb_usber;
56162306a36Sopenharmony_ci	u8	res3[2];
56262306a36Sopenharmony_ci	__be16  usb_usbmr;
56362306a36Sopenharmony_ci	u8	usb_usbs;
56462306a36Sopenharmony_ci	u8	res4[7];
56562306a36Sopenharmony_ci} usb_cpm2_t;
56662306a36Sopenharmony_ci
56762306a36Sopenharmony_ci/* ...and the whole thing wrapped up....
56862306a36Sopenharmony_ci*/
56962306a36Sopenharmony_ci
57062306a36Sopenharmony_citypedef struct immap {
57162306a36Sopenharmony_ci	/* Some references are into the unique and known dpram spaces,
57262306a36Sopenharmony_ci	 * others are from the generic base.
57362306a36Sopenharmony_ci	 */
57462306a36Sopenharmony_ci#define im_dprambase	im_dpram1
57562306a36Sopenharmony_ci	u8		im_dpram1[16*1024];
57662306a36Sopenharmony_ci	u8		res1[16*1024];
57762306a36Sopenharmony_ci	u8		im_dpram2[4*1024];
57862306a36Sopenharmony_ci	u8		res2[8*1024];
57962306a36Sopenharmony_ci	u8		im_dpram3[4*1024];
58062306a36Sopenharmony_ci	u8		res3[16*1024];
58162306a36Sopenharmony_ci
58262306a36Sopenharmony_ci	sysconf_cpm2_t	im_siu_conf;	/* SIU Configuration */
58362306a36Sopenharmony_ci	memctl_cpm2_t	im_memctl;	/* Memory Controller */
58462306a36Sopenharmony_ci	sit_cpm2_t	im_sit;		/* System Integration Timers */
58562306a36Sopenharmony_ci	pci_cpm2_t	im_pci;		/* PCI Controller */
58662306a36Sopenharmony_ci	intctl_cpm2_t	im_intctl;	/* Interrupt Controller */
58762306a36Sopenharmony_ci	car_cpm2_t	im_clkrst;	/* Clocks and reset */
58862306a36Sopenharmony_ci	iop_cpm2_t	im_ioport;	/* IO Port control/status */
58962306a36Sopenharmony_ci	cpmtimer_cpm2_t	im_cpmtimer;	/* CPM timers */
59062306a36Sopenharmony_ci	sdma_cpm2_t	im_sdma;	/* SDMA control/status */
59162306a36Sopenharmony_ci
59262306a36Sopenharmony_ci	fcc_t		im_fcc[3];	/* Three FCCs */
59362306a36Sopenharmony_ci	u8		res4z[32];
59462306a36Sopenharmony_ci	fcc_c_t		im_fcc_c[3];	/* Continued FCCs */
59562306a36Sopenharmony_ci
59662306a36Sopenharmony_ci	u8		res4[32];
59762306a36Sopenharmony_ci
59862306a36Sopenharmony_ci	tclayer_t	im_tclayer[8];	/* Eight TCLayers */
59962306a36Sopenharmony_ci	u16		tc_tcgsr;
60062306a36Sopenharmony_ci	u16		tc_tcger;
60162306a36Sopenharmony_ci
60262306a36Sopenharmony_ci	/* First set of baud rate generators.
60362306a36Sopenharmony_ci	*/
60462306a36Sopenharmony_ci	u8		res[236];
60562306a36Sopenharmony_ci	u32		im_brgc5;
60662306a36Sopenharmony_ci	u32		im_brgc6;
60762306a36Sopenharmony_ci	u32		im_brgc7;
60862306a36Sopenharmony_ci	u32		im_brgc8;
60962306a36Sopenharmony_ci
61062306a36Sopenharmony_ci	u8		res5[608];
61162306a36Sopenharmony_ci
61262306a36Sopenharmony_ci	i2c_cpm2_t	im_i2c;		/* I2C control/status */
61362306a36Sopenharmony_ci	cpm_cpm2_t	im_cpm;		/* Communication processor */
61462306a36Sopenharmony_ci
61562306a36Sopenharmony_ci	/* Second set of baud rate generators.
61662306a36Sopenharmony_ci	*/
61762306a36Sopenharmony_ci	u32		im_brgc1;
61862306a36Sopenharmony_ci	u32		im_brgc2;
61962306a36Sopenharmony_ci	u32		im_brgc3;
62062306a36Sopenharmony_ci	u32		im_brgc4;
62162306a36Sopenharmony_ci
62262306a36Sopenharmony_ci	scc_t		im_scc[4];	/* Four SCCs */
62362306a36Sopenharmony_ci	smc_t		im_smc[2];	/* Couple of SMCs */
62462306a36Sopenharmony_ci	spictl_cpm2_t	im_spi;		/* A SPI */
62562306a36Sopenharmony_ci	cpmux_t		im_cpmux;	/* CPM clock route mux */
62662306a36Sopenharmony_ci	siramctl_t	im_siramctl1;	/* First SI RAM Control */
62762306a36Sopenharmony_ci	mcc_t		im_mcc1;	/* First MCC */
62862306a36Sopenharmony_ci	siramctl_t	im_siramctl2;	/* Second SI RAM Control */
62962306a36Sopenharmony_ci	mcc_t		im_mcc2;	/* Second MCC */
63062306a36Sopenharmony_ci	usb_cpm2_t	im_usb;		/* USB Controller */
63162306a36Sopenharmony_ci
63262306a36Sopenharmony_ci	u8		res6[1153];
63362306a36Sopenharmony_ci
63462306a36Sopenharmony_ci	u16		im_si1txram[256];
63562306a36Sopenharmony_ci	u8		res7[512];
63662306a36Sopenharmony_ci	u16		im_si1rxram[256];
63762306a36Sopenharmony_ci	u8		res8[512];
63862306a36Sopenharmony_ci	u16		im_si2txram[256];
63962306a36Sopenharmony_ci	u8		res9[512];
64062306a36Sopenharmony_ci	u16		im_si2rxram[256];
64162306a36Sopenharmony_ci	u8		res10[512];
64262306a36Sopenharmony_ci	u8		res11[4096];
64362306a36Sopenharmony_ci} cpm2_map_t;
64462306a36Sopenharmony_ci
64562306a36Sopenharmony_ciextern cpm2_map_t __iomem *cpm2_immr;
64662306a36Sopenharmony_ci
64762306a36Sopenharmony_ci#endif /* __IMMAP_CPM2__ */
64862306a36Sopenharmony_ci#endif /* __KERNEL__ */
649