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