1*87e4c602SChristophe Leroy /* 2*87e4c602SChristophe Leroy * MPC8xx Internal Memory Map 3*87e4c602SChristophe Leroy * Copyright (c) 1997 Dan Malek (dmalek@jlc.net) 4*87e4c602SChristophe Leroy * 5*87e4c602SChristophe Leroy * The I/O on the MPC860 is comprised of blocks of special registers 6*87e4c602SChristophe Leroy * and the dual port ram for the Communication Processor Module. 7*87e4c602SChristophe Leroy * Within this space are functional units such as the SIU, memory 8*87e4c602SChristophe Leroy * controller, system timers, and other control functions. It is 9*87e4c602SChristophe Leroy * a combination that I found difficult to separate into logical 10*87e4c602SChristophe Leroy * functional files.....but anyone else is welcome to try. -- Dan 11*87e4c602SChristophe Leroy */ 12*87e4c602SChristophe Leroy #ifndef __IMMAP_8XX__ 13*87e4c602SChristophe Leroy #define __IMMAP_8XX__ 14*87e4c602SChristophe Leroy 15*87e4c602SChristophe Leroy /* System configuration registers. 16*87e4c602SChristophe Leroy */ 17*87e4c602SChristophe Leroy typedef struct sys_conf { 18*87e4c602SChristophe Leroy uint sc_siumcr; 19*87e4c602SChristophe Leroy uint sc_sypcr; 20*87e4c602SChristophe Leroy uint sc_swt; 21*87e4c602SChristophe Leroy char res1[2]; 22*87e4c602SChristophe Leroy ushort sc_swsr; 23*87e4c602SChristophe Leroy uint sc_sipend; 24*87e4c602SChristophe Leroy uint sc_simask; 25*87e4c602SChristophe Leroy uint sc_siel; 26*87e4c602SChristophe Leroy uint sc_sivec; 27*87e4c602SChristophe Leroy uint sc_tesr; 28*87e4c602SChristophe Leroy char res2[0xc]; 29*87e4c602SChristophe Leroy uint sc_sdcr; 30*87e4c602SChristophe Leroy char res3[0x4c]; 31*87e4c602SChristophe Leroy } sysconf8xx_t; 32*87e4c602SChristophe Leroy 33*87e4c602SChristophe Leroy /* PCMCIA configuration registers. 34*87e4c602SChristophe Leroy */ 35*87e4c602SChristophe Leroy typedef struct pcmcia_conf { 36*87e4c602SChristophe Leroy uint pcmc_pbr0; 37*87e4c602SChristophe Leroy uint pcmc_por0; 38*87e4c602SChristophe Leroy uint pcmc_pbr1; 39*87e4c602SChristophe Leroy uint pcmc_por1; 40*87e4c602SChristophe Leroy uint pcmc_pbr2; 41*87e4c602SChristophe Leroy uint pcmc_por2; 42*87e4c602SChristophe Leroy uint pcmc_pbr3; 43*87e4c602SChristophe Leroy uint pcmc_por3; 44*87e4c602SChristophe Leroy uint pcmc_pbr4; 45*87e4c602SChristophe Leroy uint pcmc_por4; 46*87e4c602SChristophe Leroy uint pcmc_pbr5; 47*87e4c602SChristophe Leroy uint pcmc_por5; 48*87e4c602SChristophe Leroy uint pcmc_pbr6; 49*87e4c602SChristophe Leroy uint pcmc_por6; 50*87e4c602SChristophe Leroy uint pcmc_pbr7; 51*87e4c602SChristophe Leroy uint pcmc_por7; 52*87e4c602SChristophe Leroy char res1[0x20]; 53*87e4c602SChristophe Leroy uint pcmc_pgcra; 54*87e4c602SChristophe Leroy uint pcmc_pgcrb; 55*87e4c602SChristophe Leroy uint pcmc_pscr; 56*87e4c602SChristophe Leroy char res2[4]; 57*87e4c602SChristophe Leroy uint pcmc_pipr; 58*87e4c602SChristophe Leroy char res3[4]; 59*87e4c602SChristophe Leroy uint pcmc_per; 60*87e4c602SChristophe Leroy char res4[4]; 61*87e4c602SChristophe Leroy } pcmconf8xx_t; 62*87e4c602SChristophe Leroy 63*87e4c602SChristophe Leroy /* Memory controller registers. 64*87e4c602SChristophe Leroy */ 65*87e4c602SChristophe Leroy typedef struct mem_ctlr { 66*87e4c602SChristophe Leroy uint memc_br0; 67*87e4c602SChristophe Leroy uint memc_or0; 68*87e4c602SChristophe Leroy uint memc_br1; 69*87e4c602SChristophe Leroy uint memc_or1; 70*87e4c602SChristophe Leroy uint memc_br2; 71*87e4c602SChristophe Leroy uint memc_or2; 72*87e4c602SChristophe Leroy uint memc_br3; 73*87e4c602SChristophe Leroy uint memc_or3; 74*87e4c602SChristophe Leroy uint memc_br4; 75*87e4c602SChristophe Leroy uint memc_or4; 76*87e4c602SChristophe Leroy uint memc_br5; 77*87e4c602SChristophe Leroy uint memc_or5; 78*87e4c602SChristophe Leroy uint memc_br6; 79*87e4c602SChristophe Leroy uint memc_or6; 80*87e4c602SChristophe Leroy uint memc_br7; 81*87e4c602SChristophe Leroy uint memc_or7; 82*87e4c602SChristophe Leroy char res1[0x24]; 83*87e4c602SChristophe Leroy uint memc_mar; 84*87e4c602SChristophe Leroy uint memc_mcr; 85*87e4c602SChristophe Leroy char res2[4]; 86*87e4c602SChristophe Leroy uint memc_mamr; 87*87e4c602SChristophe Leroy uint memc_mbmr; 88*87e4c602SChristophe Leroy ushort memc_mstat; 89*87e4c602SChristophe Leroy ushort memc_mptpr; 90*87e4c602SChristophe Leroy uint memc_mdr; 91*87e4c602SChristophe Leroy char res3[0x80]; 92*87e4c602SChristophe Leroy } memctl8xx_t; 93*87e4c602SChristophe Leroy 94*87e4c602SChristophe Leroy /* System Integration Timers. 95*87e4c602SChristophe Leroy */ 96*87e4c602SChristophe Leroy typedef struct sys_int_timers { 97*87e4c602SChristophe Leroy ushort sit_tbscr; 98*87e4c602SChristophe Leroy char res0[0x02]; 99*87e4c602SChristophe Leroy uint sit_tbreff0; 100*87e4c602SChristophe Leroy uint sit_tbreff1; 101*87e4c602SChristophe Leroy char res1[0x14]; 102*87e4c602SChristophe Leroy ushort sit_rtcsc; 103*87e4c602SChristophe Leroy char res2[0x02]; 104*87e4c602SChristophe Leroy uint sit_rtc; 105*87e4c602SChristophe Leroy uint sit_rtsec; 106*87e4c602SChristophe Leroy uint sit_rtcal; 107*87e4c602SChristophe Leroy char res3[0x10]; 108*87e4c602SChristophe Leroy ushort sit_piscr; 109*87e4c602SChristophe Leroy char res4[2]; 110*87e4c602SChristophe Leroy uint sit_pitc; 111*87e4c602SChristophe Leroy uint sit_pitr; 112*87e4c602SChristophe Leroy char res5[0x34]; 113*87e4c602SChristophe Leroy } sit8xx_t; 114*87e4c602SChristophe Leroy 115*87e4c602SChristophe Leroy #define TBSCR_TBIRQ_MASK ((ushort)0xff00) 116*87e4c602SChristophe Leroy #define TBSCR_REFA ((ushort)0x0080) 117*87e4c602SChristophe Leroy #define TBSCR_REFB ((ushort)0x0040) 118*87e4c602SChristophe Leroy #define TBSCR_REFAE ((ushort)0x0008) 119*87e4c602SChristophe Leroy #define TBSCR_REFBE ((ushort)0x0004) 120*87e4c602SChristophe Leroy #define TBSCR_TBF ((ushort)0x0002) 121*87e4c602SChristophe Leroy #define TBSCR_TBE ((ushort)0x0001) 122*87e4c602SChristophe Leroy 123*87e4c602SChristophe Leroy #define RTCSC_RTCIRQ_MASK ((ushort)0xff00) 124*87e4c602SChristophe Leroy #define RTCSC_SEC ((ushort)0x0080) 125*87e4c602SChristophe Leroy #define RTCSC_ALR ((ushort)0x0040) 126*87e4c602SChristophe Leroy #define RTCSC_38K ((ushort)0x0010) 127*87e4c602SChristophe Leroy #define RTCSC_SIE ((ushort)0x0008) 128*87e4c602SChristophe Leroy #define RTCSC_ALE ((ushort)0x0004) 129*87e4c602SChristophe Leroy #define RTCSC_RTF ((ushort)0x0002) 130*87e4c602SChristophe Leroy #define RTCSC_RTE ((ushort)0x0001) 131*87e4c602SChristophe Leroy 132*87e4c602SChristophe Leroy #define PISCR_PIRQ_MASK ((ushort)0xff00) 133*87e4c602SChristophe Leroy #define PISCR_PS ((ushort)0x0080) 134*87e4c602SChristophe Leroy #define PISCR_PIE ((ushort)0x0004) 135*87e4c602SChristophe Leroy #define PISCR_PTF ((ushort)0x0002) 136*87e4c602SChristophe Leroy #define PISCR_PTE ((ushort)0x0001) 137*87e4c602SChristophe Leroy 138*87e4c602SChristophe Leroy /* Clocks and Reset. 139*87e4c602SChristophe Leroy */ 140*87e4c602SChristophe Leroy typedef struct clk_and_reset { 141*87e4c602SChristophe Leroy uint car_sccr; 142*87e4c602SChristophe Leroy uint car_plprcr; 143*87e4c602SChristophe Leroy uint car_rsr; 144*87e4c602SChristophe Leroy char res[0x74]; /* Reserved area */ 145*87e4c602SChristophe Leroy } car8xx_t; 146*87e4c602SChristophe Leroy 147*87e4c602SChristophe Leroy /* System Integration Timers keys. 148*87e4c602SChristophe Leroy */ 149*87e4c602SChristophe Leroy typedef struct sitk { 150*87e4c602SChristophe Leroy uint sitk_tbscrk; 151*87e4c602SChristophe Leroy uint sitk_tbreff0k; 152*87e4c602SChristophe Leroy uint sitk_tbreff1k; 153*87e4c602SChristophe Leroy uint sitk_tbk; 154*87e4c602SChristophe Leroy char res1[0x10]; 155*87e4c602SChristophe Leroy uint sitk_rtcsck; 156*87e4c602SChristophe Leroy uint sitk_rtck; 157*87e4c602SChristophe Leroy uint sitk_rtseck; 158*87e4c602SChristophe Leroy uint sitk_rtcalk; 159*87e4c602SChristophe Leroy char res2[0x10]; 160*87e4c602SChristophe Leroy uint sitk_piscrk; 161*87e4c602SChristophe Leroy uint sitk_pitck; 162*87e4c602SChristophe Leroy char res3[0x38]; 163*87e4c602SChristophe Leroy } sitk8xx_t; 164*87e4c602SChristophe Leroy 165*87e4c602SChristophe Leroy /* Clocks and reset keys. 166*87e4c602SChristophe Leroy */ 167*87e4c602SChristophe Leroy typedef struct cark { 168*87e4c602SChristophe Leroy uint cark_sccrk; 169*87e4c602SChristophe Leroy uint cark_plprcrk; 170*87e4c602SChristophe Leroy uint cark_rsrk; 171*87e4c602SChristophe Leroy char res[0x474]; 172*87e4c602SChristophe Leroy } cark8xx_t; 173*87e4c602SChristophe Leroy 174*87e4c602SChristophe Leroy /* The key to unlock registers maintained by keep-alive power. 175*87e4c602SChristophe Leroy */ 176*87e4c602SChristophe Leroy #define KAPWR_KEY ((unsigned int)0x55ccaa33) 177*87e4c602SChristophe Leroy 178*87e4c602SChristophe Leroy /* I2C 179*87e4c602SChristophe Leroy */ 180*87e4c602SChristophe Leroy typedef struct i2c { 181*87e4c602SChristophe Leroy u_char i2c_i2mod; 182*87e4c602SChristophe Leroy char res1[3]; 183*87e4c602SChristophe Leroy u_char i2c_i2add; 184*87e4c602SChristophe Leroy char res2[3]; 185*87e4c602SChristophe Leroy u_char i2c_i2brg; 186*87e4c602SChristophe Leroy char res3[3]; 187*87e4c602SChristophe Leroy u_char i2c_i2com; 188*87e4c602SChristophe Leroy char res4[3]; 189*87e4c602SChristophe Leroy u_char i2c_i2cer; 190*87e4c602SChristophe Leroy char res5[3]; 191*87e4c602SChristophe Leroy u_char i2c_i2cmr; 192*87e4c602SChristophe Leroy char res6[0x8b]; 193*87e4c602SChristophe Leroy } i2c8xx_t; 194*87e4c602SChristophe Leroy 195*87e4c602SChristophe Leroy /* DMA control/status registers. 196*87e4c602SChristophe Leroy */ 197*87e4c602SChristophe Leroy typedef struct sdma_csr { 198*87e4c602SChristophe Leroy char res1[4]; 199*87e4c602SChristophe Leroy uint sdma_sdar; 200*87e4c602SChristophe Leroy u_char sdma_sdsr; 201*87e4c602SChristophe Leroy char res3[3]; 202*87e4c602SChristophe Leroy u_char sdma_sdmr; 203*87e4c602SChristophe Leroy char res4[3]; 204*87e4c602SChristophe Leroy u_char sdma_idsr1; 205*87e4c602SChristophe Leroy char res5[3]; 206*87e4c602SChristophe Leroy u_char sdma_idmr1; 207*87e4c602SChristophe Leroy char res6[3]; 208*87e4c602SChristophe Leroy u_char sdma_idsr2; 209*87e4c602SChristophe Leroy char res7[3]; 210*87e4c602SChristophe Leroy u_char sdma_idmr2; 211*87e4c602SChristophe Leroy char res8[0x13]; 212*87e4c602SChristophe Leroy } sdma8xx_t; 213*87e4c602SChristophe Leroy 214*87e4c602SChristophe Leroy /* Communication Processor Module Interrupt Controller. 215*87e4c602SChristophe Leroy */ 216*87e4c602SChristophe Leroy typedef struct cpm_ic { 217*87e4c602SChristophe Leroy ushort cpic_civr; 218*87e4c602SChristophe Leroy char res[0xe]; 219*87e4c602SChristophe Leroy uint cpic_cicr; 220*87e4c602SChristophe Leroy uint cpic_cipr; 221*87e4c602SChristophe Leroy uint cpic_cimr; 222*87e4c602SChristophe Leroy uint cpic_cisr; 223*87e4c602SChristophe Leroy } cpic8xx_t; 224*87e4c602SChristophe Leroy 225*87e4c602SChristophe Leroy /* Input/Output Port control/status registers. 226*87e4c602SChristophe Leroy */ 227*87e4c602SChristophe Leroy typedef struct io_port { 228*87e4c602SChristophe Leroy ushort iop_padir; 229*87e4c602SChristophe Leroy ushort iop_papar; 230*87e4c602SChristophe Leroy ushort iop_paodr; 231*87e4c602SChristophe Leroy ushort iop_padat; 232*87e4c602SChristophe Leroy char res1[8]; 233*87e4c602SChristophe Leroy ushort iop_pcdir; 234*87e4c602SChristophe Leroy ushort iop_pcpar; 235*87e4c602SChristophe Leroy ushort iop_pcso; 236*87e4c602SChristophe Leroy ushort iop_pcdat; 237*87e4c602SChristophe Leroy ushort iop_pcint; 238*87e4c602SChristophe Leroy char res2[6]; 239*87e4c602SChristophe Leroy ushort iop_pddir; 240*87e4c602SChristophe Leroy ushort iop_pdpar; 241*87e4c602SChristophe Leroy char res3[2]; 242*87e4c602SChristophe Leroy ushort iop_pddat; 243*87e4c602SChristophe Leroy uint utmode; 244*87e4c602SChristophe Leroy char res4[4]; 245*87e4c602SChristophe Leroy } iop8xx_t; 246*87e4c602SChristophe Leroy 247*87e4c602SChristophe Leroy /* Communication Processor Module Timers 248*87e4c602SChristophe Leroy */ 249*87e4c602SChristophe Leroy typedef struct cpm_timers { 250*87e4c602SChristophe Leroy ushort cpmt_tgcr; 251*87e4c602SChristophe Leroy char res1[0xe]; 252*87e4c602SChristophe Leroy ushort cpmt_tmr1; 253*87e4c602SChristophe Leroy ushort cpmt_tmr2; 254*87e4c602SChristophe Leroy ushort cpmt_trr1; 255*87e4c602SChristophe Leroy ushort cpmt_trr2; 256*87e4c602SChristophe Leroy ushort cpmt_tcr1; 257*87e4c602SChristophe Leroy ushort cpmt_tcr2; 258*87e4c602SChristophe Leroy ushort cpmt_tcn1; 259*87e4c602SChristophe Leroy ushort cpmt_tcn2; 260*87e4c602SChristophe Leroy ushort cpmt_tmr3; 261*87e4c602SChristophe Leroy ushort cpmt_tmr4; 262*87e4c602SChristophe Leroy ushort cpmt_trr3; 263*87e4c602SChristophe Leroy ushort cpmt_trr4; 264*87e4c602SChristophe Leroy ushort cpmt_tcr3; 265*87e4c602SChristophe Leroy ushort cpmt_tcr4; 266*87e4c602SChristophe Leroy ushort cpmt_tcn3; 267*87e4c602SChristophe Leroy ushort cpmt_tcn4; 268*87e4c602SChristophe Leroy ushort cpmt_ter1; 269*87e4c602SChristophe Leroy ushort cpmt_ter2; 270*87e4c602SChristophe Leroy ushort cpmt_ter3; 271*87e4c602SChristophe Leroy ushort cpmt_ter4; 272*87e4c602SChristophe Leroy char res2[8]; 273*87e4c602SChristophe Leroy } cpmtimer8xx_t; 274*87e4c602SChristophe Leroy 275*87e4c602SChristophe Leroy /* Finally, the Communication Processor stuff..... 276*87e4c602SChristophe Leroy */ 277*87e4c602SChristophe Leroy typedef struct scc { /* Serial communication channels */ 278*87e4c602SChristophe Leroy uint scc_gsmrl; 279*87e4c602SChristophe Leroy uint scc_gsmrh; 280*87e4c602SChristophe Leroy ushort scc_psmr; 281*87e4c602SChristophe Leroy char res1[2]; 282*87e4c602SChristophe Leroy ushort scc_todr; 283*87e4c602SChristophe Leroy ushort scc_dsr; 284*87e4c602SChristophe Leroy ushort scc_scce; 285*87e4c602SChristophe Leroy char res2[2]; 286*87e4c602SChristophe Leroy ushort scc_sccm; 287*87e4c602SChristophe Leroy char res3; 288*87e4c602SChristophe Leroy u_char scc_sccs; 289*87e4c602SChristophe Leroy char res4[8]; 290*87e4c602SChristophe Leroy } scc_t; 291*87e4c602SChristophe Leroy 292*87e4c602SChristophe Leroy typedef struct smc { /* Serial management channels */ 293*87e4c602SChristophe Leroy char res1[2]; 294*87e4c602SChristophe Leroy ushort smc_smcmr; 295*87e4c602SChristophe Leroy char res2[2]; 296*87e4c602SChristophe Leroy u_char smc_smce; 297*87e4c602SChristophe Leroy char res3[3]; 298*87e4c602SChristophe Leroy u_char smc_smcm; 299*87e4c602SChristophe Leroy char res4[5]; 300*87e4c602SChristophe Leroy } smc_t; 301*87e4c602SChristophe Leroy 302*87e4c602SChristophe Leroy /* MPC860T Fast Ethernet Controller. It isn't part of the CPM, but 303*87e4c602SChristophe Leroy * it fits within the address space. 304*87e4c602SChristophe Leroy */ 305*87e4c602SChristophe Leroy 306*87e4c602SChristophe Leroy typedef struct fec { 307*87e4c602SChristophe Leroy uint fec_addr_low; /* lower 32 bits of station address */ 308*87e4c602SChristophe Leroy ushort fec_addr_high; /* upper 16 bits of station address */ 309*87e4c602SChristophe Leroy ushort res1; /* reserved */ 310*87e4c602SChristophe Leroy uint fec_hash_table_high; /* upper 32-bits of hash table */ 311*87e4c602SChristophe Leroy uint fec_hash_table_low; /* lower 32-bits of hash table */ 312*87e4c602SChristophe Leroy uint fec_r_des_start; /* beginning of Rx descriptor ring */ 313*87e4c602SChristophe Leroy uint fec_x_des_start; /* beginning of Tx descriptor ring */ 314*87e4c602SChristophe Leroy uint fec_r_buff_size; /* Rx buffer size */ 315*87e4c602SChristophe Leroy uint res2[9]; /* reserved */ 316*87e4c602SChristophe Leroy uint fec_ecntrl; /* ethernet control register */ 317*87e4c602SChristophe Leroy uint fec_ievent; /* interrupt event register */ 318*87e4c602SChristophe Leroy uint fec_imask; /* interrupt mask register */ 319*87e4c602SChristophe Leroy uint fec_ivec; /* interrupt level and vector status */ 320*87e4c602SChristophe Leroy uint fec_r_des_active; /* Rx ring updated flag */ 321*87e4c602SChristophe Leroy uint fec_x_des_active; /* Tx ring updated flag */ 322*87e4c602SChristophe Leroy uint res3[10]; /* reserved */ 323*87e4c602SChristophe Leroy uint fec_mii_data; /* MII data register */ 324*87e4c602SChristophe Leroy uint fec_mii_speed; /* MII speed control register */ 325*87e4c602SChristophe Leroy uint res4[17]; /* reserved */ 326*87e4c602SChristophe Leroy uint fec_r_bound; /* end of RAM (read-only) */ 327*87e4c602SChristophe Leroy uint fec_r_fstart; /* Rx FIFO start address */ 328*87e4c602SChristophe Leroy uint res5[6]; /* reserved */ 329*87e4c602SChristophe Leroy uint fec_x_fstart; /* Tx FIFO start address */ 330*87e4c602SChristophe Leroy uint res6[17]; /* reserved */ 331*87e4c602SChristophe Leroy uint fec_fun_code; /* fec SDMA function code */ 332*87e4c602SChristophe Leroy uint res7[3]; /* reserved */ 333*87e4c602SChristophe Leroy uint fec_r_cntrl; /* Rx control register */ 334*87e4c602SChristophe Leroy uint fec_r_hash; /* Rx hash register */ 335*87e4c602SChristophe Leroy uint res8[14]; /* reserved */ 336*87e4c602SChristophe Leroy uint fec_x_cntrl; /* Tx control register */ 337*87e4c602SChristophe Leroy uint res9[0x1e]; /* reserved */ 338*87e4c602SChristophe Leroy } fec_t; 339*87e4c602SChristophe Leroy 340*87e4c602SChristophe Leroy typedef struct comm_proc { 341*87e4c602SChristophe Leroy /* General control and status registers. 342*87e4c602SChristophe Leroy */ 343*87e4c602SChristophe Leroy ushort cp_cpcr; 344*87e4c602SChristophe Leroy u_char res1[2]; 345*87e4c602SChristophe Leroy ushort cp_rccr; 346*87e4c602SChristophe Leroy u_char res2; 347*87e4c602SChristophe Leroy u_char cp_rmds; 348*87e4c602SChristophe Leroy u_char res3[4]; 349*87e4c602SChristophe Leroy ushort cp_cpmcr1; 350*87e4c602SChristophe Leroy ushort cp_cpmcr2; 351*87e4c602SChristophe Leroy ushort cp_cpmcr3; 352*87e4c602SChristophe Leroy ushort cp_cpmcr4; 353*87e4c602SChristophe Leroy u_char res4[2]; 354*87e4c602SChristophe Leroy ushort cp_rter; 355*87e4c602SChristophe Leroy u_char res5[2]; 356*87e4c602SChristophe Leroy ushort cp_rtmr; 357*87e4c602SChristophe Leroy u_char res6[0x14]; 358*87e4c602SChristophe Leroy 359*87e4c602SChristophe Leroy /* Baud rate generators. 360*87e4c602SChristophe Leroy */ 361*87e4c602SChristophe Leroy uint cp_brgc1; 362*87e4c602SChristophe Leroy uint cp_brgc2; 363*87e4c602SChristophe Leroy uint cp_brgc3; 364*87e4c602SChristophe Leroy uint cp_brgc4; 365*87e4c602SChristophe Leroy 366*87e4c602SChristophe Leroy /* Serial Communication Channels. 367*87e4c602SChristophe Leroy */ 368*87e4c602SChristophe Leroy scc_t cp_scc[4]; 369*87e4c602SChristophe Leroy 370*87e4c602SChristophe Leroy /* Serial Management Channels. 371*87e4c602SChristophe Leroy */ 372*87e4c602SChristophe Leroy smc_t cp_smc[2]; 373*87e4c602SChristophe Leroy 374*87e4c602SChristophe Leroy /* Serial Peripheral Interface. 375*87e4c602SChristophe Leroy */ 376*87e4c602SChristophe Leroy ushort cp_spmode; 377*87e4c602SChristophe Leroy u_char res7[4]; 378*87e4c602SChristophe Leroy u_char cp_spie; 379*87e4c602SChristophe Leroy u_char res8[3]; 380*87e4c602SChristophe Leroy u_char cp_spim; 381*87e4c602SChristophe Leroy u_char res9[2]; 382*87e4c602SChristophe Leroy u_char cp_spcom; 383*87e4c602SChristophe Leroy u_char res10[2]; 384*87e4c602SChristophe Leroy 385*87e4c602SChristophe Leroy /* Parallel Interface Port. 386*87e4c602SChristophe Leroy */ 387*87e4c602SChristophe Leroy u_char res11[2]; 388*87e4c602SChristophe Leroy ushort cp_pipc; 389*87e4c602SChristophe Leroy u_char res12[2]; 390*87e4c602SChristophe Leroy ushort cp_ptpr; 391*87e4c602SChristophe Leroy uint cp_pbdir; 392*87e4c602SChristophe Leroy uint cp_pbpar; 393*87e4c602SChristophe Leroy u_char res13[2]; 394*87e4c602SChristophe Leroy ushort cp_pbodr; 395*87e4c602SChristophe Leroy uint cp_pbdat; 396*87e4c602SChristophe Leroy 397*87e4c602SChristophe Leroy /* Port E - MPC87x/88x only. 398*87e4c602SChristophe Leroy */ 399*87e4c602SChristophe Leroy uint cp_pedir; 400*87e4c602SChristophe Leroy uint cp_pepar; 401*87e4c602SChristophe Leroy uint cp_peso; 402*87e4c602SChristophe Leroy uint cp_peodr; 403*87e4c602SChristophe Leroy uint cp_pedat; 404*87e4c602SChristophe Leroy 405*87e4c602SChristophe Leroy /* Communications Processor Timing Register - 406*87e4c602SChristophe Leroy Contains RMII Timing for the FECs on MPC87x/88x only. 407*87e4c602SChristophe Leroy */ 408*87e4c602SChristophe Leroy uint cp_cptr; 409*87e4c602SChristophe Leroy 410*87e4c602SChristophe Leroy /* Serial Interface and Time Slot Assignment. 411*87e4c602SChristophe Leroy */ 412*87e4c602SChristophe Leroy uint cp_simode; 413*87e4c602SChristophe Leroy u_char cp_sigmr; 414*87e4c602SChristophe Leroy u_char res15; 415*87e4c602SChristophe Leroy u_char cp_sistr; 416*87e4c602SChristophe Leroy u_char cp_sicmr; 417*87e4c602SChristophe Leroy u_char res16[4]; 418*87e4c602SChristophe Leroy uint cp_sicr; 419*87e4c602SChristophe Leroy uint cp_sirp; 420*87e4c602SChristophe Leroy u_char res17[0xc]; 421*87e4c602SChristophe Leroy 422*87e4c602SChristophe Leroy u_char res19[0x100]; 423*87e4c602SChristophe Leroy u_char cp_siram[0x200]; 424*87e4c602SChristophe Leroy 425*87e4c602SChristophe Leroy /* The fast ethernet controller is not really part of the CPM, 426*87e4c602SChristophe Leroy * but it resides in the address space. 427*87e4c602SChristophe Leroy */ 428*87e4c602SChristophe Leroy fec_t cp_fec; 429*87e4c602SChristophe Leroy char res18[0xE00]; 430*87e4c602SChristophe Leroy 431*87e4c602SChristophe Leroy /* The MPC885 family has a second FEC here */ 432*87e4c602SChristophe Leroy fec_t cp_fec2; 433*87e4c602SChristophe Leroy #define cp_fec1 cp_fec /* consistency macro */ 434*87e4c602SChristophe Leroy 435*87e4c602SChristophe Leroy /* Dual Ported RAM follows. 436*87e4c602SChristophe Leroy * There are many different formats for this memory area 437*87e4c602SChristophe Leroy * depending upon the devices used and options chosen. 438*87e4c602SChristophe Leroy * Some processors don't have all of it populated. 439*87e4c602SChristophe Leroy */ 440*87e4c602SChristophe Leroy u_char cp_dpmem[0x1C00]; /* BD / Data / ucode */ 441*87e4c602SChristophe Leroy 442*87e4c602SChristophe Leroy /* Parameter RAM */ 443*87e4c602SChristophe Leroy union { 444*87e4c602SChristophe Leroy u_char cp_dparam[0x400]; 445*87e4c602SChristophe Leroy u16 cp_dparam16[0x200]; 446*87e4c602SChristophe Leroy }; 447*87e4c602SChristophe Leroy } cpm8xx_t; 448*87e4c602SChristophe Leroy 449*87e4c602SChristophe Leroy /* Internal memory map. 450*87e4c602SChristophe Leroy */ 451*87e4c602SChristophe Leroy typedef struct immap { 452*87e4c602SChristophe Leroy sysconf8xx_t im_siu_conf; /* SIU Configuration */ 453*87e4c602SChristophe Leroy pcmconf8xx_t im_pcmcia; /* PCMCIA Configuration */ 454*87e4c602SChristophe Leroy memctl8xx_t im_memctl; /* Memory Controller */ 455*87e4c602SChristophe Leroy sit8xx_t im_sit; /* System integration timers */ 456*87e4c602SChristophe Leroy car8xx_t im_clkrst; /* Clocks and reset */ 457*87e4c602SChristophe Leroy sitk8xx_t im_sitk; /* Sys int timer keys */ 458*87e4c602SChristophe Leroy cark8xx_t im_clkrstk; /* Clocks and reset keys */ 459*87e4c602SChristophe Leroy char res[96]; 460*87e4c602SChristophe Leroy i2c8xx_t im_i2c; /* I2C control/status */ 461*87e4c602SChristophe Leroy sdma8xx_t im_sdma; /* SDMA control/status */ 462*87e4c602SChristophe Leroy cpic8xx_t im_cpic; /* CPM Interrupt Controller */ 463*87e4c602SChristophe Leroy iop8xx_t im_ioport; /* IO Port control/status */ 464*87e4c602SChristophe Leroy cpmtimer8xx_t im_cpmtimer; /* CPM timers */ 465*87e4c602SChristophe Leroy cpm8xx_t im_cpm; /* Communication processor */ 466*87e4c602SChristophe Leroy } immap_t; 467*87e4c602SChristophe Leroy 468*87e4c602SChristophe Leroy #endif /* __IMMAP_8XX__ */ 469