mpc824x.h 21 KB

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