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