xtml605.h 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338
  1. /* Copyright (c) 2007-2013 by Tensilica Inc. ALL RIGHTS RESERVED.
  2. / These coded instructions, statements, and computer programs are the
  3. / copyrighted works and confidential proprietary information of Tensilica Inc.
  4. / They may not be modified, copied, reproduced, distributed, or disclosed to
  5. / third parties in any manner, medium, or form, in whole or in part, without
  6. / the prior written consent of Tensilica Inc.
  7. */
  8. /* xtml605.h - Xtensa Xilinx ML605 (XT-ML605) board specific definitions */
  9. /* xtkc705.h - Also includes this, for the Xilinx KC705 (XT-KC705). */
  10. #ifndef _INC_ML605_H_
  11. #define _INC_ML605_H_
  12. #include <xtensa/config/core.h>
  13. #include <xtensa/config/system.h>
  14. #if XTBOARD_IS_KC705
  15. #define XTBOARD_NAME "XT-KC705"
  16. #else
  17. #define XTBOARD_NAME "XT-ML605"
  18. #endif
  19. /*
  20. * Default assignment of ML605 devices to external interrupts.
  21. */
  22. /* Ethernet interrupt: */
  23. #ifdef XCHAL_EXTINT1_NUM
  24. #define ETHERNET_INTNUM XCHAL_EXTINT1_NUM
  25. #define ETHERNET_INTLEVEL XCHAL_EXTINT1_LEVEL
  26. #define ETHERNET_INTMASK XCHAL_EXTINT1_MASK
  27. #else
  28. #define ETHERNET_INTMASK 0
  29. #endif
  30. /* UART interrupt: */
  31. #ifdef XCHAL_EXTINT0_NUM
  32. #define UART16550_INTNUM XCHAL_EXTINT0_NUM
  33. #define UART16550_INTLEVEL XCHAL_EXTINT0_LEVEL
  34. #define UART16550_INTMASK XCHAL_EXTINT0_MASK
  35. #else
  36. #define UART16550_INTMASK 0
  37. #endif
  38. /* Audio output interrupt (I2S transmitter FIFO): */
  39. #ifdef XCHAL_EXTINT2_NUM
  40. #define AUDIO_I2S_OUT_INTNUM XCHAL_EXTINT2_NUM
  41. #define AUDIO_I2S_OUT_INTLEVEL XCHAL_EXTINT2_LEVEL
  42. #define AUDIO_I2S_OUT_INTMASK XCHAL_EXTINT2_MASK
  43. #else
  44. #define AUDIO_I2S_OUT_INTMASK 0
  45. #endif
  46. /* Audio input interrupt (I2S receiver FIFO): */
  47. #ifdef XCHAL_EXTINT3_NUM
  48. #define AUDIO_I2S_IN_INTNUM XCHAL_EXTINT3_NUM
  49. #define AUDIO_I2S_IN_INTLEVEL XCHAL_EXTINT3_LEVEL
  50. #define AUDIO_I2S_IN_INTMASK XCHAL_EXTINT3_MASK
  51. #else
  52. #define AUDIO_I2S_IN_INTMASK 0
  53. #endif
  54. /* I2C interrupt */
  55. #ifdef XCHAL_EXTINT4_NUM
  56. #define I2C_INTNUM XCHAL_EXTINT4_NUM
  57. #define I2C_INTLEVEL XCHAL_EXTINT4_LEVEL
  58. #define I2C_INTMASK XCHAL_EXTINT4_MASK
  59. #else
  60. #define I2C_INTMASK 0
  61. #endif
  62. /* USB interrupt */
  63. #ifdef XCHAL_EXTINT5_NUM
  64. #define USB_INTNUM XCHAL_EXTINT5_NUM
  65. #define USB_INTLEVEL XCHAL_EXTINT5_LEVEL
  66. #define USB_INTMASK XCHAL_EXTINT5_MASK
  67. #else
  68. #define USB_INTMASK 0
  69. #endif
  70. /*
  71. * Device addresses.
  72. *
  73. * Note: for endianness-independence, use 32-bit loads and stores for all
  74. * register accesses to Ethernet, UART and LED devices. Undefined bits
  75. * may need to be masked out if needed when reading if the actual register
  76. * size is smaller than 32 bits.
  77. *
  78. * Note: ML605 bus byte lanes are defined in terms of msbyte and lsbyte
  79. * relative to the processor. So 32-bit registers are accessed consistently
  80. * from both big and little endian processors. However, this means byte
  81. * sequences are not consistent between big and little endian processors.
  82. * This is fine for RAM, and for ROM if ROM is created for a specific
  83. * processor (and thus has correct byte sequences). However this may be
  84. * unexpected for Flash, which might contain a file-system that one wants
  85. * to use for multiple processor configurations (eg. the Flash might contain
  86. * the Ethernet card's address, endianness-independent application data, etc).
  87. * That is, byte sequences written in Flash by a core of a given endianness
  88. * will be byte-swapped when seen by a core of the other endianness.
  89. * Someone implementing an endianness-independent Flash file system will
  90. * likely handle this byte-swapping issue in the Flash driver software.
  91. */
  92. #define ML605_FLASH_MAXSIZE 0x01000000 /* 16 MB */
  93. #define ML605_FLASH_IOBLOCK_OFS 0x08000000
  94. #define KC705_FLASH_MAXSIZE 0x08000000 /* 128 MB */
  95. #define KC705_FLASH_IOBLOCK_OFS 0x00000000
  96. #if XTBOARD_IS_KC705
  97. #define XTBOARD_FLASH_MAXSIZE KC705_FLASH_MAXSIZE
  98. #define XTBOARD_FLASH_IO_OFS KC705_FLASH_IOBLOCK_OFS
  99. #else
  100. #define XTBOARD_FLASH_MAXSIZE ML605_FLASH_MAXSIZE
  101. #define XTBOARD_FLASH_IO_OFS ML605_FLASH_IOBLOCK_OFS
  102. #endif
  103. #ifdef XSHAL_IOBLOCK_BYPASS_PADDR
  104. /* Flash Memory: */
  105. # define XTBOARD_FLASH_PADDR (XSHAL_IOBLOCK_BYPASS_PADDR+XTBOARD_FLASH_IO_OFS)
  106. /* FPGA registers: */
  107. # define XTBOARD_FPGAREGS_PADDR (XSHAL_IOBLOCK_BYPASS_PADDR+0x0D020000)
  108. /* Ethernet controller/transceiver SONIC SN83934: */
  109. # define ETHERNET_PADDR (XSHAL_IOBLOCK_BYPASS_PADDR+0x0D030000)
  110. /* UART National-Semi PC16550D: */
  111. # define UART16550_PADDR (XSHAL_IOBLOCK_BYPASS_PADDR+0x0D050000)
  112. /* I2S transmitter */
  113. # define AUDIO_I2S_OUT_PADDR (XSHAL_IOBLOCK_BYPASS_PADDR+0x0D080000)
  114. /* I2S receiver */
  115. # define AUDIO_I2S_IN_PADDR (XSHAL_IOBLOCK_BYPASS_PADDR+0x0D088000)
  116. /* I2C master */
  117. # define I2C_PADDR (XSHAL_IOBLOCK_BYPASS_PADDR+0x0D090000)
  118. /* SPI controller */
  119. # define SPI_PADDR (XSHAL_IOBLOCK_BYPASS_PADDR+0x0D0A0000)
  120. /* Display controller Sunplus SPLC780D, 4bit mode,
  121. * LCD Display MYTech MOC-16216B-B: */
  122. # define SPLC780D_4BIT_PADDR (XSHAL_IOBLOCK_BYPASS_PADDR+0x0D0C0000)
  123. /* USB Controller */
  124. # define USB_PADDR (XSHAL_IOBLOCK_BYPASS_PADDR+0x0D0D0000)
  125. /* Ethernet buffer: */
  126. # define ETHERNET_BUFFER_PADDR (XSHAL_IOBLOCK_BYPASS_PADDR+0x0D800000)
  127. #endif /* XSHAL_IOBLOCK_BYPASS_PADDR */
  128. /* These devices might be accessed cached: */
  129. #ifdef XSHAL_IOBLOCK_CACHED_PADDR
  130. # define XTBOARD_FLASH_CACHED_PADDR (XSHAL_IOBLOCK_CACHED_PADDR+XTBOARD_FLASH_IO_OFS)
  131. # define ETHERNET_BUFFER_CACHED_PADDR (XSHAL_IOBLOCK_CACHED_PADDR+0x0D800000)
  132. #endif /* XSHAL_IOBLOCK_CACHED_PADDR */
  133. /*** Same thing over again, this time with virtual addresses: ***/
  134. #ifdef XSHAL_IOBLOCK_BYPASS_VADDR
  135. /* Flash Memory: */
  136. # define XTBOARD_FLASH_VADDR (XSHAL_IOBLOCK_BYPASS_VADDR+XTBOARD_FLASH_IO_OFS)
  137. /* FPGA registers: */
  138. # define XTBOARD_FPGAREGS_VADDR (XSHAL_IOBLOCK_BYPASS_VADDR+0x0D020000)
  139. /* Ethernet controller/transceiver SONIC SN83934: */
  140. # define ETHERNET_VADDR (XSHAL_IOBLOCK_BYPASS_VADDR+0x0D030000)
  141. /* UART National-Semi PC16550D: */
  142. # define UART16550_VADDR (XSHAL_IOBLOCK_BYPASS_VADDR+0x0D050000)
  143. /* I2S transmitter */
  144. # define AUDIO_I2S_OUT_VADDR (XSHAL_IOBLOCK_BYPASS_VADDR+0x0D080000)
  145. /* I2S receiver */
  146. # define AUDIO_I2S_IN_VADDR (XSHAL_IOBLOCK_BYPASS_VADDR+0x0D088000)
  147. /* I2C master */
  148. # define I2C_VADDR (XSHAL_IOBLOCK_BYPASS_VADDR+0x0D090000)
  149. /* SPI controller */
  150. # define SPI_VADDR (XSHAL_IOBLOCK_BYPASS_VADDR+0x0D0A0000)
  151. /* Display controller Sunplus SPLC780D, 4bit mode,
  152. * LCD Display MYTech MOC-16216B-B: */
  153. # define SPLC780D_4BIT_VADDR (XSHAL_IOBLOCK_BYPASS_VADDR+0x0D0C0000)
  154. /* USB Controller */
  155. # define USB_VADDR (XSHAL_IOBLOCK_BYPASS_VADDR+0x0D0D0000)
  156. /* Ethernet buffer: */
  157. # define ETHERNET_BUFFER_VADDR (XSHAL_IOBLOCK_BYPASS_VADDR+0x0D800000)
  158. #endif /* XSHAL_IOBLOCK_BYPASS_VADDR */
  159. /* These devices might be accessed cached: */
  160. #ifdef XSHAL_IOBLOCK_CACHED_VADDR
  161. # define XTBOARD_FLASH_CACHED_VADDR (XSHAL_IOBLOCK_CACHED_VADDR+XTBOARD_FLASH_IO_OFS)
  162. # define ETHERNET_BUFFER_CACHED_VADDR (XSHAL_IOBLOCK_CACHED_VADDR+0x0D800000)
  163. #endif /* XSHAL_IOBLOCK_CACHED_VADDR */
  164. /* System ROM: */
  165. #define XTBOARD_ROM_SIZE XSHAL_ROM_SIZE
  166. #ifdef XSHAL_ROM_VADDR
  167. #define XTBOARD_ROM_VADDR XSHAL_ROM_VADDR
  168. #endif
  169. #ifdef XSHAL_ROM_PADDR
  170. #define XTBOARD_ROM_PADDR XSHAL_ROM_PADDR
  171. #endif
  172. /* System RAM: */
  173. #define XTBOARD_RAM_SIZE XSHAL_RAM_SIZE
  174. #ifdef XSHAL_RAM_VADDR
  175. #define XTBOARD_RAM_VADDR XSHAL_RAM_VADDR
  176. #endif
  177. #ifdef XSHAL_RAM_PADDR
  178. #define XTBOARD_RAM_PADDR XSHAL_RAM_PADDR
  179. #endif
  180. #define XTBOARD_RAM_BYPASS_VADDR XSHAL_RAM_BYPASS_VADDR
  181. #define XTBOARD_RAM_BYPASS_PADDR XSHAL_RAM_BYPASS_PADDR
  182. /*
  183. * Things that depend on device addresses.
  184. */
  185. #define XTBOARD_CACHEATTR_WRITEBACK XSHAL_XT2000_CACHEATTR_WRITEBACK
  186. #define XTBOARD_CACHEATTR_WRITEALLOC XSHAL_XT2000_CACHEATTR_WRITEALLOC
  187. #define XTBOARD_CACHEATTR_WRITETHRU XSHAL_XT2000_CACHEATTR_WRITETHRU
  188. #define XTBOARD_CACHEATTR_BYPASS XSHAL_XT2000_CACHEATTR_BYPASS
  189. #define XTBOARD_CACHEATTR_DEFAULT XSHAL_XT2000_CACHEATTR_DEFAULT
  190. #define XTBOARD_BUSINT_PIPE_REGIONS XSHAL_XT2000_PIPE_REGIONS
  191. #define XTBOARD_BUSINT_SDRAM_REGIONS XSHAL_XT2000_SDRAM_REGIONS
  192. /*
  193. * FPGA registers.
  194. * All these registers are normally accessed using 32-bit loads/stores.
  195. */
  196. /* Register offsets: */
  197. #define XTBOARD_DATECD_OFS 0x00 /* date code (read-only) */
  198. #define XTBOARD_CLKFRQ_OFS 0x04 /* clock frequency Hz (read-only) */
  199. #define XTBOARD_SYSLED_OFS 0x08 /* LEDs */
  200. #define XTBOARD_DIPSW_OFS 0x0C /* DIP switch bits (read-only) */
  201. #define XTBOARD_SWRST_OFS 0x10 /* software reset */
  202. /* Physical register addresses: */
  203. #ifdef XTBOARD_FPGAREGS_PADDR
  204. #define XTBOARD_DATECD_PADDR (XTBOARD_FPGAREGS_PADDR+XTBOARD_DATECD_OFS)
  205. #define XTBOARD_CLKFRQ_PADDR (XTBOARD_FPGAREGS_PADDR+XTBOARD_CLKFRQ_OFS)
  206. #define XTBOARD_SYSLED_PADDR (XTBOARD_FPGAREGS_PADDR+XTBOARD_SYSLED_OFS)
  207. #define XTBOARD_DIPSW_PADDR (XTBOARD_FPGAREGS_PADDR+XTBOARD_DIPSW_OFS)
  208. #define XTBOARD_SWRST_PADDR (XTBOARD_FPGAREGS_PADDR+XTBOARD_SWRST_OFS)
  209. #endif
  210. /* Virtual register addresses: */
  211. #ifdef XTBOARD_FPGAREGS_VADDR
  212. #define XTBOARD_DATECD_VADDR (XTBOARD_FPGAREGS_VADDR+XTBOARD_DATECD_OFS)
  213. #define XTBOARD_CLKFRQ_VADDR (XTBOARD_FPGAREGS_VADDR+XTBOARD_CLKFRQ_OFS)
  214. #define XTBOARD_SYSLED_VADDR (XTBOARD_FPGAREGS_VADDR+XTBOARD_SYSLED_OFS)
  215. #define XTBOARD_DIPSW_VADDR (XTBOARD_FPGAREGS_VADDR+XTBOARD_DIPSW_OFS)
  216. #define XTBOARD_SWRST_VADDR (XTBOARD_FPGAREGS_VADDR+XTBOARD_SWRST_OFS)
  217. /* Register access (for C code): */
  218. #define XTBOARD_DATECD_REG (*(volatile unsigned*) XTBOARD_DATECD_VADDR)
  219. #define XTBOARD_CLKFRQ_REG (*(volatile unsigned*) XTBOARD_CLKFRQ_VADDR)
  220. #define XTBOARD_SYSLED_REG (*(volatile unsigned*) XTBOARD_SYSLED_VADDR)
  221. #define XTBOARD_DIPSW_REG (*(volatile unsigned*) XTBOARD_DIPSW_VADDR)
  222. #define XTBOARD_SWRST_REG (*(volatile unsigned*) XTBOARD_SWRST_VADDR)
  223. #endif
  224. /* DATECD (date code; when core was built) bit fields: */
  225. /* BCD-coded month (01..12): */
  226. #define XTBOARD_DATECD_MONTH_SHIFT 24
  227. #define XTBOARD_DATECD_MONTH_BITS 8
  228. #define XTBOARD_DATECD_MONTH_MASK 0xFF000000
  229. /* BCD-coded day (01..31): */
  230. #define XTBOARD_DATECD_DAY_SHIFT 16
  231. #define XTBOARD_DATECD_DAY_BITS 8
  232. #define XTBOARD_DATECD_DAY_MASK 0x00FF0000
  233. /* BCD-coded year (2001..9999): */
  234. #define XTBOARD_DATECD_YEAR_SHIFT 0
  235. #define XTBOARD_DATECD_YEAR_BITS 16
  236. #define XTBOARD_DATECD_YEAR_MASK 0x0000FFFF
  237. /* SYSLED (system LED) bit fields: */
  238. /* LED control bits (off=0, on=1): */
  239. #define XTBOARD_SYSLED_USER_SHIFT 0
  240. #define XTBOARD_SYSLED_USER_BITS 2
  241. #define XTBOARD_SYSLED_USER_MASK 0x00000003
  242. /* DIP Switch SW? (left=sw1=lsb=bit0, right=sw4=msb=bit3; off=0, on=1): */
  243. /* DIP switch bit fields (bit2/sw3 is reserved and presently unused): */
  244. #if XTBOARD_IS_KC705
  245. #define XTBOARD_DIPSW_USER_SHIFT 0
  246. #define XTBOARD_DIPSW_USER_BITS 2
  247. #define XTBOARD_DIPSW_USER_MASK 0x00000003
  248. #define XTBOARD_DIPSW_BOOT_SHIFT 3
  249. #define XTBOARD_DIPSW_BOOT_BITS 1
  250. #define XTBOARD_DIPSW_BOOT_MASK 0x00000008
  251. #else /* ML605: */
  252. #define XTBOARD_DIPSW_USER_SHIFT 0
  253. #define XTBOARD_DIPSW_USER_BITS 6
  254. #define XTBOARD_DIPSW_USER_MASK 0x0000003F
  255. #define XTBOARD_DIPSW_BOOT_SHIFT 7
  256. #define XTBOARD_DIPSW_BOOT_BITS 1
  257. #define XTBOARD_DIPSW_BOOT_MASK 0x00000080
  258. #endif /*ML605*/
  259. #define XTBOARD_DIPSW_BOOT_RAM (0<<XTBOARD_DIPSW_BOOT_SHIFT) /* off */
  260. #define XTBOARD_DIPSW_BOOT_FLASH (1<<XTBOARD_DIPSW_BOOT_SHIFT) /* on */
  261. /* SWRST (software reset; allows s/w to generate power-on equivalent reset): */
  262. /* Software reset bits: */
  263. #define XTBOARD_SWRST_SWR_SHIFT 0
  264. #define XTBOARD_SWRST_SWR_BITS 16
  265. #define XTBOARD_SWRST_SWR_MASK 0x0000FFFF
  266. /* Software reset value -- writing this value resets the board: */
  267. #define XTBOARD_SWRST_RESETVALUE 0x0000DEAD
  268. #endif /*_INC_ML605_H_*/