lima_regs.h 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. /* Copyright 2010-2017 ARM Limited. All rights reserved.
  3. * Copyright 2017-2019 Qiang Yu <yuq825@gmail.com>
  4. */
  5. #ifndef __LIMA_REGS_H__
  6. #define __LIMA_REGS_H__
  7. /* This file's register definition is collected from the
  8. * official ARM Mali Utgard GPU kernel driver source code
  9. */
  10. /* PMU regs */
  11. #define LIMA_PMU_POWER_UP 0x00
  12. #define LIMA_PMU_POWER_DOWN 0x04
  13. #define LIMA_PMU_POWER_GP0_MASK BIT(0)
  14. #define LIMA_PMU_POWER_L2_MASK BIT(1)
  15. #define LIMA_PMU_POWER_PP_MASK(i) BIT(2 + i)
  16. /*
  17. * On Mali450 each block automatically starts up its corresponding L2
  18. * and the PPs are not fully independent controllable.
  19. * Instead PP0, PP1-3 and PP4-7 can be turned on or off.
  20. */
  21. #define LIMA450_PMU_POWER_PP0_MASK BIT(1)
  22. #define LIMA450_PMU_POWER_PP13_MASK BIT(2)
  23. #define LIMA450_PMU_POWER_PP47_MASK BIT(3)
  24. #define LIMA_PMU_STATUS 0x08
  25. #define LIMA_PMU_INT_MASK 0x0C
  26. #define LIMA_PMU_INT_RAWSTAT 0x10
  27. #define LIMA_PMU_INT_CLEAR 0x18
  28. #define LIMA_PMU_INT_CMD_MASK BIT(0)
  29. #define LIMA_PMU_SW_DELAY 0x1C
  30. /* L2 cache regs */
  31. #define LIMA_L2_CACHE_SIZE 0x0004
  32. #define LIMA_L2_CACHE_STATUS 0x0008
  33. #define LIMA_L2_CACHE_STATUS_COMMAND_BUSY BIT(0)
  34. #define LIMA_L2_CACHE_STATUS_DATA_BUSY BIT(1)
  35. #define LIMA_L2_CACHE_COMMAND 0x0010
  36. #define LIMA_L2_CACHE_COMMAND_CLEAR_ALL BIT(0)
  37. #define LIMA_L2_CACHE_CLEAR_PAGE 0x0014
  38. #define LIMA_L2_CACHE_MAX_READS 0x0018
  39. #define LIMA_L2_CACHE_ENABLE 0x001C
  40. #define LIMA_L2_CACHE_ENABLE_ACCESS BIT(0)
  41. #define LIMA_L2_CACHE_ENABLE_READ_ALLOCATE BIT(1)
  42. #define LIMA_L2_CACHE_PERFCNT_SRC0 0x0020
  43. #define LIMA_L2_CACHE_PERFCNT_VAL0 0x0024
  44. #define LIMA_L2_CACHE_PERFCNT_SRC1 0x0028
  45. #define LIMA_L2_CACHE_ERFCNT_VAL1 0x002C
  46. /* GP regs */
  47. #define LIMA_GP_VSCL_START_ADDR 0x00
  48. #define LIMA_GP_VSCL_END_ADDR 0x04
  49. #define LIMA_GP_PLBUCL_START_ADDR 0x08
  50. #define LIMA_GP_PLBUCL_END_ADDR 0x0c
  51. #define LIMA_GP_PLBU_ALLOC_START_ADDR 0x10
  52. #define LIMA_GP_PLBU_ALLOC_END_ADDR 0x14
  53. #define LIMA_GP_CMD 0x20
  54. #define LIMA_GP_CMD_START_VS BIT(0)
  55. #define LIMA_GP_CMD_START_PLBU BIT(1)
  56. #define LIMA_GP_CMD_UPDATE_PLBU_ALLOC BIT(4)
  57. #define LIMA_GP_CMD_RESET BIT(5)
  58. #define LIMA_GP_CMD_FORCE_HANG BIT(6)
  59. #define LIMA_GP_CMD_STOP_BUS BIT(9)
  60. #define LIMA_GP_CMD_SOFT_RESET BIT(10)
  61. #define LIMA_GP_INT_RAWSTAT 0x24
  62. #define LIMA_GP_INT_CLEAR 0x28
  63. #define LIMA_GP_INT_MASK 0x2C
  64. #define LIMA_GP_INT_STAT 0x30
  65. #define LIMA_GP_IRQ_VS_END_CMD_LST BIT(0)
  66. #define LIMA_GP_IRQ_PLBU_END_CMD_LST BIT(1)
  67. #define LIMA_GP_IRQ_PLBU_OUT_OF_MEM BIT(2)
  68. #define LIMA_GP_IRQ_VS_SEM_IRQ BIT(3)
  69. #define LIMA_GP_IRQ_PLBU_SEM_IRQ BIT(4)
  70. #define LIMA_GP_IRQ_HANG BIT(5)
  71. #define LIMA_GP_IRQ_FORCE_HANG BIT(6)
  72. #define LIMA_GP_IRQ_PERF_CNT_0_LIMIT BIT(7)
  73. #define LIMA_GP_IRQ_PERF_CNT_1_LIMIT BIT(8)
  74. #define LIMA_GP_IRQ_WRITE_BOUND_ERR BIT(9)
  75. #define LIMA_GP_IRQ_SYNC_ERROR BIT(10)
  76. #define LIMA_GP_IRQ_AXI_BUS_ERROR BIT(11)
  77. #define LIMA_GP_IRQ_AXI_BUS_STOPPED BIT(12)
  78. #define LIMA_GP_IRQ_VS_INVALID_CMD BIT(13)
  79. #define LIMA_GP_IRQ_PLB_INVALID_CMD BIT(14)
  80. #define LIMA_GP_IRQ_RESET_COMPLETED BIT(19)
  81. #define LIMA_GP_IRQ_SEMAPHORE_UNDERFLOW BIT(20)
  82. #define LIMA_GP_IRQ_SEMAPHORE_OVERFLOW BIT(21)
  83. #define LIMA_GP_IRQ_PTR_ARRAY_OUT_OF_BOUNDS BIT(22)
  84. #define LIMA_GP_WRITE_BOUND_LOW 0x34
  85. #define LIMA_GP_PERF_CNT_0_ENABLE 0x3C
  86. #define LIMA_GP_PERF_CNT_1_ENABLE 0x40
  87. #define LIMA_GP_PERF_CNT_0_SRC 0x44
  88. #define LIMA_GP_PERF_CNT_1_SRC 0x48
  89. #define LIMA_GP_PERF_CNT_0_VALUE 0x4C
  90. #define LIMA_GP_PERF_CNT_1_VALUE 0x50
  91. #define LIMA_GP_PERF_CNT_0_LIMIT 0x54
  92. #define LIMA_GP_STATUS 0x68
  93. #define LIMA_GP_STATUS_VS_ACTIVE BIT(1)
  94. #define LIMA_GP_STATUS_BUS_STOPPED BIT(2)
  95. #define LIMA_GP_STATUS_PLBU_ACTIVE BIT(3)
  96. #define LIMA_GP_STATUS_BUS_ERROR BIT(6)
  97. #define LIMA_GP_STATUS_WRITE_BOUND_ERR BIT(8)
  98. #define LIMA_GP_VERSION 0x6C
  99. #define LIMA_GP_VSCL_START_ADDR_READ 0x80
  100. #define LIMA_GP_PLBCL_START_ADDR_READ 0x84
  101. #define LIMA_GP_CONTR_AXI_BUS_ERROR_STAT 0x94
  102. #define LIMA_GP_IRQ_MASK_ALL \
  103. ( \
  104. LIMA_GP_IRQ_VS_END_CMD_LST | \
  105. LIMA_GP_IRQ_PLBU_END_CMD_LST | \
  106. LIMA_GP_IRQ_PLBU_OUT_OF_MEM | \
  107. LIMA_GP_IRQ_VS_SEM_IRQ | \
  108. LIMA_GP_IRQ_PLBU_SEM_IRQ | \
  109. LIMA_GP_IRQ_HANG | \
  110. LIMA_GP_IRQ_FORCE_HANG | \
  111. LIMA_GP_IRQ_PERF_CNT_0_LIMIT | \
  112. LIMA_GP_IRQ_PERF_CNT_1_LIMIT | \
  113. LIMA_GP_IRQ_WRITE_BOUND_ERR | \
  114. LIMA_GP_IRQ_SYNC_ERROR | \
  115. LIMA_GP_IRQ_AXI_BUS_ERROR | \
  116. LIMA_GP_IRQ_AXI_BUS_STOPPED | \
  117. LIMA_GP_IRQ_VS_INVALID_CMD | \
  118. LIMA_GP_IRQ_PLB_INVALID_CMD | \
  119. LIMA_GP_IRQ_RESET_COMPLETED | \
  120. LIMA_GP_IRQ_SEMAPHORE_UNDERFLOW | \
  121. LIMA_GP_IRQ_SEMAPHORE_OVERFLOW | \
  122. LIMA_GP_IRQ_PTR_ARRAY_OUT_OF_BOUNDS)
  123. #define LIMA_GP_IRQ_MASK_ERROR \
  124. ( \
  125. LIMA_GP_IRQ_PLBU_OUT_OF_MEM | \
  126. LIMA_GP_IRQ_FORCE_HANG | \
  127. LIMA_GP_IRQ_WRITE_BOUND_ERR | \
  128. LIMA_GP_IRQ_SYNC_ERROR | \
  129. LIMA_GP_IRQ_AXI_BUS_ERROR | \
  130. LIMA_GP_IRQ_VS_INVALID_CMD | \
  131. LIMA_GP_IRQ_PLB_INVALID_CMD | \
  132. LIMA_GP_IRQ_SEMAPHORE_UNDERFLOW | \
  133. LIMA_GP_IRQ_SEMAPHORE_OVERFLOW | \
  134. LIMA_GP_IRQ_PTR_ARRAY_OUT_OF_BOUNDS)
  135. #define LIMA_GP_IRQ_MASK_USED \
  136. ( \
  137. LIMA_GP_IRQ_VS_END_CMD_LST | \
  138. LIMA_GP_IRQ_PLBU_END_CMD_LST | \
  139. LIMA_GP_IRQ_MASK_ERROR)
  140. /* PP regs */
  141. #define LIMA_PP_FRAME 0x0000
  142. #define LIMA_PP_RSW 0x0004
  143. #define LIMA_PP_STACK 0x0030
  144. #define LIMA_PP_STACK_SIZE 0x0034
  145. #define LIMA_PP_ORIGIN_OFFSET_X 0x0040
  146. #define LIMA_PP_WB(i) (0x0100 * (i + 1))
  147. #define LIMA_PP_WB_SOURCE_SELECT 0x0000
  148. #define LIMA_PP_WB_SOURCE_ADDR 0x0004
  149. #define LIMA_PP_VERSION 0x1000
  150. #define LIMA_PP_CURRENT_REND_LIST_ADDR 0x1004
  151. #define LIMA_PP_STATUS 0x1008
  152. #define LIMA_PP_STATUS_RENDERING_ACTIVE BIT(0)
  153. #define LIMA_PP_STATUS_BUS_STOPPED BIT(4)
  154. #define LIMA_PP_CTRL 0x100c
  155. #define LIMA_PP_CTRL_STOP_BUS BIT(0)
  156. #define LIMA_PP_CTRL_FLUSH_CACHES BIT(3)
  157. #define LIMA_PP_CTRL_FORCE_RESET BIT(5)
  158. #define LIMA_PP_CTRL_START_RENDERING BIT(6)
  159. #define LIMA_PP_CTRL_SOFT_RESET BIT(7)
  160. #define LIMA_PP_INT_RAWSTAT 0x1020
  161. #define LIMA_PP_INT_CLEAR 0x1024
  162. #define LIMA_PP_INT_MASK 0x1028
  163. #define LIMA_PP_INT_STATUS 0x102c
  164. #define LIMA_PP_IRQ_END_OF_FRAME BIT(0)
  165. #define LIMA_PP_IRQ_END_OF_TILE BIT(1)
  166. #define LIMA_PP_IRQ_HANG BIT(2)
  167. #define LIMA_PP_IRQ_FORCE_HANG BIT(3)
  168. #define LIMA_PP_IRQ_BUS_ERROR BIT(4)
  169. #define LIMA_PP_IRQ_BUS_STOP BIT(5)
  170. #define LIMA_PP_IRQ_CNT_0_LIMIT BIT(6)
  171. #define LIMA_PP_IRQ_CNT_1_LIMIT BIT(7)
  172. #define LIMA_PP_IRQ_WRITE_BOUNDARY_ERROR BIT(8)
  173. #define LIMA_PP_IRQ_INVALID_PLIST_COMMAND BIT(9)
  174. #define LIMA_PP_IRQ_CALL_STACK_UNDERFLOW BIT(10)
  175. #define LIMA_PP_IRQ_CALL_STACK_OVERFLOW BIT(11)
  176. #define LIMA_PP_IRQ_RESET_COMPLETED BIT(12)
  177. #define LIMA_PP_WRITE_BOUNDARY_LOW 0x1044
  178. #define LIMA_PP_BUS_ERROR_STATUS 0x1050
  179. #define LIMA_PP_PERF_CNT_0_ENABLE 0x1080
  180. #define LIMA_PP_PERF_CNT_0_SRC 0x1084
  181. #define LIMA_PP_PERF_CNT_0_LIMIT 0x1088
  182. #define LIMA_PP_PERF_CNT_0_VALUE 0x108c
  183. #define LIMA_PP_PERF_CNT_1_ENABLE 0x10a0
  184. #define LIMA_PP_PERF_CNT_1_SRC 0x10a4
  185. #define LIMA_PP_PERF_CNT_1_LIMIT 0x10a8
  186. #define LIMA_PP_PERF_CNT_1_VALUE 0x10ac
  187. #define LIMA_PP_PERFMON_CONTR 0x10b0
  188. #define LIMA_PP_PERFMON_BASE 0x10b4
  189. #define LIMA_PP_IRQ_MASK_ALL \
  190. ( \
  191. LIMA_PP_IRQ_END_OF_FRAME | \
  192. LIMA_PP_IRQ_END_OF_TILE | \
  193. LIMA_PP_IRQ_HANG | \
  194. LIMA_PP_IRQ_FORCE_HANG | \
  195. LIMA_PP_IRQ_BUS_ERROR | \
  196. LIMA_PP_IRQ_BUS_STOP | \
  197. LIMA_PP_IRQ_CNT_0_LIMIT | \
  198. LIMA_PP_IRQ_CNT_1_LIMIT | \
  199. LIMA_PP_IRQ_WRITE_BOUNDARY_ERROR | \
  200. LIMA_PP_IRQ_INVALID_PLIST_COMMAND | \
  201. LIMA_PP_IRQ_CALL_STACK_UNDERFLOW | \
  202. LIMA_PP_IRQ_CALL_STACK_OVERFLOW | \
  203. LIMA_PP_IRQ_RESET_COMPLETED)
  204. #define LIMA_PP_IRQ_MASK_ERROR \
  205. ( \
  206. LIMA_PP_IRQ_FORCE_HANG | \
  207. LIMA_PP_IRQ_BUS_ERROR | \
  208. LIMA_PP_IRQ_WRITE_BOUNDARY_ERROR | \
  209. LIMA_PP_IRQ_INVALID_PLIST_COMMAND | \
  210. LIMA_PP_IRQ_CALL_STACK_UNDERFLOW | \
  211. LIMA_PP_IRQ_CALL_STACK_OVERFLOW)
  212. #define LIMA_PP_IRQ_MASK_USED \
  213. ( \
  214. LIMA_PP_IRQ_END_OF_FRAME | \
  215. LIMA_PP_IRQ_MASK_ERROR)
  216. /* MMU regs */
  217. #define LIMA_MMU_DTE_ADDR 0x0000
  218. #define LIMA_MMU_STATUS 0x0004
  219. #define LIMA_MMU_STATUS_PAGING_ENABLED BIT(0)
  220. #define LIMA_MMU_STATUS_PAGE_FAULT_ACTIVE BIT(1)
  221. #define LIMA_MMU_STATUS_STALL_ACTIVE BIT(2)
  222. #define LIMA_MMU_STATUS_IDLE BIT(3)
  223. #define LIMA_MMU_STATUS_REPLAY_BUFFER_EMPTY BIT(4)
  224. #define LIMA_MMU_STATUS_PAGE_FAULT_IS_WRITE BIT(5)
  225. #define LIMA_MMU_STATUS_BUS_ID(x) ((x >> 6) & 0x1F)
  226. #define LIMA_MMU_STATUS_STALL_NOT_ACTIVE BIT(31)
  227. #define LIMA_MMU_COMMAND 0x0008
  228. #define LIMA_MMU_COMMAND_ENABLE_PAGING 0x00
  229. #define LIMA_MMU_COMMAND_DISABLE_PAGING 0x01
  230. #define LIMA_MMU_COMMAND_ENABLE_STALL 0x02
  231. #define LIMA_MMU_COMMAND_DISABLE_STALL 0x03
  232. #define LIMA_MMU_COMMAND_ZAP_CACHE 0x04
  233. #define LIMA_MMU_COMMAND_PAGE_FAULT_DONE 0x05
  234. #define LIMA_MMU_COMMAND_HARD_RESET 0x06
  235. #define LIMA_MMU_PAGE_FAULT_ADDR 0x000C
  236. #define LIMA_MMU_ZAP_ONE_LINE 0x0010
  237. #define LIMA_MMU_INT_RAWSTAT 0x0014
  238. #define LIMA_MMU_INT_CLEAR 0x0018
  239. #define LIMA_MMU_INT_MASK 0x001C
  240. #define LIMA_MMU_INT_PAGE_FAULT BIT(0)
  241. #define LIMA_MMU_INT_READ_BUS_ERROR BIT(1)
  242. #define LIMA_MMU_INT_STATUS 0x0020
  243. #define LIMA_VM_FLAG_PRESENT BIT(0)
  244. #define LIMA_VM_FLAG_READ_PERMISSION BIT(1)
  245. #define LIMA_VM_FLAG_WRITE_PERMISSION BIT(2)
  246. #define LIMA_VM_FLAG_OVERRIDE_CACHE BIT(3)
  247. #define LIMA_VM_FLAG_WRITE_CACHEABLE BIT(4)
  248. #define LIMA_VM_FLAG_WRITE_ALLOCATE BIT(5)
  249. #define LIMA_VM_FLAG_WRITE_BUFFERABLE BIT(6)
  250. #define LIMA_VM_FLAG_READ_CACHEABLE BIT(7)
  251. #define LIMA_VM_FLAG_READ_ALLOCATE BIT(8)
  252. #define LIMA_VM_FLAG_MASK 0x1FF
  253. #define LIMA_VM_FLAGS_CACHE ( \
  254. LIMA_VM_FLAG_PRESENT | \
  255. LIMA_VM_FLAG_READ_PERMISSION | \
  256. LIMA_VM_FLAG_WRITE_PERMISSION | \
  257. LIMA_VM_FLAG_OVERRIDE_CACHE | \
  258. LIMA_VM_FLAG_WRITE_CACHEABLE | \
  259. LIMA_VM_FLAG_WRITE_BUFFERABLE | \
  260. LIMA_VM_FLAG_READ_CACHEABLE | \
  261. LIMA_VM_FLAG_READ_ALLOCATE)
  262. #define LIMA_VM_FLAGS_UNCACHE ( \
  263. LIMA_VM_FLAG_PRESENT | \
  264. LIMA_VM_FLAG_READ_PERMISSION | \
  265. LIMA_VM_FLAG_WRITE_PERMISSION)
  266. /* DLBU regs */
  267. #define LIMA_DLBU_MASTER_TLLIST_PHYS_ADDR 0x0000
  268. #define LIMA_DLBU_MASTER_TLLIST_VADDR 0x0004
  269. #define LIMA_DLBU_TLLIST_VBASEADDR 0x0008
  270. #define LIMA_DLBU_FB_DIM 0x000C
  271. #define LIMA_DLBU_TLLIST_CONF 0x0010
  272. #define LIMA_DLBU_START_TILE_POS 0x0014
  273. #define LIMA_DLBU_PP_ENABLE_MASK 0x0018
  274. /* BCAST regs */
  275. #define LIMA_BCAST_BROADCAST_MASK 0x0
  276. #define LIMA_BCAST_INTERRUPT_MASK 0x4
  277. #endif