| /* |
| * 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__ |
| |
| /* 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 usb_ctlr { |
| u8 usb_usmod; |
| u8 usb_usadr; |
| u8 usb_uscom; |
| u8 res1[1]; |
| u16 usb_usep1; |
| u16 usb_usep2; |
| u16 usb_usep3; |
| u16 usb_usep4; |
| u8 res2[4]; |
| u16 usb_usber; |
| u8 res3[2]; |
| u16 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 *cpm2_immr; |
| |
| #endif /* __IMMAP_CPM2__ */ |
| #endif /* __KERNEL__ */ |