soc_memctrl.h 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251
  1. /********************************************************************************
  2. * USDK(ZS283A)
  3. * Module: SYSTEM
  4. * Copyright(c) 2003-2017 Actions Semiconductor,
  5. * All Rights Reserved.
  6. *
  7. * History:
  8. * <author> <time> <version > <desc>
  9. * wuyufan 2018-10-12-PM12:48:04 1.0 build this file
  10. ********************************************************************************/
  11. /*!
  12. * \file soc_memctrl.h
  13. * \brief
  14. * \author
  15. * \version 1.0
  16. * \date 2018-10-12-PM12:48:04
  17. *******************************************************************************/
  18. #ifndef SOC_MEMCTRL_H_
  19. #define SOC_MEMCTRL_H_
  20. //--------------MemoryController-------------------------------------------//
  21. //--------------Register Address---------------------------------------//
  22. #define MemoryController_BASE 0x40010000
  23. #define MEMORYCTL (MemoryController_BASE+0x00000000)
  24. #define CPU_ERROR_ADDR (MemoryController_BASE+0x00000008)
  25. #define MEMORYCTL2 (MemoryController_BASE+0x00000020)
  26. #define DBGCTL (MemoryController_BASE+0x00000040)
  27. #define DSPPAGEADDR0 (MemoryController_BASE+0x00000080)
  28. #define DSPPAGEADDR1 (MemoryController_BASE+0x00000084)
  29. #define DSPPAGEADDR2 (MemoryController_BASE+0x00000088)
  30. #define DSPPAGEADDR3 (MemoryController_BASE+0x0000008c)
  31. #define MPUIE (MemoryController_BASE+0x00000100)
  32. #define MPUIP (MemoryController_BASE+0x00000104)
  33. #define MPUCTL0 (MemoryController_BASE+0x00000110)
  34. #define MPUBASE0 (MemoryController_BASE+0x00000114)
  35. #define MPUEND0 (MemoryController_BASE+0x00000118)
  36. #define MPUERRADDR0 (MemoryController_BASE+0x0000011c)
  37. #define MPUCTL1 (MemoryController_BASE+0x00000120)
  38. #define MPUBASE1 (MemoryController_BASE+0x00000124)
  39. #define MPUEND1 (MemoryController_BASE+0x00000128)
  40. #define MPUERRADDR1 (MemoryController_BASE+0x0000012c)
  41. #define MPUCTL2 (MemoryController_BASE+0x00000130)
  42. #define MPUBASE2 (MemoryController_BASE+0x00000134)
  43. #define MPUEND2 (MemoryController_BASE+0x00000138)
  44. #define MPUERRADDR2 (MemoryController_BASE+0x0000013c)
  45. #define MPUCTL3 (MemoryController_BASE+0x00000140)
  46. #define MPUBASE3 (MemoryController_BASE+0x00000144)
  47. #define MPUEND3 (MemoryController_BASE+0x00000148)
  48. #define MPUERRADDR3 (MemoryController_BASE+0x0000014c)
  49. #define BIST_EN0 (MemoryController_BASE+0x00000200)
  50. #define BIST_FIN0 (MemoryController_BASE+0x00000204)
  51. #define BIST_INFO0 (MemoryController_BASE+0x00000208)
  52. #define BIST_EN1 (MemoryController_BASE+0x0000020c)
  53. #define BIST_FIN1 (MemoryController_BASE+0x00000210)
  54. #define BIST_INFO1 (MemoryController_BASE+0x00000214)
  55. #define SPI_CACHE_MAPPING_ADDR0 (MemoryController_BASE+0x00000300)
  56. #define SPI_CACHE_ADDR0_ENTRY (MemoryController_BASE+0x00000304)
  57. #define SPI_CACHE_MAPPING_ADDR1 (MemoryController_BASE+0x00000308)
  58. #define SPI_CACHE_ADDR1_ENTRY (MemoryController_BASE+0x0000030c)
  59. #define SPI_CACHE_MAPPING_ADDR2 (MemoryController_BASE+0x00000310)
  60. #define SPI_CACHE_ADDR2_ENTRY (MemoryController_BASE+0x00000314)
  61. #define SPI_CACHE_MAPPING_ADDR3 (MemoryController_BASE+0x00000318)
  62. #define SPI_CACHE_ADDR3_ENTRY (MemoryController_BASE+0x0000031c)
  63. #define SPI_CACHE_MAPPING_ADDR4 (MemoryController_BASE+0x00000320)
  64. #define SPI_CACHE_ADDR4_ENTRY (MemoryController_BASE+0x00000324)
  65. #define SPI_CACHE_MAPPING_ADDR5 (MemoryController_BASE+0x00000328)
  66. #define SPI_CACHE_ADDR5_ENTRY (MemoryController_BASE+0x0000032c)
  67. #define SPI_CACHE_MAPPING_ADDR6 (MemoryController_BASE+0x00000330)
  68. #define SPI_CACHE_ADDR6_ENTRY (MemoryController_BASE+0x00000334)
  69. #define SPI_CACHE_MAPPING_ADDR7 (MemoryController_BASE+0x00000338)
  70. #define SPI_CACHE_ADDR7_ENTRY (MemoryController_BASE+0x0000033c)
  71. #define CACHE_MAPPING_ITEM_NUM (8)
  72. #define MEMORYCTL_BUSERROR_BIT BIT(3)
  73. #if 0
  74. #define MEMORYCTL (MEMORY_CONTROLLER_REG_BASE+0x00000000)
  75. #define ALTERNATEINSTR0 (MEMORY_CONTROLLER_REG_BASE+0x00000004)
  76. #define ALTERNATEINSTR1 (MEMORY_CONTROLLER_REG_BASE+0x00000008)
  77. #define ALTERNATEINSTR2 (MEMORY_CONTROLLER_REG_BASE+0x0000000c)
  78. #define ALTERNATEINSTR3 (MEMORY_CONTROLLER_REG_BASE+0x00000010)
  79. #define ALTERNATEINSTR4 (MEMORY_CONTROLLER_REG_BASE+0x00000014)
  80. #define ALTERNATEINSTR5 (MEMORY_CONTROLLER_REG_BASE+0x00000018)
  81. #define ALTERNATEINSTR6 (MEMORY_CONTROLLER_REG_BASE+0x0000001c)
  82. #define ALTERNATEINSTR7 (MEMORY_CONTROLLER_REG_BASE+0x00000020)
  83. #define ALTERNATEINSTR8 (MEMORY_CONTROLLER_REG_BASE+0x00000024)
  84. #define ALTERNATEINSTR9 (MEMORY_CONTROLLER_REG_BASE+0x00000028)
  85. #define ALTERNATEINSTR10 (MEMORY_CONTROLLER_REG_BASE+0x0000002c)
  86. #define ALTERNATEINSTR11 (MEMORY_CONTROLLER_REG_BASE+0x00000030)
  87. #define ALTERNATEINSTR12 (MEMORY_CONTROLLER_REG_BASE+0x00000034)
  88. #define ALTERNATEINSTR13 (MEMORY_CONTROLLER_REG_BASE+0x00000038)
  89. #define ALTERNATEINSTR14 (MEMORY_CONTROLLER_REG_BASE+0x0000003c)
  90. #define ALTERNATEINSTR15 (MEMORY_CONTROLLER_REG_BASE+0x00000040)
  91. #define FIXADDR0 (MEMORY_CONTROLLER_REG_BASE+0x00000044)
  92. #define FIXADDR1 (MEMORY_CONTROLLER_REG_BASE+0x00000048)
  93. #define FIXADDR2 (MEMORY_CONTROLLER_REG_BASE+0x0000004c)
  94. #define FIXADDR3 (MEMORY_CONTROLLER_REG_BASE+0x00000050)
  95. #define FIXADDR4 (MEMORY_CONTROLLER_REG_BASE+0x00000054)
  96. #define FIXADDR5 (MEMORY_CONTROLLER_REG_BASE+0x00000058)
  97. #define FIXADDR6 (MEMORY_CONTROLLER_REG_BASE+0x0000005c)
  98. #define FIXADDR7 (MEMORY_CONTROLLER_REG_BASE+0x00000060)
  99. #define FIXADDR8 (MEMORY_CONTROLLER_REG_BASE+0x00000064)
  100. #define FIXADDR9 (MEMORY_CONTROLLER_REG_BASE+0x00000068)
  101. #define FIXADDR10 (MEMORY_CONTROLLER_REG_BASE+0x0000006c)
  102. #define FIXADDR11 (MEMORY_CONTROLLER_REG_BASE+0x00000070)
  103. #define FIXADDR12 (MEMORY_CONTROLLER_REG_BASE+0x00000074)
  104. #define FIXADDR13 (MEMORY_CONTROLLER_REG_BASE+0x00000078)
  105. #define FIXADDR14 (MEMORY_CONTROLLER_REG_BASE+0x0000007c)
  106. #define FIXADDR15 (MEMORY_CONTROLLER_REG_BASE+0x00000080)
  107. #define BIST_EN (MEMORY_CONTROLLER_REG_BASE+0x00000084)
  108. #define BIST_FIN (MEMORY_CONTROLLER_REG_BASE+0x00000088)
  109. #define BIST_INFO (MEMORY_CONTROLLER_REG_BASE+0x0000008c)
  110. #define MAPPING_ADDR0 (MEMORY_CONTROLLER_REG_BASE+0x00000090)
  111. #define ADDR0_ENTRY (MEMORY_CONTROLLER_REG_BASE+0x00000094)
  112. #define MAPPING_ADDR1 (MEMORY_CONTROLLER_REG_BASE+0x00000098)
  113. #define ADDR1_ENTRY (MEMORY_CONTROLLER_REG_BASE+0x0000009c)
  114. #define MAPPING_ADDR2 (MEMORY_CONTROLLER_REG_BASE+0x000000a0)
  115. #define ADDR2_ENTRY (MEMORY_CONTROLLER_REG_BASE+0x000000a4)
  116. #define MAPPING_ADDR3 (MEMORY_CONTROLLER_REG_BASE+0x000000a8)
  117. #define ADDR3_ENTRY (MEMORY_CONTROLLER_REG_BASE+0x000000ac)
  118. #define MAPPING_ADDR4 (MEMORY_CONTROLLER_REG_BASE+0x000000b0)
  119. #define ADDR4_ENTRY (MEMORY_CONTROLLER_REG_BASE+0x000000b4)
  120. #define MAPPING_ADDR5 (MEMORY_CONTROLLER_REG_BASE+0x000000b8)
  121. #define ADDR5_ENTRY (MEMORY_CONTROLLER_REG_BASE+0x000000bc)
  122. #define MAPPING_ADDR6 (MEMORY_CONTROLLER_REG_BASE+0x000000c0)
  123. #define ADDR6_ENTRY (MEMORY_CONTROLLER_REG_BASE+0x000000c4)
  124. #define MAPPING_ADDR7 (MEMORY_CONTROLLER_REG_BASE+0x000000c8)
  125. #define ADDR7_ENTRY (MEMORY_CONTROLLER_REG_BASE+0x000000cc)
  126. #define MAPPING_ADDR8 (MEMORY_CONTROLLER_REG_BASE+0x000000d0)
  127. #define ADDR8_ENTRY (MEMORY_CONTROLLER_REG_BASE+0x000000d4)
  128. #define MAPPING_ADDR9 (MEMORY_CONTROLLER_REG_BASE+0x000000d8)
  129. #define ADDR9_ENTRY (MEMORY_CONTROLLER_REG_BASE+0x000000dc)
  130. #define MAPPING_ADDR10 (MEMORY_CONTROLLER_REG_BASE+0x000000e0)
  131. #define ADDR10_ENTRY (MEMORY_CONTROLLER_REG_BASE+0x000000e4)
  132. #define MAPPING_ADDR11 (MEMORY_CONTROLLER_REG_BASE+0x000000e8)
  133. #define ADDR11_ENTRY (MEMORY_CONTROLLER_REG_BASE+0x000000ec)
  134. #define MAPPING_ADDR12 (MEMORY_CONTROLLER_REG_BASE+0x000000f0)
  135. #define ADDR12_ENTRY (MEMORY_CONTROLLER_REG_BASE+0x000000f4)
  136. #define MAPPING_ADDR13 (MEMORY_CONTROLLER_REG_BASE+0x000000f8)
  137. #define ADDR13_ENTRY (MEMORY_CONTROLLER_REG_BASE+0x000000fc)
  138. #define MAPPING_ADDR14 (MEMORY_CONTROLLER_REG_BASE+0x00000100)
  139. #define ADDR14_ENTRY (MEMORY_CONTROLLER_REG_BASE+0x00000104)
  140. #define MAPPING_ADDR15 (MEMORY_CONTROLLER_REG_BASE+0x00000108)
  141. #define ADDR15_ENTRY (MEMORY_CONTROLLER_REG_BASE+0x0000010c)
  142. #define DATA_ADDRESS_ERROR_INFO (MEMORY_CONTROLLER_REG_BASE+0x00000110)
  143. #define INSTRUCTION_ADDRESS_ERROR_INFO (MEMORY_CONTROLLER_REG_BASE+0x00000114)
  144. #define SYMBOL_TABLE_PTR0 (MEMORY_CONTROLLER_REG_BASE+0x00000118)
  145. #define SYMBOL_TABLE_PTR1 (MEMORY_CONTROLLER_REG_BASE+0x0000011c)
  146. #define SYMBOL_TABLE_PTR2 (MEMORY_CONTROLLER_REG_BASE+0x00000120)
  147. #define SYMBOL_TABLE_PTR3 (MEMORY_CONTROLLER_REG_BASE+0x00000124)
  148. #define MPUIE_LOW (MEMORY_CONTROLLER_REG_BASE+0x00000140)
  149. #define MPUIE_HIGH (MEMORY_CONTROLLER_REG_BASE+0x00000144)
  150. #define MPUIP_LOW (MEMORY_CONTROLLER_REG_BASE+0x00000148)
  151. #define MPUIP_HIGH (MEMORY_CONTROLLER_REG_BASE+0x0000014c)
  152. #define MPUCTL0 (MEMORY_CONTROLLER_REG_BASE+0x00000150)
  153. #define MPUBASE0 (MEMORY_CONTROLLER_REG_BASE+0x00000154)
  154. #define MPUEND0 (MEMORY_CONTROLLER_REG_BASE+0x00000158)
  155. #define MPUERRADDR0 (MEMORY_CONTROLLER_REG_BASE+0x0000015c)
  156. #define MPUCTL1 (MEMORY_CONTROLLER_REG_BASE+0x00000160)
  157. #define MPUBASE1 (MEMORY_CONTROLLER_REG_BASE+0x00000164)
  158. #define MPUEND1 (MEMORY_CONTROLLER_REG_BASE+0x00000168)
  159. #define MPUERRADDR1 (MEMORY_CONTROLLER_REG_BASE+0x0000016c)
  160. #define MPUCTL2 (MEMORY_CONTROLLER_REG_BASE+0x00000170)
  161. #define MPUBASE2 (MEMORY_CONTROLLER_REG_BASE+0x00000174)
  162. #define MPUEND2 (MEMORY_CONTROLLER_REG_BASE+0x00000178)
  163. #define MPUERRADDR2 (MEMORY_CONTROLLER_REG_BASE+0x0000017c)
  164. #define MPUCTL3 (MEMORY_CONTROLLER_REG_BASE+0x00000180)
  165. #define MPUBASE3 (MEMORY_CONTROLLER_REG_BASE+0x00000184)
  166. #define MPUEND3 (MEMORY_CONTROLLER_REG_BASE+0x00000188)
  167. #define MPUERRADDR3 (MEMORY_CONTROLLER_REG_BASE+0x0000018c)
  168. #define MPUCTL4 (MEMORY_CONTROLLER_REG_BASE+0x00000190)
  169. #define MPUBASE4 (MEMORY_CONTROLLER_REG_BASE+0x00000194)
  170. #define MPUEND4 (MEMORY_CONTROLLER_REG_BASE+0x00000198)
  171. #define MPUERRADDR4 (MEMORY_CONTROLLER_REG_BASE+0x0000019c)
  172. #define MPUCTL5 (MEMORY_CONTROLLER_REG_BASE+0x000001a0)
  173. #define MPUBASE5 (MEMORY_CONTROLLER_REG_BASE+0x000001a4)
  174. #define MPUEND5 (MEMORY_CONTROLLER_REG_BASE+0x000001a8)
  175. #define MPUERRADDR5 (MEMORY_CONTROLLER_REG_BASE+0x000001ac)
  176. #define MPUCTL6 (MEMORY_CONTROLLER_REG_BASE+0x000001b0)
  177. #define MPUBASE6 (MEMORY_CONTROLLER_REG_BASE+0x000001b4)
  178. #define MPUEND6 (MEMORY_CONTROLLER_REG_BASE+0x000001b8)
  179. #define MPUERRADDR6 (MEMORY_CONTROLLER_REG_BASE+0x000001bc)
  180. #define MPUCTL7 (MEMORY_CONTROLLER_REG_BASE+0x000001c0)
  181. #define MPUBASE7 (MEMORY_CONTROLLER_REG_BASE+0x000001c4)
  182. #define MPUEND7 (MEMORY_CONTROLLER_REG_BASE+0x000001c8)
  183. #define MPUERRADDR7 (MEMORY_CONTROLLER_REG_BASE+0x000001cc)
  184. #define CACHE_CONFLICT_ADDR (MEMORY_CONTROLLER_REG_BASE+0x00000200)
  185. #define CACHE_MAPPING_REGISTER_BASE (MAPPING_ADDR0)
  186. #define CACHE_MAPPING_ITEM_NUM (16)
  187. #define MEMORYCTL_BUSERROR_BIT BIT(18)
  188. #define CACHE_LINE_SIZE 32
  189. #define CACHE_CRC_LINE_SIZE 34
  190. #define CACHE_SIZE_32KB (0)
  191. #define CACHE_SIZE_16KB (1)
  192. #endif
  193. typedef struct {
  194. volatile unsigned int mapping_addr;
  195. volatile unsigned int mapping_entry;
  196. } cache_mapping_register_t;
  197. typedef struct
  198. {
  199. volatile uint32_t MPUCTL;
  200. volatile uint32_t MPUBASE;
  201. volatile uint32_t MPUEND;
  202. volatile uint32_t MPUERRADDR;
  203. }mpu_base_register_t;
  204. void soc_memctrl_set_mapping(int idx, u32_t cpu_addr, u32_t nor_bus_addr);
  205. int soc_memctrl_mapping(u32_t cpu_addr, u32_t nor_phy_addr, int enable_crc);
  206. int soc_memctrl_unmapping(u32_t map_addr);
  207. void *soc_memctrl_create_temp_mapping(u32_t nor_phy_addr, int enable_crc);
  208. void soc_memctrl_clear_temp_mapping(void *cpu_addr);
  209. u32_t soc_memctrl_cpu_to_nor_phy_addr(u32_t cpu_addr);
  210. void soc_memctrl_config_cache_size(int cache_size_mode);
  211. void soc_memctrl_cache_invalid(void);
  212. static inline void soc_memctrl_set_dsp_mapping(int idx, u32_t map_addr,
  213. u32_t phy_addr)
  214. {
  215. return;
  216. }
  217. static inline u32_t soc_memctrl_cpu_addr_to_bus_addr(u32_t cpu_addr)
  218. {
  219. u32_t bus_addr;
  220. if (cpu_addr < 0x10000000)
  221. bus_addr = 0x10000000;
  222. else
  223. bus_addr = cpu_addr & ~0xe0000000;
  224. return bus_addr;
  225. }
  226. #endif /* SOC_MEMCTRL_H_ */