* [PATCH] ppc32: Register definition for MPC85xx
@ 2005-07-19 10:01 Clemens Koller
2005-07-19 12:27 ` Kumar Gala
0 siblings, 1 reply; 3+ messages in thread
From: Clemens Koller @ 2005-07-19 10:01 UTC (permalink / raw)
To: ppcembed Mailing List, Clemens Koller
[-- Attachment #1: Type: text/plain, Size: 356 bytes --]
Hello!
I suggest to put the register definitions into the Kernel _before_
more driver writers start using their own / different maps.
Greets,
Clemens Koller
---
Almost complete and verified register map for the MPC85xx.
Based on sources from Jason McMullan and the MPC8540 Reference Manual.
Signed-off-by: Clemens Koller <clemens.koller@anagramm.de>
[-- Attachment #2: immap_85xx-register-update.patch --]
[-- Type: text/plain, Size: 76113 bytes --]
diff --git a/include/asm-ppc/immap_85xx.h b/include/asm-ppc/immap_85xx.h
--- a/include/asm-ppc/immap_85xx.h
+++ b/include/asm-ppc/immap_85xx.h
@@ -4,6 +4,12 @@
* MPC85xx Internal Memory Map
*
* Maintainer: Kumar Gala <kumar.gala@freescale.com>
+ * changes/verification: Clemens Koller <clemens.koller@anagramm.de>
+ * based on sources from Jason McMullan and the MPC8540 Reference Manual
+ *
+ * Tags in this file:
+ * FIXME - space for improvement
+ * XXX - exceptions/typos in manual
*
* Copyright 2004 Freescale Semiconductor, Inc
*
@@ -20,107 +26,1362 @@
/* Eventually this should define all the IO block registers in 85xx */
-/* PCI Registers */
+/* Local-Access Registers and ECM Registers(0x0000-0x2000) */
+typedef struct ccsr_ccsr {
+ uint32_t ccsrbar; /* 0x0 - Control Configuration Status Registers Base Address Register */
+ uint8_t res1[4];
+ uint32_t altcbar; /* 0x8 - Alternate Configuration Base Address Register */
+ uint8_t res2[4];
+ uint32_t altcar; /* 0x10 - Alternate Configuration Attribute Register */
+ uint8_t res3[12];
+ uint32_t bptr; /* 0x20 - Boot Page Translation Register */
+ uint8_t res4[3036];
+} ccsr_ccsr_t;
+
+typedef struct ccsr_law {
+ uint8_t res1[8];
+ uint32_t lawbar0; /* 0xc08 - Local Access Window 0 Base Address Register */
+ uint8_t res5[4];
+ uint32_t lawar0; /* 0xc10 - Local Access Window 0 Attributes Register */
+ uint8_t res6[20];
+ uint32_t lawbar1; /* 0xc28 - Local Access Window 1 Base Address Register */
+ uint8_t res7[4];
+ uint32_t lawar1; /* 0xc30 - Local Access Window 1 Attributes Register */
+ uint8_t res8[20];
+ uint32_t lawbar2; /* 0xc48 - Local Access Window 2 Base Address Register */
+ uint8_t res9[4];
+ uint32_t lawar2; /* 0xc50 - Local Access Window 2 Attributes Register */
+ uint8_t res10[20];
+ uint32_t lawbar3; /* 0xc68 - Local Access Window 3 Base Address Register */
+ uint8_t res11[4];
+ uint32_t lawar3; /* 0xc70 - Local Access Window 3 Attributes Register */
+ uint8_t res12[20];
+ uint32_t lawbar4; /* 0xc88 - Local Access Window 4 Base Address Register */
+ uint8_t res13[4];
+ uint32_t lawar4; /* 0xc90 - Local Access Window 4 Attributes Register */
+ uint8_t res14[20];
+ uint32_t lawbar5; /* 0xca8 - Local Access Window 5 Base Address Register */
+ uint8_t res15[4];
+ uint32_t lawar5; /* 0xcb0 - Local Access Window 5 Attributes Register */
+ uint8_t res16[20];
+ uint32_t lawbar6; /* 0xcc8 - Local Access Window 6 Base Address Register */
+ uint8_t res17[4];
+ uint32_t lawar6; /* 0xcd0 - Local Access Window 6 Attributes Register */
+ uint8_t res18[20];
+ uint32_t lawbar7; /* 0xce8 - Local Access Window 7 Base Address Register */
+ uint8_t res19[4];
+ uint32_t lawar7; /* 0xcf0 - Local Access Window 7 Attributes Register */
+ uint8_t res20[780];
+} ccsr_law_t;
+
+typedef struct ccsr_ecm {
+ uint32_t eebacr; /* 0x1000 - ECM CCB Address Configuration Register */
+ uint8_t res21[12];
+ uint32_t eebpcr; /* 0x1010 - ECM CCB Port Configuration Register */
+ uint8_t res22[3564];
+ uint32_t eedr; /* 0x1e00 - ECM Error Detect Register */
+ uint8_t res23[4];
+ uint32_t eeer; /* 0x1e08 - ECM Error Enable Register */
+ uint32_t eeatr; /* 0x1e0c - ECM Error Attributes Capture Register */
+ uint32_t eeadr; /* 0x1e10 - ECM Error Address Capture Register */
+ uint8_t res24[492];
+} ccsr_ecm_t;
+
+
+/* DDR memory controller registers(0x2000-0x3000) */
+typedef struct ccsr_ddr {
+ uint32_t cs0_bnds; /* 0x2000 - DDR Chip Select 0 Memory Bounds */
+ uint8_t res1[4];
+ uint32_t cs1_bnds; /* 0x2008 - DDR Chip Select 1 Memory Bounds */
+ uint8_t res2[4];
+ uint32_t cs2_bnds; /* 0x2010 - DDR Chip Select 2 Memory Bounds */
+ uint8_t res3[4];
+ uint32_t cs3_bnds; /* 0x2018 - DDR Chip Select 3 Memory Bounds */
+ uint8_t res4[100];
+ uint32_t cs0_config; /* 0x2080 - DDR Chip Select Configuration */
+ uint32_t cs1_config; /* 0x2084 - DDR Chip Select Configuration */
+ uint32_t cs2_config; /* 0x2088 - DDR Chip Select Configuration */
+ uint32_t cs3_config; /* 0x208c - DDR Chip Select Configuration */
+ uint8_t res5[120];
+ uint32_t timing_cfg_1; /* 0x2108 - DDR SDRAM Timing Configuration Register 1 */
+ uint32_t timing_cfg_2; /* 0x210c - DDR SDRAM Timing Configuration Register 2 */
+ uint32_t sdram_cfg; /* 0x2110 - DDR SDRAM Control Configuration */
+ uint8_t res6[4];
+ uint32_t sdram_mode; /* 0x2118 - DDR SDRAM Mode Configuration */
+ uint8_t res7[8];
+ uint32_t sdram_interval; /* 0x2124 - DDR SDRAM Interval Configuration */
+ uint8_t res8[3288];
+ uint32_t data_err_inject_hi; /* 0x2e00 - DDR Memory Data Path Error Injection Mask High */
+ uint32_t data_err_inject_lo; /* 0x2e04 - DDR Memory Data Path Error Injection Mask Low */
+ uint32_t ecc_err_inject; /* 0x2e08 - DDR Memory Data Path Error Injection Mask ECC */
+ uint8_t res9[20];
+ uint32_t capture_data_hi; /* 0x2e20 - DDR Memory Data Path Read Capture High */
+ uint32_t capture_data_lo; /* 0x2e24 - DDR Memory Data Path Read Capture Low */
+ uint32_t capture_ecc; /* 0x2e28 - DDR Memory Data Path Read Capture ECC */
+ uint8_t res10[20];
+ uint32_t err_detect; /* 0x2e40 - DDR Memory Error Detect */
+ uint32_t err_disable; /* 0x2e44 - DDR Memory Error Disable */
+ uint32_t err_int_en; /* 0x2e48 - DDR */
+ uint32_t capture_attributes; /* 0x2e4c - DDR Memory Error Attributes Capture */
+ uint32_t capture_address; /* 0x2e50 - DDR Memory Error Address Capture */
+ uint32_t capture_ext_address; /* 0x2e54 - DDR Memory Error Extended Address Capture */
+ uint32_t err_sbe; /* 0x2e58 - DDR Memory Single-Bit ECC Error Management */
+ uint8_t res11[164];
+ uint32_t debug_1; /* 0x2f00 */
+ uint32_t debug_2;
+ uint32_t debug_3;
+ uint32_t debug_4;
+ uint8_t res12[240];
+} ccsr_ddr_t;
+
+
+/* I2C Registers(0x3000-0x4000) */
+typedef struct ccsr_i2c {
+ uint8_t i2cadr; /* 0x3000 - I2C Address Register */
+#define MPC85xx_I2CADR_MASK 0xFE
+ uint8_t res1[3];
+ uint8_t i2cfdr; /* 0x3004 - I2C Frequency Divider Register */
+#define MPC85xx_I2CFDR_MASK 0x3F
+ uint8_t res2[3];
+ uint8_t i2ccr; /* 0x3008 - I2C Control Register */
+#define MPC85xx_I2CCR_MEN 0x80
+#define MPC85xx_I2CCR_MIEN 0x40
+#define MPC85xx_I2CCR_MSTA 0x20
+#define MPC85xx_I2CCR_MTX 0x10
+#define MPC85xx_I2CCR_TXAK 0x08
+#define MPC85xx_I2CCR_RSTA 0x04
+#define MPC85xx_I2CCR_BCST 0x01
+#define MPC85xx_I2CCR_MASK 0xfd
+ uint8_t res3[3];
+ uint8_t i2csr; /* 0x300c - I2C Status Register */
+#define MPC85xx_I2CSR_MCF 0x80
+#define MPC85xx_I2CSR_MAAS 0x40
+#define MPC85xx_I2CSR_MBB 0x20
+#define MPC85xx_I2CSR_MAL 0x10
+#define MPC85xx_I2CSR_BCSTM 0x08
+#define MPC85xx_I2CSR_SRW 0x04
+#define MPC85xx_I2CSR_MIF 0x02
+#define MPC85xx_I2CSR_RXAK 0x01
+ uint8_t res4[3];
+ uint8_t i2cdr; /* 0x3010 - I2C Data Register */
+#define MPC85xx_I2CDR_DATA 0xFF
+ uint8_t res5[3];
+ uint8_t i2cdfsrr; /* 0x3014 - I2C Digital Filtering Sampling Rate Register */
+#define MPC85xx_I2CDFSRR 0x3F
+ uint8_t res6[4075];
+} ccsr_i2c_t;
+
+#ifdef CONFIG_MPC8540
+/* DUART Registers(0x4000-0x5000) */
+typedef struct ccsr_duart {
+ uint8_t res1[1280];
+ uint8_t urbr1_uthr1_udlb1;/* 0x4500 - URBR1, UTHR1, UDLB1 with the same address offset of 0x04500 */
+ uint8_t uier1_udmb1; /* 0x4501 - UIER1, UDMB1 with the same address offset of 0x04501 */
+ uint8_t uiir1_ufcr1_uafr1;/* 0x4502 - UIIR1, UFCR1, UAFR1 with the same address offset of 0x04502 */
+ uint8_t ulcr1; /* 0x4503 - UART1 Line Control Register */
+ uint8_t umcr1; /* 0x4504 - UART1 Modem Control Register */
+ uint8_t ulsr1; /* 0x4505 - UART1 Line Status Register */
+ uint8_t umsr1; /* 0x4506 - UART1 Modem Status Register */
+ uint8_t uscr1; /* 0x4507 - UART1 Scratch Register */
+ uint8_t res2[8];
+ uint8_t udsr1; /* 0x4510 - UART1 DMA Status Register */
+ uint8_t res3[239];
+ uint8_t urbr2_uthr2_udlb2;/* 0x4600 - URBR2, UTHR2, UDLB2 with the same address offset of 0x04600 */
+ uint8_t uier2_udmb2; /* 0x4601 - UIER2, UDMB2 with the same address offset of 0x04601 */
+ uint8_t uiir2_ufcr2_uafr2;/* 0x4602 - UIIR2, UFCR2, UAFR2 with the same address offset of 0x04602 */
+ uint8_t ulcr2; /* 0x4603 - UART2 Line Control Register */
+ uint8_t umcr2; /* 0x4604 - UART2 Modem Control Register */
+ uint8_t ulsr2; /* 0x4605 - UART2 Line Status Register */
+ uint8_t umsr2; /* 0x4606 - UART2 Modem Status Register */
+ uint8_t uscr2; /* 0x4607 - UART2 Scratch Register */
+ uint8_t res4[8];
+ uint8_t udsr2; /* 0x4610 - UART2 DMA Status Register */
+ uint8_t res5[2543];
+} ccsr_duart_t;
+#else /* MPC8560 uses UART on its CPM */
+typedef struct ccsr_duart {
+ uint8_t res[4096];
+} ccsr_duart_t;
+#endif
+
+/* Local Bus Controller Registers(0x5000-0x6000) */
+/* Omitting OCeaN(0x6000) and Reserved(0x7000) block */
+typedef struct ccsr_lbc {
+ uint32_t br0; /* 0x5000 - LBC Base Register 0 */
+ uint32_t or0; /* 0x5004 - LBC Options Register 0 */
+ uint32_t br1; /* 0x5008 - LBC Base Register 1 */
+ uint32_t or1; /* 0x500c - LBC Options Register 1 */
+ uint32_t br2; /* 0x5010 - LBC Base Register 2 */
+ uint32_t or2; /* 0x5014 - LBC Options Register 2 */
+ uint32_t br3; /* 0x5018 - LBC Base Register 3 */
+ uint32_t or3; /* 0x501c - LBC Options Register 3 */
+ uint32_t br4; /* 0x5020 - LBC Base Register 4 */
+ uint32_t or4; /* 0x5024 - LBC Options Register 4 */
+ uint32_t br5; /* 0x5028 - LBC Base Register 5 */
+ uint32_t or5; /* 0x502c - LBC Options Register 5 */
+ uint32_t br6; /* 0x5030 - LBC Base Register 6 */
+ uint32_t or6; /* 0x5034 - LBC Options Register 6 */
+ uint32_t br7; /* 0x5038 - LBC Base Register 7 */
+ uint32_t or7; /* 0x503c - LBC Options Register 7 */
+ uint8_t res1[40];
+ uint32_t mar; /* 0x5068 - LBC UPM Address Register */
+ uint8_t res2[4];
+ uint32_t mamr; /* 0x5070 - LBC UPMA Mode Register */
+ uint32_t mbmr; /* 0x5074 - LBC UPMB Mode Register */
+ uint32_t mcmr; /* 0x5078 - LBC UPMC Mode Register */
+ uint8_t res3[8];
+ uint32_t mrtpr; /* 0x5084 - LBC Memory Refresh Timer Prescaler Register */
+ uint32_t mdr; /* 0x5088 - LBC UPM Data Register */
+ uint8_t res4[8];
+ uint32_t lsdmr; /* 0x5094 - LBC SDRAM Mode Register */
+ uint8_t res5[8];
+ uint32_t lurt; /* 0x50a0 - LBC UPM Refresh Timer */
+ uint32_t lsrt; /* 0x50a4 - LBC SDRAM Refresh Timer */
+ uint8_t res6[8];
+ uint32_t ltesr; /* 0x50b0 - LBC Transfer Error Status Register */
+ uint32_t ltedr; /* 0x50b4 - LBC Transfer Error Disable Register */
+ uint32_t lteir; /* 0x50b8 - LBC Transfer Error Interrupt Register */
+ uint32_t lteatr; /* 0x50bc - LBC Transfer Error Attributes Register */
+ uint32_t ltear; /* 0x50c0 - LBC Transfer Error Address Register */
+ uint8_t res7[12];
+ uint32_t lbcr; /* 0x50d0 - LBC Configuration Register */
+ uint32_t lcrr; /* 0x50d4 - LBC Clock Ratio Register */
+ uint8_t res8[12072];
+} ccsr_lbc_t;
+
+/* PCI Registers(0x8000-0x9000) */
+/* Omitting Reserved(0x9000-0x2_0000) */
typedef struct ccsr_pci {
- uint cfg_addr; /* 0x.000 - PCI Configuration Address Register */
- uint cfg_data; /* 0x.004 - PCI Configuration Data Register */
- uint int_ack; /* 0x.008 - PCI Interrupt Acknowledge Register */
- char res1[3060];
- uint potar0; /* 0x.c00 - PCI Outbound Transaction Address Register 0 */
- uint potear0; /* 0x.c04 - PCI Outbound Translation Extended Address Register 0 */
- uint powbar0; /* 0x.c08 - PCI Outbound Window Base Address Register 0 */
- char res2[4];
- uint powar0; /* 0x.c10 - PCI Outbound Window Attributes Register 0 */
- char res3[12];
- uint potar1; /* 0x.c20 - PCI Outbound Transaction Address Register 1 */
- uint potear1; /* 0x.c24 - PCI Outbound Translation Extended Address Register 1 */
- uint powbar1; /* 0x.c28 - PCI Outbound Window Base Address Register 1 */
- char res4[4];
- uint powar1; /* 0x.c30 - PCI Outbound Window Attributes Register 1 */
- char res5[12];
- uint potar2; /* 0x.c40 - PCI Outbound Transaction Address Register 2 */
- uint potear2; /* 0x.c44 - PCI Outbound Translation Extended Address Register 2 */
- uint powbar2; /* 0x.c48 - PCI Outbound Window Base Address Register 2 */
- char res6[4];
- uint powar2; /* 0x.c50 - PCI Outbound Window Attributes Register 2 */
- char res7[12];
- uint potar3; /* 0x.c60 - PCI Outbound Transaction Address Register 3 */
- uint potear3; /* 0x.c64 - PCI Outbound Translation Extended Address Register 3 */
- uint powbar3; /* 0x.c68 - PCI Outbound Window Base Address Register 3 */
- char res8[4];
- uint powar3; /* 0x.c70 - PCI Outbound Window Attributes Register 3 */
- char res9[12];
- uint potar4; /* 0x.c80 - PCI Outbound Transaction Address Register 4 */
- uint potear4; /* 0x.c84 - PCI Outbound Translation Extended Address Register 4 */
- uint powbar4; /* 0x.c88 - PCI Outbound Window Base Address Register 4 */
- char res10[4];
- uint powar4; /* 0x.c90 - PCI Outbound Window Attributes Register 4 */
- char res11[268];
- uint pitar3; /* 0x.da0 - PCI Inbound Translation Address Register 3 */
- char res12[4];
- uint piwbar3; /* 0x.da8 - PCI Inbound Window Base Address Register 3 */
- uint piwbear3; /* 0x.dac - PCI Inbound Window Base Extended Address Register 3 */
- uint piwar3; /* 0x.db0 - PCI Inbound Window Attributes Register 3 */
- char res13[12];
- uint pitar2; /* 0x.dc0 - PCI Inbound Translation Address Register 2 */
- char res14[4];
- uint piwbar2; /* 0x.dc8 - PCI Inbound Window Base Address Register 2 */
- uint piwbear2; /* 0x.dcc - PCI Inbound Window Base Extended Address Register 2 */
- uint piwar2; /* 0x.dd0 - PCI Inbound Window Attributes Register 2 */
- char res15[12];
- uint pitar1; /* 0x.de0 - PCI Inbound Translation Address Register 1 */
- char res16[4];
- uint piwbar1; /* 0x.de8 - PCI Inbound Window Base Address Register 1 */
- char res17[4];
- uint piwar1; /* 0x.df0 - PCI Inbound Window Attributes Register 1 */
- char res18[12];
- uint err_dr; /* 0x.e00 - PCI Error Detect Register */
- uint err_cap_dr; /* 0x.e04 - PCI Error Capture Disable Register */
- uint err_en; /* 0x.e08 - PCI Error Enable Register */
- uint err_attrib; /* 0x.e0c - PCI Error Attributes Capture Register */
- uint err_addr; /* 0x.e10 - PCI Error Address Capture Register */
- uint err_ext_addr; /* 0x.e14 - PCI Error Extended Address Capture Register */
- uint err_dl; /* 0x.e18 - PCI Error Data Low Capture Register */
- uint err_dh; /* 0x.e1c - PCI Error Data High Capture Register */
- uint gas_timr; /* 0x.e20 - PCI Gasket Timer Register */
- uint pci_timr; /* 0x.e24 - PCI Timer Register */
- char res19[472];
+ uint32_t cfg_addr; /* 0x8000 - PCIX Configuration Address Register */
+ uint32_t cfg_data; /* 0x8004 - PCIX Configuration Data Register */
+ uint32_t int_ack; /* 0x8008 - PCIX Interrupt Acknowledge Register */
+ uint8_t res1[3060];
+ uint32_t potar0; /* 0x8c00 - PCIX Outbound Transaction Address Register 0 */
+ uint32_t potear0; /* 0x8c04 - PCIX Outbound Translation Extended Address Register 0 */
+ uint32_t powbar0; /* 0x8c08 - PCIX Outbound Window Base Address Register 0 */
+ uint32_t powbear0; /* 0x8c0c - PCIX Outbound Window Base Extended Address Register 0 */
+ uint32_t powar0; /* 0x8c10 - PCIX Outbound Window Attributes Register 0 */
+ uint8_t res2[12];
+ uint32_t potar1; /* 0x8c20 - PCIX Outbound Transaction Address Register 1 */
+ uint32_t potear1; /* 0x8c24 - PCIX Outbound Translation Extended Address Register 1 */
+ uint32_t powbar1; /* 0x8c28 - PCIX Outbound Window Base Address Register 1 */
+ uint32_t powbear1; /* 0x8c2c - PCIX Outbound Window Base Extended Address Register 1 */
+ uint32_t powar1; /* 0x8c30 - PCIX Outbound Window Attributes Register 1 */
+ uint8_t res3[12];
+ uint32_t potar2; /* 0x8c40 - PCIX Outbound Transaction Address Register 2 */
+ uint32_t potear2; /* 0x8c44 - PCIX Outbound Translation Extended Address Register 2 */
+ uint32_t powbar2; /* 0x8c48 - PCIX Outbound Window Base Address Register 2 */
+ uint32_t powbear2; /* 0x8c4c - PCIX Outbound Window Base Extended Address Register 2 */
+ uint32_t powar2; /* 0x8c50 - PCIX Outbound Window Attributes Register 2 */
+ uint8_t res4[12];
+ uint32_t potar3; /* 0x8c60 - PCIX Outbound Transaction Address Register 3 */
+ uint32_t potear3; /* 0x8c64 - PCIX Outbound Translation Extended Address Register 3 */
+ uint32_t powbar3; /* 0x8c68 - PCIX Outbound Window Base Address Register 3 */
+ uint32_t powbear3; /* 0x8c6c - PCIX Outbound Window Base Extended Address Register 3 */
+ uint32_t powar3; /* 0x8c70 - PCIX Outbound Window Attributes Register 3 */
+ uint8_t res5[12];
+ uint32_t potar4; /* 0x8c80 - PCIX Outbound Transaction Address Register 4 */
+ uint32_t potear4; /* 0x8c84 - PCIX Outbound Translation Extended Address Register 4 */
+ uint32_t powbar4; /* 0x8c88 - PCIX Outbound Window Base Address Register 4 */
+ uint32_t powbear4; /* 0x8c8c - PCIX Outbound Window Base Extended Address Register 4 */
+ uint32_t powar4; /* 0x8c90 - PCIX Outbound Window Attributes Register 4 */
+ uint8_t res6[268];
+ uint32_t pitar3; /* 0x8da0 - PCIX Inbound Translation Address Register 3 */
+ uint32_t pitear3; /* 0x8da4 - PCIX Inbound Translation Extended Address Register 3 */
+ uint32_t piwbar3; /* 0x8da8 - PCIX Inbound Window Base Address Register 3 */
+ uint32_t piwbear3; /* 0x8dac - PCIX Inbound Window Base Extended Address Register 3 */
+ uint32_t piwar3; /* 0x8db0 - PCIX Inbound Window Attributes Register 3 */
+ uint8_t res7[12];
+ uint32_t pitar2; /* 0x8dc0 - PCIX Inbound Translation Address Register 2 */
+ uint32_t pitear2; /* 0x8dc4 - PCIX Inbound Translation Extended Address Register 2 */
+ uint32_t piwbar2; /* 0x8dc8 - PCIX Inbound Window Base Address Register 2 */
+ uint32_t piwbear2; /* 0x8dcc - PCIX Inbound Window Base Extended Address Register 2 */
+ uint32_t piwar2; /* 0x8dd0 - PCIX Inbound Window Attributes Register 2 */
+ uint8_t res8[12];
+ uint32_t pitar1; /* 0x8de0 - PCIX Inbound Translation Address Register 1 */
+ uint32_t pitear1; /* 0x8de4 - PCIX Inbound Translation Extended Address Register 1 */
+ uint32_t piwbar1; /* 0x8de8 - PCIX Inbound Window Base Address Register 1 */
+ uint8_t res9[4];
+ uint32_t piwar1; /* 0x8df0 - PCIX Inbound Window Attributes Register 1 */
+ uint8_t res10[12];
+ uint32_t pedr; /* 0x8e00 - PCIX Error Detect Register */
+ uint32_t pecdr; /* 0x8e04 - PCIX Error Capture Disable Register */
+ uint32_t peer; /* 0x8e08 - PCIX Error Enable Register */
+ uint32_t peattrcr; /* 0x8e0c - PCIX Error Attributes Capture Register */
+ uint32_t peaddrcr; /* 0x8e10 - PCIX Error Address Capture Register */
+ uint32_t peextaddrcr; /* 0x8e14 - PCIX Error Extended Address Capture Register */
+ uint32_t pedlcr; /* 0x8e18 - PCIX Error Data Low Capture Register */
+ uint32_t pedhcr; /* 0x8e1c - PCIX Error Error Data High Capture Register */
+ uint8_t res11[94688];
} ccsr_pci_t;
-/* Global Utility Registers */
+/* L2 Cache Registers(0x2_0000-0x2_1000) */
+typedef struct ccsr_l2cache {
+ uint32_t l2ctl; /* 0x20000 - L2 configuration register 0 */
+ uint8_t res1[12];
+ uint32_t l2cewar0; /* 0x20010 - L2 cache external write address register 0 */
+ uint8_t res2[4];
+ uint32_t l2cewcr0; /* 0x20018 - L2 cache external write control register 0 */
+ uint8_t res3[4];
+ uint32_t l2cewar1; /* 0x20020 - L2 cache external write address register 1 */
+ uint8_t res4[4];
+ uint32_t l2cewcr1; /* 0x20028 - L2 cache external write control register 1 */
+ uint8_t res5[4];
+ uint32_t l2cewar2; /* 0x20030 - L2 cache external write address register 2 */
+ uint8_t res6[4];
+ uint32_t l2cewcr2; /* 0x20038 - L2 cache external write control register 2 */
+ uint8_t res7[4];
+ uint32_t l2cewar3; /* 0x20040 - L2 cache external write address register 3 */
+ uint8_t res8[4];
+ uint32_t l2cewcr3; /* 0x20048 - L2 cache external write control register 3 */
+ uint8_t res9[180];
+ uint32_t l2srbar0; /* 0x20100 - L2 memory-mapped SRAM base address register 0 */
+ uint8_t res10[4];
+ uint32_t l2srbar1; /* 0x20108 - L2 memory-mapped SRAM base address register 1 */
+ uint8_t res11[3316];
+ uint32_t l2errinjhi; /* 0x20e00 - L2 error injection mask high register */
+ uint32_t l2errinjlo; /* 0x20e04 - L2 error injection mask low register */
+ uint32_t l2errinjctl; /* 0x20e08 - L2 error injection tag/ECC control register */
+ uint8_t res12[20];
+ uint32_t l2captdatahi; /* 0x20e20 - L2 error data high capture register */
+ uint32_t l2captdatalo; /* 0x20e24 - L2 error data low capture register */
+ uint32_t l2captecc; /* 0x20e28 - L2 error ECC capture register */
+ uint8_t res13[20];
+ uint32_t l2errdet; /* 0x20e40 - L2 error detect register */
+ uint32_t l2errdis; /* 0x20e44 - L2 error disable register */
+ uint32_t l2errinten; /* 0x20e48 - L2 error interrupt enable register */
+ uint32_t l2errattr; /* 0x20e4c - L2 error attributes capture register */
+ uint32_t l2erraddr; /* 0x20e50 - L2 error address capture register */
+ uint8_t res14[4];
+ uint32_t l2errctl; /* 0x20e58 - L2 error control register */
+ uint8_t res15[420];
+} ccsr_l2cache_t;
+
+
+/* DMA Registers(0x2_1000-0x2_2000) */
+typedef struct ccsr_dma {
+ uint8_t res1[256];
+
+ /* 0x21100 - DMA */
+ struct {
+ uint32_t mr; /* 0x00 - DMA 0 Mode Register */
+#define MPC85xx_MR_BWC_MASK (0xf << 24) /* Bandwidth control */
+# define MPC85xx_MR_BWC_1 ((0) << 24)
+# define MPC85xx_MR_BWC_2 ((1) << 24)
+# define MPC85xx_MR_BWC_4 ((2) << 24)
+# define MPC85xx_MR_BWC_8 ((3) << 24)
+# define MPC85xx_MR_BWC_16 ((4) << 24)
+# define MPC85xx_MR_BWC_32 ((5) << 24)
+# define MPC85xx_MR_BWC_64 ((6) << 24)
+# define MPC85xx_MR_BWC_128 ((7) << 24)
+# define MPC85xx_MR_BWC_256 ((8) << 24)
+# define MPC85xx_MR_BWC_512 ((9) << 24)
+#define MPC85xx_MR_EMP_EN (1 << 21) /* External Master Pause En */
+#define MPC85xx_MR_EMS_EN (1 << 18) /* External Master Start En */
+#define MPC85xx_MR_DAHTS_MASK (3 << 16) /* Dest Hold addr size */
+# define MPC85xx_MR_DAHTS_1 (0 << 16)
+# define MPC85xx_MR_DAHTS_2 (1 << 16)
+# define MPC85xx_MR_DAHTS_4 (2 << 16)
+# define MPC85xx_MR_DAHTS_8 (3 << 16)
+#define MPC85xx_MR_SAHTS_MASK (3 << 14) /* Src Hold addr size */
+# define MPC85xx_MR_SAHTS_1 (0 << 14)
+# define MPC85xx_MR_SAHTS_2 (1 << 14)
+# define MPC85xx_MR_SAHTS_4 (2 << 14)
+# define MPC85xx_MR_SAHTS_8 (3 << 14)
+#define MPC85xx_MR_DAHE (1 << 13) /* Destination Hold Enable */
+#define MPC85xx_MR_SAHE (1 << 12) /* Source Hold Enable */
+#define MPC85xx_MR_SRW (1 << 10) /* Single register write */
+#define MPC85xx_MR_EOSIE (1 << 9) /* End-of-segments interrupt */
+#define MPC85xx_MR_EOLNIE (1 << 8) /* End-of-links interrupt */
+#define MPC85xx_MR_EOLSIE (1 << 7) /* End-of-lists interrupt */
+#define MPC85xx_MR_PEIE (1 << 6) /* Prog. error interrupt */
+#define MPC85xx_MR_XFE (1 << 5) /* Enable new chain mode */
+#define MPC85xx_MR_CDSM (1 << 4) /* Immediate DMA start */
+#define MPC85xx_MR_SWSM (1 << 4) /* Immediate DMA start */
+#define MPC85xx_MR_CA (1 << 3) /* Channel Abort */
+#define MPC85xx_MR_CTM (1 << 2) /* Chain Mode (0) or Direct (1) */
+#define MPC85xx_MR_CC (1 << 1) /* Channel continue */
+#define MPC85xx_MR_CS (1 << 0) /* Channel start */
+ uint32_t sr; /* 0x04 - DMA 0 Status Register */
+#define MPC85xx_SR_TE (1 << 7) /* Transfer Error */
+#define MPC85xx_SR_CH (1 << 5) /* Channel Halted */
+#define MPC85xx_SR_PEI (1 << 4) /* Programming Error */
+#define MPC85xx_SR_EOLNI (1 << 3) /* End-of-links interrupt */
+#define MPC85xx_SR_CB (1 << 2) /* Channel Busy */
+#define MPC85xx_SR_EOSI (1 << 1) /* End-of-segment interrupt */
+#define MPC85xx_SR_EOLSI (1 << 0) /* End-of-list interrupt */
+ uint8_t res2[4];
+ uint32_t clndar; /* 0x2110c - DMA 0 Current Link Descriptor Address Register */
+#define MPC85xx_CLNDAR_EOSIE (1 << 3) /* End-of-segment interrupt */
+ uint32_t satr; /* 0x10 - DMA 0 Source Attributes Register */
+#define MPC85xx_SATR_ESAD_MASK (0x3ff)
+#define MPC85xx_SATR_SREADTYPE_R_IO_READ_HOME (0x2 << 16)
+#define MPC85xx_SATR_SREADTYPE_R_NREAD (0x4 << 16)
+#define MPC85xx_SATR_SREADTYPE_R_MAINTENANCE (0x7 << 16)
+
+#define MPC85xx_SATR_SREADTYPE_L_NO_SNOOP (0x4 << 16)
+#define MPC85xx_SATR_SREADTYPE_L_SNOOP (0x5 << 16)
+#define MPC85xx_SATR_SREADTYPE_L_L2_UNLOCK (0x7 << 16)
+
+#define MPC85xx_SATR_STRANSINT_RAPIDIO (0x6 << 20)
+
+#define MPC85xx_SATR_SSME (1 << 24)
+#define MPC85xx_SATR_SPCI_ORDER (1 << 25)
+#define MPC85xx_SATR_STFLOWLVL_LOW (0 << 26)
+#define MPC85xx_SATR_STFLOWLVL_MED (1 << 26)
+#define MPC85xx_SATR_STFLOWLVL_HI (2 << 26)
+#define MPC85xx_SATR_SBPATMU (1 << 29)
+ uint32_t sar; /* 0x14 - DMA 0 Source Address Register */
+ uint32_t datr; /* 0x18 - DMA 0 Destination Attributes Register */
+#define MPC85xx_DATR_EDAD_MASK (0x3ff)
+#define MPC85xx_DATR_DWRITETYPE_R_FLUSH (0x1 << 16)
+#define MPC85xx_DATR_DWRITETYPE_R_SWRITE (0x3 << 16)
+#define MPC85xx_DATR_DWRITETYPE_R_NWRITE (0x4 << 16)
+#define MPC85xx_DATR_DWRITETYPE_R_NWRITE_R (0x5 << 16)
+#define MPC85xx_DATR_DWRITETYPE_R_MESSAGE (0x6 << 16)
+#define MPC85xx_DATR_DWRITETYPE_R_MAINTENANCE (0x7 << 16)
+
+#define MPC85xx_DATR_DWRITETYPE_L_NO_SNOOP (0x4 << 16)
+#define MPC85xx_DATR_DWRITETYPE_L_SNOOP (0x5 << 16)
+#define MPC85xx_DATR_DWRITETYPE_L_L2 (0x6 << 16)
+#define MPC85xx_DATR_DWRITETYPE_L_L2_LOCK (0x7 << 16)
+
+#define MPC85xx_DATR_DTRANSINT_RAPIDIO (0x6 << 20)
+
+#define MPC85xx_DATR_DSME (1 << 24)
+#define MPC85xx_DATR_DPCI_ORDER (1 << 25)
+#define MPC85xx_DATR_DTFLOWLVL_LOW (0 << 26)
+#define MPC85xx_DATR_DTFLOWLVL_MED (1 << 26)
+#define MPC85xx_DATR_DTFLOWLVL_HI (2 << 26)
+#define MPC85xx_DATR_DBPATMU (1 << 29)
+ uint32_t dar; /* 0x1c - DMA 0 Destination Address Register */
+ uint32_t bcr; /* 0x20 - DMA 0 Byte Count Register */
+#define MPC85xx_BCR_MASK 0x0cffffff
+ uint8_t res3[4];
+ uint32_t nlndar; /* 0x28 - DMA 0 Next Link Descriptor Address Register */
+#define MPC85xx_NLNDAR_MASK 0xffffffe0
+#define MPC85xx_NLNDAR_NDEOSIE (1 << 3) /* Next descriptor end-of-segment interrupt enable */
+#define MPC85xx_NLNDAR_EOLND (1 << 0) /* End of links */
+ uint8_t res4[8];
+/* XXX the MPC8540 reference maual says that this is the clsdar register, but the
+ * following name is from Jason McMullan's version: */
+ uint32_t clabdar; /* 0x34 - DMA 0 Current List - Alternate Base Descriptor Address Register */
+ uint8_t res5[4];
+ uint32_t nlsdar; /* 0x3c - DMA 0 Next List Descriptor Address Register */
+ uint32_t ssr; /* 0x40 - DMA 0 Source Stride Register */
+ uint32_t dsr; /* 0x44 - DMA 0 Destination Stride Register */
+ uint8_t res6[56];
+ } dma[4];
+ uint32_t dgsr; /* 0x21300 - DMA General Status Register */
+ uint8_t res7[11516];
+} ccsr_dma_t;
+
+/* TSEC1 0x2_4000-0x2_5000 */
+/* TSEC2 0x2_5000-0x2_6000 (hint: add 0x1000 to the register addresses below :-)*/
+typedef struct ccsr_tsec {
+ uint8_t res1[16];
+ uint32_t ievent; /* 0x24010 - Interrupt Event Register */
+ uint32_t imask; /* 0x24014 - Interrupt Mask Register */
+ uint32_t edis; /* 0x24018 - Error Disabled Register */
+ uint8_t res2[4];
+ uint32_t ecntrl; /* 0x24020 - Ethernet Control Register */
+ uint32_t minflr; /* 0x24024 - Minimum Frame Length Register */
+ uint32_t ptv; /* 0x24028 - Pause Time Value Register */
+ uint32_t dmactrl; /* 0x2402c - DMA Control Register */
+ uint32_t tbipa; /* 0x24030 - TBI PHY Address Register */
+ uint8_t res3[24];
+ uint32_t fifo_pause_ctrl; /* 0x2404c - FIFO pause control register */
+ uint8_t res3b[60];
+ uint32_t fifo_tx_thr; /* 0x2408c - FIFO transmit threshold register */
+ uint8_t res4[8];
+ uint32_t fifo_tx_starve; /* 0x24098 - FIFO transmit starve register */
+ uint32_t fifo_tx_starve_shutoff; /* 0x2409c - FIFO transmit starve shutoff register */
+ uint8_t res5[96];
+ uint32_t tctrl; /* 0x24100 - Transmit Control Register */
+ uint32_t tstat; /* 0x24104 - Transmit Status Register */
+ uint8_t res6[4];
+ uint32_t tbdlen; /* 0x2410c - Transmit Buffer Descriptor Data Length Register */
+ uint8_t res7[16];
+ uint32_t ctbptrh; /* 0x24120 - Current Transmit Buffer Descriptor Pointer High Register */
+ uint32_t ctbptr; /* 0x24124 - Current Transmit Buffer Descriptor Pointer Register */
+ uint8_t res8[88];
+ uint32_t tbptrh; /* 0x24180 - Transmit Buffer Descriptor Pointer High Register */
+ uint32_t tbptr; /* 0x24184 - Transmit Buffer Descriptor Pointer Low Register */
+ uint8_t res9[120];
+ uint32_t tbaseh; /* 0x24200 - Transmit Descriptor Base Address High Register */
+ uint32_t tbase; /* 0x24204 - Transmit Descriptor Base Address Register */
+ uint8_t res10[168];
+ uint32_t ostbd; /* 0x242b0 - Out-of-Sequence Transmit Buffer Descriptor Register */
+ uint32_t ostbdp; /* 0x242b4 - Out-of-Sequence Transmit Data Buffer Pointer Register */
+ uint32_t os32tbdp; /* 0x242b8 - Out-of-Sequence 32 Bytes Transmit Data Buffer Pointer Low Register */
+ uint32_t os32iptrh; /* 0x242bc - Out-of-Sequence 32 Bytes Transmit Insert Pointer High Register */
+ uint32_t os32iptrl; /* 0x242c0 - Out-of-Sequence 32 Bytes Transmit Insert Pointer Low Register */
+ uint32_t os32tbdr; /* 0x242c4 - Out-of-Sequence 32 Bytes Transmit Reserved Register */
+ uint32_t os32iil; /* 0x242c8 - Out-of-Sequence 32 Bytes Transmit Insert Index/Length Register */
+ uint8_t res11[52];
+ uint32_t rctrl; /* 0x24300 - Receive Control Register */
+ uint32_t rstat; /* 0x24304 - Receive Status Register */
+ uint8_t res12[4];
+ uint32_t rbdlen; /* 0x2430c - RxBD Data Length Register */
+ uint8_t res13[16];
+ uint32_t crbptrh; /* 0x24320 - Current Receive Buffer Descriptor Pointer High */
+ uint32_t crbptr; /* 0x24324 - Current Receive Buffer Descriptor Pointer */
+ uint8_t res14[24];
+ uint32_t mrblr; /* 0x24340 - Maximum Receive Buffer Length Register */
+ uint32_t mrblr2r3; /* 0x24344 - Maximum Receive Buffer Length R2R3 Register */
+ uint8_t res15[56];
+ uint32_t rbptrh; /* 0x24380 - Receive Buffer Descriptor Pointer High 0 */
+ uint32_t rbptr; /* 0x24384 - Receive Buffer Descriptor Pointer */
+ uint32_t rbptrh1; /* 0x24388 - Receive Buffer Descriptor Pointer High 1 */
+ uint32_t rbptrl1; /* 0x2438c - Receive Buffer Descriptor Pointer Low 1 */
+ uint32_t rbptrh2; /* 0x24390 - Receive Buffer Descriptor Pointer High 2 */
+ uint32_t rbptrl2; /* 0x24394 - Receive Buffer Descriptor Pointer Low 2 */
+ uint32_t rbptrh3; /* 0x24398 - Receive Buffer Descriptor Pointer High 3 */
+ uint32_t rbptrl3; /* 0x2439c - Receive Buffer Descriptor Pointer Low 3 */
+ uint8_t res16[96];
+ uint32_t rbaseh; /* 0x24400 - Receive Descriptor Base Address High 0 */
+ uint32_t rbase; /* 0x24404 - Receive Descriptor Base Address */
+ uint32_t rbaseh1; /* 0x24408 - Receive Descriptor Base Address High 1 */
+ uint32_t rbasel1; /* 0x2440c - Receive Descriptor Base Address Low 1 */
+ uint32_t rbaseh2; /* 0x24410 - Receive Descriptor Base Address High 2 */
+ uint32_t rbasel2; /* 0x24414 - Receive Descriptor Base Address Low 2 */
+ uint32_t rbaseh3; /* 0x24418 - Receive Descriptor Base Address High 3 */
+ uint32_t rbasel3; /* 0x2441c - Receive Descriptor Base Address Low 3 */
+ uint8_t res17[224];
+ uint32_t maccfg1; /* 0x24500 - MAC Configuration 1 Register */
+ uint32_t maccfg2; /* 0x24504 - MAC Configuration 2 Register */
+ uint32_t ipgifg; /* 0x24508 - Inter Packet Gap/Inter Frame Gap Register */
+ uint32_t hafdup; /* 0x2450c - Half Duplex Register */
+ uint32_t maxfrm; /* 0x24510 - Maximum Frame Length Register */
+ uint8_t res18[12];
+ uint32_t miimcfg; /* 0x24520 - MII Management Configuration Register */
+ uint32_t miimcom; /* 0x24524 - MII Management Command Register */
+ uint32_t miimadd; /* 0x24528 - MII Management Address Register */
+ uint32_t miimcon; /* 0x2452c - MII Management Control Register */
+ uint32_t miimstat; /* 0x24530 - MII Management Status Register */
+ uint32_t miimind; /* 0x24534 - MII Management Indicator Register */
+ uint8_t res19[4];
+ uint32_t ifstat; /* 0x2453c - Interface Status Register */
+ uint32_t macstnaddr1; /* 0x24540 - Station Address Part 1 Register */
+ uint32_t macstnaddr2; /* 0x24544 - Station Address Part 2 Register */
+ uint8_t res20[312];
+ uint32_t tr64; /* 0x24680 - Transmit and Receive 64-byte Frame Counter */
+ uint32_t tr127; /* 0x24684 - Transmit and Receive 65-127 byte Frame Counter */
+ uint32_t tr255; /* 0x24688 - Transmit and Receive 128-255 byte Frame Counter */
+ uint32_t tr511; /* 0x2468c - Transmit and Receive 256-511 byte Frame Counter */
+ uint32_t tr1k; /* 0x24690 - Transmit and Receive 512-1023 byte Frame Counter */
+ uint32_t trmax; /* 0x24694 - Transmit and Receive 1024-1518 byte Frame Counter */
+ uint32_t trmgv; /* 0x24698 - Transmit and Receive 1519-1522 byte Good VLAN Frame */
+ uint32_t rbyt; /* 0x2469c - Receive Byte Counter */
+ uint32_t rpkt; /* 0x246a0 - Receive Packet Counter */
+ uint32_t rfcs; /* 0x246a4 - Receive FCS Error Counter */
+ uint32_t rmca; /* 0x246a8 - Receive Multicast Packet Counter */
+ uint32_t rbca; /* 0x246ac - Receive Broadcast Packet Counter */
+ uint32_t rxcf; /* 0x246b0 - Receive Control Frame Packet Counter */
+ uint32_t rxpf; /* 0x246b4 - Receive Pause Frame Packet Counter */
+ uint32_t rxuo; /* 0x246b8 - Receive Unknown OP Code Counter */
+ uint32_t raln; /* 0x246bc - Receive Alignment Error Counter */
+ uint32_t rflr; /* 0x246c0 - Receive Frame Length Error Counter */
+ uint32_t rcde; /* 0x246c4 - Receive Code Error Counter */
+ uint32_t rcse; /* 0x246c8 - Receive Carrier Sense Error Counter */
+ uint32_t rund; /* 0x246cc - Receive Undersize Packet Counter */
+ uint32_t rovr; /* 0x246d0 - Receive Oversize Packet Counter */
+ uint32_t rfrg; /* 0x246d4 - Receive Fragments Counter */
+ uint32_t rjbr; /* 0x246d8 - Receive Jabber Counter */
+ uint32_t rdrp; /* 0x246dc - Receive Drop Counter */
+ uint32_t tbyt; /* 0x246e0 - Transmit Byte Counter Counter */
+ uint32_t tpkt; /* 0x246e4 - Transmit Packet Counter */
+ uint32_t tmca; /* 0x246e8 - Transmit Multicast Packet Counter */
+ uint32_t tbca; /* 0x246ec - Transmit Broadcast Packet Counter */
+ uint32_t txpf; /* 0x246f0 - Transmit Pause Control Frame Counter */
+ uint32_t tdfr; /* 0x246f4 - Transmit Deferral Packet Counter */
+ uint32_t tedf; /* 0x246f8 - Transmit Excessive Deferral Packet Counter */
+ uint32_t tscl; /* 0x246fc - Transmit Single Collision Packet Counter */
+ uint32_t tmcl; /* 0x24700 - Transmit Multiple Collision Packet Counter */
+ uint32_t tlcl; /* 0x24704 - Transmit Late Collision Packet Counter */
+ uint32_t txcl; /* 0x24708 - Transmit Excessive Collision Packet Counter */
+ uint32_t tncl; /* 0x2470c - Transmit Total Collision Counter */
+ uint8_t res21[4];
+ uint32_t tdrp; /* 0x24714 - Transmit Drop Frame Counter */
+ uint32_t tjbr; /* 0x24718 - Transmit Jabber Frame Counter */
+ uint32_t tfcs; /* 0x2471c - Transmit FCS Error Counter */
+ uint32_t txcf; /* 0x24720 - Transmit Control Frame Counter */
+ uint32_t tovr; /* 0x24724 - Transmit Oversize Frame Counter */
+ uint32_t tund; /* 0x24728 - Transmit Undersize Frame Counter */
+ uint32_t tfrg; /* 0x2472c - Transmit Fragments Frame Counter */
+ uint32_t car1; /* 0x24730 - Carry Register One */
+ uint32_t car2; /* 0x24734 - Carry Register Two */
+ uint32_t cam1; /* 0x24738 - Carry Mask Register One */
+ uint32_t cam2; /* 0x2473c - Carry Mask Register Two */
+ uint8_t res22[192];
+ uint32_t iaddr0; /* 0x24800 - Indivdual address register 0 */
+ uint32_t iaddr1; /* 0x24804 - Indivdual address register 1 */
+ uint32_t iaddr2; /* 0x24808 - Indivdual address register 2 */
+ uint32_t iaddr3; /* 0x2480c - Indivdual address register 3 */
+ uint32_t iaddr4; /* 0x24810 - Indivdual address register 4 */
+ uint32_t iaddr5; /* 0x24814 - Indivdual address register 5 */
+ uint32_t iaddr6; /* 0x24818 - Indivdual address register 6 */
+ uint32_t iaddr7; /* 0x2481c - Indivdual address register 7 */
+ uint8_t res23[96];
+ uint32_t gaddr0; /* 0x24880 - Global address register 0 */
+ uint32_t gaddr1; /* 0x24884 - Global address register 1 */
+ uint32_t gaddr2; /* 0x24888 - Global address register 2 */
+ uint32_t gaddr3; /* 0x2488c - Global address register 3 */
+ uint32_t gaddr4; /* 0x24890 - Global address register 4 */
+ uint32_t gaddr5; /* 0x24894 - Global address register 5 */
+ uint32_t gaddr6; /* 0x24898 - Global address register 6 */
+ uint32_t gaddr7; /* 0x2489c - Global address register 7 */
+ uint8_t res24[96];
+ uint32_t pmd0; /* 0x24900 - Pattern Match Data Register */
+ uint8_t res25[4];
+ uint32_t pmask0; /* 0x24908 - Pattern Mask Register */
+ uint8_t res26[4];
+ uint32_t pcntrl0; /* 0x24910 - Pattern Match Control Register */
+ uint8_t res27[4];
+ uint32_t pattrb0; /* 0x24918 - Pattern Match Attributes Register */
+ uint32_t pattrbeli0; /* 0x2491c - Pattern Match Attributes Extract Length and Extract Index Register */
+ uint32_t pmd1; /* 0x24920 - Pattern Match Data Register */
+ uint8_t res28[4];
+ uint32_t pmask1; /* 0x24928 - Pattern Mask Register */
+ uint8_t res29[4];
+ uint32_t pcntrl1; /* 0x24930 - Pattern Match Control Register */
+ uint8_t res30[4];
+ uint32_t pattrb1; /* 0x24938 - Pattern Match Attributes Register */
+ uint32_t pattrbeli1; /* 0x2493c - Pattern Match Attributes Extract Length and Extract Index Register */
+ uint32_t pmd2; /* 0x24940 - Pattern Match Data Register */
+ uint8_t res31[4];
+ uint32_t pmask2; /* 0x24948 - Pattern Mask Register */
+ uint8_t res32[4];
+ uint32_t pcntrl2; /* 0x24950 - Pattern Match Control Register */
+ uint8_t res33[4];
+ uint32_t pattrb2; /* 0x24958 - Pattern Match Attributes Register */
+ uint32_t pattrbeli2; /* 0x2495c - Pattern Match Attributes Extract Length and Extract Index Register */
+ uint32_t pmd3; /* 0x24960 - Pattern Match Data Register */
+ uint8_t res34[4];
+ uint32_t pmask3; /* 0x24968 - Pattern Mask Register */
+ uint8_t res35[4];
+ uint32_t pcntrl3; /* 0x24970 - Pattern Match Control Register */
+ uint8_t res36[4];
+ uint32_t pattrb3; /* 0x24978 - Pattern Match Attributes Register */
+ uint32_t pattrbeli3; /* 0x2497c - Pattern Match Attributes Extract Length and Extract Index Register */
+ uint32_t pmd4; /* 0x24980 - Pattern Match Data Register */
+ uint8_t res37[4];
+ uint32_t pmask4; /* 0x24988 - Pattern Mask Register */
+ uint8_t res38[4];
+ uint32_t pcntrl4; /* 0x24990 - Pattern Match Control Register */
+ uint8_t res39[4];
+ uint32_t pattrb4; /* 0x24998 - Pattern Match Attributes Register */
+ uint32_t pattrbeli4; /* 0x2499c - Pattern Match Attributes Extract Length and Extract Index Register */
+ uint32_t pmd5; /* 0x249a0 - Pattern Match Data Register */
+ uint8_t res40[4];
+ uint32_t pmask5; /* 0x249a8 - Pattern Mask Register */
+ uint8_t res41[4];
+ uint32_t pcntrl5; /* 0x249b0 - Pattern Match Control Register */
+ uint8_t res42[4];
+ uint32_t pattrb5; /* 0x249b8 - Pattern Match Attributes Register */
+ uint32_t pattrbeli5; /* 0x249bc - Pattern Match Attributes Extract Length and Extract Index Register */
+ uint32_t pmd6; /* 0x249c0 - Pattern Match Data Register */
+ uint8_t res43[4];
+ uint32_t pmask6; /* 0x249c8 - Pattern Mask Register */
+ uint8_t res44[4];
+ uint32_t pcntrl6; /* 0x249d0 - Pattern Match Control Register */
+ uint8_t res45[4];
+ uint32_t pattrb6; /* 0x249d8 - Pattern Match Attributes Register */
+ uint32_t pattrbeli6; /* 0x249dc - Pattern Match Attributes Extract Length and Extract Index Register */
+ uint32_t pmd7; /* 0x249e0 - Pattern Match Data Register */
+ uint8_t res46[4];
+ uint32_t pmask7; /* 0x249e8 - Pattern Mask Register */
+ uint8_t res47[4];
+ uint32_t pcntrl7; /* 0x249f0 - Pattern Match Control Register */
+ uint8_t res48[4];
+ uint32_t pattrb7; /* 0x249f8 - Pattern Match Attributes Register */
+ uint32_t pattrbeli7; /* 0x249fc - Pattern Match Attributes Extract Length and Extract Index Register */
+ uint32_t pmd8; /* 0x24a00 - Pattern Match Data Register */
+ uint8_t res49[4];
+ uint32_t pmask8; /* 0x24a08 - Pattern Mask Register */
+ uint8_t res50[4];
+ uint32_t pcntrl8; /* 0x24a10 - Pattern Match Control Register */
+ uint8_t res51[4];
+ uint32_t pattrb8; /* 0x24a18 - Pattern Match Attributes Register */
+ uint32_t pattrbeli8; /* 0x24a1c - Pattern Match Attributes Extract Length and Extract Index Register */
+ uint32_t pmd9; /* 0x24a20 - Pattern Match Data Register */
+ uint8_t res52[4];
+ uint32_t pmask9; /* 0x24a28 - Pattern Mask Register */
+ uint8_t res53[4];
+ uint32_t pcntrl9; /* 0x24a30 - Pattern Match Control Register */
+ uint8_t res54[4];
+ uint32_t pattrb9; /* 0x24a38 - Pattern Match Attributes Register */
+ uint32_t pattrbeli9; /* 0x24a3c - Pattern Match Attributes Extract Length and Extract Index Register */
+ uint32_t pmd10; /* 0x24a40 - Pattern Match Data Register */
+ uint8_t res55[4];
+ uint32_t pmask10; /* 0x24a48 - Pattern Mask Register */
+ uint8_t res56[4];
+ uint32_t pcntrl10; /* 0x24a50 - Pattern Match Control Register */
+ uint8_t res57[4];
+ uint32_t pattrb10; /* 0x24a58 - Pattern Match Attributes Register */
+ uint32_t pattrbeli10; /* 0x24a5c - Pattern Match Attributes Extract Length and Extract Index Register */
+ uint32_t pmd11; /* 0x24a60 - Pattern Match Data Register */
+ uint8_t res58[4];
+ uint32_t pmask11; /* 0x24a68 - Pattern Mask Register */
+ uint8_t res59[4];
+ uint32_t pcntrl11; /* 0x24a70 - Pattern Match Control Register */
+ uint8_t res60[4];
+ uint32_t pattrb11; /* 0x24a78 - Pattern Match Attributes Register */
+ uint32_t pattrbeli11; /* 0x24a7c - Pattern Match Attributes Extract Length and Extract Index Register */
+ uint32_t pmd12; /* 0x24a80 - Pattern Match Data Register */
+ uint8_t res61[4];
+ uint32_t pmask12; /* 0x24a88 - Pattern Mask Register */
+ uint8_t res62[4];
+ uint32_t pcntrl12; /* 0x24a90 - Pattern Match Control Register */
+ uint8_t res63[4];
+ uint32_t pattrb12; /* 0x24a98 - Pattern Match Attributes Register */
+ uint32_t pattrbeli12; /* 0x24a9c - Pattern Match Attributes Extract Length and Extract Index Register */
+ uint32_t pmd13; /* 0x24aa0 - Pattern Match Data Register */
+ uint8_t res64[4];
+ uint32_t pmask13; /* 0x24aa8 - Pattern Mask Register */
+ uint8_t res65[4];
+ uint32_t pcntrl13; /* 0x24ab0 - Pattern Match Control Register */
+ uint8_t res66[4];
+ uint32_t pattrb13; /* 0x24ab8 - Pattern Match Attributes Register */
+ uint32_t pattrbeli13; /* 0x24abc - Pattern Match Attributes Extract Length and Extract Index Register */
+ uint32_t pmd14; /* 0x24ac0 - Pattern Match Data Register */
+ uint8_t res67[4];
+ uint32_t pmask14; /* 0x24ac8 - Pattern Mask Register */
+ uint8_t res68[4];
+ uint32_t pcntrl14; /* 0x24ad0 - Pattern Match Control Register */
+ uint8_t res69[4];
+ uint32_t pattrb14; /* 0x24ad8 - Pattern Match Attributes Register */
+ uint32_t pattrbeli14; /* 0x24adc - Pattern Match Attributes Extract Length and Extract Index Register */
+ uint32_t pmd15; /* 0x24ae0 - Pattern Match Data Register */
+ uint8_t res70[4];
+ uint32_t pmask15; /* 0x24ae8 - Pattern Mask Register */
+ uint8_t res71[4];
+ uint32_t pcntrl15; /* 0x24af0 - Pattern Match Control Register */
+ uint8_t res72[4];
+ uint32_t pattrb15; /* 0x24af8 - Pattern Match Attributes Register */
+ uint32_t pattrbeli15; /* 0x24afc - Pattern Match Attributes Extract Length and Extract Index Register */
+ uint8_t res73[248];
+ uint32_t attr; /* 0x24bf8 - Attributes Register */
+ uint32_t attreli; /* 0x24bfc - Attributes Extract Length and Extract Index Register */
+ uint8_t res74[1024]; /* 0x24c00-0x25000 TSEC1 Future Expansion Space Registers */
+} ccsr_tsec_t;
+
+/* FEC Registers (0x2_6000-0x2_7000) */
+typedef struct ccsr_fec {
+ uint8_t res1[16];
+ uint32_t ievent; /* 0x26010 - Interrupt Event Register */
+ uint32_t imask; /* 0x26014 - Interrupt Mask Register */
+ uint32_t edis; /* 0x26018 - Error Disabled Register */
+ uint8_t res2[8];
+ uint32_t minflr; /* 0x26024 - Minimum Frame Length Register */
+ uint32_t ptv; /* 0x26028 - Pause Time Value Register */
+ uint32_t dmactrl; /* 0x2602c - DMA Control Register */
+ uint8_t res3[28];
+ uint32_t fifo_pause_ctrl; /* 0x2604c - FIFO pause control register */
+ uint8_t res4[60];
+ uint32_t fifo_tx_thr; /* 0x2608c - FIFO transmit threshold register */
+ uint8_t res5[8];
+ uint32_t fifo_tx_starve; /* 0x26098 - FIFO transmit starve register */
+ uint32_t fifo_tx_starve_shutoff; /* 0x2609c - FIFO transmit starve shutoff register */
+ uint8_t res6[96];
+ uint32_t tctrl; /* 0x26100 - Transmit Control Register */
+ uint32_t tstat; /* 0x26104 - Transmit Status Register */
+ uint8_t res7[4];
+ uint32_t tbdlen; /* 0x2610c - Transmit Buffer Descriptor Data Length Register */
+ uint8_t res8[20];
+ uint32_t ctbptr; /* 0x26124 - Current Transmit Buffer Descriptor Pointer Register */
+ uint8_t res9[92];
+ uint32_t tbptr; /* 0x26184 - Transmit Buffer Descriptor Pointer Register */
+ uint8_t res10[124];
+ uint32_t tbase; /* 0x26204 - Transmit Descriptor Base Address Register */
+ uint8_t res11[168];
+ uint32_t ostbd; /* 0x262b0 - Out-of-Sequence Transmit Buffer Descriptor Register */
+ uint32_t ostbdp; /* 0x262b4 - Out-of-Sequence Transmit Data Buffer Pointer Register */
+ uint8_t res12[72];
+ uint32_t rctrl; /* 0x26300 - Receive Control Register */
+ uint32_t rstat; /* 0x26304 - Receive Status Register */
+ uint8_t res13[4];
+ uint32_t rbdlen; /* 0x2630c - RxBD Data Length Register */
+ uint8_t res14[20];
+ uint32_t crbptr; /* 0x26324 - Current Receive Buffer Descriptor Pointer */
+ uint8_t res15[24];
+ uint32_t mrblr; /* 0x26340 - Maximum Receive Buffer Length Register */
+ uint8_t res16[64];
+ uint32_t rbptr; /* 0x26384 - Receive Buffer Descriptor Pointer */
+ uint8_t res17[124];
+ uint32_t rbase; /* 0x26404 - Receive Descriptor Base Address */
+ uint8_t res18[248];
+ uint32_t maccfg1; /* 0x26500 - MAC Configuration 1 Register */
+ uint32_t maccfg2; /* 0x26504 - MAC Configuration 2 Register */
+ uint32_t ipgifg; /* 0x26508 - Inter Packet Gap/Inter Frame Gap Register */
+ uint32_t hafdup; /* 0x2650c - Half Duplex Register */
+ uint32_t maxfrm; /* 0x26510 - Maximum Frame Length Register */
+ uint8_t res19[40];
+ uint32_t ifstat; /* 0x2653c - Interface Status Register */
+ uint32_t macstnaddr1; /* 0x26540 - Station Address Part 1 Register */
+ uint32_t macstnaddr2; /* 0x26544 - Station Address Part 2 Register */
+ uint8_t res20[696]; /* 0x26548-0x267fc reserved */
+ uint32_t iaddr0; /* 0x26800 - Indivdual address register 0 */
+ uint32_t iaddr1; /* 0x26804 - Indivdual address register 1 */
+ uint32_t iaddr2; /* 0x26808 - Indivdual address register 2 */
+ uint32_t iaddr3; /* 0x2680c - Indivdual address register 3 */
+ uint32_t iaddr4; /* 0x26810 - Indivdual address register 4 */
+ uint32_t iaddr5; /* 0x26814 - Indivdual address register 5 */
+ uint32_t iaddr6; /* 0x26818 - Indivdual address register 6 */
+ uint32_t iaddr7; /* 0x2681c - Indivdual address register 7 */
+ uint8_t res21[96];
+ uint32_t gaddr0; /* 0x26880 - Global address register 0 */
+ uint32_t gaddr1; /* 0x26884 - Global address register 1 */
+ uint32_t gaddr2; /* 0x26888 - Global address register 2 */
+ uint32_t gaddr3; /* 0x2688c - Global address register 3 */
+ uint32_t gaddr4; /* 0x26890 - Global address register 4 */
+ uint32_t gaddr5; /* 0x26894 - Global address register 5 */
+ uint32_t gaddr6; /* 0x26898 - Global address register 6 */
+ uint32_t gaddr7; /* 0x2689c - Global address register 7 */
+ uint8_t res22[856]; /* 0x268a0-0x26bf4 reserved */
+ uint32_t attr; /* 0x26bf8 - Attributes Register */
+ uint32_t attreli; /* 0x26bfc - Attributes Extract Length and Extract Index Register */
+ uint8_t res23[1024]; /* 0x26c00-0x27000 reserved */
+} ccsr_fec_t;
+
+/* PIC Registers(0x2_7000-0x4_0000-0x8_0000) */
+typedef struct ccsr_pic {
+ uint8_t res0[102400]; /* 0x27000-0x40000 */
+ uint8_t res1[64];
+ uint32_t ipidr0; /* 0x40040 - Interprocessor Interrupt Dispatch Register 0 */
+ uint8_t res2[12];
+ uint32_t ipidr1; /* 0x40050 - Interprocessor Interrupt Dispatch Register 1 */
+ uint8_t res3[12];
+ uint32_t ipidr2; /* 0x40060 - Interprocessor Interrupt Dispatch Register 2 */
+ uint8_t res4[12];
+ uint32_t ipidr3; /* 0x40070 - Interprocessor Interrupt Dispatch Register 3 */
+ uint8_t res5[12];
+ uint32_t ctpr; /* 0x40080 - Current Task Priority Register */
+ uint8_t res6[12];
+ uint32_t whoami; /* 0x40090 - Who Am I Register */
+ uint8_t res7[12];
+ uint32_t iack; /* 0x400a0 - Interrupt Acknowledge Register */
+ uint8_t res8[12];
+ uint32_t eoi; /* 0x400b0 - End Of Interrupt Register */
+ uint8_t res9[3916];
+ uint32_t frr; /* 0x41000 - Feature Reporting Register */
+ uint8_t res10[28];
+ uint32_t gcr; /* 0x41020 - Global Configuration Register */
+ uint8_t res11[92];
+/* FIXME */ /* 0x41040-0x41070 - Vendor reserved */
+ uint32_t vir; /* 0x41080 - Vendor Identification Register */
+ uint8_t res12[12];
+ uint32_t pir; /* 0x41090 - Processor Initialization Register */
+ uint8_t res13[12];
+ uint32_t ipivpr0; /* 0x410a0 - IPI Vector/Priority Register 0 */
+ uint8_t res14[12];
+ uint32_t ipivpr1; /* 0x410b0 - IPI Vector/Priority Register 1 */
+ uint8_t res15[12];
+ uint32_t ipivpr2; /* 0x410c0 - IPI Vector/Priority Register 2 */
+ uint8_t res16[12];
+ uint32_t ipivpr3; /* 0x410d0 - IPI Vector/Priority Register 3 */
+ uint8_t res17[12];
+ uint32_t svr; /* 0x410e0 - Spurious Vector Register */
+ uint8_t res18[12];
+ uint32_t tfrr; /* 0x410f0 - Timer Frequency Reporting Register */
+ uint8_t res19[12];
+ uint32_t gtccr0; /* 0x41100 - Global Timer Current Count Register 0 */
+ uint8_t res20[12];
+ uint32_t gtbcr0; /* 0x41110 - Global Timer Base Count Register 0 */
+ uint8_t res21[12];
+ uint32_t gtvpr0; /* 0x41120 - Global Timer Vector/Priority Register 0 */
+ uint8_t res22[12];
+ uint32_t gtdr0; /* 0x41130 - Global Timer Destination Register 0 */
+ uint8_t res23[12];
+ uint32_t gtccr1; /* 0x41140 - Global Timer Current Count Register 1 */
+ uint8_t res24[12];
+ uint32_t gtbcr1; /* 0x41150 - Global Timer Base Count Register 1 */
+ uint8_t res25[12];
+ uint32_t gtvpr1; /* 0x41160 - Global Timer Vector/Priority Register 1 */
+ uint8_t res26[12];
+ uint32_t gtdr1; /* 0x41170 - Global Timer Destination Register 1 */
+ uint8_t res27[12];
+ uint32_t gtccr2; /* 0x41180 - Global Timer Current Count Register 2 */
+ uint8_t res28[12];
+ uint32_t gtbcr2; /* 0x41190 - Global Timer Base Count Register 2 */
+ uint8_t res29[12];
+ uint32_t gtvpr2; /* 0x411a0 - Global Timer Vector/Priority Register 2 */
+ uint8_t res30[12];
+ uint32_t gtdr2; /* 0x411b0 - Global Timer Destination Register 2 */
+ uint8_t res31[12];
+ uint32_t gtccr3; /* 0x411c0 - Global Timer Current Count Register 3 */
+ uint8_t res32[12];
+ uint32_t gtbcr3; /* 0x411d0 - Global Timer Base Count Register 3 */
+ uint8_t res33[12];
+ uint32_t gtvpr3; /* 0x411e0 - Global Timer Vector/Priority Register 3 */
+ uint8_t res34[12];
+ uint32_t gtdr3; /* 0x411f0 - Global Timer Destination Register 3 */
+ uint8_t res35[268];
+ uint32_t tcr; /* 0x41300 - Timer Control Register */
+ uint8_t res36[12];
+ uint32_t irqsr0; /* 0x41310 - IRQ_OUT Summary Register 0 */
+ uint8_t res37[12];
+ uint32_t irqsr1; /* 0x41320 - IRQ_OUT Summary Register 1 */
+ uint8_t res38[12];
+ uint32_t cisr0; /* 0x41330 - Critical Interrupt Summary Register 0 */
+ uint8_t res39[12];
+ uint32_t cisr1; /* 0x41340 - Critical Interrupt Summary Register 1 */
+ uint8_t res40[188];
+/* FIXME */ /* 0x41350-0x413c0 Performance monitors */
+ uint32_t msgr0; /* 0x41400 - Message Register 0 */
+ uint8_t res41[12];
+ uint32_t msgr1; /* 0x41410 - Message Register 1 */
+ uint8_t res42[12];
+ uint32_t msgr2; /* 0x41420 - Message Register 2 */
+ uint8_t res43[12];
+ uint32_t msgr3; /* 0x41430 - Message Register 3 */
+ uint8_t res44[204];
+ uint32_t mer; /* 0x41500 - Message Enable Register */
+ uint8_t res45[12];
+ uint32_t msr; /* 0x41510 - Message Status Register */
+ uint8_t res46[60140];
+ uint32_t eivpr0; /* 0x50000 - External Interrupt Vector/Priority Register 0 */
+ uint8_t res47[12];
+ uint32_t eidr0; /* 0x50010 - External Interrupt Destination Register 0 */
+ uint8_t res48[12];
+ uint32_t eivpr1; /* 0x50020 - External Interrupt Vector/Priority Register 1 */
+ uint8_t res49[12];
+ uint32_t eidr1; /* 0x50030 - External Interrupt Destination Register 1 */
+ uint8_t res50[12];
+ uint32_t eivpr2; /* 0x50040 - External Interrupt Vector/Priority Register 2 */
+ uint8_t res51[12];
+ uint32_t eidr2; /* 0x50050 - External Interrupt Destination Register 2 */
+ uint8_t res52[12];
+ uint32_t eivpr3; /* 0x50060 - External Interrupt Vector/Priority Register 3 */
+ uint8_t res53[12];
+ uint32_t eidr3; /* 0x50070 - External Interrupt Destination Register 3 */
+ uint8_t res54[12];
+ uint32_t eivpr4; /* 0x50080 - External Interrupt Vector/Priority Register 4 */
+ uint8_t res55[12];
+ uint32_t eidr4; /* 0x50090 - External Interrupt Destination Register 4 */
+ uint8_t res56[12];
+ uint32_t eivpr5; /* 0x500a0 - External Interrupt Vector/Priority Register 5 */
+ uint8_t res57[12];
+ uint32_t eidr5; /* 0x500b0 - External Interrupt Destination Register 5 */
+ uint8_t res58[12];
+ uint32_t eivpr6; /* 0x500c0 - External Interrupt Vector/Priority Register 6 */
+ uint8_t res59[12];
+ uint32_t eidr6; /* 0x500d0 - External Interrupt Destination Register 6 */
+ uint8_t res60[12];
+ uint32_t eivpr7; /* 0x500e0 - External Interrupt Vector/Priority Register 7 */
+ uint8_t res61[12];
+ uint32_t eidr7; /* 0x500f0 - External Interrupt Destination Register 7 */
+ uint8_t res62[12];
+ uint32_t eivpr8; /* 0x50100 - External Interrupt Vector/Priority Register 8 */
+ uint8_t res63[12];
+ uint32_t eidr8; /* 0x50110 - External Interrupt Destination Register 8 */
+ uint8_t res64[12];
+ uint32_t eivpr9; /* 0x50120 - External Interrupt Vector/Priority Register 9 */
+ uint8_t res65[12];
+ uint32_t eidr9; /* 0x50130 - External Interrupt Destination Register 9 */
+ uint8_t res66[12];
+ uint32_t eivpr10; /* 0x50140 - External Interrupt Vector/Priority Register 10 */
+ uint8_t res67[12];
+ uint32_t eidr10; /* 0x50150 - External Interrupt Destination Register 10 */
+ uint8_t res68[12];
+ uint32_t eivpr11; /* 0x50160 - External Interrupt Vector/Priority Register 11 */
+ uint8_t res69[12];
+ uint32_t eidr11; /* 0x50170 - External Interrupt Destination Register 11 */
+ uint8_t res70[140];
+ uint32_t iivpr0; /* 0x50200 - Internal Interrupt Vector/Priority Register 0 */
+ uint8_t res71[12];
+ uint32_t iidr0; /* 0x50210 - Internal Interrupt Destination Register 0 */
+ uint8_t res72[12];
+ uint32_t iivpr1; /* 0x50220 - Internal Interrupt Vector/Priority Register 1 */
+ uint8_t res73[12];
+ uint32_t iidr1; /* 0x50230 - Internal Interrupt Destination Register 1 */
+ uint8_t res74[12];
+ uint32_t iivpr2; /* 0x50240 - Internal Interrupt Vector/Priority Register 2 */
+ uint8_t res75[12];
+ uint32_t iidr2; /* 0x50250 - Internal Interrupt Destination Register 2 */
+ uint8_t res76[12];
+ uint32_t iivpr3; /* 0x50260 - Internal Interrupt Vector/Priority Register 3 */
+ uint8_t res77[12];
+ uint32_t iidr3; /* 0x50270 - Internal Interrupt Destination Register 3 */
+ uint8_t res78[12];
+ uint32_t iivpr4; /* 0x50280 - Internal Interrupt Vector/Priority Register 4 */
+ uint8_t res79[12];
+ uint32_t iidr4; /* 0x50290 - Internal Interrupt Destination Register 4 */
+ uint8_t res80[12];
+ uint32_t iivpr5; /* 0x502a0 - Internal Interrupt Vector/Priority Register 5 */
+ uint8_t res81[12];
+ uint32_t iidr5; /* 0x502b0 - Internal Interrupt Destination Register 5 */
+ uint8_t res82[12];
+ uint32_t iivpr6; /* 0x502c0 - Internal Interrupt Vector/Priority Register 6 */
+ uint8_t res83[12];
+ uint32_t iidr6; /* 0x502d0 - Internal Interrupt Destination Register 6 */
+ uint8_t res84[12];
+ uint32_t iivpr7; /* 0x502e0 - Internal Interrupt Vector/Priority Register 7 */
+ uint8_t res85[12];
+ uint32_t iidr7; /* 0x502f0 - Internal Interrupt Destination Register 7 */
+ uint8_t res86[12];
+ uint32_t iivpr8; /* 0x50300 - Internal Interrupt Vector/Priority Register 8 */
+ uint8_t res87[12];
+ uint32_t iidr8; /* 0x50310 - Internal Interrupt Destination Register 8 */
+ uint8_t res88[12];
+ uint32_t iivpr9; /* 0x50320 - Internal Interrupt Vector/Priority Register 9 */
+ uint8_t res89[12];
+ uint32_t iidr9; /* 0x50330 - Internal Interrupt Destination Register 9 */
+ uint8_t res90[12];
+ uint32_t iivpr10; /* 0x50340 - Internal Interrupt Vector/Priority Register 10 */
+ uint8_t res91[12];
+ uint32_t iidr10; /* 0x50350 - Internal Interrupt Destination Register 10 */
+ uint8_t res92[12];
+ uint32_t iivpr11; /* 0x50360 - Internal Interrupt Vector/Priority Register 11 */
+ uint8_t res93[12];
+ uint32_t iidr11; /* 0x50370 - Internal Interrupt Destination Register 11 */
+ uint8_t res94[12];
+ uint32_t iivpr12; /* 0x50380 - Internal Interrupt Vector/Priority Register 12 */
+ uint8_t res95[12];
+ uint32_t iidr12; /* 0x50390 - Internal Interrupt Destination Register 12 */
+ uint8_t res96[12];
+ uint32_t iivpr13; /* 0x503a0 - Internal Interrupt Vector/Priority Register 13 */
+ uint8_t res97[12];
+ uint32_t iidr13; /* 0x503b0 - Internal Interrupt Destination Register 13 */
+ uint8_t res98[12];
+ uint32_t iivpr14; /* 0x503c0 - Internal Interrupt Vector/Priority Register 14 */
+ uint8_t res99[12];
+ uint32_t iidr14; /* 0x503d0 - Internal Interrupt Destination Register 14 */
+ uint8_t res100[12];
+ uint32_t iivpr15; /* 0x503e0 - Internal Interrupt Vector/Priority Register 15 */
+ uint8_t res101[12];
+ uint32_t iidr15; /* 0x503f0 - Internal Interrupt Destination Register 15 */
+ uint8_t res102[12];
+ uint32_t iivpr16; /* 0x50400 - Internal Interrupt Vector/Priority Register 16 */
+ uint8_t res103[12];
+ uint32_t iidr16; /* 0x50410 - Internal Interrupt Destination Register 16 */
+ uint8_t res104[12];
+ uint32_t iivpr17; /* 0x50420 - Internal Interrupt Vector/Priority Register 17 */
+ uint8_t res105[12];
+ uint32_t iidr17; /* 0x50430 - Internal Interrupt Destination Register 17 */
+ uint8_t res106[12];
+ uint32_t iivpr18; /* 0x50440 - Internal Interrupt Vector/Priority Register 18 */
+ uint8_t res107[12];
+ uint32_t iidr18; /* 0x50450 - Internal Interrupt Destination Register 18 */
+ uint8_t res108[12];
+ uint32_t iivpr19; /* 0x50460 - Internal Interrupt Vector/Priority Register 19 */
+ uint8_t res109[12];
+ uint32_t iidr19; /* 0x50470 - Internal Interrupt Destination Register 19 */
+ uint8_t res110[12];
+ uint32_t iivpr20; /* 0x50480 - Internal Interrupt Vector/Priority Register 20 */
+ uint8_t res111[12];
+ uint32_t iidr20; /* 0x50490 - Internal Interrupt Destination Register 20 */
+ uint8_t res112[12];
+ uint32_t iivpr21; /* 0x504a0 - Internal Interrupt Vector/Priority Register 21 */
+ uint8_t res113[12];
+ uint32_t iidr21; /* 0x504b0 - Internal Interrupt Destination Register 21 */
+ uint8_t res114[12];
+ uint32_t iivpr22; /* 0x504c0 - Internal Interrupt Vector/Priority Register 22 */
+ uint8_t res115[12];
+ uint32_t iidr22; /* 0x504d0 - Internal Interrupt Destination Register 22 */
+ uint8_t res116[12];
+ uint32_t iivpr23; /* 0x504e0 - Internal Interrupt Vector/Priority Register 23 */
+ uint8_t res117[12];
+ uint32_t iidr23; /* 0x504f0 - Internal Interrupt Destination Register 23 */
+ uint8_t res118[12];
+ uint32_t iivpr24; /* 0x50500 - Internal Interrupt Vector/Priority Register 24 */
+ uint8_t res119[12];
+ uint32_t iidr24; /* 0x50510 - Internal Interrupt Destination Register 24 */
+ uint8_t res120[12];
+ uint32_t iivpr25; /* 0x50520 - Internal Interrupt Vector/Priority Register 25 */
+ uint8_t res121[12];
+ uint32_t iidr25; /* 0x50530 - Internal Interrupt Destination Register 25 */
+ uint8_t res122[12];
+ uint32_t iivpr26; /* 0x50540 - Internal Interrupt Vector/Priority Register 26 */
+ uint8_t res123[12];
+ uint32_t iidr26; /* 0x50550 - Internal Interrupt Destination Register 26 */
+ uint8_t res124[12];
+ uint32_t iivpr27; /* 0x50560 - Internal Interrupt Vector/Priority Register 27 */
+ uint8_t res125[12];
+ uint32_t iidr27; /* 0x50570 - Internal Interrupt Destination Register 27 */
+ uint8_t res126[12];
+ uint32_t iivpr28; /* 0x50580 - Internal Interrupt Vector/Priority Register 28 */
+ uint8_t res127[12];
+ uint32_t iidr28; /* 0x50590 - Internal Interrupt Destination Register 28 */
+ uint8_t res128[12];
+ uint32_t iivpr29; /* 0x505a0 - Internal Interrupt Vector/Priority Register 29 */
+ uint8_t res129[12];
+ uint32_t iidr29; /* 0x505b0 - Internal Interrupt Destination Register 29 */
+ uint8_t res130[12];
+ uint32_t iivpr30; /* 0x505c0 - Internal Interrupt Vector/Priority Register 30 */
+ uint8_t res131[12];
+ uint32_t iidr30; /* 0x505d0 - Internal Interrupt Destination Register 30 */
+ uint8_t res132[12];
+ uint32_t iivpr31; /* 0x505e0 - Internal Interrupt Vector/Priority Register 31 */
+ uint8_t res133[12];
+ uint32_t iidr31; /* 0x505f0 - Internal Interrupt Destination Register 31 */
+ uint8_t res134[4108];
+ uint32_t mivpr0; /* 0x51600 - Messaging Interrupt Vector/Priority Register 0 */
+ uint8_t res135[12];
+ uint32_t midr0; /* 0x51610 - Messaging Interrupt Destination Register 0 */
+ uint8_t res136[12];
+ uint32_t mivpr1; /* 0x51620 - Messaging Interrupt Vector/Priority Register 1 */
+ uint8_t res137[12];
+ uint32_t midr1; /* 0x51630 - Messaging Interrupt Destination Register 1 */
+ uint8_t res138[12];
+ uint32_t mivpr2; /* 0x51640 - Messaging Interrupt Vector/Priority Register 2 */
+ uint8_t res139[12];
+ uint32_t midr2; /* 0x51650 - Messaging Interrupt Destination Register 2 */
+ uint8_t res140[12];
+ uint32_t mivpr3; /* 0x51660 - Messaging Interrupt Vector/Priority Register 3 */
+ uint8_t res141[12];
+ uint32_t midr3; /* 0x51670 - Messaging Interrupt Destination Register 3 */
+ uint8_t res142[59852];
+ uint32_t ipi0dr0; /* 0x60040 - Processor 0 Interprocessor Interrupt Dispatch Register 0 */
+ uint8_t res143[12];
+ uint32_t ipi0dr1; /* 0x60050 - Processor 0 Interprocessor Interrupt Dispatch Register 1 */
+ uint8_t res144[12];
+ uint32_t ipi0dr2; /* 0x60060 - Processor 0 Interprocessor Interrupt Dispatch Register 2 */
+ uint8_t res145[12];
+ uint32_t ipi0dr3; /* 0x60070 - Processor 0 Interprocessor Interrupt Dispatch Register 3 */
+ uint8_t res146[12];
+ uint32_t ctpr0; /* 0x60080 - Current Task Priority Register for Processor 0 */
+ uint8_t res147[12];
+ uint32_t whoami0; /* 0x60090 - Who Am I Register for Processor 0 */
+ uint8_t res148[12];
+ uint32_t iack0; /* 0x600a0 - Interrupt Acknowledge Register for Processor 0 */
+ uint8_t res149[12];
+ uint32_t eoi0; /* 0x600b0 - End Of Interrupt Register for Processor 0 */
+ uint8_t res150[130892];
+} ccsr_pic_t;
+
+/* CPM Block(0x8_0000-0xc_0000) */
+#ifdef CONFIG_MPC8540
+typedef struct ccsr_cpm2 {
+ uint8_t res[262144];
+} ccsr_cpm2_t;
+#else
+#include <asm/immap_cpm2.h>
+typedef cpm2_map_t ccsr_cpm2_t;
+#endif
+
+/* RapidIO Registers(0xc_0000-0xe_0000) */
+typedef struct ccsr_rio {
+ uint32_t didcar; /* 0xc0000 - Device Identity Capability Register */
+ uint32_t dicar; /* 0xc0004 - Device Information Capability Register */
+ uint32_t aidcar; /* 0xc0008 - Assembly Identity Capability Register */
+ uint32_t aicar; /* 0xc000c - Assembly Information Capability Register */
+ uint32_t pefcar; /* 0xc0010 - Processing Element Features Capability Register */
+ uint32_t spicar; /* 0xc0014 - Switch Port Information Capability Register */
+ uint32_t socar; /* 0xc0018 - Source Operations Capability Register */
+ uint32_t docar; /* 0xc001c - Destination Operations Capability Register */
+ uint8_t res1[32];
+ uint32_t msr; /* 0xc0040 - Mailbox Command And Status Register */
+ uint32_t pwdcsr; /* 0xc0044 - Port-Write and Doorbell Command And Status Register */
+ uint8_t res2[4];
+ uint32_t pellccsr; /* 0xc004c - Processing Element Logic Layer Control Command and Status Register */
+ uint8_t res3[12];
+ uint32_t lcsbacsr; /* 0xc005c - Local Configuration Space Base Address Command and Status Register */
+ uint32_t bdidcsr; /* 0xc0060 - Base Device ID Command and Status Register */
+ uint8_t res4[4];
+ uint32_t hbdidlcsr; /* 0xc0068 - Host Base Device ID Lock Command and Status Register */
+ uint32_t ctcsr; /* 0xc006c - Component Tag Command and Status Register */
+ uint8_t res5[144];
+ uint32_t pmbh0csr; /* 0xc0100 - 8/16 LP-LVDS Port Maintenance Block Header 0 Command and Status Register */
+ uint8_t res6[28];
+ uint32_t pltoccsr; /* 0xc0120 - Port Link Time-out Control Command and Status Register */
+ uint32_t prtoccsr; /* 0xc0124 - Port Response Time-out Control Command and Status Register */
+ uint8_t res7[20];
+ uint32_t pgccsr; /* 0xc013c - Port General Command and Status Register */
+ uint32_t plmreqcsr; /* 0xc0140 - Port Link Maintenance Request Command and Status Register */
+ uint32_t plmrespcsr; /* 0xc0144 - Port Link Maintenance Response Command and Status Register */
+ uint32_t plascsr; /* 0xc0148 - Port Local Ackid Status Command and Status Register */
+ uint8_t res8[12];
+ uint32_t pescsr; /* 0xc0158 - Port Error and Status Command and Status Register */
+ uint32_t pccsr; /* 0xc015c - Port Control Command and Status Register */
+ uint8_t res9[65184];
+ uint32_t cr; /* 0xd0000 - Port Control Command and Status Register */
+ uint8_t res10[12];
+ uint32_t pcr; /* 0xd0010 - Port Configuration Register */
+ uint32_t peir; /* 0xd0014 - Port Error Injection Register */
+ uint8_t res11[3048];
+ uint32_t rowtar0; /* 0xd0c00 - RapidIO Outbound Window Translation Address Register 0 */
+ uint8_t res12[12];
+ uint32_t rowar0; /* 0xd0c10 - RapidIO Outbound Attributes Register 0 */
+ uint8_t res13[12];
+ uint32_t rowtar1; /* 0xd0c20 - RapidIO Outbound Window Translation Address Register 1 */
+ uint8_t res14[4];
+ uint32_t rowbar1; /* 0xd0c28 - RapidIO Outbound Window Base Address Register 1 */
+ uint8_t res15[4];
+ uint32_t rowar1; /* 0xd0c30 - RapidIO Outbound Attributes Register 1 */
+ uint8_t res16[12];
+ uint32_t rowtar2; /* 0xd0c40 - RapidIO Outbound Window Translation Address Register 2 */
+ uint8_t res17[4];
+ uint32_t rowbar2; /* 0xd0c48 - RapidIO Outbound Window Base Address Register 2 */
+ uint8_t res18[4];
+ uint32_t rowar2; /* 0xd0c50 - RapidIO Outbound Attributes Register 2 */
+ uint8_t res19[12];
+ uint32_t rowtar3; /* 0xd0c60 - RapidIO Outbound Window Translation Address Register 3 */
+ uint8_t res20[4];
+ uint32_t rowbar3; /* 0xd0c68 - RapidIO Outbound Window Base Address Register 3 */
+ uint8_t res21[4];
+ uint32_t rowar3; /* 0xd0c70 - RapidIO Outbound Attributes Register 3 */
+ uint8_t res22[12];
+ uint32_t rowtar4; /* 0xd0c80 - RapidIO Outbound Window Translation Address Register 4 */
+ uint8_t res23[4];
+ uint32_t rowbar4; /* 0xd0c88 - RapidIO Outbound Window Base Address Register 4 */
+ uint8_t res24[4];
+ uint32_t rowar4; /* 0xd0c90 - RapidIO Outbound Attributes Register 4 */
+ uint8_t res25[12];
+ uint32_t rowtar5; /* 0xd0ca0 - RapidIO Outbound Window Translation Address Register 5 */
+ uint8_t res26[4];
+ uint32_t rowbar5; /* 0xd0ca8 - RapidIO Outbound Window Base Address Register 5 */
+ uint8_t res27[4];
+ uint32_t rowar5; /* 0xd0cb0 - RapidIO Outbound Attributes Register 5 */
+ uint8_t res28[12];
+ uint32_t rowtar6; /* 0xd0cc0 - RapidIO Outbound Window Translation Address Register 6 */
+ uint8_t res29[4];
+ uint32_t rowbar6; /* 0xd0cc8 - RapidIO Outbound Window Base Address Register 6 */
+ uint8_t res30[4];
+ uint32_t rowar6; /* 0xd0cd0 - RapidIO Outbound Attributes Register 6 */
+ uint8_t res31[12];
+ uint32_t rowtar7; /* 0xd0ce0 - RapidIO Outbound Window Translation Address Register 7 */
+ uint8_t res32[4];
+ uint32_t rowbar7; /* 0xd0ce8 - RapidIO Outbound Window Base Address Register 7 */
+ uint8_t res33[4];
+ uint32_t rowar7; /* 0xd0cf0 - RapidIO Outbound Attributes Register 7 */
+ uint8_t res34[12];
+ uint32_t rowtar8; /* 0xd0d00 - RapidIO Outbound Window Translation Address Register 8 */
+ uint8_t res35[4];
+ uint32_t rowbar8; /* 0xd0d08 - RapidIO Outbound Window Base Address Register 8 */
+ uint8_t res36[4];
+ uint32_t rowar8; /* 0xd0d10 - RapidIO Outbound Attributes Register 8 */
+ uint8_t res37[76];
+ uint32_t riwtar4; /* 0xd0d60 - RapidIO Inbound Window Translation Address Register 4 */
+ uint8_t res38[4];
+ uint32_t riwbar4; /* 0xd0d68 - RapidIO Inbound Window Base Address Register 4 */
+ uint8_t res39[4];
+ uint32_t riwar4; /* 0xd0d70 - RapidIO Inbound Attributes Register 4 */
+ uint8_t res40[12];
+ uint32_t riwtar3; /* 0xd0d80 - RapidIO Inbound Window Translation Address Register 3 */
+ uint8_t res41[4];
+ uint32_t riwbar3; /* 0xd0d88 - RapidIO Inbound Window Base Address Register 3 */
+ uint8_t res42[4];
+ uint32_t riwar3; /* 0xd0d90 - RapidIO Inbound Attributes Register 3 */
+ uint8_t res43[12];
+ uint32_t riwtar2; /* 0xd0da0 - RapidIO Inbound Window Translation Address Register 2 */
+ uint8_t res44[4];
+ uint32_t riwbar2; /* 0xd0da8 - RapidIO Inbound Window Base Address Register 2 */
+ uint8_t res45[4];
+ uint32_t riwar2; /* 0xd0db0 - RapidIO Inbound Attributes Register 2 */
+ uint8_t res46[12];
+ uint32_t riwtar1; /* 0xd0dc0 - RapidIO Inbound Window Translation Address Register 1 */
+ uint8_t res47[4];
+ uint32_t riwbar1; /* 0xd0dc8 - RapidIO Inbound Window Base Address Register 1 */
+ uint8_t res48[4];
+ uint32_t riwar1; /* 0xd0dd0 - RapidIO Inbound Attributes Register 1 */
+ uint8_t res49[12];
+ uint32_t riwtar0; /* 0xd0de0 - RapidIO Inbound Window Translation Address Register 0 */
+ uint8_t res50[12];
+ uint32_t riwar0; /* 0xd0df0 - RapidIO Inbound Attributes Register 0 */
+ uint8_t res51[12];
+ uint32_t pnfedr; /* 0xd0e00 - Port Notification/Fatal Error Detect Register */
+ uint32_t pnfedir; /* 0xd0e04 - Port Notification/Fatal Error Detect Register */
+ uint32_t pnfeier; /* 0xd0e08 - Port Notification/Fatal Error Interrupt Enable Register */
+ uint32_t pecr; /* 0xd0e0c - Port Error Control Register */
+ uint32_t pepcsr0; /* 0xd0e10 - Port Error Packet/Control Symbol Register 0 */
+ uint32_t pepr1; /* 0xd0e14 - Port Error Packet Register 1 */
+ uint32_t pepr2; /* 0xd0e18 - Port Error Packet Register 2 */
+ uint8_t res52[4];
+ uint32_t predr; /* 0xd0e20 - Port Recoverable Error Detect Register */
+ uint8_t res53[4];
+ uint32_t pertr; /* 0xd0e28 - Port Error Recovery Threshold Register */
+ uint32_t prtr; /* 0xd0e2c - Port Retry Threshold Register */
+ uint8_t res54[464];
+ uint32_t omr; /* 0xd1000 - Outbound Mode Register */
+ uint32_t osr; /* 0xd1004 - Outbound Status Register */
+ uint32_t eodqtpar; /* 0xd1008 - Extended Outbound Descriptor Queue Tail Pointer Address Register */
+ uint32_t odqtpar; /* 0xd100c - Outbound Descriptor Queue Tail Pointer Address Register */
+ uint32_t eosar; /* 0xd1010 - Extended Outbound Unit Source Address Register */
+ uint32_t osar; /* 0xd1014 - Outbound Unit Source Address Register */
+ uint32_t odpr; /* 0xd1018 - Outbound Destination Port Register */
+ uint32_t odatr; /* 0xd101c - Outbound Destination Attributes Register */
+ uint32_t odcr; /* 0xd1020 - Outbound Doubleword Count Register */
+ uint32_t eodqhpar; /* 0xd1024 - Extended Outbound Descriptor Queue Head Pointer Address Register */
+ uint32_t odqhpar; /* 0xd1028 - Outbound Descriptor Queue Head Pointer Address Register */
+ uint8_t res55[52];
+ uint32_t imr; /* 0xd1060 - Outbound Mode Register */
+ uint32_t isr; /* 0xd1064 - Inbound Status Register */
+ uint32_t eidqtpar; /* 0xd1068 - Extended Inbound Descriptor Queue Tail Pointer Address Register */
+ uint32_t idqtpar; /* 0xd106c - Inbound Descriptor Queue Tail Pointer Address Register */
+ uint32_t eifqhpar; /* 0xd1070 - Extended Inbound Frame Queue Head Pointer Address Register */
+ uint32_t ifqhpar; /* 0xd1074 - Inbound Frame Queue Head Pointer Address Register */
+ uint8_t res56[1000];
+ uint32_t dmr; /* 0xd1460 - Doorbell Mode Register */
+ uint32_t dsr; /* 0xd1464 - Doorbell Status Register */
+ uint32_t edqtpar; /* 0xd1468 - Extended Doorbell Queue Tail Pointer Address Register */
+ uint32_t dqtpar; /* 0xd146c - Doorbell Queue Tail Pointer Address Register */
+ uint32_t edqhpar; /* 0xd1470 - Extended Doorbell Queue Head Pointer Address Register */
+ uint32_t dqhpar; /* 0xd1474 - Doorbell Queue Head Pointer Address Register */
+ uint8_t res57[104];
+ uint32_t pwmr; /* 0xd14e0 - Port-Write Mode Register */
+ uint32_t pwsr; /* 0xd14e4 - Port-Write Status Register */
+ uint32_t epwqbar; /* 0xd14e8 - Extended Port-Write Queue Base Address Register */
+ uint32_t pwqbar; /* 0xd14ec - Port-Write Queue Base Address Register */
+ uint8_t res58[60176];
+} ccsr_rio_t;
+
+/* Global Utilities Register Block(0xe_0000-0xf_ffff) */
typedef struct ccsr_guts {
- uint porpllsr; /* 0x.0000 - POR PLL Ratio Status Register */
- uint porbmsr; /* 0x.0004 - POR Boot Mode Status Register */
- uint porimpscr; /* 0x.0008 - POR I/O Impedance Status and Control Register */
- uint pordevsr; /* 0x.000c - POR I/O Device Status Register */
- uint pordbgmsr; /* 0x.0010 - POR Debug Mode Status Register */
- char res1[12];
- uint gpporcr; /* 0x.0020 - General-Purpose POR Configuration Register */
- char res2[12];
- uint gpiocr; /* 0x.0030 - GPIO Control Register */
- char res3[12];
- uint gpoutdr; /* 0x.0040 - General-Purpose Output Data Register */
- char res4[12];
- uint gpindr; /* 0x.0050 - General-Purpose Input Data Register */
- char res5[12];
- uint pmuxcr; /* 0x.0060 - Alternate Function Signal Multiplex Control */
- char res6[12];
- uint devdisr; /* 0x.0070 - Device Disable Control */
- char res7[12];
- uint powmgtcsr; /* 0x.0080 - Power Management Status and Control Register */
- char res8[12];
- uint mcpsumr; /* 0x.0090 - Machine Check Summary Register */
- char res9[12];
- uint pvr; /* 0x.00a0 - Processor Version Register */
- uint svr; /* 0x.00a4 - System Version Register */
- char res10[3416];
- uint clkocr; /* 0x.0e00 - Clock Out Select Register */
- char res11[12];
- uint ddrdllcr; /* 0x.0e10 - DDR DLL Control Register */
- char res12[12];
- uint lbcdllcr; /* 0x.0e20 - LBC DLL Control Register */
- char res13[61916];
+ uint32_t porpllsr; /* 0xe0000 - POR PLL ratio status register */
+ uint32_t porbmsr; /* 0xe0004 - POR boot mode status register */
+ uint32_t porimpscr; /* 0xe0008 - POR I/O impedance status and control register */
+ uint32_t pordevsr; /* 0xe000c - POR I/O device status regsiter */
+ uint32_t pordbgmsr; /* 0xe0010 - POR debug mode status register */
+ uint8_t res1[12];
+ uint32_t gpporcr; /* 0xe0020 - General-purpose POR configuration register */
+ uint8_t res2[12];
+ uint32_t gpiocr; /* 0xe0030 - GPIO control register */
+ uint8_t res3[12];
+ uint32_t gpoutdr; /* 0xe0040 - General-purpose output data register */
+ uint8_t res4[12];
+ uint32_t gpindr; /* 0xe0050 - General-purpose input data register */
+ uint8_t res5[12];
+ uint32_t pmuxcr; /* 0xe0060 - Alternate function signal multiplex control */
+ uint8_t res6[12];
+ uint32_t devdisr; /* 0xe0070 - Device disable control */
+ uint8_t res7[12];
+ uint32_t powmgtcsr; /* 0xe0080 - Power management status and control register */
+ uint8_t res8[12];
+ uint32_t mcpsumr; /* 0xe0090 - Machine check summary register */
+ uint8_t res9[12];
+ uint32_t pvr; /* 0xe00a0 - Processor version register */
+ uint32_t svr; /* 0xe00a4 - System version register */
+ uint8_t res10[3416];
+ uint32_t clkocr; /* 0xe0e00 - Clock out select register */
+ uint8_t res11[12];
+ uint32_t ddrdllcr; /* 0xe0e10 - DDR DLL control register */
+ uint8_t res12[12];
+ uint32_t lbcdllcr; /* 0xe0e20 - LBC DLL control register */
+ uint8_t res13[61915];
+/* FIXME */ /* Performance monitor, Watchdog, Trace Buffers, Context ID, others */
} ccsr_guts_t;
+typedef struct ccsr {
+ ccsr_ccsr_t im_ccsr;
+ ccsr_law_t im_law;
+ ccsr_ecm_t im_ecm;
+ ccsr_ddr_t im_ddr;
+ ccsr_i2c_t im_i2c;
+ ccsr_duart_t im_duart;
+ ccsr_lbc_t im_lbc;
+ ccsr_pci_t im_pci;
+ ccsr_l2cache_t im_l2cache;
+ ccsr_dma_t im_dma;
+ ccsr_tsec_t im_tsec[2];
+ ccsr_fec_t im_fec;
+ ccsr_pic_t im_pic;
+ ccsr_cpm2_t im_cpm;
+ ccsr_rio_t im_rio;
+ ccsr_guts_t im_guts;
+} ccsr_t;
+
+extern volatile ccsr_t *immap;
+
#endif /* __ASM_IMMAP_85XX_H__ */
#endif /* __KERNEL__ */
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] ppc32: Register definition for MPC85xx
2005-07-19 10:01 [PATCH] ppc32: Register definition for MPC85xx Clemens Koller
@ 2005-07-19 12:27 ` Kumar Gala
2005-07-19 13:40 ` Clemens Koller
0 siblings, 1 reply; 3+ messages in thread
From: Kumar Gala @ 2005-07-19 12:27 UTC (permalink / raw)
To: Clemens Koller; +Cc: ppcembed Mailing List
Clemens,
This isn't going to get into the kernel tree. I'm against putting
full register definitions in like this because they are too difficult
to maintain properly. We currently have some 14 different 85xx
devices today and the number is only going to grow larger.
If and when you need something specific in the immap_85xx please
provide it as a patch along with the driver that you want in. For
certain devices like PCI, LBC, etc I've got no issue adding info into
immap_85xx. However, for devices like DUART, I2C, TSEC, etc I'm
completely against the idea of having their register definitions in
immap_85xx.
- kumar
On Jul 19, 2005, at 5:01 AM, Clemens Koller wrote:
> Hello!
>
> I suggest to put the register definitions into the Kernel _before_
> more driver writers start using their own / different maps.
>
> Greets,
>
> Clemens Koller
>
> ---
> Almost complete and verified register map for the MPC85xx.
> Based on sources from Jason McMullan and the MPC8540 Reference Manual.
>
> Signed-off-by: Clemens Koller <clemens.koller@anagramm.de>
>
>
> <immap_85xx-register-update.patch>
> <ATT1082226.txt>
>
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] ppc32: Register definition for MPC85xx
2005-07-19 12:27 ` Kumar Gala
@ 2005-07-19 13:40 ` Clemens Koller
0 siblings, 0 replies; 3+ messages in thread
From: Clemens Koller @ 2005-07-19 13:40 UTC (permalink / raw)
To: Kumar Gala; +Cc: ppcembed Mailing List
Hello, Kumar,
> This isn't going to get into the kernel tree. I'm against putting full
> register definitions in like this because they are too difficult to
> maintain properly. We currently have some 14 different 85xx devices
> today and the number is only going to grow larger.
Okay, no problem.
I experienced that it is definitely difficult to maintain if there are lot of
changes/patches which can corrupt the whole set if only one register
is misaligned. Once a set it's completed for a device, it could be nailed down
to a specific device by specifying a filename like immap_mpc8540.h
And... it doesn't necessarily stay within the kernel tree... maybe Freescale
can put out those files on their website for reference?
Best greets,
Clemens Koller
Kumar Gala wrote:
> Clemens,
>
> This isn't going to get into the kernel tree. I'm against putting full
> register definitions in like this because they are too difficult to
> maintain properly. We currently have some 14 different 85xx devices
> today and the number is only going to grow larger.
>
> If and when you need something specific in the immap_85xx please
> provide it as a patch along with the driver that you want in. For
> certain devices like PCI, LBC, etc I've got no issue adding info into
> immap_85xx. However, for devices like DUART, I2C, TSEC, etc I'm
> completely against the idea of having their register definitions in
> immap_85xx.
>
> - kumar
>
> On Jul 19, 2005, at 5:01 AM, Clemens Koller wrote:
>
>> Hello!
>>
>> I suggest to put the register definitions into the Kernel _before_
>> more driver writers start using their own / different maps.
>>
>> Greets,
>>
>> Clemens Koller
>>
>> ---
>> Almost complete and verified register map for the MPC85xx.
>> Based on sources from Jason McMullan and the MPC8540 Reference Manual.
>>
>> Signed-off-by: Clemens Koller <clemens.koller@anagramm.de>
>>
>>
>> <immap_85xx-register-update.patch>
>> <ATT1082226.txt>
>>
>
>
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2005-07-19 13:40 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-07-19 10:01 [PATCH] ppc32: Register definition for MPC85xx Clemens Koller
2005-07-19 12:27 ` Kumar Gala
2005-07-19 13:40 ` Clemens Koller
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).