xtav60.h 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241
  1. /* Copyright (c) 2002-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. /* xtav60.h - Xtensa Avnet LX60 (XT-AV60) board specific definitions */
  9. #ifndef _INC_XTAV60_H_
  10. #define _INC_XTAV60_H_
  11. #include <xtensa/config/core.h>
  12. #include <xtensa/config/system.h>
  13. #define XTBOARD_NAME "XT-AV60"
  14. /*
  15. * Default assignment of XTAV60 devices to external interrupts.
  16. */
  17. /* Ethernet interrupt: */
  18. #ifdef XCHAL_EXTINT1_NUM
  19. #define ETHERNET_INTNUM XCHAL_EXTINT1_NUM
  20. #define ETHERNET_INTLEVEL XCHAL_EXTINT1_LEVEL
  21. #define ETHERNET_INTMASK XCHAL_EXTINT1_MASK
  22. #else
  23. #define ETHERNET_INTMASK 0
  24. #endif
  25. /* UART interrupt: */
  26. #ifdef XCHAL_EXTINT0_NUM
  27. #define UART16550_INTNUM XCHAL_EXTINT0_NUM
  28. #define UART16550_INTLEVEL XCHAL_EXTINT0_LEVEL
  29. #define UART16550_INTMASK XCHAL_EXTINT0_MASK
  30. #else
  31. #define UART16550_INTMASK 0
  32. #endif
  33. /*
  34. * Device addresses.
  35. *
  36. * Note: for endianness-independence, use 32-bit loads and stores for all
  37. * register accesses to Ethernet, UART and LED devices. Undefined bits
  38. * may need to be masked out if needed when reading if the actual register
  39. * size is smaller than 32 bits.
  40. *
  41. * Note: XTAV60 bus byte lanes are defined in terms of msbyte and lsbyte
  42. * relative to the processor. So 32-bit registers are accessed consistently
  43. * from both big and little endian processors. However, this means byte
  44. * sequences are not consistent between big and little endian processors.
  45. * This is fine for RAM, and for ROM if ROM is created for a specific
  46. * processor (and thus has correct byte sequences). However this may be
  47. * unexpected for Flash, which might contain a file-system that one wants
  48. * to use for multiple processor configurations (eg. the Flash might contain
  49. * the Ethernet card's address, endianness-independent application data, etc).
  50. * That is, byte sequences written in Flash by a core of a given endianness
  51. * will be byte-swapped when seen by a core of the other endianness.
  52. * Someone implementing an endianness-independent Flash file system will
  53. * likely handle this byte-swapping issue in the Flash driver software.
  54. */
  55. #define XTBOARD_FLASH_MAXSIZE 0x400000 /* 4 MB */
  56. #ifdef XSHAL_IOBLOCK_BYPASS_PADDR
  57. /* Flash Memory: */
  58. # define XTBOARD_FLASH_PADDR (XSHAL_IOBLOCK_BYPASS_PADDR+0x08000000)
  59. /* FPGA registers: */
  60. # define XTBOARD_FPGAREGS_PADDR (XSHAL_IOBLOCK_BYPASS_PADDR+0x0D020000)
  61. /* Ethernet controller/transceiver SONIC SN83934: */
  62. # define ETHERNET_PADDR (XSHAL_IOBLOCK_BYPASS_PADDR+0x0D030000)
  63. # define ETHERNET_CONTROLLER_PADDR ETHERNET_PADDR /* legacy macro */
  64. /* Display controller Sunplus SPLC780D, LCD Display MYTech MOC-16216B-B: */
  65. # define SPLC780D_PADDR (XSHAL_IOBLOCK_BYPASS_PADDR+0x0D040000)
  66. /* UART National-Semi PC16550D: */
  67. # define UART16550_PADDR (XSHAL_IOBLOCK_BYPASS_PADDR+0x0D050000)
  68. /* Boot 128K Sram address: */
  69. # define BOOT_SRAM_PADDR (XSHAL_IOBLOCK_BYPASS_PADDR+0x0D400000)
  70. /* Ethernet buffer: */
  71. # define ETHERNET_BUFFER_PADDR (XSHAL_IOBLOCK_BYPASS_PADDR+0x0D800000)
  72. #endif /* XSHAL_IOBLOCK_BYPASS_PADDR */
  73. /* These devices might be accessed cached: */
  74. #ifdef XSHAL_IOBLOCK_CACHED_PADDR
  75. # define XTBOARD_FLASH_CACHED_PADDR (XSHAL_IOBLOCK_CACHED_PADDR+0x08000000)
  76. # define ETHERNET_BUFFER_CACHED_PADDR (XSHAL_IOBLOCK_CACHED_PADDR+0x0D800000)
  77. # define BOOT_SRAM_CACHED_PADDR (XSHAL_IOBLOCK_CACHED_PADDR+0x0D400000)
  78. #endif /* XSHAL_IOBLOCK_CACHED_PADDR */
  79. /*** Same thing over again, this time with virtual addresses: ***/
  80. #ifdef XSHAL_IOBLOCK_BYPASS_VADDR
  81. /* Flash Memory: */
  82. # define XTBOARD_FLASH_VADDR (XSHAL_IOBLOCK_BYPASS_VADDR+0x08000000)
  83. /* FPGA registers: */
  84. # define XTBOARD_FPGAREGS_VADDR (XSHAL_IOBLOCK_BYPASS_VADDR+0x0D020000)
  85. /* Ethernet controller/transceiver SONIC SN83934: */
  86. # define ETHERNET_VADDR (XSHAL_IOBLOCK_BYPASS_VADDR+0x0D030000)
  87. /* Display controller Sunplus SPLC780D, LCD Display MYTech MOC-16216B-B: */
  88. # define SPLC780D_VADDR (XSHAL_IOBLOCK_BYPASS_VADDR+0x0D040000)
  89. /* UART National-Semi PC16550D: */
  90. # define UART16550_VADDR (XSHAL_IOBLOCK_BYPASS_VADDR+0x0D050000)
  91. /* 128K Sram address: */
  92. # define BOOT_SRAM_VADDR (XSHAL_IOBLOCK_BYPASS_VADDR+0x0D400000)
  93. /* Ethernet buffer: */
  94. # define ETHERNET_BUFFER_VADDR (XSHAL_IOBLOCK_BYPASS_VADDR+0x0D800000)
  95. #endif /* XSHAL_IOBLOCK_BYPASS_VADDR */
  96. /* These devices might be accessed cached: */
  97. #ifdef XSHAL_IOBLOCK_CACHED_VADDR
  98. # define XTBOARD_FLASH_CACHED_VADDR (XSHAL_IOBLOCK_CACHED_VADDR+0x08000000)
  99. # define ETHERNET_BUFFER_CACHED_VADDR (XSHAL_IOBLOCK_CACHED_VADDR+0x0D800000)
  100. # define BOOT_SRAM_CACHED_VADDR (XSHAL_IOBLOCK_CACHED_VADDR+0x0D400000)
  101. #endif /* XSHAL_IOBLOCK_CACHED_VADDR */
  102. /* System ROM: */
  103. #define XTBOARD_ROM_SIZE XSHAL_ROM_SIZE
  104. #ifdef XSHAL_ROM_VADDR
  105. #define XTBOARD_ROM_VADDR XSHAL_ROM_VADDR
  106. #endif
  107. #ifdef XSHAL_ROM_PADDR
  108. #define XTBOARD_ROM_PADDR XSHAL_ROM_PADDR
  109. #endif
  110. /* System RAM: */
  111. #define XTBOARD_RAM_SIZE XSHAL_RAM_SIZE
  112. #ifdef XSHAL_RAM_VADDR
  113. #define XTBOARD_RAM_VADDR XSHAL_RAM_VADDR
  114. #endif
  115. #ifdef XSHAL_RAM_PADDR
  116. #define XTBOARD_RAM_PADDR XSHAL_RAM_PADDR
  117. #endif
  118. #define XTBOARD_RAM_BYPASS_VADDR XSHAL_RAM_BYPASS_VADDR
  119. #define XTBOARD_RAM_BYPASS_PADDR XSHAL_RAM_BYPASS_PADDR
  120. /*
  121. * Things that depend on device addresses.
  122. */
  123. #define XTBOARD_CACHEATTR_WRITEBACK XSHAL_XT2000_CACHEATTR_WRITEBACK
  124. #define XTBOARD_CACHEATTR_WRITEALLOC XSHAL_XT2000_CACHEATTR_WRITEALLOC
  125. #define XTBOARD_CACHEATTR_WRITETHRU XSHAL_XT2000_CACHEATTR_WRITETHRU
  126. #define XTBOARD_CACHEATTR_BYPASS XSHAL_XT2000_CACHEATTR_BYPASS
  127. #define XTBOARD_CACHEATTR_DEFAULT XSHAL_XT2000_CACHEATTR_DEFAULT
  128. #define XTBOARD_BUSINT_PIPE_REGIONS XSHAL_XT2000_PIPE_REGIONS
  129. #define XTBOARD_BUSINT_SDRAM_REGIONS XSHAL_XT2000_SDRAM_REGIONS
  130. /*
  131. * FPGA registers.
  132. * All these registers are normally accessed using 32-bit loads/stores.
  133. */
  134. /* Register offsets: */
  135. #define XTBOARD_DATECD_OFS 0x00 /* date code (read-only) */
  136. #define XTBOARD_CLKFRQ_OFS 0x04 /* clock frequency Hz (read-only) */
  137. #define XTBOARD_DIPSW_OFS 0x0C /* DIP switch bits (read-only) */
  138. #define XTBOARD_SWRST_OFS 0x10 /* software reset */
  139. /* Physical register addresses: */
  140. #ifdef XTBOARD_FPGAREGS_PADDR
  141. #define XTBOARD_DATECD_PADDR (XTBOARD_FPGAREGS_PADDR+XTBOARD_DATECD_OFS)
  142. #define XTBOARD_CLKFRQ_PADDR (XTBOARD_FPGAREGS_PADDR+XTBOARD_CLKFRQ_OFS)
  143. #define XTBOARD_DIPSW_PADDR (XTBOARD_FPGAREGS_PADDR+XTBOARD_DIPSW_OFS)
  144. #define XTBOARD_SWRST_PADDR (XTBOARD_FPGAREGS_PADDR+XTBOARD_SWRST_OFS)
  145. #endif
  146. /* Virtual register addresses: */
  147. #ifdef XTBOARD_FPGAREGS_VADDR
  148. #define XTBOARD_DATECD_VADDR (XTBOARD_FPGAREGS_VADDR+XTBOARD_DATECD_OFS)
  149. #define XTBOARD_CLKFRQ_VADDR (XTBOARD_FPGAREGS_VADDR+XTBOARD_CLKFRQ_OFS)
  150. #define XTBOARD_DIPSW_VADDR (XTBOARD_FPGAREGS_VADDR+XTBOARD_DIPSW_OFS)
  151. #define XTBOARD_SWRST_VADDR (XTBOARD_FPGAREGS_VADDR+XTBOARD_SWRST_OFS)
  152. /* Register access (for C code): */
  153. #define XTBOARD_DATECD_REG (*(volatile unsigned*) XTBOARD_DATECD_VADDR)
  154. #define XTBOARD_CLKFRQ_REG (*(volatile unsigned*) XTBOARD_CLKFRQ_VADDR)
  155. #define XTBOARD_DIPSW_REG (*(volatile unsigned*) XTBOARD_DIPSW_VADDR)
  156. #define XTBOARD_SWRST_REG (*(volatile unsigned*) XTBOARD_SWRST_VADDR)
  157. #endif
  158. /* DATECD (date code; when core was built) bit fields: */
  159. /* BCD-coded month (01..12): */
  160. #define XTBOARD_DATECD_MONTH_SHIFT 24
  161. #define XTBOARD_DATECD_MONTH_BITS 8
  162. #define XTBOARD_DATECD_MONTH_MASK 0xFF000000
  163. /* BCD-coded day (01..31): */
  164. #define XTBOARD_DATECD_DAY_SHIFT 16
  165. #define XTBOARD_DATECD_DAY_BITS 8
  166. #define XTBOARD_DATECD_DAY_MASK 0x00FF0000
  167. /* BCD-coded year (2001..9999): */
  168. #define XTBOARD_DATECD_YEAR_SHIFT 0
  169. #define XTBOARD_DATECD_YEAR_BITS 16
  170. #define XTBOARD_DATECD_YEAR_MASK 0x0000FFFF
  171. /* DIP Switch (left=sw1=lsb=bit0, right=sw8=msb=bit7; off=0, on=1): */
  172. /* DIP switch bit fields (bit6/sw7 is reserved and presently unused): */
  173. #define XTBOARD_DIPSW_USER_SHIFT 0 /* labeled 1-6 (1=lsb) */
  174. #define XTBOARD_DIPSW_USER_BITS 6
  175. #define XTBOARD_DIPSW_USER_MASK 0x0000003F
  176. #define XTBOARD_DIPSW_BOOT_SHIFT 7 /* labeled 8 (msb) */
  177. #define XTBOARD_DIPSW_BOOT_BITS 1
  178. #define XTBOARD_DIPSW_BOOT_MASK 0x00000080
  179. /* Boot settings: bit7/sw8, off=0, on=1 (this switch controls hardware): */
  180. #define XTBOARD_DIPSW_BOOT_RAM (0<<XTBOARD_DIPSW_BOOT_SHIFT) /* off */
  181. #define XTBOARD_DIPSW_BOOT_FLASH (1<<XTBOARD_DIPSW_BOOT_SHIFT) /* on */
  182. /* SWRST (software reset; allows s/w to generate power-on equivalent reset): */
  183. /* Software reset bits: */
  184. #define XTBOARD_SWRST_SWR_SHIFT 0
  185. #define XTBOARD_SWRST_SWR_BITS 16
  186. #define XTBOARD_SWRST_SWR_MASK 0x0000FFFF
  187. /* Software reset value -- writing this value resets the board: */
  188. #define XTBOARD_SWRST_RESETVALUE 0x0000DEAD
  189. #endif /*_INC_XTAV60_H_*/