]> git.kernelconcepts.de Git - karo-tx-uboot.git/blob - include/mpc824x.h
Initial revision
[karo-tx-uboot.git] / include / mpc824x.h
1 /*
2  * Copyright Rob Taylor, Flying Pig Systems Ltd. 2000.
3  * Copyright (C) 2001, James Dougherty, jfd@cs.stanford.edu
4  *
5  * See file CREDITS for list of people who contributed to this
6  * project.
7  *
8  * This program is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU General Public License as
10  * published by the Free Software Foundation; either version 2 of
11  * the License, or (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program; if not, write to the Free Software
20  * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
21  * MA 02111-1307 USA
22  */
23
24 #ifndef __MPC824X_H__
25 #define __MPC824X_H__
26
27 #include <config.h>
28
29 /* CPU Types */
30 #define CPU_TYPE_601            0x01            /* PPC 601       CPU */
31 #define CPU_TYPE_602            0x02            /* PPC 602       CPU */
32 #define CPU_TYPE_603            0x03            /* PPC 603       CPU */
33 #define CPU_TYPE_603E           0x06            /* PPC 603e      CPU */
34 #define CPU_TYPE_603P           0x07            /* PPC 603p      CPU */
35 #define CPU_TYPE_604            0x04            /* PPC 604       CPU */
36 #define CPU_TYPE_604E           0x09            /* PPC 604e      CPU */
37 #define CPU_TYPE_604R           0x0a            /* PPC 604r      CPU */
38 #define CPU_TYPE_750            0x08            /* PPC 750       CPU */
39 #define CPU_TYPE_8240           0x81            /* PPC 8240      CPU */
40 #define CPU_TYPE_8245           0x8081          /* PPC 8245/8241 CPU */
41 #define _CACHE_ALIGN_SIZE       32              /* cache line size */
42
43 /* spr976 - DMISS data tlb miss address register
44  * spr977 - DCMP data tlb miss compare register
45  * spr978 - HASH1 PTEG1 address register
46  * spr980 - HASH2 PTEG2 address register
47  * IMISS  - instruction tlb miss address register
48  * ICMP   - instruction TLB mis compare register
49  * RPA    - real page address register
50  * HID0   - hardware implemntation register
51  * HID2   - instruction address breakpoint register
52  */
53
54 /* Kahlua/MPC8240 defines */
55 #define VEN_DEV_ID              0x00021057      /* Vendor and Dev. ID for MPC106 */
56 #define KAHLUA_ID               0x00031057      /* Vendor & Dev Id for Kahlua's PCI */
57 #define KAHLUA2_ID              0x00061057      /* 8245 is aka Kahlua-2 */
58 #define BMC_BASE                0x80000000      /* Kahlua ID in PCI Memory space */
59 #define CHRP_REG_ADDR           0xfec00000      /* MPC107 Config, Map B */
60 #define CHRP_REG_DATA           0xfee00000      /* MPC107 Config, Map B */
61 #define CHRP_ISA_MEM_PHYS       0xfd000000
62 #define CHRP_ISA_MEM_BUS        0x00000000
63 #define CHRP_ISA_MEM_SIZE       0x01000000
64 #define CHRP_ISA_IO_PHYS        0xfe000000
65 #define CHRP_ISA_IO_BUS         0x00000000
66 #define CHRP_ISA_IO_SIZE        0x00800000
67 #define CHRP_PCI_IO_PHYS        0xfe800000
68 #define CHRP_PCI_IO_BUS         0x00800000
69 #define CHRP_PCI_IO_SIZE        0x00400000
70 #define CHRP_PCI_MEM_PHYS       0x80000000
71 #define CHRP_PCI_MEM_BUS        0x80000000
72 #define CHRP_PCI_MEM_SIZE       0x7d000000
73 #define CHRP_PCI_MEMORY_PHYS    0x00000000
74 #define CHRP_PCI_MEMORY_BUS     0x00000000
75 #define CHRP_PCI_MEMORY_SIZE    0x40000000
76 #define PREP_REG_ADDR           0x80000cf8      /* MPC107 Config, Map A */
77 #define PREP_REG_DATA           0x80000cfc      /* MPC107 Config, Map A */
78 #define PREP_ISA_IO_PHYS        0x80000000
79 #define PREP_ISA_IO_BUS         0x00000000
80 #define PREP_ISA_IO_SIZE        0x00800000
81 #define PREP_PCI_IO_PHYS        0x81000000
82 #define PREP_PCI_IO_BUS         0x01000000
83 #define PREP_PCI_IO_SIZE        0x3e800000
84 #define PREP_PCI_MEM_PHYS       0xc0000000
85 #define PREP_PCI_MEM_BUS        0x00000000
86 #define PREP_PCI_MEM_SIZE       0x3f000000
87 #define PREP_PCI_MEMORY_PHYS    0x00000000
88 #define PREP_PCI_MEMORY_BUS     0x80000000
89 #define PREP_PCI_MEMORY_SIZE    0x80000000
90 #define MPC107_PCI_CMD          0x80000004      /* MPC107 PCI cmd reg */
91 #define MPC107_PCI_STAT         0x80000006      /* MPC107 PCI status reg */
92 #define PROC_INT1_ADR           0x800000a8      /* MPC107 Processor i/f cfg1 */
93 #define PROC_INT2_ADR           0x800000ac      /* MPC107 Processor i/f cfg2 */
94 #define MEM_CONT1_ADR           0x800000f0      /* MPC107 Memory control config. 1 */
95 #define MEM_CONT2_ADR           0x800000f4      /* MPC107 Memory control config. 2 */
96 #define MEM_CONT3_ADR           0x800000f8      /* MPC107 Memory control config. 3 */
97 #define MEM_CONT4_ADR           0x800000fc      /* MPC107 Memory control config. 4 */
98 #define MEM_ERREN1_ADR          0x800000c0      /* MPC107 Memory error enable 1 */
99 #define MEM_START1_ADR          0x80000080      /* MPC107 Memory starting addr */
100 #define MEM_START2_ADR          0x80000084      /* MPC107 Memory starting addr-lo */
101 #define XMEM_START1_ADR         0x80000088      /* MPC107 Extended mem. start addr-hi*/
102 #define XMEM_START2_ADR         0x8000008c      /* MPC107 Extended mem. start addr-lo*/
103 #define MEM_END1_ADR            0x80000090      /* MPC107 Memory ending address */
104 #define MEM_END2_ADR            0x80000094      /* MPC107 Memory ending addr-lo */
105 #define XMEM_END1_ADR           0x80000098      /* MPC107 Extended mem. end addrs-hi */
106 #define XMEM_END2_ADR           0x8000009c      /* MPC107 Extended mem. end addrs-lo*/
107 #define OUT_DRV_CONT            0x80000073      /* MPC107 Output Driver Control reg */
108 #define MEM_EN_ADR              0x800000a0      /* Memory bank enable */
109 #define PAGE_MODE               0x800000a3      /* MPC107 Page Mode Counter/Timer */
110
111 /*-----------------------------------------------------------------------
112  * Exception offsets (PowerPC standard)
113  */
114 #define EXC_OFF_RESERVED0       0x0000  /* Reserved */
115 #define EXC_OFF_SYS_RESET       0x0100  /* System reset */
116 #define EXC_OFF_MACH_CHCK       0x0200  /* Machine Check */
117 #define EXC_OFF_DATA_STOR       0x0300  /* Data Storage */
118 #define EXC_OFF_INS_STOR        0x0400  /* Instruction Storage */
119 #define EXC_OFF_EXTERNAL        0x0500  /* External */
120 #define EXC_OFF_ALIGN           0x0600  /* Alignment */
121 #define EXC_OFF_PROGRAM         0x0700  /* Program */
122 #define EXC_OFF_FPUNAVAIL       0x0800  /* Floating-point Unavailable */
123 #define EXC_OFF_DECR            0x0900  /* Decrementer */
124 #define EXC_OFF_RESERVED1       0x0A00  /* Reserved */
125 #define EXC_OFF_RESERVED2       0x0B00  /* Reserved */
126 #define EXC_OFF_SYS_CALL        0x0C00  /* System Call */
127 #define EXC_OFF_TRACE           0x0D00  /* Trace */
128 #define EXC_OFF_FPUNASSIST      0x0E00  /* Floating-point Assist */
129
130         /* 0x0E10 - 0x0FFF are marked reserved in The PowerPC Architecture book */
131         /* these found in DINK code  - may not apply to 8240*/
132 #define EXC_OFF_PMI             0x0F00  /* Performance Monitoring Interrupt */
133 #define EXC_OFF_VMXUI           0x0F20  /* VMX (AltiVec) Unavailable Interrupt */
134
135         /* 0x1000 - 0x2FFF are implementation specific */
136         /* these found in DINK code  - may not apply to 8240 */
137 #define EXC_OFF_ITME            0x1000  /* Instruction Translation Miss Exception */
138 #define EXC_OFF_DLTME           0x1100  /* Data Load Translation Miss Exception */
139 #define EXC_OFF_DSTME           0x1200  /* Data Store Translation Miss Exception */
140 #define EXC_OFF_IABE            0x1300  /* Instruction Addr Breakpoint Exception */
141 #define EXC_OFF_SMIE            0x1400  /* System Management Interrupt Exception */
142 #define EXC_OFF_JMDDI           0x1600  /* Java Mode denorm detect Interr -- WTF??*/
143 #define EXC_OFF_RMTE            0x2000  /* Run Mode or Trace Exception */
144
145 #define MAP_A_CONFIG_ADDR_HIGH  0x8000  /* Upper half of CONFIG_ADDR for Map A */
146 #define MAP_A_CONFIG_ADDR_LOW   0x0CF8  /* Lower half of CONFIG_ADDR for Map A */
147 #define MAP_A_CONFIG_DATA_HIGH  0x8000  /* Upper half of CONFIG_DAT for Map A */
148 #define MAP_A_CONFIG_DATA_LOW   0x0CFC  /* Lower half of CONFIG_DAT for Map A */
149 #define MAP_B_CONFIG_ADDR_HIGH  0xfec0  /* Upper half of CONFIG_ADDR for Map B */
150 #define MAP_B_CONFIG_ADDR_LOW   0x0000  /* Lower half of CONFIG_ADDR for Map B */
151 #define MAP_B_CONFIG_DATA_HIGH  0xfee0  /* Upper half of CONFIG_DAT for Map B */
152 #define MAP_B_CONFIG_DATA_LOW   0x0000  /* Lower half of CONFIG_DAT for Map B */
153
154
155 #if defined(CFG_ADDR_MAP_A)
156 #define CONFIG_ADDR_HIGH    MAP_A_CONFIG_ADDR_HIGH  /* Upper half of CONFIG_ADDR */
157 #define CONFIG_ADDR_LOW     MAP_A_CONFIG_ADDR_LOW   /* Lower half of CONFIG_ADDR */
158 #define CONFIG_DATA_HIGH    MAP_A_CONFIG_DATA_HIGH  /* Upper half of CONFIG_DAT */
159 #define CONFIG_DATA_LOW     MAP_A_CONFIG_DATA_LOW   /* Lower half of CONFIG_DAT */
160 #else /* Assume Map B, default */
161 #define CONFIG_ADDR_HIGH    MAP_B_CONFIG_ADDR_HIGH  /* Upper half of CONFIG_ADDR */
162 #define CONFIG_ADDR_LOW     MAP_B_CONFIG_ADDR_LOW   /* Lower half of CONFIG_ADDR */
163 #define CONFIG_DATA_HIGH    MAP_B_CONFIG_DATA_HIGH  /* Upper half of CONFIG_DAT */
164 #define CONFIG_DATA_LOW     MAP_B_CONFIG_DATA_LOW   /* Lower half of CONFIG_DAT */
165 #endif
166
167 #define CONFIG_ADDR     (CONFIG_ADDR_HIGH << 16 | CONFIG_ADDR_LOW)
168
169 #define CONFIG_DATA     (CONFIG_DATA_HIGH << 16 | CONFIG_DATA_LOW)
170
171 /* Macros to write to config registers. addr should be a constant in all cases */
172
173 #define CONFIG_WRITE_BYTE( addr, data ) \
174   __asm__ __volatile__( \
175   " stwbrx %1, 0, %0\n \
176     sync\n \
177     stb %3, %4(%2)\n \
178     sync " \
179   : /* no output */ \
180   : "r" (CONFIG_ADDR), "r" ((addr) & ~3), \
181     "b" (CONFIG_DATA), "r" (data), \
182     "n" ((addr) & 3));
183
184 #define CONFIG_WRITE_HALFWORD( addr, data ) \
185   __asm__ __volatile__( \
186   " stwbrx %1, 0, %0\n \
187     sync\n \
188     sthbrx %3, %4, %2\n \
189     sync " \
190   : /* no output */ \
191   : "r" (CONFIG_ADDR), "r" ((addr) & ~3), \
192     "r" (CONFIG_DATA), "r" (data), \
193     "b" ((addr) & 3));
194
195 /* this assumes it's writeing on word boundaries*/
196 #define CONFIG_WRITE_WORD( addr, data ) \
197   __asm__ __volatile__( \
198   " stwbrx %1, 0, %0\n \
199     sync\n \
200     stwbrx %3, 0, %2\n \
201     sync " \
202   : /* no output */ \
203   : "r" (CONFIG_ADDR), "r" (addr), \
204     "r" (CONFIG_DATA), "r" (data));
205
206 /* Configuration register reads*/
207
208 #define CONFIG_READ_BYTE( addr, reg ) \
209   __asm__ ( \
210   " stwbrx %1, 0, %2\n \
211     sync\n \
212     lbz   %0, %4(%3)\n \
213     sync " \
214   : "=r" (reg) \
215   : "r" ((addr) & ~3), "r" (CONFIG_ADDR), \
216     "b" (CONFIG_DATA), "n" ((addr) & 3));
217
218
219 #define CONFIG_READ_HALFWORD( addr, reg ) \
220   __asm__ ( \
221   " stwbrx %1, 0, %2\n \
222     sync\n \
223     lhbrx %0, %4, %3\n \
224     sync " \
225   : "=r" (reg) \
226   : "r" ((addr) & ~3), "r" (CONFIG_ADDR), \
227     "r" (CONFIG_DATA), \
228     "b" ((addr) & 3));
229
230 /* this assumes it's reading on word boundaries*/
231 #define CONFIG_READ_WORD( addr, reg ) \
232   __asm__ ( \
233   " stwbrx %1, 0, %2\n \
234     sync\n \
235     lwbrx %0, 0, %3\n \
236     sync " \
237   : "=r" (reg) \
238   : "r" (addr), "r" (CONFIG_ADDR),\
239     "r" (CONFIG_DATA));
240
241 /*
242  *  configuration register 'addresses'.
243  *  These are described in chaper 5 of the 8240 users manual.
244  *  Where the register has an abreviation in the manual, this has
245  *  been usaed here, otherwise a name in keeping with the norm has
246  *  been invented.
247  *  Note that some of these registers aren't documented in the manual.
248  */
249
250 #define PCICR           0x80000004  /* PCI Command Register */
251 #define PCISR           0x80000006  /* PCI Status Register */
252 #define REVID           0x80000008  /* CPU revision id */
253 #define PIR             0x80000009  /* PCI Programming Interface Register */
254 #define PBCCR           0x8000000b  /* PCI Base Class Code Register */
255 #define PCLSR           0x8000000c  /* Processor Cache Line Size Register */
256 #define PLTR            0x8000000d  /* PCI Latancy Timer Register */
257 #define PHTR            0x8000000e  /* PCI Header Type Register */
258 #define BISTCTRL        0x8000000f  /* BIST Control */
259 #define LMBAR           0x80000010  /* Local Base Addres Register */
260 #define PCSRBAR         0x80000014  /* PCSR Base Address Register */
261 #define ILR             0x8000003c  /* PCI Interrupt Line Register */
262 #define IPR             0x8000003d  /* Interrupt Pin Register */
263 #define MINGNT          0x8000003e  /* MIN GNI */
264 #define MAXLAT          0x8000003f  /* MAX LAT */
265 #define PCIACR          0x80000046  /* PCI Arbiter Control Register */
266 #define PMCR1           0x80000070  /* Power management config. 1 */
267 #define PMCR2           0x80000072  /* Power management config. 2 */
268 #define ODCR            0x80000073  /* Output Driver Control Register */
269 #define CLKDCR          0x80000074  /* CLK Driver Control Register */
270 #if defined(CONFIG_MPC8245) || defined(CONFIG_MPC8241)
271 #define MIOCR1          0x80000076  /* Miscellaneous I/O Control Register 1 */
272 #define MIOCR2          0x80000077  /* Miscellaneous I/O Control Register 2 */
273 #endif
274 #define EUMBBAR         0x80000078  /* Embedded Utilities Memory Block Base Address Register */
275 #define EUMBBAR_VAL     0x80500000  /* PCI Relocation offset for EUMB region */
276 #define EUMBSIZE        0x00100000  /* Size of EUMB region */
277
278 #define MSAR1           0x80000080  /* Memory Starting Address Register 1 */
279 #define MSAR2           0x80000084  /* Memory Starting Address Register 2 */
280 #define EMSAR1          0x80000088  /* Extended Memory Starting Address Register 1*/
281 #define EMSAR2          0x8000008c  /* Extended Memory Starting Address Register 2*/
282 #define MEAR1           0x80000090  /* Memory Ending Address Register 1 */
283 #define MEAR2           0x80000094  /* Memory Ending Address Register 2 */
284 #define EMEAR1          0x80000098  /* Extended Memory Ending Address Register 1 */
285 #define EMEAR2          0x8000009c  /* Extended Memory Ending Address Register 2 */
286 #define MBER            0x800000a0  /* Memory bank Enable Register*/
287 #define MPMR            0x800000a3  /* Memory Page Mode Register (stores PGMAX) */
288 #define PICR1           0x800000a8  /* Processor Interface Configuration Register 1 */
289 #define PICR2           0x800000ac  /* Processor Interface Configuration Register 2 */
290 #define ECCSBECR        0x800000b8  /* ECC Single-Bit Error Counter Register */
291 #define ECCSBETR        0x800000b8  /* ECC Single-Bit Error Trigger Register */
292 #define ERRENR1         0x800000c0  /* Error Enableing Register 1 */
293 #define ERRENR2         0x800000c4  /* Error Enableing Register 2 */
294 #define ERRDR1          0x800000c1  /* Error Detection Register 1 */
295 #define IPBESR          0x800000c3  /* Internal Processor Error Status Register */
296 #define ERRDR2          0x800000c5  /* Error Detection Register 2 */
297 #define PBESR           0x800000c7  /* PCI Bus Error Status Register */
298 #define PBEAR           0x800000c8  /* Processor/PCI Bus Error Status Register */
299 #define AMBOR           0x800000e0  /* Address Map B Options Register */
300 #define MCCR1           0x800000f0  /* Memory Control Configuration Register 1 */
301 #define MCCR2           0x800000f4  /* Memory Control Configuration Register 2 */
302 #define MCCR3           0x800000f8  /* Memory Control Configuration Register 3 */
303 #define MCCR4           0x800000fc  /* Memory Control Configuration Register 4 */
304
305 /* some values for some of the above */
306
307 #define PICR1_CF_APARK          0x00000008
308 #define PICR1_LE_MODE           0x00000020
309 #define PICR1_ST_GATH_EN        0x00000040
310 #if defined(CONFIG_MPC8240)
311 #define PICR1_EN_PCS            0x00000080 /* according to dink code, sets the 8240 to handle pci config space */
312 #elif defined(CONFIG_MPC8245) || defined(CONFIG_MPC8241)
313 #define PICR1_NO_BUSW_CK        0x00000080 /* no bus width check for flash writes */
314 #define PICR1_DEC               0x00000100 /* Time Base enable on 8245/8241 */
315 #define ERCR1                   0x800000d0  /* Extended ROM Configuration Register 1 */
316 #define ERCR2                   0x800000d4  /* Extended ROM Configuration Register 2 */
317 #define ERCR3                   0x800000d8  /* Extended ROM Configuration Register 3 */
318 #define ERCR4                   0x800000dc  /* Extended ROM Configuration Register 4 */
319 #define MIOCR1                  0x80000076  /* Miscellaneous I/O Control Register 1 */
320 #define MIOCR1_ADR_X            0x80000074  /* Miscellaneous I/O Control Register 1 */
321 #define MIOCR1_SHIFT            2
322 #define MIOCR2                  0x80000077  /* Miscellaneous I/O Control Register 2 */
323 #define MIOCR2_ADR_X            0x80000074  /* Miscellaneous I/O Control Register 1 */
324 #define MIOCR2_SHIFT            3
325 #define ODCR_ADR_X              0x80000070      /* Output Driver Control register */
326 #define ODCR_SHIFT              3
327 #define PMCR2_ADR               0x80000072      /* Power Mgmnt Cfg 2 register */
328 #define PMCR2_ADR_X             0x80000070
329 #define PMCR2_SHIFT             3
330 #define PMCR1_ADR               0x80000070      /* Power Mgmnt Cfg 1 reister */
331 #else
332 #error Specific type of MPC824x must be defined (i.e. CONFIG_MPC8240)
333 #endif
334 #define PICR1_CF_DPARK          0x00000200
335 #define PICR1_MCP_EN            0x00000800
336 #define PICR1_FLASH_WR_EN       0x00001000
337 #ifdef CONFIG_MPC8240
338 #define PICR1_ADDRESS_MAP       0x00010000
339 #define PIRC1_MSK               0xff000000
340 #endif
341 #define PICR1_PROC_TYPE_MSK     0x00060000
342 #define PICR1_PROC_TYPE_603E    0x00040000
343 #define PICR1_RCS0              0x00100000
344
345 #define PICR2_CF_SNOOP_WS_MASK  0x000c0000
346 #define PICR2_CF_SNOOP_WS_0WS   0x00000000
347 #define PICR2_CF_SNOOP_WS_1WS   0x00040000
348 #define PICR2_CF_SNOOP_WS_2WS   0x00080000
349 #define PICR2_CF_SNOOP_WS_3WS   0x000c0000
350 #define PICR2_CF_APHASE_WS_MASK 0x0000000c
351 #define PICR2_CF_APHASE_WS_0WS  0x00000000
352 #define PICR2_CF_APHASE_WS_1WS  0x00000004
353 #define PICR2_CF_APHASE_WS_2WS  0x00000008
354 #define PICR2_CF_APHASE_WS_3WS  0x0000000c
355
356 #define MCCR1_ROMNAL_SHIFT      28
357 #define MCCR1_ROMNAL_MSK        0xf0000000
358 #define MCCR1_ROMFAL_SHIFT      23
359 #define MCCR1_ROMFAL_MSK        0x0f800000
360 #define MCCR1_DBUS_SIZE0        0x00400000
361 #define MCCR1_BURST             0x00100000
362 #define MCCR1_MEMGO             0x00080000
363 #define MCCR1_SREN              0x00040000
364 #if defined(CONFIG_MPC8240)
365 #define MCCR1_RAM_TYPE          0x00020000
366 #elif defined(CONFIG_MPC8245) || defined(CONFIG_MPC8241)
367 #define MCCR1_SDRAM_EN          0x00020000
368 #else
369 #error Specific type of MPC824x must be defined (i.e. CONFIG_MPC8240)
370 #endif
371 #define MCCR1_PCKEN             0x00010000
372 #define MCCR1_BANK1ROW_SHIFT    2
373 #define MCCR1_BANK2ROW_SHIFT    4
374 #define MCCR1_BANK3ROW_SHIFT    6
375 #define MCCR1_BANK4ROW_SHIFT    8
376 #define MCCR1_BANK5ROW_SHIFT    10
377 #define MCCR1_BANK6ROW_SHIFT    12
378 #define MCCR1_BANK7ROW_SHIFT    14
379
380 #define MCCR2_TS_WAIT_TIMER_MSK 0xe0000000
381 #define MCCR2_TS_WAIT_TIMER_SHIFT 29
382 #define MCCR2_ASRISE_MSK        0x1e000000
383 #define MCCR2_ASRISE_SHIFT      25
384 #define MCCR2_ASFALL_MSK        0x01e00000
385 #define MCCR2_ASFALL_SHIFT      21
386
387 #define MCCR2_INLINE_PAR_NOT_ECC    0x00100000
388 #define MCCR2_WRITE_PARITY_CHK  0x00080000
389 #define MCCR2_INLFRD_PARECC_CHK_EN  0x00040000
390 #ifdef CONFIG_MPC8240
391 #define MCCR2_ECC_EN            0x00020000
392 #define MCCR2_EDO               0x00010000
393 #endif
394 #define MCCR2_REFINT_MSK        0x0000fffc
395 #define MCCR2_REFINT_SHIFT      2
396 #define MCCR2_RSV_PG            0x00000002
397 #define MCCR2_PMW_PAR           0x00000001
398
399 #define MCCR3_BSTOPRE2TO5_MSK   0xf0000000 /*BSTOPRE[2-5]*/
400 #define MCCR3_BSTOPRE2TO5_SHIFT 28
401 #define MCCR3_REFREC_MSK        0x0f000000
402 #define MCCR3_REFREC_SHIFT      24
403 #ifdef CONFIG_MPC8240
404 #define MCCR3_RDLAT_MSK         0x00f00000
405 #define MCCR3_RDLAT_SHIFT       20
406 #define MCCR3_CPX               0x00010000
407 #define MCCR3_RAS6P_MSK         0x00078000
408 #define MCCR3_RAS6P_SHIFT       15
409 #define MCCR3_CAS5_MSK          0x00007000
410 #define MCCR3_CAS5_SHIFT        12
411 #define MCCR3_CP4_MSK           0x00000e00
412 #define MCCR3_CP4_SHIFT         9
413 #define MCCR3_CAS3_MSK          0x000001c0
414 #define MCCR3_CAS3_SHIFT        6
415 #define MCCR3_RCD2_MSK          0x00000038
416 #define MCCR3_RCD2_SHIFT        3
417 #define MCCR3_RP1_MSK           0x00000007
418 #define MCCR3_RP1_SHIFT         0
419 #endif
420
421 #define MCCR4_PRETOACT_MSK      0xf0000000
422 #define MCCR4_PRETOACT_SHIFT    28
423 #define MCCR4_ACTTOPRE_MSK      0x0f000000
424 #define MCCR4_ACTTOPRE_SHIFT    24
425 #define MCCR4_WMODE             0x00800000
426 #define MCCR4_INLINE            0x00400000
427 #if defined(CONFIG_MPC8240)
428 #define MCCR4_BIT21             0x00200000 /* this include cos DINK code sets it- unknown function*/
429 #elif defined(CONFIG_MPC8245) || defined(CONFIG_MPC8241)
430 #define MCCR4_EXTROM            0x00200000 /* enables Extended ROM space */
431 #else
432 #error Specific type of MPC824x must be defined (i.e. CONFIG_MPC8240)
433 #endif
434 #define MCCR4_REGISTERED        0x00100000
435 #define MCCR4_BSTOPRE0TO1_MSK   0x000c0000 /*BSTOPRE[0-1]*/
436 #define MCCR4_BSTOPRE0TO1_SHIFT 18
437 #define MCCR4_REGDIMM           0x00008000
438 #define MCCR4_SDMODE_MSK        0x00007f00
439 #define MCCR4_SDMODE_SHIFT      8
440 #define MCCR4_ACTTORW_MSK       0x000000f0
441 #define MCCR4_ACTTORW_SHIFT     4
442 #define MCCR4_BSTOPRE6TO9_MSK   0x0000000f /*BSTOPRE[6-9]*/
443 #define MCCR4_BSTOPRE6TO9_SHIFT 0
444 #define MCCR4_DBUS_SIZE2_SHIFT  17
445
446 #define MICR_ADDR_MASK          0x0ff00000
447 #define MICR_ADDR_SHIFT         20
448 #define MICR_EADDR_MASK         0x30000000
449 #define MICR_EADDR_SHIFT        28
450
451 #define BATU_BEPI_MSK           0xfffe0000
452 #define BATU_BL_MSK             0x00001ffc
453
454 #define BATU_BL_128K            0x00000000
455 #define BATU_BL_256K            0x00000004
456 #define BATU_BL_512K            0x0000000c
457 #define BATU_BL_1M              0x0000001c
458 #define BATU_BL_2M              0x0000003c
459 #define BATU_BL_4M              0x0000007c
460 #define BATU_BL_8M              0x000000fc
461 #define BATU_BL_16M             0x000001fc
462 #define BATU_BL_32M             0x000003fc
463 #define BATU_BL_64M             0x000007fc
464 #define BATU_BL_128M            0x00000ffc
465 #define BATU_BL_256M            0x00001ffc
466
467 #define BATU_VS                 0x00000002
468 #define BATU_VP                 0x00000001
469
470 #define BATL_BRPN_MSK           0xfffe0000
471 #define BATL_WIMG_MSK           0x00000078
472
473 #define BATL_WRITETHROUGH       0x00000040
474 #define BATL_CACHEINHIBIT       0x00000020
475 #define BATL_MEMCOHERENCE       0x00000010
476 #define BATL_GUARDEDSTORAGE     0x00000008
477
478 #define BATL_PP_MSK             0x00000003
479 #define BATL_PP_00              0x00000000 /* No access */
480 #define BATL_PP_01              0x00000001 /* Read-only */
481 #define BATL_PP_10              0x00000002 /* Read-write */
482 #define BATL_PP_11              0x00000003
483
484 /*
485  * I'd attempt to do defines for the PP bits, but it's use is a bit
486  * too complex, see the PowerPC Operating Environment Architecture
487  * section in the PowerPc arch book, chapter 4.
488  */
489
490 /*eumb and epic config*/
491
492 #define EPIC_FPR                0x00041000
493 #define EPIC_GCR                0x00041020
494 #define EPIC_EICR               0x00041030
495 #define EPIC_EVI                0x00041080
496 #define EPIC_PI                 0x00041090
497 #define EPIC_SVR                0x000410E0
498 #define EPIC_TFRR               0x000410F0
499
500 /*
501  * Note the information for these is rather mangled in the 8240 manual.
502  * These are guesses.
503  */
504
505 #define EPIC_GTCCR0             0x00041100
506 #define EPIC_GTCCR1             0x00041140
507 #define EPIC_GTCCR2             0x00041180
508 #define EPIC_GTCCR3             0x000411C0
509 #define EPIC_GTBCR0             0x00041110
510 #define EPIC_GTBCR1             0x00041150
511 #define EPIC_GTBCR2             0x00041190
512 #define EPIC_GTBCR3             0x000411D0
513 #define EPIC_GTVPR0             0x00041120
514 #define EPIC_GTVPR1             0x00041160
515 #define EPIC_GTVPR2             0x000411a0
516 #define EPIC_GTVPR3             0x000411e0
517 #define EPIC_GTDR0              0x00041130
518 #define EPIC_GTDR1              0x00041170
519 #define EPIC_GTDR2              0x000411b0
520 #define EPIC_GTDR3              0x000411f0
521
522 #define EPIC_IVPR0              0x00050200
523 #define EPIC_IVPR1              0x00050220
524 #define EPIC_IVPR2              0x00050240
525 #define EPIC_IVPR3              0x00050260
526 #define EPIC_IVPR4              0x00050280
527
528 #define EPIC_SVPR0              0x00050200
529 #define EPIC_SVPR1              0x00050220
530 #define EPIC_SVPR2              0x00050240
531 #define EPIC_SVPR3              0x00050260
532 #define EPIC_SVPR4              0x00050280
533 #define EPIC_SVPR5              0x000502A0
534 #define EPIC_SVPR6              0x000502C0
535 #define EPIC_SVPR7              0x000502E0
536 #define EPIC_SVPR8              0x00050300
537 #define EPIC_SVPR9              0x00050320
538 #define EPIC_SVPRa              0x00050340
539 #define EPIC_SVPRb              0x00050360
540 #define EPIC_SVPRc              0x00050380
541 #define EPIC_SVPRd              0x000503A0
542 #define EPIC_SVPRe              0x000503C0
543 #define EPIC_SVPRf              0x000503E0
544
545 /* MPC8240 Byte Swap/PCI Support Macros */
546 #define BYTE_SWAP_16_BIT(x)    ( (((x) & 0x00ff) << 8) | ( (x) >> 8) )
547 #define LONGSWAP(x) ((((x) & 0x000000ff) << 24) | (((x) & 0x0000ff00) << 8)|\
548                      (((x) & 0x00ff0000) >>  8) | (((x) & 0xff000000) >> 24) )
549 #define PCISWAP(x)   LONGSWAP(x)
550
551 #ifndef __ASSEMBLY__
552
553 /*
554  * MPC107 Support
555  *
556  */
557 unsigned int mpc824x_mpc107_getreg(unsigned int regNum);
558 void mpc824x_mpc107_setreg(unsigned int regNum, unsigned int regVal);
559 void mpc824x_mpc107_write8(unsigned int address, unsigned char data);
560 void mpc824x_mpc107_write16(unsigned int address, unsigned short data);
561 void mpc824x_mpc107_write32(unsigned int address, unsigned int data);
562 unsigned char mpc824x_mpc107_read8(unsigned int address);
563 unsigned short mpc824x_mpc107_read16(unsigned int address);
564 unsigned int mpc824x_mpc107_read32(unsigned int address);
565 unsigned int mpc824x_eummbar_read(unsigned int regNum);
566 void mpc824x_eummbar_write(unsigned int regNum, unsigned int regVal);
567
568 #ifdef CONFIG_PCI
569 struct pci_controller;
570 void pci_cpm824x_init(struct pci_controller* hose);
571 #endif
572
573 #endif /* __ASSEMBLY__ */
574
575 #endif /* __MPC824X_H__ */