1 /* 2 * Copyright 2004-2009 Freescale Semiconductor, Inc. 3 * 4 * MPC83xx Internal Memory Map 5 * 6 * Contributors: 7 * Dave Liu <daveliu@freescale.com> 8 * Tanya Jiang <tanya.jiang@freescale.com> 9 * Mandy Lavi <mandy.lavi@freescale.com> 10 * Eran Liberty <liberty@freescale.com> 11 * 12 * This program is free software; you can redistribute it and/or 13 * modify it under the terms of the GNU General Public License as 14 * published by the Free Software Foundation; either version 2 of 15 * the License, or (at your option) any later version. 16 * 17 * This program is distributed in the hope that it will be useful, 18 * but WITHOUT ANY WARRANTY; without even the implied warranty of 19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 20 * GNU General Public License for more details. 21 * 22 * You should have received a copy of the GNU General Public License 23 * along with this program; if not, write to the Free Software 24 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, 25 * MA 02111-1307 USA 26 * 27 */ 28 #ifndef __IMMAP_83xx__ 29 #define __IMMAP_83xx__ 30 31 #include <asm/types.h> 32 #include <asm/fsl_i2c.h> 33 #include <asm/mpc8xxx_spi.h> 34 #include <asm/fsl_lbc.h> 35 #include <asm/fsl_dma.h> 36 37 /* 38 * Local Access Window 39 */ 40 typedef struct law83xx { 41 u32 bar; /* LBIU local access window base address register */ 42 u32 ar; /* LBIU local access window attribute register */ 43 } law83xx_t; 44 45 /* 46 * System configuration registers 47 */ 48 typedef struct sysconf83xx { 49 u32 immrbar; /* Internal memory map base address register */ 50 u8 res0[0x04]; 51 u32 altcbar; /* Alternate configuration base address register */ 52 u8 res1[0x14]; 53 law83xx_t lblaw[4]; /* LBIU local access window */ 54 u8 res2[0x20]; 55 law83xx_t pcilaw[2]; /* PCI local access window */ 56 u8 res3[0x10]; 57 law83xx_t pcielaw[2]; /* PCI Express local access window */ 58 u8 res4[0x10]; 59 law83xx_t ddrlaw[2]; /* DDR local access window */ 60 u8 res5[0x50]; 61 u32 sgprl; /* System General Purpose Register Low */ 62 u32 sgprh; /* System General Purpose Register High */ 63 u32 spridr; /* System Part and Revision ID Register */ 64 u8 res6[0x04]; 65 u32 spcr; /* System Priority Configuration Register */ 66 u32 sicrl; /* System I/O Configuration Register Low */ 67 u32 sicrh; /* System I/O Configuration Register High */ 68 u8 res7[0x04]; 69 u32 sidcr0; /* System I/O Delay Configuration Register 0 */ 70 u32 sidcr1; /* System I/O Delay Configuration Register 1 */ 71 u32 ddrcdr; /* DDR Control Driver Register */ 72 u32 ddrdsr; /* DDR Debug Status Register */ 73 u32 obir; /* Output Buffer Impedance Register */ 74 u8 res8[0xC]; 75 u32 pecr1; /* PCI Express control register 1 */ 76 #ifdef CONFIG_MPC8308 77 u32 sdhccr; /* eSDHC Control Registers for MPC8308 */ 78 #else 79 u32 pecr2; /* PCI Express control register 2 */ 80 #endif 81 u8 res9[0xB8]; 82 } sysconf83xx_t; 83 84 /* 85 * Watch Dog Timer (WDT) Registers 86 */ 87 typedef struct wdt83xx { 88 u8 res0[4]; 89 u32 swcrr; /* System watchdog control register */ 90 u32 swcnr; /* System watchdog count register */ 91 u8 res1[2]; 92 u16 swsrr; /* System watchdog service register */ 93 u8 res2[0xF0]; 94 } wdt83xx_t; 95 96 /* 97 * RTC/PIT Module Registers 98 */ 99 typedef struct rtclk83xx { 100 u32 cnr; /* control register */ 101 u32 ldr; /* load register */ 102 u32 psr; /* prescale register */ 103 u32 ctr; /* counter value field register */ 104 u32 evr; /* event register */ 105 u32 alr; /* alarm register */ 106 u8 res0[0xE8]; 107 } rtclk83xx_t; 108 109 /* 110 * Global timer module 111 */ 112 typedef struct gtm83xx { 113 u8 cfr1; /* Timer1/2 Configuration */ 114 u8 res0[3]; 115 u8 cfr2; /* Timer3/4 Configuration */ 116 u8 res1[10]; 117 u16 mdr1; /* Timer1 Mode Register */ 118 u16 mdr2; /* Timer2 Mode Register */ 119 u16 rfr1; /* Timer1 Reference Register */ 120 u16 rfr2; /* Timer2 Reference Register */ 121 u16 cpr1; /* Timer1 Capture Register */ 122 u16 cpr2; /* Timer2 Capture Register */ 123 u16 cnr1; /* Timer1 Counter Register */ 124 u16 cnr2; /* Timer2 Counter Register */ 125 u16 mdr3; /* Timer3 Mode Register */ 126 u16 mdr4; /* Timer4 Mode Register */ 127 u16 rfr3; /* Timer3 Reference Register */ 128 u16 rfr4; /* Timer4 Reference Register */ 129 u16 cpr3; /* Timer3 Capture Register */ 130 u16 cpr4; /* Timer4 Capture Register */ 131 u16 cnr3; /* Timer3 Counter Register */ 132 u16 cnr4; /* Timer4 Counter Register */ 133 u16 evr1; /* Timer1 Event Register */ 134 u16 evr2; /* Timer2 Event Register */ 135 u16 evr3; /* Timer3 Event Register */ 136 u16 evr4; /* Timer4 Event Register */ 137 u16 psr1; /* Timer1 Prescaler Register */ 138 u16 psr2; /* Timer2 Prescaler Register */ 139 u16 psr3; /* Timer3 Prescaler Register */ 140 u16 psr4; /* Timer4 Prescaler Register */ 141 u8 res[0xC0]; 142 } gtm83xx_t; 143 144 /* 145 * Integrated Programmable Interrupt Controller 146 */ 147 typedef struct ipic83xx { 148 u32 sicfr; /* System Global Interrupt Configuration Register */ 149 u32 sivcr; /* System Global Interrupt Vector Register */ 150 u32 sipnr_h; /* System Internal Interrupt Pending Register - High */ 151 u32 sipnr_l; /* System Internal Interrupt Pending Register - Low */ 152 u32 siprr_a; /* System Internal Interrupt Group A Priority Register */ 153 u8 res0[8]; 154 u32 siprr_d; /* System Internal Interrupt Group D Priority Register */ 155 u32 simsr_h; /* System Internal Interrupt Mask Register - High */ 156 u32 simsr_l; /* System Internal Interrupt Mask Register - Low */ 157 u8 res1[4]; 158 u32 sepnr; /* System External Interrupt Pending Register */ 159 u32 smprr_a; /* System Mixed Interrupt Group A Priority Register */ 160 u32 smprr_b; /* System Mixed Interrupt Group B Priority Register */ 161 u32 semsr; /* System External Interrupt Mask Register */ 162 u32 secnr; /* System External Interrupt Control Register */ 163 u32 sersr; /* System Error Status Register */ 164 u32 sermr; /* System Error Mask Register */ 165 u32 sercr; /* System Error Control Register */ 166 u8 res2[4]; 167 u32 sifcr_h; /* System Internal Interrupt Force Register - High */ 168 u32 sifcr_l; /* System Internal Interrupt Force Register - Low */ 169 u32 sefcr; /* System External Interrupt Force Register */ 170 u32 serfr; /* System Error Force Register */ 171 u32 scvcr; /* System Critical Interrupt Vector Register */ 172 u32 smvcr; /* System Management Interrupt Vector Register */ 173 u8 res3[0x98]; 174 } ipic83xx_t; 175 176 /* 177 * System Arbiter Registers 178 */ 179 typedef struct arbiter83xx { 180 u32 acr; /* Arbiter Configuration Register */ 181 u32 atr; /* Arbiter Timers Register */ 182 u8 res[4]; 183 u32 aer; /* Arbiter Event Register */ 184 u32 aidr; /* Arbiter Interrupt Definition Register */ 185 u32 amr; /* Arbiter Mask Register */ 186 u32 aeatr; /* Arbiter Event Attributes Register */ 187 u32 aeadr; /* Arbiter Event Address Register */ 188 u32 aerr; /* Arbiter Event Response Register */ 189 u8 res1[0xDC]; 190 } arbiter83xx_t; 191 192 /* 193 * Reset Module 194 */ 195 typedef struct reset83xx { 196 u32 rcwl; /* Reset Configuration Word Low Register */ 197 u32 rcwh; /* Reset Configuration Word High Register */ 198 u8 res0[8]; 199 u32 rsr; /* Reset Status Register */ 200 u32 rmr; /* Reset Mode Register */ 201 u32 rpr; /* Reset protection Register */ 202 u32 rcr; /* Reset Control Register */ 203 u32 rcer; /* Reset Control Enable Register */ 204 u8 res1[0xDC]; 205 } reset83xx_t; 206 207 /* 208 * Clock Module 209 */ 210 typedef struct clk83xx { 211 u32 spmr; /* system PLL mode Register */ 212 u32 occr; /* output clock control Register */ 213 u32 sccr; /* system clock control Register */ 214 u8 res0[0xF4]; 215 } clk83xx_t; 216 217 /* 218 * Power Management Control Module 219 */ 220 typedef struct pmc83xx { 221 u32 pmccr; /* PMC Configuration Register */ 222 u32 pmcer; /* PMC Event Register */ 223 u32 pmcmr; /* PMC Mask Register */ 224 u32 pmccr1; /* PMC Configuration Register 1 */ 225 u32 pmccr2; /* PMC Configuration Register 2 */ 226 u8 res0[0xEC]; 227 } pmc83xx_t; 228 229 /* 230 * General purpose I/O module 231 */ 232 typedef struct gpio83xx { 233 u32 dir; /* direction register */ 234 u32 odr; /* open drain register */ 235 u32 dat; /* data register */ 236 u32 ier; /* interrupt event register */ 237 u32 imr; /* interrupt mask register */ 238 u32 icr; /* external interrupt control register */ 239 u8 res0[0xE8]; 240 } gpio83xx_t; 241 242 /* 243 * QE Ports Interrupts Registers 244 */ 245 typedef struct qepi83xx { 246 u8 res0[0xC]; 247 u32 qepier; /* QE Ports Interrupt Event Register */ 248 u32 qepimr; /* QE Ports Interrupt Mask Register */ 249 u32 qepicr; /* QE Ports Interrupt Control Register */ 250 u8 res1[0xE8]; 251 } qepi83xx_t; 252 253 /* 254 * QE Parallel I/O Ports 255 */ 256 typedef struct gpio_n { 257 u32 podr; /* Open Drain Register */ 258 u32 pdat; /* Data Register */ 259 u32 dir1; /* direction register 1 */ 260 u32 dir2; /* direction register 2 */ 261 u32 ppar1; /* Pin Assignment Register 1 */ 262 u32 ppar2; /* Pin Assignment Register 2 */ 263 } gpio_n_t; 264 265 typedef struct qegpio83xx { 266 gpio_n_t ioport[0x7]; 267 u8 res0[0x358]; 268 } qepio83xx_t; 269 270 /* 271 * QE Secondary Bus Access Windows 272 */ 273 typedef struct qesba83xx { 274 u32 lbmcsar; /* Local bus memory controller start address */ 275 u32 sdmcsar; /* Secondary DDR memory controller start address */ 276 u8 res0[0x38]; 277 u32 lbmcear; /* Local bus memory controller end address */ 278 u32 sdmcear; /* Secondary DDR memory controller end address */ 279 u8 res1[0x38]; 280 u32 lbmcar; /* Local bus memory controller attributes */ 281 u32 sdmcar; /* Secondary DDR memory controller attributes */ 282 u8 res2[0x378]; 283 } qesba83xx_t; 284 285 /* 286 * DDR Memory Controller Memory Map 287 */ 288 typedef struct ddr_cs_bnds { 289 u32 csbnds; 290 u8 res0[4]; 291 } ddr_cs_bnds_t; 292 293 typedef struct ddr83xx { 294 ddr_cs_bnds_t csbnds[4];/* Chip Select x Memory Bounds */ 295 u8 res0[0x60]; 296 u32 cs_config[4]; /* Chip Select x Configuration */ 297 u8 res1[0x70]; 298 u32 timing_cfg_3; /* SDRAM Timing Configuration 3 */ 299 u32 timing_cfg_0; /* SDRAM Timing Configuration 0 */ 300 u32 timing_cfg_1; /* SDRAM Timing Configuration 1 */ 301 u32 timing_cfg_2; /* SDRAM Timing Configuration 2 */ 302 u32 sdram_cfg; /* SDRAM Control Configuration */ 303 u32 sdram_cfg2; /* SDRAM Control Configuration 2 */ 304 u32 sdram_mode; /* SDRAM Mode Configuration */ 305 u32 sdram_mode2; /* SDRAM Mode Configuration 2 */ 306 u32 sdram_md_cntl; /* SDRAM Mode Control */ 307 u32 sdram_interval; /* SDRAM Interval Configuration */ 308 u32 ddr_data_init; /* SDRAM Data Initialization */ 309 u8 res2[4]; 310 u32 sdram_clk_cntl; /* SDRAM Clock Control */ 311 u8 res3[0x14]; 312 u32 ddr_init_addr; /* DDR training initialization address */ 313 u32 ddr_init_ext_addr; /* DDR training initialization extended address */ 314 u8 res4[0xAA8]; 315 u32 ddr_ip_rev1; /* DDR IP block revision 1 */ 316 u32 ddr_ip_rev2; /* DDR IP block revision 2 */ 317 u8 res5[0x200]; 318 u32 data_err_inject_hi; /* Memory Data Path Error Injection Mask High */ 319 u32 data_err_inject_lo; /* Memory Data Path Error Injection Mask Low */ 320 u32 ecc_err_inject; /* Memory Data Path Error Injection Mask ECC */ 321 u8 res6[0x14]; 322 u32 capture_data_hi; /* Memory Data Path Read Capture High */ 323 u32 capture_data_lo; /* Memory Data Path Read Capture Low */ 324 u32 capture_ecc; /* Memory Data Path Read Capture ECC */ 325 u8 res7[0x14]; 326 u32 err_detect; /* Memory Error Detect */ 327 u32 err_disable; /* Memory Error Disable */ 328 u32 err_int_en; /* Memory Error Interrupt Enable */ 329 u32 capture_attributes; /* Memory Error Attributes Capture */ 330 u32 capture_address; /* Memory Error Address Capture */ 331 u32 capture_ext_address;/* Memory Error Extended Address Capture */ 332 u32 err_sbe; /* Memory Single-Bit ECC Error Management */ 333 u8 res8[0xA4]; 334 u32 debug_reg; 335 u8 res9[0xFC]; 336 } ddr83xx_t; 337 338 /* 339 * DUART 340 */ 341 typedef struct duart83xx { 342 u8 urbr_ulcr_udlb; /* combined register for URBR, UTHR and UDLB */ 343 u8 uier_udmb; /* combined register for UIER and UDMB */ 344 u8 uiir_ufcr_uafr; /* combined register for UIIR, UFCR and UAFR */ 345 u8 ulcr; /* line control register */ 346 u8 umcr; /* MODEM control register */ 347 u8 ulsr; /* line status register */ 348 u8 umsr; /* MODEM status register */ 349 u8 uscr; /* scratch register */ 350 u8 res0[8]; 351 u8 udsr; /* DMA status register */ 352 u8 res1[3]; 353 u8 res2[0xEC]; 354 } duart83xx_t; 355 356 /* 357 * DMA/Messaging Unit 358 */ 359 typedef struct dma83xx { 360 u32 res0[0xC]; /* 0x0-0x29 reseverd */ 361 u32 omisr; /* 0x30 Outbound message interrupt status register */ 362 u32 omimr; /* 0x34 Outbound message interrupt mask register */ 363 u32 res1[0x6]; /* 0x38-0x49 reserved */ 364 u32 imr0; /* 0x50 Inbound message register 0 */ 365 u32 imr1; /* 0x54 Inbound message register 1 */ 366 u32 omr0; /* 0x58 Outbound message register 0 */ 367 u32 omr1; /* 0x5C Outbound message register 1 */ 368 u32 odr; /* 0x60 Outbound doorbell register */ 369 u32 res2; /* 0x64-0x67 reserved */ 370 u32 idr; /* 0x68 Inbound doorbell register */ 371 u32 res3[0x5]; /* 0x6C-0x79 reserved */ 372 u32 imisr; /* 0x80 Inbound message interrupt status register */ 373 u32 imimr; /* 0x84 Inbound message interrupt mask register */ 374 u32 res4[0x1E]; /* 0x88-0x99 reserved */ 375 struct fsl_dma dma[4]; 376 } dma83xx_t; 377 378 /* 379 * PCI Software Configuration Registers 380 */ 381 typedef struct pciconf83xx { 382 u32 config_address; 383 u32 config_data; 384 u32 int_ack; 385 u8 res[116]; 386 } pciconf83xx_t; 387 388 /* 389 * PCI Outbound Translation Register 390 */ 391 typedef struct pci_outbound_window { 392 u32 potar; 393 u8 res0[4]; 394 u32 pobar; 395 u8 res1[4]; 396 u32 pocmr; 397 u8 res2[4]; 398 } pot83xx_t; 399 400 /* 401 * Sequencer 402 */ 403 typedef struct ios83xx { 404 pot83xx_t pot[6]; 405 u8 res0[0x60]; 406 u32 pmcr; 407 u8 res1[4]; 408 u32 dtcr; 409 u8 res2[4]; 410 } ios83xx_t; 411 412 /* 413 * PCI Controller Control and Status Registers 414 */ 415 typedef struct pcictrl83xx { 416 u32 esr; 417 u32 ecdr; 418 u32 eer; 419 u32 eatcr; 420 u32 eacr; 421 u32 eeacr; 422 u32 edlcr; 423 u32 edhcr; 424 u32 gcr; 425 u32 ecr; 426 u32 gsr; 427 u8 res0[12]; 428 u32 pitar2; 429 u8 res1[4]; 430 u32 pibar2; 431 u32 piebar2; 432 u32 piwar2; 433 u8 res2[4]; 434 u32 pitar1; 435 u8 res3[4]; 436 u32 pibar1; 437 u32 piebar1; 438 u32 piwar1; 439 u8 res4[4]; 440 u32 pitar0; 441 u8 res5[4]; 442 u32 pibar0; 443 u8 res6[4]; 444 u32 piwar0; 445 u8 res7[132]; 446 } pcictrl83xx_t; 447 448 /* 449 * USB 450 */ 451 typedef struct usb83xx { 452 u8 fixme[0x1000]; 453 } usb83xx_t; 454 455 /* 456 * TSEC 457 */ 458 typedef struct tsec83xx { 459 u8 fixme[0x1000]; 460 } tsec83xx_t; 461 462 /* 463 * Security 464 */ 465 typedef struct security83xx { 466 u8 fixme[0x10000]; 467 } security83xx_t; 468 469 /* 470 * PCI Express 471 */ 472 struct pex_inbound_window { 473 u32 ar; 474 u32 tar; 475 u32 barl; 476 u32 barh; 477 }; 478 479 struct pex_outbound_window { 480 u32 ar; 481 u32 bar; 482 u32 tarl; 483 u32 tarh; 484 }; 485 486 struct pex_csb_bridge { 487 u32 pex_csb_ver; 488 u32 pex_csb_cab; 489 u32 pex_csb_ctrl; 490 u8 res0[8]; 491 u32 pex_dms_dstmr; 492 u8 res1[4]; 493 u32 pex_cbs_stat; 494 u8 res2[0x20]; 495 u32 pex_csb_obctrl; 496 u32 pex_csb_obstat; 497 u8 res3[0x98]; 498 u32 pex_csb_ibctrl; 499 u32 pex_csb_ibstat; 500 u8 res4[0xb8]; 501 u32 pex_wdma_ctrl; 502 u32 pex_wdma_addr; 503 u32 pex_wdma_stat; 504 u8 res5[0x94]; 505 u32 pex_rdma_ctrl; 506 u32 pex_rdma_addr; 507 u32 pex_rdma_stat; 508 u8 res6[0xd4]; 509 u32 pex_ombcr; 510 u32 pex_ombdr; 511 u8 res7[0x38]; 512 u32 pex_imbcr; 513 u32 pex_imbdr; 514 u8 res8[0x38]; 515 u32 pex_int_enb; 516 u32 pex_int_stat; 517 u32 pex_int_apio_vec1; 518 u32 pex_int_apio_vec2; 519 u8 res9[0x10]; 520 u32 pex_int_ppio_vec1; 521 u32 pex_int_ppio_vec2; 522 u32 pex_int_wdma_vec1; 523 u32 pex_int_wdma_vec2; 524 u32 pex_int_rdma_vec1; 525 u32 pex_int_rdma_vec2; 526 u32 pex_int_misc_vec; 527 u8 res10[4]; 528 u32 pex_int_axi_pio_enb; 529 u32 pex_int_axi_wdma_enb; 530 u32 pex_int_axi_rdma_enb; 531 u32 pex_int_axi_misc_enb; 532 u32 pex_int_axi_pio_stat; 533 u32 pex_int_axi_wdma_stat; 534 u32 pex_int_axi_rdma_stat; 535 u32 pex_int_axi_misc_stat; 536 u8 res11[0xa0]; 537 struct pex_outbound_window pex_outbound_win[4]; 538 u8 res12[0x100]; 539 u32 pex_epiwtar0; 540 u32 pex_epiwtar1; 541 u32 pex_epiwtar2; 542 u32 pex_epiwtar3; 543 u8 res13[0x70]; 544 struct pex_inbound_window pex_inbound_win[4]; 545 }; 546 547 typedef struct pex83xx { 548 u8 pex_cfg_header[0x404]; 549 u32 pex_ltssm_stat; 550 u8 res0[0x30]; 551 u32 pex_ack_replay_timeout; 552 u8 res1[4]; 553 u32 pex_gclk_ratio; 554 u8 res2[0xc]; 555 u32 pex_pm_timer; 556 u32 pex_pme_timeout; 557 u8 res3[4]; 558 u32 pex_aspm_req_timer; 559 u8 res4[0x18]; 560 u32 pex_ssvid_update; 561 u8 res5[0x34]; 562 u32 pex_cfg_ready; 563 u8 res6[0x24]; 564 u32 pex_bar_sizel; 565 u8 res7[4]; 566 u32 pex_bar_sel; 567 u8 res8[0x20]; 568 u32 pex_bar_pf; 569 u8 res9[0x88]; 570 u32 pex_pme_to_ack_tor; 571 u8 res10[0xc]; 572 u32 pex_ss_intr_mask; 573 u8 res11[0x25c]; 574 struct pex_csb_bridge bridge; 575 u8 res12[0x160]; 576 } pex83xx_t; 577 578 /* 579 * SATA 580 */ 581 typedef struct sata83xx { 582 u8 fixme[0x1000]; 583 } sata83xx_t; 584 585 /* 586 * eSDHC 587 */ 588 typedef struct sdhc83xx { 589 u8 fixme[0x1000]; 590 } sdhc83xx_t; 591 592 /* 593 * SerDes 594 */ 595 typedef struct serdes83xx { 596 u32 srdscr0; 597 u32 srdscr1; 598 u32 srdscr2; 599 u32 srdscr3; 600 u32 srdscr4; 601 u8 res0[0xc]; 602 u32 srdsrstctl; 603 u8 res1[0xdc]; 604 } serdes83xx_t; 605 606 /* 607 * On Chip ROM 608 */ 609 typedef struct rom83xx { 610 u8 mem[0x10000]; 611 } rom83xx_t; 612 613 /* 614 * TDM 615 */ 616 typedef struct tdm83xx { 617 u8 fixme[0x200]; 618 } tdm83xx_t; 619 620 /* 621 * TDM DMAC 622 */ 623 typedef struct tdmdmac83xx { 624 u8 fixme[0x2000]; 625 } tdmdmac83xx_t; 626 627 #if defined(CONFIG_MPC834x) 628 typedef struct immap { 629 sysconf83xx_t sysconf; /* System configuration */ 630 wdt83xx_t wdt; /* Watch Dog Timer (WDT) Registers */ 631 rtclk83xx_t rtc; /* Real Time Clock Module Registers */ 632 rtclk83xx_t pit; /* Periodic Interval Timer */ 633 gtm83xx_t gtm[2]; /* Global Timers Module */ 634 ipic83xx_t ipic; /* Integrated Programmable Interrupt Controller */ 635 arbiter83xx_t arbiter; /* System Arbiter Registers */ 636 reset83xx_t reset; /* Reset Module */ 637 clk83xx_t clk; /* System Clock Module */ 638 pmc83xx_t pmc; /* Power Management Control Module */ 639 gpio83xx_t gpio[2]; /* General purpose I/O module */ 640 u8 res0[0x200]; 641 u8 dll_ddr[0x100]; 642 u8 dll_lbc[0x100]; 643 u8 res1[0xE00]; 644 ddr83xx_t ddr; /* DDR Memory Controller Memory */ 645 fsl_i2c_t i2c[2]; /* I2C Controllers */ 646 u8 res2[0x1300]; 647 duart83xx_t duart[2]; /* DUART */ 648 u8 res3[0x900]; 649 fsl_lbc_t im_lbc; /* Local Bus Controller Regs */ 650 u8 res4[0x1000]; 651 spi8xxx_t spi; /* Serial Peripheral Interface */ 652 dma83xx_t dma; /* DMA */ 653 pciconf83xx_t pci_conf[2]; /* PCI Software Configuration Registers */ 654 ios83xx_t ios; /* Sequencer */ 655 pcictrl83xx_t pci_ctrl[2]; /* PCI Controller Control and Status Registers */ 656 u8 res5[0x19900]; 657 usb83xx_t usb[2]; 658 tsec83xx_t tsec[2]; 659 u8 res6[0xA000]; 660 security83xx_t security; 661 u8 res7[0xC0000]; 662 } immap_t; 663 664 #ifdef CONFIG_HAS_FSL_MPH_USB 665 #define CONFIG_SYS_MPC83xx_USB_OFFSET 0x22000 /* use the MPH controller */ 666 #else 667 #define CONFIG_SYS_MPC83xx_USB_OFFSET 0x23000 /* use the DR controller */ 668 #endif 669 670 #elif defined(CONFIG_MPC8313) 671 typedef struct immap { 672 sysconf83xx_t sysconf; /* System configuration */ 673 wdt83xx_t wdt; /* Watch Dog Timer (WDT) Registers */ 674 rtclk83xx_t rtc; /* Real Time Clock Module Registers */ 675 rtclk83xx_t pit; /* Periodic Interval Timer */ 676 gtm83xx_t gtm[2]; /* Global Timers Module */ 677 ipic83xx_t ipic; /* Integrated Programmable Interrupt Controller */ 678 arbiter83xx_t arbiter; /* System Arbiter Registers */ 679 reset83xx_t reset; /* Reset Module */ 680 clk83xx_t clk; /* System Clock Module */ 681 pmc83xx_t pmc; /* Power Management Control Module */ 682 gpio83xx_t gpio[1]; /* General purpose I/O module */ 683 u8 res0[0x1300]; 684 ddr83xx_t ddr; /* DDR Memory Controller Memory */ 685 fsl_i2c_t i2c[2]; /* I2C Controllers */ 686 u8 res1[0x1300]; 687 duart83xx_t duart[2]; /* DUART */ 688 u8 res2[0x900]; 689 fsl_lbc_t im_lbc; /* Local Bus Controller Regs */ 690 u8 res3[0x1000]; 691 spi8xxx_t spi; /* Serial Peripheral Interface */ 692 dma83xx_t dma; /* DMA */ 693 pciconf83xx_t pci_conf[1]; /* PCI Software Configuration Registers */ 694 u8 res4[0x80]; 695 ios83xx_t ios; /* Sequencer */ 696 pcictrl83xx_t pci_ctrl[1]; /* PCI Controller Control and Status Registers */ 697 u8 res5[0x1aa00]; 698 usb83xx_t usb[1]; 699 tsec83xx_t tsec[2]; 700 u8 res6[0xA000]; 701 security83xx_t security; 702 u8 res7[0xC0000]; 703 } immap_t; 704 705 #elif defined(CONFIG_MPC8308) || defined(CONFIG_MPC8315) 706 typedef struct immap { 707 sysconf83xx_t sysconf; /* System configuration */ 708 wdt83xx_t wdt; /* Watch Dog Timer (WDT) Registers */ 709 rtclk83xx_t rtc; /* Real Time Clock Module Registers */ 710 rtclk83xx_t pit; /* Periodic Interval Timer */ 711 gtm83xx_t gtm[2]; /* Global Timers Module */ 712 ipic83xx_t ipic; /* Integrated Programmable Interrupt Controller */ 713 arbiter83xx_t arbiter; /* System Arbiter Registers */ 714 reset83xx_t reset; /* Reset Module */ 715 clk83xx_t clk; /* System Clock Module */ 716 pmc83xx_t pmc; /* Power Management Control Module */ 717 gpio83xx_t gpio[1]; /* General purpose I/O module */ 718 u8 res0[0x1300]; 719 ddr83xx_t ddr; /* DDR Memory Controller Memory */ 720 fsl_i2c_t i2c[2]; /* I2C Controllers */ 721 u8 res1[0x1300]; 722 duart83xx_t duart[2]; /* DUART */ 723 u8 res2[0x900]; 724 fsl_lbc_t im_lbc; /* Local Bus Controller Regs */ 725 u8 res3[0x1000]; 726 spi8xxx_t spi; /* Serial Peripheral Interface */ 727 dma83xx_t dma; /* DMA */ 728 pciconf83xx_t pci_conf[1]; /* PCI Software Configuration Registers */ 729 u8 res4[0x80]; 730 ios83xx_t ios; /* Sequencer */ 731 pcictrl83xx_t pci_ctrl[1]; /* PCI Controller Control and Status Registers */ 732 u8 res5[0xa00]; 733 pex83xx_t pciexp[2]; /* PCI Express Controller */ 734 u8 res6[0xb000]; 735 tdm83xx_t tdm; /* TDM Controller */ 736 u8 res7[0x1e00]; 737 sata83xx_t sata[2]; /* SATA Controller */ 738 u8 res8[0x9000]; 739 usb83xx_t usb[1]; /* USB DR Controller */ 740 tsec83xx_t tsec[2]; 741 u8 res9[0x6000]; 742 tdmdmac83xx_t tdmdmac; /* TDM DMAC */ 743 u8 res10[0x2000]; 744 security83xx_t security; 745 u8 res11[0xA3000]; 746 serdes83xx_t serdes[1]; /* SerDes Registers */ 747 u8 res12[0x1CF00]; 748 } immap_t; 749 750 #elif defined(CONFIG_MPC837x) 751 typedef struct immap { 752 sysconf83xx_t sysconf; /* System configuration */ 753 wdt83xx_t wdt; /* Watch Dog Timer (WDT) Registers */ 754 rtclk83xx_t rtc; /* Real Time Clock Module Registers */ 755 rtclk83xx_t pit; /* Periodic Interval Timer */ 756 gtm83xx_t gtm[2]; /* Global Timers Module */ 757 ipic83xx_t ipic; /* Integrated Programmable Interrupt Controller */ 758 arbiter83xx_t arbiter; /* System Arbiter Registers */ 759 reset83xx_t reset; /* Reset Module */ 760 clk83xx_t clk; /* System Clock Module */ 761 pmc83xx_t pmc; /* Power Management Control Module */ 762 gpio83xx_t gpio[2]; /* General purpose I/O module */ 763 u8 res0[0x1200]; 764 ddr83xx_t ddr; /* DDR Memory Controller Memory */ 765 fsl_i2c_t i2c[2]; /* I2C Controllers */ 766 u8 res1[0x1300]; 767 duart83xx_t duart[2]; /* DUART */ 768 u8 res2[0x900]; 769 fsl_lbc_t im_lbc; /* Local Bus Controller Regs */ 770 u8 res3[0x1000]; 771 spi8xxx_t spi; /* Serial Peripheral Interface */ 772 dma83xx_t dma; /* DMA */ 773 pciconf83xx_t pci_conf[1]; /* PCI Software Configuration Registers */ 774 u8 res4[0x80]; 775 ios83xx_t ios; /* Sequencer */ 776 pcictrl83xx_t pci_ctrl[1]; /* PCI Controller Control and Status Registers */ 777 u8 res5[0xa00]; 778 pex83xx_t pciexp[2]; /* PCI Express Controller */ 779 u8 res6[0xd000]; 780 sata83xx_t sata[4]; /* SATA Controller */ 781 u8 res7[0x7000]; 782 usb83xx_t usb[1]; /* USB DR Controller */ 783 tsec83xx_t tsec[2]; 784 u8 res8[0x8000]; 785 sdhc83xx_t sdhc; /* SDHC Controller */ 786 u8 res9[0x1000]; 787 security83xx_t security; 788 u8 res10[0xA3000]; 789 serdes83xx_t serdes[2]; /* SerDes Registers */ 790 u8 res11[0xCE00]; 791 rom83xx_t rom; /* On Chip ROM */ 792 } immap_t; 793 794 #elif defined(CONFIG_MPC8360) 795 typedef struct immap { 796 sysconf83xx_t sysconf; /* System configuration */ 797 wdt83xx_t wdt; /* Watch Dog Timer (WDT) Registers */ 798 rtclk83xx_t rtc; /* Real Time Clock Module Registers */ 799 rtclk83xx_t pit; /* Periodic Interval Timer */ 800 u8 res0[0x200]; 801 ipic83xx_t ipic; /* Integrated Programmable Interrupt Controller */ 802 arbiter83xx_t arbiter; /* System Arbiter Registers */ 803 reset83xx_t reset; /* Reset Module */ 804 clk83xx_t clk; /* System Clock Module */ 805 pmc83xx_t pmc; /* Power Management Control Module */ 806 qepi83xx_t qepi; /* QE Ports Interrupts Registers */ 807 u8 res1[0x300]; 808 u8 dll_ddr[0x100]; 809 u8 dll_lbc[0x100]; 810 u8 res2[0x200]; 811 qepio83xx_t qepio; /* QE Parallel I/O ports */ 812 qesba83xx_t qesba; /* QE Secondary Bus Access Windows */ 813 u8 res3[0x400]; 814 ddr83xx_t ddr; /* DDR Memory Controller Memory */ 815 fsl_i2c_t i2c[2]; /* I2C Controllers */ 816 u8 res4[0x1300]; 817 duart83xx_t duart[2]; /* DUART */ 818 u8 res5[0x900]; 819 fsl_lbc_t im_lbc; /* Local Bus Controller Regs */ 820 u8 res6[0x2000]; 821 dma83xx_t dma; /* DMA */ 822 pciconf83xx_t pci_conf[1]; /* PCI Software Configuration Registers */ 823 u8 res7[128]; 824 ios83xx_t ios; /* Sequencer (IOS) */ 825 pcictrl83xx_t pci_ctrl[1]; /* PCI Controller Control and Status Registers */ 826 u8 res8[0x4A00]; 827 ddr83xx_t ddr_secondary; /* Secondary DDR Memory Controller Memory Map */ 828 u8 res9[0x22000]; 829 security83xx_t security; 830 u8 res10[0xC0000]; 831 u8 qe[0x100000]; /* QE block */ 832 } immap_t; 833 834 #elif defined(CONFIG_MPC832x) 835 typedef struct immap { 836 sysconf83xx_t sysconf; /* System configuration */ 837 wdt83xx_t wdt; /* Watch Dog Timer (WDT) Registers */ 838 rtclk83xx_t rtc; /* Real Time Clock Module Registers */ 839 rtclk83xx_t pit; /* Periodic Interval Timer */ 840 gtm83xx_t gtm[2]; /* Global Timers Module */ 841 ipic83xx_t ipic; /* Integrated Programmable Interrupt Controller */ 842 arbiter83xx_t arbiter; /* System Arbiter Registers */ 843 reset83xx_t reset; /* Reset Module */ 844 clk83xx_t clk; /* System Clock Module */ 845 pmc83xx_t pmc; /* Power Management Control Module */ 846 qepi83xx_t qepi; /* QE Ports Interrupts Registers */ 847 u8 res0[0x300]; 848 u8 dll_ddr[0x100]; 849 u8 dll_lbc[0x100]; 850 u8 res1[0x200]; 851 qepio83xx_t qepio; /* QE Parallel I/O ports */ 852 u8 res2[0x800]; 853 ddr83xx_t ddr; /* DDR Memory Controller Memory */ 854 fsl_i2c_t i2c[2]; /* I2C Controllers */ 855 u8 res3[0x1300]; 856 duart83xx_t duart[2]; /* DUART */ 857 u8 res4[0x900]; 858 fsl_lbc_t im_lbc; /* Local Bus Controller Regs */ 859 u8 res5[0x2000]; 860 dma83xx_t dma; /* DMA */ 861 pciconf83xx_t pci_conf[1]; /* PCI Software Configuration Registers */ 862 u8 res6[128]; 863 ios83xx_t ios; /* Sequencer (IOS) */ 864 pcictrl83xx_t pci_ctrl[1]; /* PCI Controller Control and Status Registers */ 865 u8 res7[0x27A00]; 866 security83xx_t security; 867 u8 res8[0xC0000]; 868 u8 qe[0x100000]; /* QE block */ 869 } immap_t; 870 #endif 871 872 #define CONFIG_SYS_MPC83xx_DMA_OFFSET (0x8000) 873 #define CONFIG_SYS_MPC83xx_DMA_ADDR (CONFIG_SYS_IMMR + CONFIG_SYS_MPC83xx_DMA_OFFSET) 874 #define CONFIG_SYS_MPC83xx_ESDHC_OFFSET (0x2e000) 875 #define CONFIG_SYS_MPC83xx_ESDHC_ADDR (CONFIG_SYS_IMMR + CONFIG_SYS_MPC83xx_ESDHC_OFFSET) 876 877 #ifndef CONFIG_SYS_MPC83xx_USB_OFFSET 878 #define CONFIG_SYS_MPC83xx_USB_OFFSET 0x23000 879 #endif 880 #define CONFIG_SYS_MPC83xx_USB_ADDR \ 881 (CONFIG_SYS_IMMR + CONFIG_SYS_MPC83xx_USB_OFFSET) 882 #define CONFIG_SYS_LBC_ADDR (&((immap_t *)CONFIG_SYS_IMMR)->im_lbc) 883 884 #define CONFIG_SYS_TSEC1_OFFSET 0x24000 885 #define CONFIG_SYS_MDIO1_OFFSET 0x24000 886 887 #define TSEC_BASE_ADDR (CONFIG_SYS_IMMR + CONFIG_SYS_TSEC1_OFFSET) 888 #define MDIO_BASE_ADDR (CONFIG_SYS_IMMR + CONFIG_SYS_MDIO1_OFFSET) 889 #endif /* __IMMAP_83xx__ */ 890