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