]> git.sur5r.net Git - u-boot/blob - include/mpc8220.h
New board directory and config for the benq delta board (copied from
[u-boot] / include / mpc8220.h
1 /*
2  * include/mpc8220.h
3  *
4  * Prototypes, etc. for the Motorola MPC8220
5  * embedded cpu chips
6  *
7  * 2004 (c) Freescale, Inc.
8  * Author: TsiChung Liew <Tsi-Chung.Liew@freescale.com>
9  *
10  * See file CREDITS for list of people who contributed to this
11  * project.
12  *
13  * This program is free software; you can redistribute it and/or
14  * modify it under the terms of the GNU General Public License as
15  * published by the Free Software Foundation; either version 2 of
16  * the License, or (at your option) any later version.
17  *
18  * This program is distributed in the hope that it will be useful,
19  * but WITHOUT ANY WARRANTY; without even the implied warranty of
20  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
21  * GNU General Public License for more details.
22  *
23  * You should have received a copy of the GNU General Public License
24  * along with this program; if not, write to the Free Software
25  * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
26  * MA 02111-1307 USA
27  */
28 #ifndef __MPC8220_H__
29 #define __MPC8220_H__
30
31 /* Processor name */
32 #if defined(CONFIG_MPC8220)
33 #define CPU_ID_STR          "MPC8220"
34 #endif
35
36 /* Exception offsets (PowerPC standard) */
37 #define EXC_OFF_SYS_RESET   0x0100
38
39 /* Internal memory map */
40 /* MPC8220 Internal Register MMAP */
41 #define MMAP_MBAR       (CFG_MBAR + 0x00000000) /* chip selects              */
42 #define MMAP_MEMCTL     (CFG_MBAR + 0x00000100) /* sdram controller          */
43 #define MMAP_XLBARB     (CFG_MBAR + 0x00000200) /* xlb arbitration control   */
44 #define MMAP_CDM        (CFG_MBAR + 0x00000300) /* clock distribution module */
45 #define MMAP_VDOPLL     (CFG_MBAR + 0x00000400) /* video PLL                 */
46 #define MMAP_FB         (CFG_MBAR + 0x00000500) /* flex bus controller       */
47 #define MMAP_PCFG       (CFG_MBAR + 0x00000600) /* port config               */
48 #define MMAP_ICTL       (CFG_MBAR + 0x00000700) /* interrupt controller      */
49 #define MMAP_GPTMR      (CFG_MBAR + 0x00000800) /* general purpose timers    */
50 #define MMAP_SLTMR      (CFG_MBAR + 0x00000900) /* slice timers              */
51 #define MMAP_GPIO       (CFG_MBAR + 0x00000A00) /* gpio module               */
52 #define MMAP_XCPCI      (CFG_MBAR + 0x00000B00) /* pci controller            */
53 #define MMAP_PCIARB     (CFG_MBAR + 0x00000C00) /* pci arbiter               */
54 #define MMAP_EXTDMA1    (CFG_MBAR + 0x00000D00) /* external dma1             */
55 #define MMAP_EXTDMA2    (CFG_MBAR + 0x00000E00) /* external dma1             */
56 #define MMAP_USBH       (CFG_MBAR + 0x00001000) /* usb host                  */
57 #define MMAP_CMTMR      (CFG_MBAR + 0x00007f00) /* comm timers               */
58 #define MMAP_DMA        (CFG_MBAR + 0x00008000) /* dma                       */
59 #define MMAP_USBD       (CFG_MBAR + 0x00008200) /* usb device                */
60 #define MMAP_COMMPCI    (CFG_MBAR + 0x00008400) /* pci comm Bus regs         */
61 #define MMAP_1284       (CFG_MBAR + 0x00008500) /* 1284                      */
62 #define MMAP_PEV        (CFG_MBAR + 0x00008600) /* print engine video        */
63 #define MMAP_PSC1       (CFG_MBAR + 0x00008800) /* psc1 block                */
64 #define MMAP_I2C        (CFG_MBAR + 0x00008f00) /* i2c controller            */
65 #define MMAP_FEC1       (CFG_MBAR + 0x00009000) /* fast ethernet 1           */
66 #define MMAP_FEC2       (CFG_MBAR + 0x00009800) /* fast ethernet 2           */
67 #define MMAP_JBIGRAM    (CFG_MBAR + 0x0000a000) /* jbig RAM                  */
68 #define MMAP_JBIG       (CFG_MBAR + 0x0000c000) /* jbig                      */
69 #define MMAP_PDLA       (CFG_MBAR + 0x00010000) /*                           */
70 #define MMAP_SRAMCFG    (CFG_MBAR + 0x0001ff00) /* SRAM config               */
71 #define MMAP_SRAM       (CFG_MBAR + 0x00020000) /* SRAM                      */
72
73 #define SRAM_SIZE       0x8000                  /* 32 KB */
74
75 /* ------------------------------------------------------------------------ */
76 /*
77  * Macro for Programmable Serial Channel
78  */
79 /* equates for mode reg. 1 for channel  A or B */
80 #define PSC_MR1_RX_RTS          0x80000000    /* receiver RTS enabled */
81 #define PSC_MR1_RX_INT          0x40000000    /* receiver intrupt enabled */
82 #define PSC_MR1_ERR_MODE        0x20000000    /* block error mode */
83 #define PSC_MR1_PAR_MODE_MULTI  0x18000000    /* multi_drop mode */
84 #define PSC_MR1_NO_PARITY       0x10000000    /* no parity mode */
85 #define PSC_MR1_ALWAYS_0        0x08000000    /* force parity mode */
86 #define PSC_MR1_ALWAYS_1        0x0c000000    /* force parity mode */
87 #define PSC_MR1_EVEN_PARITY     0x00000000    /* parity mode */
88 #define PSC_MR1_ODD_PARITY      0x04000000    /* 0 = even, 1 = odd */
89 #define PSC_MR1_BITS_CHAR_8     0x03000000    /* 8 bits */
90 #define PSC_MR1_BITS_CHAR_7     0x02000000    /* 7 bits */
91 #define PSC_MR1_BITS_CHAR_6     0x01000000    /* 6 bits */
92 #define PSC_MR1_BITS_CHAR_5     0x00000000    /* 5 bits */
93
94 /* equates for mode reg. 2 for channel  A or B */
95 #define PSC_MR2_NORMAL_MODE     0x00000000    /* normal channel mode */
96 #define PSC_MR2_AUTO_MODE       0x40000000    /* automatic channel mode */
97 #define PSC_MR2_LOOPBACK_LOCL   0x80000000    /* local loopback channel mode */
98 #define PSC_MR2_LOOPBACK_REMT   0xc0000000    /* remote loopback channel mode */
99 #define PSC_MR2_TX_RTS          0x20000000    /* transmitter RTS enabled */
100 #define PSC_MR2_TX_CTS          0x10000000    /* transmitter CTS enabled */
101 #define PSC_MR2_STOP_BITS_2     0x0f000000    /* 2 stop bits */
102 #define PSC_MR2_STOP_BITS_1     0x07000000    /* 1 stop bit */
103
104 /* equates for status reg. A or B */
105 #define PSC_SR_BREAK            0x80000000    /* received break */
106 #define PSC_SR_NEOF             PSC_SR_BREAK  /* Next byte is EOF - MIR/FIR */
107 #define PSC_SR_FRAMING          0x40000000    /* framing error */
108 #define PSC_SR_PHYERR           PSC_SR_FRAMING/* Physical Layer error - MIR/FIR */
109 #define PSC_SR_PARITY           0x20000000    /* parity error */
110 #define PSC_SR_CRCERR           PSC_SR_PARITY /* CRC error */
111 #define PSC_SR_OVERRUN          0x10000000    /* overrun error */
112 #define PSC_SR_TXEMT            0x08000000    /* transmitter empty */
113 #define PSC_SR_TXRDY            0x04000000    /* transmitter ready*/
114 #define PSC_SR_FFULL            0x02000000    /* fifo full */
115 #define PSC_SR_RXRDY            0x01000000    /* receiver ready */
116 #define PSC_SR_DEOF             0x00800000    /* Detect EOF or RX-FIFO contain EOF */
117 #define PSC_SR_ERR              0x00400000    /* Error Status including FIFO */
118
119 /* equates for clock select reg. */
120 #define PSC_CSRX16EXT_CLK       0x1110  /* x 16 ext_clock */
121 #define PSC_CSRX1EXT_CLK        0x1111  /* x 1 ext_clock  */
122
123 /* equates for command reg. A or B */
124 #define PSC_CR_NO_COMMAND       0x00000000    /* no command */
125 #define PSC_CR_RST_MR_PTR_CMD   0x10000000    /* reset mr pointer command */
126 #define PSC_CR_RST_RX_CMD       0x20000000    /* reset receiver command */
127 #define PSC_CR_RST_TX_CMD       0x30000000    /* reset transmitter command */
128 #define PSC_CR_RST_ERR_STS_CMD  0x40000000    /* reset error status cmnd */
129 #define PSC_CR_RST_BRK_INT_CMD  0x50000000    /* reset break int. command */
130 #define PSC_CR_STR_BREAK_CMD    0x60000000    /* start break command */
131 #define PSC_CR_STP_BREAK_CMD    0x70000000    /* stop break command */
132 #define PSC_CR_RX_ENABLE        0x01000000    /* receiver enabled */
133 #define PSC_CR_RX_DISABLE       0x02000000    /* receiver disabled */
134 #define PSC_CR_TX_ENABLE        0x04000000    /* transmitter enabled */
135 #define PSC_CR_TX_DISABLE       0x08000000    /* transmitter disabled */
136
137 /* equates for input port change reg. */
138 #define PSC_IPCR_SYNC           0x80000000    /* Sync Detect */
139 #define PSC_IPCR_D_CTS          0x10000000    /* Delta CTS */
140 #define PSC_IPCR_CTS            0x01000000    /* CTS - current state of PSC_CTS */
141
142 /* equates for auxiliary control reg. (timer and counter clock selects) */
143 #define PSC_ACR_BRG             0x80000000    /* for 68681 compatibility
144                                                  baud rate gen select
145                                                  0 = set 1; 1 = set 2
146                                                  equates are set 2 ONLY */
147 #define PSC_ACR_TMR_EXT_CLK_16  0x70000000    /* xtnl clock divided by 16 */
148 #define PSC_ACR_TMR_EXT_CLK     0x60000000    /* external clock */
149 #define PSC_ACR_TMR_IP2_16      0x50000000    /* ip2 divided by 16 */
150 #define PSC_ACR_TMR_IP2         0x40000000    /* ip2 */
151 #define PSC_ACR_CTR_EXT_CLK_16  0x30000000    /* xtnl clock divided by 16 */
152 #define PSC_ACR_CTR_TXCB        0x20000000    /* channel B xmitr clock */
153 #define PSC_ACR_CTR_TXCA        0x10000000    /* channel A xmitr clock */
154 #define PSC_ACR_CTR_IP2         0x00000000    /* ip2 */
155 #define PSC_ACR_IEC0            0x01000000    /* interrupt enable ctrl for D_CTS */
156
157 /* equates for int. status reg. */
158 #define PSC_ISR_IPC             0x80000000    /* input port change*/
159 #define PSC_ISR_BREAK           0x04000000    /* delta break */
160 #define PSC_ISR_RX_RDY          0x02000000    /* receiver rdy /fifo full */
161 #define PSC_ISR_TX_RDY          0x01000000    /* transmitter ready */
162 #define PSC_ISR_DEOF            0x00800000    /* Detect EOF / RX-FIFO contains EOF */
163 #define PSC_ISR_ERR             0x00400000    /* Error Status including FIFO */
164
165 /* equates for int. mask reg. */
166 #define PSC_IMR_CLEAR           0xff000000    /* Clear the imr */
167 #define PSC_IMR_IPC             0x80000000    /* input port change*/
168 #define PSC_IMR_BREAK           0x04000000    /* delta break */
169 #define PSC_IMR_RX_RDY          0x02000000    /* rcvr ready / fifo full */
170 #define PSC_IMR_TX_RDY          0x01000000    /* transmitter ready */
171 #define PSC_IMR_DEOF            0x00800000    /* Detect EOF / RX-FIFO contains EOF */
172 #define PSC_IMR_ERR             0x00400000    /* Error Status including FIFO */
173
174 /* equates for input port reg. */
175 #define PSC_IP_LPWRB            0x80000000    /* Low power mode in Ac97 */
176 #define PSC_IP_TGL              0x40000000    /* test usage */
177 #define PSC_IP_CTS              0x01000000    /* CTS */
178
179 /* equates for output port bit set reg. */
180 #define PSC_OPSET_RTS           0x01000000    /* Assert PSC_RTS output */
181
182 /* equates for output port bit reset reg. */
183 #define PSC_OPRESET_RTS         0x01000000    /* Assert PSC_RTS output */
184
185 /* equates for rx FIFO number of data reg. */
186 #define PSC_RFNUM(x)            ((x&0xff)<<24)/* receive count */
187
188 /* equates for tx FIFO number of data reg. */
189 #define PSC_TFNUM(x)            ((x&0xff)<<24)/* receive count */
190
191 /* equates for rx FIFO status reg */
192 #define PSC_RFSTAT_TAG(x)       ((x&3)<<28)   /* tag */
193 #define PSC_RFSTAT_FRAME0       0x08          /* Frame Indicator 0 */
194 #define PSC_RFSTAT_FRAME1       0x04          /* Frame Indicator 1 */
195 #define PSC_RFSTAT_FRAME2       0x02          /* Frame Indicator 2 */
196 #define PSC_RFSTAT_FRAME3       0x01          /* Frame Indicator 3 */
197 #define PSC_RFSTAT_FRAME(x)     ((x&0x0f)<<24)/* Frame indicator */
198 #define PSC_RFSTAT_ERR          0x00400000    /* Fifo err */
199 #define PSC_RFSTAT_UF           0x00200000    /* Underflow */
200 #define PSC_RFSTAT_OF           0x00100000    /* overflow */
201 #define PSC_RFSTAT_FR           0x00080000    /* frame ready */
202 #define PSC_RFSTAT_FULL         0x00040000    /* full */
203 #define PSC_RFSTAT_ALARM        0x00020000    /* alarm */
204 #define PSC_RFSTAT_EMPTY        0x00010000    /* empty */
205
206 /* equates for tx FIFO status reg */
207 #define PSC_TFSTAT_TAG(x)       ((x&3)<<28)   /* tag */
208 #define PSC_TFSTAT_FRAME0       0x08          /* Frame Indicator 0 */
209 #define PSC_TFSTAT_FRAME1       0x04          /* Frame Indicator 1 */
210 #define PSC_TFSTAT_FRAME2       0x02          /* Frame Indicator 2 */
211 #define PSC_TFSTAT_FRAME3       0x01          /* Frame Indicator 3 */
212 #define PSC_TFSTAT_FRAME(x)     ((x&0x0f)<<24)/* Frame indicator */
213 #define PSC_TFSTAT_ERR          0x00400000    /* Fifo err */
214 #define PSC_TFSTAT_UF           0x00200000    /* Underflow */
215 #define PSC_TFSTAT_OF           0x00100000    /* overflow */
216 #define PSC_TFSTAT_FR           0x00080000    /* frame ready */
217 #define PSC_TFSTAT_FULL         0x00040000    /* full */
218 #define PSC_TFSTAT_ALARM        0x00020000    /* alarm */
219 #define PSC_TFSTAT_EMPTY        0x00010000    /* empty */
220
221 /* equates for rx FIFO control reg. */
222 #define PSC_RFCNTL_WTAG(x)      ((x&3)<<29)   /* Write tag */
223 #define PSC_RFCNTL_FRAME        0x08000000    /* Frame mode enable */
224 #define PSC_RFCNTL_GR(x)        ((x&7)<<24)   /* Granularity */
225
226 /* equates for tx FIFO control reg. */
227 #define PSC_TFCNTL_WTAG(x)      ((x&3)<<29)   /* Write tag */
228 #define PSC_TFCNTL_FRAME        0x08000000    /* Frame mode enable */
229 #define PSC_TFCNTL_GR(x)        ((x&7)<<24)   /* Granularity */
230
231 /* equates for rx FIFO alarm reg */
232 #define PSC_RFALARM(x)          (x&0x1ff)     /* Alarm */
233
234 /* equates for tx FIFO alarm reg */
235 #define PSC_TFALARM(x)          (x&0x1ff)     /* Alarm */
236
237 /* equates for rx FIFO read pointer */
238 #define PSC_RFRPTR(x)           (x&0x1ff)     /* read pointer */
239
240 /* equates for tx FIFO read pointer */
241 #define PSC_TFRPTR(x)           (x&0x1ff)     /* read pointer */
242
243 /* equates for rx FIFO write pointer */
244 #define PSC_RFWPTR(x)           (x&0x1ff)     /* write pointer */
245
246 /* equates for rx FIFO write pointer */
247 #define PSC_TFWPTR(x)           (x&0x1ff)     /* write pointer */
248
249 /* equates for rx FIFO last read frame pointer reg */
250 #define PSC_RFLRFPTR(x)         (x&0x1ff)     /* last read frame pointer */
251
252 /* equates for tx FIFO last read frame pointer reg */
253 #define PSC_TFLRFPTR(x)         (x&0x1ff)     /* last read frame pointer */
254
255 /* equates for rx FIFO last write frame pointer reg */
256 #define PSC_RFLWFPTR(x)         (x&0x1ff)     /* last write frame pointer */
257
258 /* equates for tx FIFO last write frame pointer reg */
259 #define PSC_TFLWFPTR(x)         (x&0x1ff)     /* last write frame pointer */
260
261 /* PCI configuration (only for PLL determination)*/
262 #define PCI_REG_PCIGSCR         (MMAP_XCPCI + 0x60) /* Global status/control register */
263 #define PCI_REG_PCIGSCR_PCI2XLB_CLK_MASK        0x07000000
264 #define PCI_REG_PCIGSCR_PCI2XLB_CLK_BIT         24
265
266 #define PCI_REG_PCICAR          (MMAP_XCPCI + 0xF8) /* Configuration Address Register */
267
268 /* ------------------------------------------------------------------------ */
269 /*
270  * Macro for General Purpose Timer
271  */
272 /* Enable and Mode Select */
273 #define GPT_OCT(x)          (x & 0x3)<<4/* Output Compare Type */
274 #define GPT_ICT(x)          (x & 0x3)   /* Input Capture Type */
275 #define GPT_CTRL_WDEN       0x80        /* Watchdog Enable */
276 #define GPT_CTRL_CE         0x10        /* Counter Enable */
277 #define GPT_CTRL_STPCNT     0x04        /* Stop continous */
278 #define GPT_CTRL_ODRAIN     0x02        /* Open Drain */
279 #define GPT_CTRL_INTEN      0x01        /* Interrupt Enable */
280 #define GPT_MODE_GPIO(x)    (x & 0x3)<<4/* Gpio Mode Type */
281 #define GPT_TMS_ICT         0x01        /* Input Capture Enable */
282 #define GPT_TMS_OCT         0x02        /* Output Capture Enable */
283 #define GPT_TMS_PWM         0x03        /* PWM Capture Enable */
284 #define GPT_TMS_SGPIO       0x04        /* PWM Capture Enable */
285
286 #define GPT_PWM_WIDTH(x)    (x & 0xffff)
287
288 /* Status */
289 #define GPT_STA_CAPTURE(x)  (x & 0xffff)/* Read of internal counter */
290
291 #define GPT_OVFPIN_OVF(x)   (x & 0x70)  /* Internal counter roll over */
292 #define GPT_OVFPIN_PIN      0x01        /* Input pin - Timer 0 and 1 */
293
294 #define GPT_INT_TEXP        0x08        /* Timer Expired in Internal Timer mode */
295 #define GPT_INT_PWMP        0x04        /* PWM end of period occurred */
296 #define GPT_INT_COMP        0x02        /* OC reference event occurred */
297 #define GPT_INT_CAPT        0x01        /* IC reference event occurred */
298
299 /* ------------------------------------------------------------------------ */
300 /*
301  * Port configuration
302  */
303 #define CFG_FEC1_PORT0_CONFIG   0x00000000
304 #define CFG_FEC1_PORT1_CONFIG   0x00000000
305 #define CFG_1284_PORT0_CONFIG  0x00000000
306 #define CFG_1284_PORT1_CONFIG  0x00000000
307 #define CFG_FEC2_PORT2_CONFIG   0x00000000
308 #define CFG_PEV_PORT2_CONFIG   0x00000000
309 #define CFG_GP0_PORT0_CONFIG   0x00000000
310 #define CFG_GP1_PORT2_CONFIG   0xaaaaaac0
311 #define CFG_PSC_PORT3_CONFIG   0x00020000
312 #define CFG_CS1_PORT3_CONFIG   0x00000000
313 #define CFG_CS2_PORT3_CONFIG    0x10000000
314 #define CFG_CS3_PORT3_CONFIG    0x40000000
315 #define CFG_CS4_PORT3_CONFIG    0x00000400
316 #define CFG_CS5_PORT3_CONFIG    0x00000200
317 #define CFG_PCI_PORT3_CONFIG   0x01400180
318 #define CFG_I2C_PORT3_CONFIG   0x00000000
319 #define CFG_GP2_PORT3_CONFIG   0x000200a0
320
321 /* ------------------------------------------------------------------------ */
322 /*
323  * DRAM configuration
324  */
325
326 /* Field definitions for the control register */
327 #define CTL_MODE_ENABLE_SHIFT       31
328 #define CTL_CKE_SHIFT               30
329 #define CTL_DDR_SHIFT               29
330 #define CTL_REFRESH_SHIFT           28
331 #define CTL_ADDRMUX_SHIFT           24
332 #define CTL_PRECHARGE_SHIFT         23
333 #define CTL_DRIVE_RULE_SHIFT        22
334 #define CTL_REFRESH_INTERVAL_SHIFT  16
335 #define CTL_DQSOEN_SHIFT            8
336 #define CTL_BUFFERED_SHIFT          4
337 #define CTL_REFRESH_CMD_SHIFT       2
338 #define CTL_PRECHARGE_CMD_SHIFT     1
339
340 #define CTL_MODE_ENABLE             (1<<CTL_MODE_ENABLE_SHIFT)
341 #define CTL_CKE_HIGH                (1<<CTL_CKE_SHIFT)
342 #define CTL_DDR_MODE                (1<<CTL_DDR_SHIFT)
343 #define CTL_REFRESH_ENABLE          (1<<CTL_REFRESH_SHIFT)
344 #define CTL_ADDRMUX(value)          ((value)<<CTL_ADDRMUX_SHIFT)
345 #define CTL_A8PRECHARGE             (1<<CTL_PRECHARGE_SHIFT)
346 #define CTL_REFRESH_INTERVAL(value) ((value)<<CTL_REFRESH_INTERVAL_SHIFT)
347 #define CTL_DQSOEN(value)           ((value)<<CTL_DQSOEN_SHIFT)
348 #define CTL_BUFFERED                (1<<CTL_BUFFERED_SHIFT)
349 #define CTL_REFRESH_CMD             (1<<CTL_REFRESH_CMD_SHIFT)
350 #define CTL_PRECHARGE_CMD           (1<<CTL_PRECHARGE_CMD_SHIFT)
351
352 /* Field definitions for config register 1 */
353
354 #define CFG1_SRD2RWP_SHIFT          28
355 #define CFG1_SWT2RWP_SHIFT          24
356 #define CFG1_RLATENCY_SHIFT         20
357 #define CFG1_ACT2WR_SHIFT           16
358 #define CFG1_PRE2ACT_SHIFT          12
359 #define CFG1_REF2ACT_SHIFT          8
360 #define CFG1_WLATENCY_SHIFT         4
361
362 #define CFG1_SRD2RWP(value)         ((value)<<CFG1_SRD2RWP_SHIFT)
363 #define CFG1_SWT2RWP(value)         ((value)<<CFG1_SWT2RWP_SHIFT)
364 #define CFG1_RLATENCY(value)        ((value)<<CFG1_RLATENCY_SHIFT)
365 #define CFG1_ACT2WR(value)          ((value)<<CFG1_ACT2WR_SHIFT)
366 #define CFG1_PRE2ACT(value)         ((value)<<CFG1_PRE2ACT_SHIFT)
367 #define CFG1_REF2ACT(value)         ((value)<<CFG1_REF2ACT_SHIFT)
368 #define CFG1_WLATENCY(value)        ((value)<<CFG1_WLATENCY_SHIFT)
369
370 /* Field definitions for config register 2 */
371 #define CFG2_BRD2RP_SHIFT           28
372 #define CFG2_BWT2RWP_SHIFT          24
373 #define CFG2_BRD2WT_SHIFT           20
374 #define CFG2_BURSTLEN_SHIFT         16
375
376 #define CFG2_BRD2RP(value)          ((value)<<CFG2_BRD2RP_SHIFT)
377 #define CFG2_BWT2RWP(value)         ((value)<<CFG2_BWT2RWP_SHIFT)
378 #define CFG2_BRD2WT(value)          ((value)<<CFG2_BRD2WT_SHIFT)
379 #define CFG2_BURSTLEN(value)        ((value)<<CFG2_BURSTLEN_SHIFT)
380
381 /* Field definitions for the mode/extended mode register - mode
382  * register access
383  */
384 #define MODE_REG_SHIFT              30
385 #define MODE_OPMODE_SHIFT           25
386 #define MODE_CL_SHIFT               22
387 #define MODE_BT_SHIFT               21
388 #define MODE_BURSTLEN_SHIFT         18
389 #define MODE_CMD_SHIFT              16
390
391 #define MODE_MODE                   0
392 #define MODE_OPMODE(value)          ((value)<<MODE_OPMODE_SHIFT)
393 #define MODE_CL(value)              ((value)<<MODE_CL_SHIFT)
394 #define MODE_BT_INTERLEAVED         (1<<MODE_BT_SHIFT)
395 #define MODE_BT_SEQUENTIAL          (0<<MODE_BT_SHIFT)
396 #define MODE_BURSTLEN(value)        ((value)<<MODE_BURSTLEN_SHIFT)
397 #define MODE_CMD                    (1<<MODE_CMD_SHIFT)
398
399 #define MODE_BURSTLEN_8             3
400 #define MODE_BURSTLEN_4             2
401 #define MODE_BURSTLEN_2             1
402
403 #define MODE_CL_2                   2
404 #define MODE_CL_2p5                 6
405 #define MODE_OPMODE_NORMAL          0
406 #define MODE_OPMODE_RESETDLL        2
407
408
409 /* Field definitions for the mode/extended mode register - extended
410  * mode register access
411  */
412 #define MODE_X_DLL_SHIFT            18 /* DLL enable/disable */
413 #define MODE_X_DS_SHIFT             19 /* Drive strength normal/reduced */
414 #define MODE_X_QFC_SHIFT            20 /* QFC function (whatever that is) */
415 #define MODE_X_OPMODE_SHIFT         21
416
417 #define MODE_EXTENDED               (1<<MODE_REG_SHIFT)
418 #define MODE_X_DLL_ENABLE           0
419 #define MODE_X_DLL_DISABLE          (1<<MODE_X_DLL_SHIFT)
420 #define MODE_X_DS_NORMAL            0
421 #define MODE_X_DS_REDUCED           (1<<MODE_X_DS_SHIFT)
422 #define MODE_X_QFC_DISABLED         0
423 #define MODE_X_OPMODE(value)        ((value)<<MODE_X_OPMODE_SHIFT)
424
425 #ifndef __ASSEMBLY__
426 /*
427  * DMA control/status registers.
428  */
429 struct mpc8220_dma {
430     u32 taskBar;        /* DMA + 0x00 */
431     u32 currentPointer; /* DMA + 0x04 */
432     u32 endPointer;     /* DMA + 0x08 */
433     u32 variablePointer;/* DMA + 0x0c */
434
435     u8 IntVect1;        /* DMA + 0x10 */
436     u8 IntVect2;        /* DMA + 0x11 */
437     u16 PtdCntrl;       /* DMA + 0x12 */
438
439     u32 IntPend;        /* DMA + 0x14 */
440     u32 IntMask;        /* DMA + 0x18 */
441
442     u16 tcr_0;          /* DMA + 0x1c */
443     u16 tcr_1;          /* DMA + 0x1e */
444     u16 tcr_2;          /* DMA + 0x20 */
445     u16 tcr_3;          /* DMA + 0x22 */
446     u16 tcr_4;          /* DMA + 0x24 */
447     u16 tcr_5;          /* DMA + 0x26 */
448     u16 tcr_6;          /* DMA + 0x28 */
449     u16 tcr_7;          /* DMA + 0x2a */
450     u16 tcr_8;          /* DMA + 0x2c */
451     u16 tcr_9;          /* DMA + 0x2e */
452     u16 tcr_a;          /* DMA + 0x30 */
453     u16 tcr_b;          /* DMA + 0x32 */
454     u16 tcr_c;          /* DMA + 0x34 */
455     u16 tcr_d;          /* DMA + 0x36 */
456     u16 tcr_e;          /* DMA + 0x38 */
457     u16 tcr_f;          /* DMA + 0x3a */
458
459     u8 IPR0;            /* DMA + 0x3c */
460     u8 IPR1;            /* DMA + 0x3d */
461     u8 IPR2;            /* DMA + 0x3e */
462     u8 IPR3;            /* DMA + 0x3f */
463     u8 IPR4;            /* DMA + 0x40 */
464     u8 IPR5;            /* DMA + 0x41 */
465     u8 IPR6;            /* DMA + 0x42 */
466     u8 IPR7;            /* DMA + 0x43 */
467     u8 IPR8;            /* DMA + 0x44 */
468     u8 IPR9;            /* DMA + 0x45 */
469     u8 IPR10;           /* DMA + 0x46 */
470     u8 IPR11;           /* DMA + 0x47 */
471     u8 IPR12;           /* DMA + 0x48 */
472     u8 IPR13;           /* DMA + 0x49 */
473     u8 IPR14;           /* DMA + 0x4a */
474     u8 IPR15;           /* DMA + 0x4b */
475     u8 IPR16;           /* DMA + 0x4c */
476     u8 IPR17;           /* DMA + 0x4d */
477     u8 IPR18;           /* DMA + 0x4e */
478     u8 IPR19;           /* DMA + 0x4f */
479     u8 IPR20;           /* DMA + 0x50 */
480     u8 IPR21;           /* DMA + 0x51 */
481     u8 IPR22;           /* DMA + 0x52 */
482     u8 IPR23;           /* DMA + 0x53 */
483     u8 IPR24;           /* DMA + 0x54 */
484     u8 IPR25;           /* DMA + 0x55 */
485     u8 IPR26;           /* DMA + 0x56 */
486     u8 IPR27;           /* DMA + 0x57 */
487     u8 IPR28;           /* DMA + 0x58 */
488     u8 IPR29;           /* DMA + 0x59 */
489     u8 IPR30;           /* DMA + 0x5a */
490     u8 IPR31;           /* DMA + 0x5b */
491
492     u32 res1;           /* DMA + 0x5c */
493     u32 res2;           /* DMA + 0x60 */
494     u32 res3;           /* DMA + 0x64 */
495     u32 MDEDebug;       /* DMA + 0x68 */
496     u32 ADSDebug;       /* DMA + 0x6c */
497     u32 Value1;         /* DMA + 0x70 */
498     u32 Value2;         /* DMA + 0x74 */
499     u32 Control;        /* DMA + 0x78 */
500     u32 Status;         /* DMA + 0x7c */
501     u32 EU00;           /* DMA + 0x80 */
502     u32 EU01;           /* DMA + 0x84 */
503     u32 EU02;           /* DMA + 0x88 */
504     u32 EU03;           /* DMA + 0x8c */
505     u32 EU04;           /* DMA + 0x90 */
506     u32 EU05;           /* DMA + 0x94 */
507     u32 EU06;           /* DMA + 0x98 */
508     u32 EU07;           /* DMA + 0x9c */
509     u32 EU10;           /* DMA + 0xa0 */
510     u32 EU11;           /* DMA + 0xa4 */
511     u32 EU12;           /* DMA + 0xa8 */
512     u32 EU13;           /* DMA + 0xac */
513     u32 EU14;           /* DMA + 0xb0 */
514     u32 EU15;           /* DMA + 0xb4 */
515     u32 EU16;           /* DMA + 0xb8 */
516     u32 EU17;           /* DMA + 0xbc */
517     u32 EU20;           /* DMA + 0xc0 */
518     u32 EU21;           /* DMA + 0xc4 */
519     u32 EU22;           /* DMA + 0xc8 */
520     u32 EU23;           /* DMA + 0xcc */
521     u32 EU24;           /* DMA + 0xd0 */
522     u32 EU25;           /* DMA + 0xd4 */
523     u32 EU26;           /* DMA + 0xd8 */
524     u32 EU27;           /* DMA + 0xdc */
525     u32 EU30;           /* DMA + 0xe0 */
526     u32 EU31;           /* DMA + 0xe4 */
527     u32 EU32;           /* DMA + 0xe8 */
528     u32 EU33;           /* DMA + 0xec */
529     u32 EU34;           /* DMA + 0xf0 */
530     u32 EU35;           /* DMA + 0xf4 */
531     u32 EU36;           /* DMA + 0xf8 */
532     u32 EU37;           /* DMA + 0xfc */
533 };
534
535 /*
536  * PCI Header Registers
537  */
538 typedef struct mpc8220_xcpci {
539         u32     dev_ven_id;             /* 0xb00 - device/vendor ID */
540         u32     stat_cmd_reg;           /* 0xb04 - status command register */
541         u32     class_code_rev_id;      /* 0xb08 - class code / revision ID */
542         u32     bist_htyp_lat_cshl;     /* 0xb0c - BIST/HeaderType/Latency/cache line */
543         u32     base0;                  /* 0xb10 - base address 0 */
544         u32     base1;                  /* 0xb14 - base address 1 */
545         u32     reserved1[4];           /* 0xb18->0xd27 - base address 2 - 5 */
546         u32     cis;                    /* 0xb28 - cardBus CIS pointer */
547         u32     sub_sys_ven_id;         /* 0xb2c - sub system ID/ subsystem vendor ID */
548         u32     reserved2;              /* 0xb30 - expansion ROM base address */
549         u32     reserved3;              /* 0xb00 - reserved */
550         u32     reserved4;              /* 0xb00 - reserved */
551         u32     mlat_mgnt_ipl;          /* 0xb3c - MaxLat/MinGnt/ int pin/int line */
552         u32     reserved5[8];
553         /* MPC8220 specific - not accessible in PCI header space externally */
554         u32     glb_stat_ctl;           /* 0xb60 - Global Status Control */
555         u32     target_bar0;            /* 0xb64 - Target Base Address 0 */
556         u32     target_bar1;            /* 0xb68 - Target Base Address 1 */
557         u32     target_ctrl;            /* 0xb6c - Target Control */
558         u32     init_win0;              /* 0xb70 - Initiator Window 0 Base/Translation */
559         u32     init_win1;              /* 0xb74 - Initiator Window 1 Base/Translation */
560         u32     init_win2;              /* 0xb78 - Initiator Window 2 Base/Translation */
561         u32     reserved6;              /* 0xb7c - reserved  */
562         u32     init_win_cfg;           /* 0xb80 */
563         u32     init_ctrl;              /* 0xb84 */
564         u32     init_stat;              /* 0xb88 */
565         u32     reserved7[27];
566         u32     cfg_adr;                /* 0xbf8 */
567         u32     reserved8;
568 } mpc8220_xcpci_t;
569
570 /* PCI->XLB space translation (MPC8220 target), reg0 can address max 256MB,
571    reg1 - 1GB */
572 #define PCI_BASE_ADDR_REG0                      0x40000000
573 #define PCI_BASE_ADDR_REG1                      (CFG_SDRAM_BASE)
574 #define PCI_TARGET_BASE_ADDR_REG0               (CFG_MBAR)
575 #define PCI_TARGET_BASE_ADDR_REG1               (CFG_SDRAM_BASE)
576 #define PCI_TARGET_BASE_ADDR_EN                 1<<0
577
578
579 /* PCI Global Status/Control Register (PCIGSCR) */
580 #define PCI_GLB_STAT_CTRL_PE_SHIFT              29
581 #define PCI_GLB_STAT_CTRL_SE_SHIFT              28
582 #define PCI_GLB_STAT_CTRL_XLB_TO_PCI_CLK_SHIFT  24
583 #define PCI_GLB_STAT_CTRL_XLB_TO_PCI_CLK_MASK   0x7
584 #define PCI_GLB_STAT_CTRL_IPG_TO_PCI_CLK_SHIFT  16
585 #define PCI_GLB_STAT_CTRL_IPG_TO_PCI_CLK_MASK   0x7
586 #define PCI_GLB_STAT_CTRL_PEE_SHIFT             13
587 #define PCI_GLB_STAT_CTRL_SEE_SHIFT             12
588 #define PCI_GLB_STAT_CTRL_PR_SHIFT              0
589
590 #define PCI_GLB_STAT_CTRL_PE                    (1<<PCI_GLB_STAT_CTRL_PE_SHIFT)
591 #define PCI_GLB_STAT_CTRL_SE                    (1<<PCI_GLB_STAT_CTRL_SE_SHIFT)
592 #define PCI_GLB_STAT_CTRL_PEE                   (1<<PCI_GLB_STAT_CTRL_PEE_SHIFT)
593 #define PCI_GLB_STAT_CTRL_SEE                   (1<<PCI_GLB_STAT_CTRL_SEE_SHIFT)
594 #define PCI_GLB_STAT_CTRL_PR                    (1<<PCI_GLB_STAT_CTRL_PR_SHIFT)
595
596 /* PCI Target Control Register (PCITCR) */
597 #define PCI_TARGET_CTRL_LD_SHIFT                24
598 #define PCI_TARGET_CTRL_P_SHIFT                 16
599
600 #define PCI_TARGET_CTRL_LD                      (1<<PCI_TARGET_CTRL_LD_SHIFT)
601 #define PCI_TARGET_CTRL_P                       (1<<PCI_TARGET_CTRL_P_SHIFT)
602
603 /* PCI Initiator Window Configuration Register (PCIIWCR) */
604 #define PCI_INIT_WIN_CFG_WIN0_CTRL_IO_SHIFT     27
605 #define PCI_INIT_WIN_CFG_WIN0_CTRL_PRC_SHIFT    25
606 #define PCI_INIT_WIN_CFG_WIN0_CTRL_PRC_MASK     0x3
607 #define PCI_INIT_WIN_CFG_WIN0_CTRL_EN_SHIFT     24
608 #define PCI_INIT_WIN_CFG_WIN1_CTRL_IO_SHIFT     19
609 #define PCI_INIT_WIN_CFG_WIN1_CTRL_PRC_SHIFT    17
610 #define PCI_INIT_WIN_CFG_WIN1_CTRL_PRC_MASK     0x3
611 #define PCI_INIT_WIN_CFG_WIN1_CTRL_EN_SHIFT     16
612 #define PCI_INIT_WIN_CFG_WIN2_CTRL_IO_SHIFT     11
613 #define PCI_INIT_WIN_CFG_WIN2_CTRL_PRC_SHIFT    9
614 #define PCI_INIT_WIN_CFG_WIN2_CTRL_PRC_MASK     0x3
615 #define PCI_INIT_WIN_CFG_WIN2_CTRL_EN_SHIFT     8
616
617 #define PCI_INIT_WIN_CFG_WIN_MEM_READ           0x0
618 #define PCI_INIT_WIN_CFG_WIN_MEM_READ_LINE      0x1
619 #define PCI_INIT_WIN_CFG_WIN_MEM_READ_MULTIPLE  0x2
620
621 #define PCI_INIT_WIN_CFG_WIN0_CTRL_IO           (1<<PCI_INIT_WIN_CFG_WIN0_CTRL_IO_SHIFT)
622 #define PCI_INIT_WIN_CFG_WIN0_CTRL_EN           (1<<PCI_INIT_WIN_CFG_WIN0_CTRL_EN_SHIFT)
623 #define PCI_INIT_WIN_CFG_WIN1_CTRL_IO           (1<<PCI_INIT_WIN_CFG_WIN1_CTRL_IO_SHIFT)
624 #define PCI_INIT_WIN_CFG_WIN1_CTRL_EN           (1<<PCI_INIT_WIN_CFG_WIN1_CTRL_EN_SHIFT)
625 #define PCI_INIT_WIN_CFG_WIN2_CTRL_IO           (1<<PCI_INIT_WIN_CFG_WIN2_CTRL_IO_SHIFT)
626 #define PCI_INIT_WIN_CFG_WIN2_CTRL_EN           (1<<PCI_INIT_WIN_CFG_WIN2_CTRL_EN_SHIFT)
627
628 /* PCI Initiator Control Register (PCIICR) */
629 #define PCI_INIT_CTRL_REE_SHIFT                 26
630 #define PCI_INIT_CTRL_IAE_SHIFT                 25
631 #define PCI_INIT_CTRL_TAE_SHIFT                 24
632 #define PCI_INIT_CTRL_MAX_RETRIES_SHIFT         0
633 #define PCI_INIT_CTRL_MAX_RETRIES_MASK          0xff
634
635 #define PCI_INIT_CTRL_REE                       (1<<PCI_INIT_CTRL_REE_SHIFT)
636 #define PCI_INIT_CTRL_IAE                       (1<<PCI_INIT_CTRL_IAE_SHIFT)
637 #define PCI_INIT_CTRL_TAE                       (1<<PCI_INIT_CTRL_TAE_SHIFT)
638
639 /* PCI Status/Command Register (PCISCR) - PCI Dword 1 */
640 #define PCI_STAT_CMD_PE_SHIFT                   31
641 #define PCI_STAT_CMD_SE_SHIFT                   30
642 #define PCI_STAT_CMD_MA_SHIFT                   29
643 #define PCI_STAT_CMD_TR_SHIFT                   28
644 #define PCI_STAT_CMD_TS_SHIFT                   27
645 #define PCI_STAT_CMD_DT_SHIFT                   25
646 #define PCI_STAT_CMD_DT_MASK                    0x3
647 #define PCI_STAT_CMD_DP_SHIFT                   24
648 #define PCI_STAT_CMD_FC_SHIFT                   23
649 #define PCI_STAT_CMD_R_SHIFT                    22
650 #define PCI_STAT_CMD_66M_SHIFT                  21
651 #define PCI_STAT_CMD_C_SHIFT                    20
652 #define PCI_STAT_CMD_F_SHIFT                    9
653 #define PCI_STAT_CMD_S_SHIFT                    8
654 #define PCI_STAT_CMD_ST_SHIFT                   7
655 #define PCI_STAT_CMD_PER_SHIFT                  6
656 #define PCI_STAT_CMD_V_SHIFT                    5
657 #define PCI_STAT_CMD_MW_SHIFT                   4
658 #define PCI_STAT_CMD_SP_SHIFT                   3
659 #define PCI_STAT_CMD_B_SHIFT                    2
660 #define PCI_STAT_CMD_M_SHIFT                    1
661 #define PCI_STAT_CMD_IO_SHIFT                   0
662
663 #define PCI_STAT_CMD_PE                 (1<<PCI_STAT_CMD_PE_SHIFT)
664 #define PCI_STAT_CMD_SE                 (1<<PCI_STAT_CMD_SE_SHIFT)
665 #define PCI_STAT_CMD_MA                 (1<<PCI_STAT_CMD_MA_SHIFT)
666 #define PCI_STAT_CMD_TR                 (1<<PCI_STAT_CMD_TR_SHIFT)
667 #define PCI_STAT_CMD_TS                 (1<<PCI_STAT_CMD_TS_SHIFT)
668 #define PCI_STAT_CMD_DP                 (1<<PCI_STAT_CMD_DP_SHIFT)
669 #define PCI_STAT_CMD_FC                 (1<<PCI_STAT_CMD_FC_SHIFT)
670 #define PCI_STAT_CMD_R                          (1<<PCI_STAT_CMD_R_SHIFT)
671 #define PCI_STAT_CMD_66M                        (1<<PCI_STAT_CMD_66M_SHIFT)
672 #define PCI_STAT_CMD_C                          (1<<PCI_STAT_CMD_C_SHIFT)
673 #define PCI_STAT_CMD_F                          (1<<PCI_STAT_CMD_F_SHIFT)
674 #define PCI_STAT_CMD_S                          (1<<PCI_STAT_CMD_S_SHIFT)
675 #define PCI_STAT_CMD_ST                 (1<<PCI_STAT_CMD_ST_SHIFT)
676 #define PCI_STAT_CMD_PER                        (1<<PCI_STAT_CMD_PER_SHIFT)
677 #define PCI_STAT_CMD_V                          (1<<PCI_STAT_CMD_V_SHIFT)
678 #define PCI_STAT_CMD_MW                 (1<<PCI_STAT_CMD_MW_SHIFT)
679 #define PCI_STAT_CMD_SP                 (1<<PCI_STAT_CMD_SP_SHIFT)
680 #define PCI_STAT_CMD_B                          (1<<PCI_STAT_CMD_B_SHIFT)
681 #define PCI_STAT_CMD_M                          (1<<PCI_STAT_CMD_M_SHIFT)
682 #define PCI_STAT_CMD_IO                 (1<<PCI_STAT_CMD_IO_SHIFT)
683
684 /* PCI Configuration 1 Register (PCICR1) - PCI Dword 3 */
685 #define PCI_CFG1_HT_SHIFT                       16
686 #define PCI_CFG1_HT_MASK                        0xff
687 #define PCI_CFG1_LT_SHIFT                       8
688 #define PCI_CFG1_LT_MASK                        0xff
689 #define PCI_CFG1_CLS_SHIFT                      0
690 #define PCI_CFG1_CLS_MASK                       0xf
691
692 /* function prototypes */
693 void loadtask(int basetask, int tasks);
694 u32 dramSetup(void);
695
696 #if defined(CONFIG_PSC_CONSOLE)
697 int psc_serial_init (void);
698 void psc_serial_putc(const char c);
699 void psc_serial_puts (const char *s);
700 int psc_serial_getc(void);
701 int psc_serial_tstc(void);
702 void psc_serial_setbrg(void);
703 #endif
704
705 #if defined (CONFIG_EXTUART_CONSOLE)
706 int ext_serial_init (void);
707 void ext_serial_putc(const char c);
708 void ext_serial_puts (const char *s);
709 int ext_serial_getc(void);
710 int ext_serial_tstc(void);
711 void ext_serial_setbrg(void);
712 #endif
713
714 #endif /* __ASSEMBLY__ */
715
716 #endif /* __MPC8220_H__ */