sc520.h 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319
  1. /*
  2. * (C) Copyright 2002
  3. * Daniel Engström, Omicron Ceti AB <daniel@omicron.se>.
  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. #ifndef _ASM_IC_SC520_H_
  24. #define _ASM_IC_SC520_H_ 1
  25. #ifndef __ASSEMBLY__
  26. void init_sc520(void);
  27. unsigned long init_sc520_dram(void);
  28. void sc520_udelay(unsigned long usec);
  29. /* Memory mapped configuration registers */
  30. typedef struct sc520_mmcr {
  31. u16 revid; /* ElanSC520 microcontroller revision id */
  32. u8 cpuctl; /* am5x86 CPU control */
  33. u8 pad_0x003[0x0d];
  34. u8 drcctl; /* SDRAM control */
  35. u8 pad_0x011[0x01];
  36. u8 drctmctl; /* SDRAM timing control */
  37. u8 pad_0x013[0x01];
  38. u16 drccfg; /* SDRAM bank configuration*/
  39. u8 pad_0x016[0x02];
  40. u32 drcbendadr; /* SDRAM bank 0-3 ending address*/
  41. u8 pad_0x01c[0x04];
  42. u8 eccctl; /* ECC control */
  43. u8 eccsta; /* ECC status */
  44. u8 eccckbpos; /* ECC check bit position */
  45. u8 ecccktest; /* ECC Check Code Test */
  46. u32 eccsbadd; /* ECC single-bit error address */
  47. u32 eccmbadd; /* ECC multi-bit error address */
  48. u8 pad_0x02c[0x14];
  49. u8 dbctl; /* SDRAM buffer control */
  50. u8 pad_0x041[0x0f];
  51. u16 bootcsctl; /* /BOOTCS control */
  52. u8 pad_0x052[0x02];
  53. u16 romcs1ctl; /* /ROMCS1 control */
  54. u16 romcs2ctl; /* /ROMCS2 control */
  55. u8 pad_0x058[0x08];
  56. u16 hbctl; /* host bridge control */
  57. u16 hbtgtirqctl; /* host bridge target interrupt control */
  58. u16 hbtgtirqsta; /* host bridge target interrupt status */
  59. u16 hbmstirqctl; /* host bridge target interrupt control */
  60. u16 hbmstirqsta; /* host bridge master interrupt status */
  61. u8 pad_0x06a[0x02];
  62. u32 mstintadd; /* host bridge master interrupt address */
  63. u8 sysarbctl; /* system arbiter control */
  64. u8 pciarbsta; /* PCI bus arbiter status */
  65. u16 sysarbmenb; /* system arbiter master enable */
  66. u32 arbprictl; /* arbiter priority control */
  67. u8 pad_0x078[0x08];
  68. u8 adddecctl; /* address decode control */
  69. u8 pad_0x081[0x01];
  70. u16 wpvsta; /* write-protect violation status */
  71. u8 pad_0x084[0x04];
  72. u32 par[16]; /* programmable address regions */
  73. u8 pad_0x0c8[0x0b38];
  74. u8 gpecho; /* GP echo mode */
  75. u8 gpcsdw; /* GP chip select data width */
  76. u16 gpcsqual; /* GP chip select qualification */
  77. u8 pad_0xc04[0x4];
  78. u8 gpcsrt; /* GP chip select recovery time */
  79. u8 gpcspw; /* GP chip select pulse width */
  80. u8 gpcsoff; /* GP chip select offset */
  81. u8 gprdw; /* GP read pulse width */
  82. u8 gprdoff; /* GP read offset */
  83. u8 gpwrw; /* GP write pulse width */
  84. u8 gpwroff; /* GP write offset */
  85. u8 gpalew; /* GP ale pulse width */
  86. u8 gpaleoff; /* GP ale offset */
  87. u8 pad_0xc11[0x0f];
  88. u16 piopfs15_0; /* PIO15-PIO0 pin function select */
  89. u16 piopfs31_16; /* PIO31-PIO16 pin function select */
  90. u8 cspfs; /* chip select pin function select */
  91. u8 pad_0xc25[0x01];
  92. u8 clksel; /* clock select */
  93. u8 pad_0xc27[0x01];
  94. u16 dsctl; /* drive strength control */
  95. u16 piodir15_0; /* PIO15-PIO0 direction */
  96. u16 piodir31_16; /* PIO31-PIO16 direction */
  97. u8 pad_0xc2e[0x02];
  98. u16 piodata15_0 ; /* PIO15-PIO0 data */
  99. u16 piodata31_16; /* PIO31-PIO16 data */
  100. u16 pioset15_0; /* PIO15-PIO0 set */
  101. u16 pioset31_16; /* PIO31-PIO16 set */
  102. u16 pioclr15_0; /* PIO15-PIO0 clear */
  103. u16 pioclr31_16; /* PIO31-PIO16 clear */
  104. u8 pad_0xc3c[0x24];
  105. u16 swtmrmilli; /* software timer millisecond count */
  106. u16 swtmrmicro; /* software timer microsecond count */
  107. u8 swtmrcfg; /* software timer configuration */
  108. u8 pad_0xc65[0x0b];
  109. u8 gptmrsta; /* GP timers status register */
  110. u8 pad_0xc71;
  111. u16 gptmr0ctl; /* GP timer 0 mode/control */
  112. u16 gptmr0cnt; /* GP timer 0 count */
  113. u16 gptmr0maxcmpa; /* GP timer 0 maxcount compare A */
  114. u16 gptmr0maxcmpb; /* GP timer 0 maxcount compare B */
  115. u16 gptmr1ctl; /* GP timer 1 mode/control */
  116. u16 gptmr1cnt; /* GP timer 1 count */
  117. u16 gptmr1maxcmpa; /* GP timer 1 maxcount compare A */
  118. u16 gptmr1maxcmpb; /* GP timer 1 maxcount compare B*/
  119. u16 gptmr2ctl; /* GP timer 2 mode/control */
  120. u16 gptmr2cnt; /* GP timer 2 count */
  121. u8 pad_0xc86[0x08];
  122. u16 gptmr2maxcmpa; /* GP timer 2 maxcount compare A */
  123. u8 pad_0xc90[0x20];
  124. u16 wdtmrctl; /* watchdog timer control */
  125. u16 wdtmrcntl; /* watchdog timer count low */
  126. u16 wdtmrcnth; /* watchdog timer count high */
  127. u8 pad_0xcb6[0x0a];
  128. u8 uart1ctl; /* UART 1 general control */
  129. u8 uart1sta; /* UART 1 general status */
  130. u8 uart1fcrshad; /* UART 1 FIFO control shadow */
  131. u8 pad_0xcc3[0x01];
  132. u8 uart2ctl; /* UART 2 general control */
  133. u8 uart2sta; /* UART 2 general status */
  134. u8 uart2fcrshad; /* UART 2 FIFO control shadow */
  135. u8 pad_0xcc7[0x09];
  136. u8 ssictl; /* SSI control */
  137. u8 ssixmit; /* SSI transmit */
  138. u8 ssicmd; /* SSI command */
  139. u8 ssista; /* SSI status */
  140. u8 ssircv; /* SSI receive */
  141. u8 pad_0xcd5[0x2b];
  142. u8 picicr; /* interrupt control */
  143. u8 pad_0xd01[0x01];
  144. u8 pic_mode[3]; /* PIC interrupt mode */
  145. u8 pad_0xd05[0x03];
  146. u16 swint16_1; /* software interrupt 16-1 control */
  147. u8 swint22_17; /* software interrupt 22-17/NMI control */
  148. u8 pad_0xd0b[0x05];
  149. u16 intpinpol; /* interrupt pin polarity */
  150. u8 pad_0xd12[0x02];
  151. u16 pcihostmap; /* PCI host bridge interrupt mapping */
  152. u8 pad_0xd16[0x02];
  153. u16 eccmap; /* ECC interrupt mapping */
  154. u8 gp_tmr_int_map[3]; /* GP timer interrupt mapping */
  155. u8 pad_0xd1d[0x03];
  156. u8 pit_int_map[3]; /* PIT interrupt mapping */
  157. u8 pad_0xd23[0x05];
  158. u8 uart_int_map[2]; /* UART interrupt mapping */
  159. u8 pad_0xd2a[0x06];
  160. u8 pci_int_map[4]; /* PCI interrupt mapping (A through D)*/
  161. u8 pad_0xd34[0x0c];
  162. u8 dmabcintmap; /* DMA buffer chaining interrupt mapping */
  163. u8 ssimap; /* SSI interrupt mapping register */
  164. u8 wdtmap; /* watchdog timer interrupt mapping */
  165. u8 rtcmap; /* RTC interrupt mapping register */
  166. u8 wpvmap; /* write-protect interrupt mapping */
  167. u8 icemap; /* AMDebug JTAG Rx/Tx interrupt mapping */
  168. u8 ferrmap; /* floating point error interrupt mapping */
  169. u8 pad_0xd47[0x09];
  170. u8 gp_int_map[11]; /* GP IRQ interrupt mapping */
  171. u8 pad_0xd5b[0x15];
  172. u8 sysinfo; /* system board information */
  173. u8 pad_0xd71[0x01];
  174. u8 rescfg; /* reset configuration */
  175. u8 pad_0xd73[0x01];
  176. u8 ressta; /* reset status */
  177. u8 pad_0xd75[0x0b];
  178. u8 gpdmactl; /* GP-DMA Control */
  179. u8 gpdmammio; /* GP-DMA memory-mapped I/O */
  180. u16 gpdmaextchmapa; /* GP-DMA resource channel map a */
  181. u16 gpdmaextchmapb; /* GP-DMA resource channel map b */
  182. u8 gp_dma_ext_pg_0; /* GP-DMA channel extended page 0 */
  183. u8 gp_dma_ext_pg_1; /* GP-DMA channel extended page 0 */
  184. u8 gp_dma_ext_pg_2; /* GP-DMA channel extended page 0 */
  185. u8 gp_dma_ext_pg_3; /* GP-DMA channel extended page 0 */
  186. u8 gp_dma_ext_pg_5; /* GP-DMA channel extended page 0 */
  187. u8 gp_dma_ext_pg_6; /* GP-DMA channel extended page 0 */
  188. u8 gp_dma_ext_pg_7; /* GP-DMA channel extended page 0 */
  189. u8 pad_0xd8d[0x03];
  190. u8 gpdmaexttc3; /* GP-DMA channel 3 extender transfer count */
  191. u8 gpdmaexttc5; /* GP-DMA channel 5 extender transfer count */
  192. u8 gpdmaexttc6; /* GP-DMA channel 6 extender transfer count */
  193. u8 gpdmaexttc7; /* GP-DMA channel 7 extender transfer count */
  194. u8 pad_0xd94[0x4];
  195. u8 gpdmabcctl; /* buffer chaining control */
  196. u8 gpdmabcsta; /* buffer chaining status */
  197. u8 gpdmabsintenb; /* buffer chaining interrupt enable */
  198. u8 gpdmabcval; /* buffer chaining valid */
  199. u8 pad_0xd9c[0x04];
  200. u16 gpdmanxtaddl3; /* GP-DMA channel 3 next address low */
  201. u16 gpdmanxtaddh3; /* GP-DMA channel 3 next address high */
  202. u16 gpdmanxtaddl5; /* GP-DMA channel 5 next address low */
  203. u16 gpdmanxtaddh5; /* GP-DMA channel 5 next address high */
  204. u16 gpdmanxtaddl6; /* GP-DMA channel 6 next address low */
  205. u16 gpdmanxtaddh6; /* GP-DMA channel 6 next address high */
  206. u16 gpdmanxtaddl7; /* GP-DMA channel 7 next address low */
  207. u16 gpdmanxtaddh7; /* GP-DMA channel 7 next address high */
  208. u16 gpdmanxttcl3; /* GP-DMA channel 3 next transfer count low */
  209. u16 gpdmanxttch3; /* GP-DMA channel 3 next transfer count high */
  210. u16 gpdmanxttcl5; /* GP-DMA channel 5 next transfer count low */
  211. u16 gpdmanxttch5; /* GP-DMA channel 5 next transfer count high */
  212. u16 gpdmanxttcl6; /* GP-DMA channel 6 next transfer count low */
  213. u16 gpdmanxttch6; /* GP-DMA channel 6 next transfer count high */
  214. u16 gpdmanxttcl7; /* GP-DMA channel 7 next transfer count low */
  215. u16 gpdmanxttch7; /* GP-DMA channel 7 next transfer count high */
  216. u8 pad_0xdc0[0x0240];
  217. } sc520_mmcr_t;
  218. extern volatile sc520_mmcr_t *sc520_mmcr;
  219. #endif
  220. /* MMCR Offsets (required for assembler code */
  221. #define SC520_DBCTL 0x0040 /* SDRAM Buffer Control Register */
  222. #define SC520_PAR14 0x00c0 /* Programmable Address Region 14 Register */
  223. #define SC520_PAR15 0x00c4 /* Programmable Address Region 15 Register */
  224. #define SC520_SWTMRMILLI 0x0c60 /* Software Timer Millisecond Count */
  225. #define SC520_SWTMRMICRO 0x0c62 /* Software Timer Microsecond Count */
  226. /* MMCR Register bits (not all of them :) ) */
  227. /* SSI Stuff */
  228. #define CTL_CLK_SEL_4 0x00 /* Nominal Bit Rate = 8 MHz */
  229. #define CTL_CLK_SEL_8 0x10 /* Nominal Bit Rate = 4 MHz */
  230. #define CTL_CLK_SEL_16 0x20 /* Nominal Bit Rate = 2 MHz */
  231. #define CTL_CLK_SEL_32 0x30 /* Nominal Bit Rate = 1 MHz */
  232. #define CTL_CLK_SEL_64 0x40 /* Nominal Bit Rate = 512 KHz */
  233. #define CTL_CLK_SEL_128 0x50 /* Nominal Bit Rate = 256 KHz */
  234. #define CTL_CLK_SEL_256 0x60 /* Nominal Bit Rate = 128 KHz */
  235. #define CTL_CLK_SEL_512 0x70 /* Nominal Bit Rate = 64 KHz */
  236. #define TC_INT_ENB 0x08 /* Transaction Complete Interrupt Enable */
  237. #define PHS_INV_ENB 0x04 /* SSI Inverted Phase Mode Enable */
  238. #define CLK_INV_ENB 0x02 /* SSI Inverted Clock Mode Enable */
  239. #define MSBF_ENB 0x01 /* SSI Most Significant Bit First Mode Enable */
  240. #define SSICMD_CMD_SEL_XMITRCV 0x03 /* Simultaneous Transmit / Receive Transaction */
  241. #define SSICMD_CMD_SEL_RCV 0x02 /* Receive Transaction */
  242. #define SSICMD_CMD_SEL_XMIT 0x01 /* Transmit Transaction */
  243. #define SSISTA_BSY 0x02 /* SSI Busy */
  244. #define SSISTA_TC_INT 0x01 /* SSI Transaction Complete Interrupt */
  245. /* BITS for SC520_ADDDECCTL: */
  246. #define WPV_INT_ENB 0x80 /* Write-Protect Violation Interrupt Enable */
  247. #define IO_HOLE_DEST_PCI 0x10 /* I/O Hole Access Destination */
  248. #define RTC_DIS 0x04 /* RTC Disable */
  249. #define UART2_DIS 0x02 /* UART2 Disable */
  250. #define UART1_DIS 0x01 /* UART1 Disable */
  251. /* 0x28000000 - 0x3fffffff is used by the flash banks */
  252. /* 0x40000000 - 0xffffffff is not adressable by the SC520 */
  253. /* priority numbers used for interrupt channel mappings */
  254. #define SC520_IRQ_DISABLED 0
  255. #define SC520_IRQ0 1
  256. #define SC520_IRQ1 2
  257. #define SC520_IRQ2 4 /* same as IRQ9 */
  258. #define SC520_IRQ3 11
  259. #define SC520_IRQ4 12
  260. #define SC520_IRQ5 13
  261. #define SC520_IRQ6 21
  262. #define SC520_IRQ7 22
  263. #define SC520_IRQ8 3
  264. #define SC520_IRQ9 4
  265. #define SC520_IRQ10 5
  266. #define SC520_IRQ11 6
  267. #define SC520_IRQ12 7
  268. #define SC520_IRQ13 8
  269. #define SC520_IRQ14 9
  270. #define SC520_IRQ15 10
  271. #endif