/* SPDX-License-Identifier: GPL-2.0 */ /* * CPM2 Internal Memory Map * Copyright (c) 1999 Dan Malek (dmalek@jlc.net) * * The Internal Memory Map for devices with CPM2 on them. This * is the superset of all CPM2 devices (8260, 8266, 8280, 8272, * 8560). */ #ifdef __KERNEL__ #ifndef __IMMAP_CPM2__ #define __IMMAP_CPM2__ #include <linux/types.h> /* System configuration registers. */ typedef struct sys_82xx_conf { u32 sc_siumcr; u32 sc_sypcr; u8 res1[6]; u16 sc_swsr; u8 res2[20]; u32 sc_bcr; u8 sc_ppc_acr; u8 res3[3]; u32 sc_ppc_alrh; u32 sc_ppc_alrl; u8 sc_lcl_acr; u8 res4[3]; u32 sc_lcl_alrh; u32 sc_lcl_alrl; u32 sc_tescr1; u32 sc_tescr2; u32 sc_ltescr1; u32 sc_ltescr2; u32 sc_pdtea; u8 sc_pdtem; u8 res5[3]; u32 sc_ldtea; u8 sc_ldtem; u8 res6[163]; } sysconf_82xx_cpm2_t; typedef struct sys_85xx_conf { u32 sc_cear; u16 sc_ceer; u16 sc_cemr; u8 res1[70]; u32 sc_smaer; u8 res2[4]; u32 sc_smevr; u32 sc_smctr; u32 sc_lmaer; u8 res3[4]; u32 sc_lmevr; u32 sc_lmctr; u8 res4[144]; } sysconf_85xx_cpm2_t; typedef union sys_conf { sysconf_82xx_cpm2_t siu_82xx; sysconf_85xx_cpm2_t siu_85xx; } sysconf_cpm2_t; /* Memory controller registers. */ typedef struct mem_ctlr { u32 memc_br0; u32 memc_or0; u32 memc_br1; u32 memc_or1; u32 memc_br2; u32 memc_or2; u32 memc_br3; u32 memc_or3; u32 memc_br4; u32 memc_or4; u32 memc_br5; u32 memc_or5; u32 memc_br6; u32 memc_or6; u32 memc_br7; u32 memc_or7; u32 memc_br8; u32 memc_or8; u32 memc_br9; u32 memc_or9; u32 memc_br10; u32 memc_or10; u32 memc_br11; u32 memc_or11; u8 res1[8]; u32 memc_mar; u8 res2[4]; u32 memc_mamr; u32 memc_mbmr; u32 memc_mcmr; u8 res3[8]; u16 memc_mptpr; u8 res4[2]; u32 memc_mdr; u8 res5[4]; u32 memc_psdmr; u32 memc_lsdmr; u8 memc_purt; u8 res6[3]; u8 memc_psrt; u8 res7[3]; u8 memc_lurt; u8 res8[3]; u8 memc_lsrt; u8 res9[3]; u32 memc_immr; u32 memc_pcibr0; u32 memc_pcibr1; u8 res10[16]; u32 memc_pcimsk0; u32 memc_pcimsk1; u8 res11[52]; } memctl_cpm2_t; /* System Integration Timers. */ typedef struct sys_int_timers { u8 res1[32]; u16 sit_tmcntsc; u8 res2[2]; u32 sit_tmcnt; u8 res3[4]; u32 sit_tmcntal; u8 res4[16]; u16 sit_piscr; u8 res5[2]; u32 sit_pitc; u32 sit_pitr; u8 res6[94]; u8 res7[390]; } sit_cpm2_t; #define PISCR_PIRQ_MASK ((u16)0xff00) #define PISCR_PS ((u16)0x0080) #define PISCR_PIE ((u16)0x0004) #define PISCR_PTF ((u16)0x0002) #define PISCR_PTE ((u16)0x0001) /* PCI Controller. */ typedef struct pci_ctlr { u32 pci_omisr; u32 pci_omimr; u8 res1[8]; u32 pci_ifqpr; u32 pci_ofqpr; u8 res2[8]; u32 pci_imr0; u32 pci_imr1; u32 pci_omr0; u32 pci_omr1; u32 pci_odr; u8 res3[4]; u32 pci_idr; u8 res4[20]; u32 pci_imisr; u32 pci_imimr; u8 res5[24]; u32 pci_ifhpr; u8 res6[4]; u32 pci_iftpr; u8 res7[4]; u32 pci_iphpr; u8 res8[4]; u32 pci_iptpr; u8 res9[4]; u32 pci_ofhpr; u8 res10[4]; u32 pci_oftpr; u8 res11[4]; u32 pci_ophpr; u8 res12[4]; u32 pci_optpr; u8 res13[8]; u32 pci_mucr; u8 res14[8]; u32 pci_qbar; u8 res15[12]; u32 pci_dmamr0; u32 pci_dmasr0; u32 pci_dmacdar0; u8 res16[4]; u32 pci_dmasar0; u8 res17[4]; u32 pci_dmadar0; u8 res18[4]; u32 pci_dmabcr0; u32 pci_dmandar0; u8 res19[86]; u32 pci_dmamr1; u32 pci_dmasr1; u32 pci_dmacdar1; u8 res20[4]; u32 pci_dmasar1; u8 res21[4]; u32 pci_dmadar1; u8 res22[4]; u32 pci_dmabcr1; u32 pci_dmandar1; u8 res23[88]; u32 pci_dmamr2; u32 pci_dmasr2; u32 pci_dmacdar2; u8 res24[4]; u32 pci_dmasar2; u8 res25[4]; u32 pci_dmadar2; u8 res26[4]; u32 pci_dmabcr2; u32 pci_dmandar2; u8 res27[88]; u32 pci_dmamr3; u32 pci_dmasr3; u32 pci_dmacdar3; u8 res28[4]; u32 pci_dmasar3; u8 res29[4]; u32 pci_dmadar3; u8 res30[4]; u32 pci_dmabcr3; u32 pci_dmandar3; u8 res31[344]; u32 pci_potar0; u8 res32[4]; u32 pci_pobar0; u8 res33[4]; u32 pci_pocmr0; u8 res34[4]; u32 pci_potar1; u8 res35[4]; u32 pci_pobar1; u8 res36[4]; u32 pci_pocmr1; u8 res37[4]; u32 pci_potar2; u8 res38[4]; u32 pci_pobar2; u8 res39[4]; u32 pci_pocmr2; u8 res40[50]; u32 pci_ptcr; u32 pci_gpcr; u32 pci_gcr; u32 pci_esr; u32 pci_emr; u32 pci_ecr; u32 pci_eacr; u8 res41[4]; u32 pci_edcr; u8 res42[4]; u32 pci_eccr; u8 res43[44]; u32 pci_pitar1; u8 res44[4]; u32 pci_pibar1; u8 res45[4]; u32 pci_picmr1; u8 res46[4]; u32 pci_pitar0; u8 res47[4]; u32 pci_pibar0; u8 res48[4]; u32 pci_picmr0; u8 res49[4]; u32 pci_cfg_addr; u32 pci_cfg_data; u32 pci_int_ack; u8 res50[756]; } pci_cpm2_t; /* Interrupt Controller. */ typedef struct interrupt_controller { u16 ic_sicr; u8 res1[2]; u32 ic_sivec; u32 ic_sipnrh; u32 ic_sipnrl; u32 ic_siprr; u32 ic_scprrh; u32 ic_scprrl; u32 ic_simrh; u32 ic_simrl; u32 ic_siexr; u8 res2[88]; } intctl_cpm2_t; /* Clocks and Reset. */ typedef struct clk_and_reset { u32 car_sccr; u8 res1[4]; u32 car_scmr; u8 res2[4]; u32 car_rsr; u32 car_rmr; u8 res[104]; } car_cpm2_t; /* Input/Output Port control/status registers. * Names consistent with processor manual, although they are different * from the original 8xx names....... */ typedef struct io_port { u32 iop_pdira; u32 iop_ppara; u32 iop_psora; u32 iop_podra; u32 iop_pdata; u8 res1[12]; u32 iop_pdirb; u32 iop_pparb; u32 iop_psorb; u32 iop_podrb; u32 iop_pdatb; u8 res2[12]; u32 iop_pdirc; u32 iop_pparc; u32 iop_psorc; u32 iop_podrc; u32 iop_pdatc; u8 res3[12]; u32 iop_pdird; u32 iop_ppard; u32 iop_psord; u32 iop_podrd; u32 iop_pdatd; u8 res4[12]; } iop_cpm2_t; /* Communication Processor Module Timers */ typedef struct cpm_timers { u8 cpmt_tgcr1; u8 res1[3]; u8 cpmt_tgcr2; u8 res2[11]; u16 cpmt_tmr1; u16 cpmt_tmr2; u16 cpmt_trr1; u16 cpmt_trr2; u16 cpmt_tcr1; u16 cpmt_tcr2; u16 cpmt_tcn1; u16 cpmt_tcn2; u16 cpmt_tmr3; u16 cpmt_tmr4; u16 cpmt_trr3; u16 cpmt_trr4; u16 cpmt_tcr3; u16 cpmt_tcr4; u16 cpmt_tcn3; u16 cpmt_tcn4; u16 cpmt_ter1; u16 cpmt_ter2; u16 cpmt_ter3; u16 cpmt_ter4; u8 res3[584]; } cpmtimer_cpm2_t; /* DMA control/status registers. */ typedef struct sdma_csr { u8 res0[24]; u8 sdma_sdsr; u8 res1[3]; u8 sdma_sdmr; u8 res2[3]; u8 sdma_idsr1; u8 res3[3]; u8 sdma_idmr1; u8 res4[3]; u8 sdma_idsr2; u8 res5[3]; u8 sdma_idmr2; u8 res6[3]; u8 sdma_idsr3; u8 res7[3]; u8 sdma_idmr3; u8 res8[3]; u8 sdma_idsr4; u8 res9[3]; u8 sdma_idmr4; u8 res10[707]; } sdma_cpm2_t; /* Fast controllers */ typedef struct fcc { u32 fcc_gfmr; u32 fcc_fpsmr; u16 fcc_ftodr; u8 res1[2]; u16 fcc_fdsr; u8 res2[2]; u16 fcc_fcce; u8 res3[2]; u16 fcc_fccm; u8 res4[2]; u8 fcc_fccs; u8 res5[3]; u8 fcc_ftirr_phy[4]; } fcc_t; /* Fast controllers continued */ typedef struct fcc_c { u32 fcc_firper; u32 fcc_firer; u32 fcc_firsr_hi; u32 fcc_firsr_lo; u8 fcc_gfemr; u8 res1[15]; } fcc_c_t; /* TC Layer */ typedef struct tclayer { u16 tc_tcmode; u16 tc_cdsmr; u16 tc_tcer; u16 tc_rcc; u16 tc_tcmr; u16 tc_fcc; u16 tc_ccc; u16 tc_icc; u16 tc_tcc; u16 tc_ecc; u8 res1[12]; } tclayer_t; /* I2C */ typedef struct i2c { u8 i2c_i2mod; u8 res1[3]; u8 i2c_i2add; u8 res2[3]; u8 i2c_i2brg; u8 res3[3]; u8 i2c_i2com; u8 res4[3]; u8 i2c_i2cer; u8 res5[3]; u8 i2c_i2cmr; u8 res6[331]; } i2c_cpm2_t; typedef struct scc { /* Serial communication channels */ u32 scc_gsmrl; u32 scc_gsmrh; u16 scc_psmr; u8 res1[2]; u16 scc_todr; u16 scc_dsr; u16 scc_scce; u8 res2[2]; u16 scc_sccm; u8 res3; u8 scc_sccs; u8 res4[8]; } scc_t; typedef struct smc { /* Serial management channels */ u8 res1[2]; u16 smc_smcmr; u8 res2[2]; u8 smc_smce; u8 res3[3]; u8 smc_smcm; u8 res4[5]; } smc_t; /* Serial Peripheral Interface. */ typedef struct spi_ctrl { u16 spi_spmode; u8 res1[4]; u8 spi_spie; u8 res2[3]; u8 spi_spim; u8 res3[2]; u8 spi_spcom; u8 res4[82]; } spictl_cpm2_t; /* CPM Mux. */ typedef struct cpmux { u8 cmx_si1cr; u8 res1; u8 cmx_si2cr; u8 res2; u32 cmx_fcr; u32 cmx_scr; u8 cmx_smr; u8 res3; u16 cmx_uar; u8 res4[16]; } cpmux_t; /* SIRAM control */ typedef struct siram { u16 si_amr; u16 si_bmr; u16 si_cmr; u16 si_dmr; u8 si_gmr; u8 res1; u8 si_cmdr; u8 res2; u8 si_str; u8 res3; u16 si_rsr; } siramctl_t; typedef struct mcc { u16 mcc_mcce; u8 res1[2]; u16 mcc_mccm; u8 res2[2]; u8 mcc_mccf; u8 res3[7]; } mcc_t; typedef struct comm_proc { u32 cp_cpcr; u32 cp_rccr; u8 res1[14]; u16 cp_rter; u8 res2[2]; u16 cp_rtmr; u16 cp_rtscr; u8 res3[2]; u32 cp_rtsr; u8 res4[12]; } cpm_cpm2_t; /* USB Controller. */ typedef struct cpm_usb_ctlr { u8 usb_usmod; u8 usb_usadr; u8 usb_uscom; u8 res1[1]; __be16 usb_usep[4]; u8 res2[4]; __be16 usb_usber; u8 res3[2]; __be16 usb_usbmr; u8 usb_usbs; u8 res4[7]; } usb_cpm2_t; /* ...and the whole thing wrapped up.... */ typedef struct immap { /* Some references are into the unique and known dpram spaces, * others are from the generic base. */ #define im_dprambase im_dpram1 u8 im_dpram1[16*1024]; u8 res1[16*1024]; u8 im_dpram2[4*1024]; u8 res2[8*1024]; u8 im_dpram3[4*1024]; u8 res3[16*1024]; sysconf_cpm2_t im_siu_conf; /* SIU Configuration */ memctl_cpm2_t im_memctl; /* Memory Controller */ sit_cpm2_t im_sit; /* System Integration Timers */ pci_cpm2_t im_pci; /* PCI Controller */ intctl_cpm2_t im_intctl; /* Interrupt Controller */ car_cpm2_t im_clkrst; /* Clocks and reset */ iop_cpm2_t im_ioport; /* IO Port control/status */ cpmtimer_cpm2_t im_cpmtimer; /* CPM timers */ sdma_cpm2_t im_sdma; /* SDMA control/status */ fcc_t im_fcc[3]; /* Three FCCs */ u8 res4z[32]; fcc_c_t im_fcc_c[3]; /* Continued FCCs */ u8 res4[32]; tclayer_t im_tclayer[8]; /* Eight TCLayers */ u16 tc_tcgsr; u16 tc_tcger; /* First set of baud rate generators. */ u8 res[236]; u32 im_brgc5; u32 im_brgc6; u32 im_brgc7; u32 im_brgc8; u8 res5[608]; i2c_cpm2_t im_i2c; /* I2C control/status */ cpm_cpm2_t im_cpm; /* Communication processor */ /* Second set of baud rate generators. */ u32 im_brgc1; u32 im_brgc2; u32 im_brgc3; u32 im_brgc4; scc_t im_scc[4]; /* Four SCCs */ smc_t im_smc[2]; /* Couple of SMCs */ spictl_cpm2_t im_spi; /* A SPI */ cpmux_t im_cpmux; /* CPM clock route mux */ siramctl_t im_siramctl1; /* First SI RAM Control */ mcc_t im_mcc1; /* First MCC */ siramctl_t im_siramctl2; /* Second SI RAM Control */ mcc_t im_mcc2; /* Second MCC */ usb_cpm2_t im_usb; /* USB Controller */ u8 res6[1153]; u16 im_si1txram[256]; u8 res7[512]; u16 im_si1rxram[256]; u8 res8[512]; u16 im_si2txram[256]; u8 res9[512]; u16 im_si2rxram[256]; u8 res10[512]; u8 res11[4096]; } cpm2_map_t; extern cpm2_map_t __iomem *cpm2_immr; #endif /* __IMMAP_CPM2__ */ #endif /* __KERNEL__ */