/drivers/gpu/mali/mali/regs/mali_gp_regs.h

https://bitbucket.org/ndreys/linux-sunxi · C++ Header · 214 lines · 154 code · 19 blank · 41 comment · 4 complexity · 951688ef6047efa6c7eeddaa06bc3b23 MD5 · raw file

  1. /*
  2. * Copyright (C) 2010, 2012 ARM Limited. All rights reserved.
  3. *
  4. * This program is free software and is provided to you under the terms of the GNU General Public License version 2
  5. * as published by the Free Software Foundation, and any use by you of this program is subject to the terms of such GNU licence.
  6. *
  7. * A copy of the licence is included with the program, and can also be obtained from Free Software
  8. * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  9. */
  10. #ifndef _MALIGP2_CONROL_REGS_H_
  11. #define _MALIGP2_CONROL_REGS_H_
  12. /**
  13. * These are the different geometry processor control registers.
  14. * Their usage is to control and monitor the operation of the
  15. * Vertex Shader and the Polygon List Builder in the geometry processor.
  16. * Addresses are in 32-bit word relative sizes.
  17. * @see [P0081] "Geometry Processor Data Structures" for details
  18. */
  19. typedef enum {
  20. MALIGP2_REG_ADDR_MGMT_VSCL_START_ADDR = 0x00,
  21. MALIGP2_REG_ADDR_MGMT_VSCL_END_ADDR = 0x04,
  22. MALIGP2_REG_ADDR_MGMT_PLBUCL_START_ADDR = 0x08,
  23. MALIGP2_REG_ADDR_MGMT_PLBUCL_END_ADDR = 0x0c,
  24. MALIGP2_REG_ADDR_MGMT_PLBU_ALLOC_START_ADDR = 0x10,
  25. MALIGP2_REG_ADDR_MGMT_PLBU_ALLOC_END_ADDR = 0x14,
  26. MALIGP2_REG_ADDR_MGMT_CMD = 0x20,
  27. MALIGP2_REG_ADDR_MGMT_INT_RAWSTAT = 0x24,
  28. MALIGP2_REG_ADDR_MGMT_INT_CLEAR = 0x28,
  29. MALIGP2_REG_ADDR_MGMT_INT_MASK = 0x2C,
  30. MALIGP2_REG_ADDR_MGMT_INT_STAT = 0x30,
  31. MALIGP2_REG_ADDR_MGMT_WRITE_BOUND_LOW = 0x34,
  32. MALIGP2_REG_ADDR_MGMT_PERF_CNT_0_ENABLE = 0x3C,
  33. MALIGP2_REG_ADDR_MGMT_PERF_CNT_1_ENABLE = 0x40,
  34. MALIGP2_REG_ADDR_MGMT_PERF_CNT_0_SRC = 0x44,
  35. MALIGP2_REG_ADDR_MGMT_PERF_CNT_1_SRC = 0x48,
  36. MALIGP2_REG_ADDR_MGMT_PERF_CNT_0_VALUE = 0x4C,
  37. MALIGP2_REG_ADDR_MGMT_PERF_CNT_1_VALUE = 0x50,
  38. MALIGP2_REG_ADDR_MGMT_STATUS = 0x68,
  39. MALIGP2_REG_ADDR_MGMT_VERSION = 0x6C,
  40. MALIGP2_REG_ADDR_MGMT_VSCL_START_ADDR_READ = 0x80,
  41. MALIGP2_REG_ADDR_MGMT_PLBCL_START_ADDR_READ = 0x84,
  42. MALIGP2_CONTR_AXI_BUS_ERROR_STAT = 0x94,
  43. MALIGP2_REGISTER_ADDRESS_SPACE_SIZE = 0x98,
  44. } maligp_reg_addr_mgmt_addr;
  45. #define MALIGP2_REG_VAL_PERF_CNT_ENABLE 1
  46. /**
  47. * Commands to geometry processor.
  48. * @see MALIGP2_CTRL_REG_CMD
  49. */
  50. typedef enum
  51. {
  52. MALIGP2_REG_VAL_CMD_START_VS = (1<< 0),
  53. MALIGP2_REG_VAL_CMD_START_PLBU = (1<< 1),
  54. MALIGP2_REG_VAL_CMD_UPDATE_PLBU_ALLOC = (1<< 4),
  55. MALIGP2_REG_VAL_CMD_RESET = (1<< 5),
  56. MALIGP2_REG_VAL_CMD_FORCE_HANG = (1<< 6),
  57. MALIGP2_REG_VAL_CMD_STOP_BUS = (1<< 9),
  58. #if defined(USING_MALI400) || defined(USING_MALI450)
  59. MALI400GP_REG_VAL_CMD_SOFT_RESET = (1<<10),
  60. #endif
  61. } mgp_contr_reg_val_cmd;
  62. /** @defgroup MALIGP2_IRQ
  63. * Interrupt status of geometry processor.
  64. * @see MALIGP2_CTRL_REG_INT_RAWSTAT, MALIGP2_REG_ADDR_MGMT_INT_CLEAR,
  65. * MALIGP2_REG_ADDR_MGMT_INT_MASK, MALIGP2_REG_ADDR_MGMT_INT_STAT
  66. * @{
  67. */
  68. #define MALIGP2_REG_VAL_IRQ_VS_END_CMD_LST (1 << 0)
  69. #define MALIGP2_REG_VAL_IRQ_PLBU_END_CMD_LST (1 << 1)
  70. #define MALIGP2_REG_VAL_IRQ_PLBU_OUT_OF_MEM (1 << 2)
  71. #define MALIGP2_REG_VAL_IRQ_VS_SEM_IRQ (1 << 3)
  72. #define MALIGP2_REG_VAL_IRQ_PLBU_SEM_IRQ (1 << 4)
  73. #define MALIGP2_REG_VAL_IRQ_HANG (1 << 5)
  74. #define MALIGP2_REG_VAL_IRQ_FORCE_HANG (1 << 6)
  75. #define MALIGP2_REG_VAL_IRQ_PERF_CNT_0_LIMIT (1 << 7)
  76. #define MALIGP2_REG_VAL_IRQ_PERF_CNT_1_LIMIT (1 << 8)
  77. #define MALIGP2_REG_VAL_IRQ_WRITE_BOUND_ERR (1 << 9)
  78. #define MALIGP2_REG_VAL_IRQ_SYNC_ERROR (1 << 10)
  79. #define MALIGP2_REG_VAL_IRQ_AXI_BUS_ERROR (1 << 11)
  80. #if defined(USING_MALI400) || defined(USING_MALI450)
  81. #define MALI400GP_REG_VAL_IRQ_AXI_BUS_STOPPED (1 << 12)
  82. #define MALI400GP_REG_VAL_IRQ_VS_INVALID_CMD (1 << 13)
  83. #define MALI400GP_REG_VAL_IRQ_PLB_INVALID_CMD (1 << 14)
  84. #define MALI400GP_REG_VAL_IRQ_RESET_COMPLETED (1 << 19)
  85. #define MALI400GP_REG_VAL_IRQ_SEMAPHORE_UNDERFLOW (1 << 20)
  86. #define MALI400GP_REG_VAL_IRQ_SEMAPHORE_OVERFLOW (1 << 21)
  87. #define MALI400GP_REG_VAL_IRQ_PTR_ARRAY_OUT_OF_BOUNDS (1 << 22)
  88. #elif !defined USING_MALI200
  89. #error "No supported mali core defined"
  90. #endif
  91. /* Mask defining all IRQs in MaliGP2 */
  92. #if defined(USING_MALI200)
  93. #define MALIGP2_REG_VAL_IRQ_MASK_ALL \
  94. (\
  95. MALIGP2_REG_VAL_IRQ_VS_END_CMD_LST | \
  96. MALIGP2_REG_VAL_IRQ_PLBU_END_CMD_LST | \
  97. MALIGP2_REG_VAL_IRQ_PLBU_OUT_OF_MEM | \
  98. MALIGP2_REG_VAL_IRQ_VS_SEM_IRQ | \
  99. MALIGP2_REG_VAL_IRQ_PLBU_SEM_IRQ | \
  100. MALIGP2_REG_VAL_IRQ_HANG | \
  101. MALIGP2_REG_VAL_IRQ_FORCE_HANG | \
  102. MALIGP2_REG_VAL_IRQ_PERF_CNT_0_LIMIT | \
  103. MALIGP2_REG_VAL_IRQ_PERF_CNT_1_LIMIT | \
  104. MALIGP2_REG_VAL_IRQ_WRITE_BOUND_ERR | \
  105. MALIGP2_REG_VAL_IRQ_SYNC_ERROR | \
  106. MALIGP2_REG_VAL_IRQ_AXI_BUS_ERROR)
  107. #elif defined(USING_MALI400) || defined(USING_MALI450)
  108. #define MALIGP2_REG_VAL_IRQ_MASK_ALL \
  109. (\
  110. MALIGP2_REG_VAL_IRQ_VS_END_CMD_LST | \
  111. MALIGP2_REG_VAL_IRQ_PLBU_END_CMD_LST | \
  112. MALIGP2_REG_VAL_IRQ_PLBU_OUT_OF_MEM | \
  113. MALIGP2_REG_VAL_IRQ_VS_SEM_IRQ | \
  114. MALIGP2_REG_VAL_IRQ_PLBU_SEM_IRQ | \
  115. MALIGP2_REG_VAL_IRQ_HANG | \
  116. MALIGP2_REG_VAL_IRQ_FORCE_HANG | \
  117. MALIGP2_REG_VAL_IRQ_PERF_CNT_0_LIMIT | \
  118. MALIGP2_REG_VAL_IRQ_PERF_CNT_1_LIMIT | \
  119. MALIGP2_REG_VAL_IRQ_WRITE_BOUND_ERR | \
  120. MALIGP2_REG_VAL_IRQ_SYNC_ERROR | \
  121. MALIGP2_REG_VAL_IRQ_AXI_BUS_ERROR | \
  122. MALI400GP_REG_VAL_IRQ_AXI_BUS_STOPPED | \
  123. MALI400GP_REG_VAL_IRQ_VS_INVALID_CMD | \
  124. MALI400GP_REG_VAL_IRQ_PLB_INVALID_CMD | \
  125. MALI400GP_REG_VAL_IRQ_RESET_COMPLETED | \
  126. MALI400GP_REG_VAL_IRQ_SEMAPHORE_UNDERFLOW | \
  127. MALI400GP_REG_VAL_IRQ_SEMAPHORE_OVERFLOW | \
  128. MALI400GP_REG_VAL_IRQ_PTR_ARRAY_OUT_OF_BOUNDS)
  129. #else
  130. #error "No supported mali core defined"
  131. #endif
  132. /* Mask defining the IRQs in MaliGP2 which we use*/
  133. #if defined(USING_MALI200)
  134. #define MALIGP2_REG_VAL_IRQ_MASK_USED \
  135. (\
  136. MALIGP2_REG_VAL_IRQ_VS_END_CMD_LST | \
  137. MALIGP2_REG_VAL_IRQ_PLBU_END_CMD_LST | \
  138. MALIGP2_REG_VAL_IRQ_PLBU_OUT_OF_MEM | \
  139. MALIGP2_REG_VAL_IRQ_HANG | \
  140. MALIGP2_REG_VAL_IRQ_FORCE_HANG | \
  141. MALIGP2_REG_VAL_IRQ_WRITE_BOUND_ERR | \
  142. MALIGP2_REG_VAL_IRQ_SYNC_ERROR | \
  143. MALIGP2_REG_VAL_IRQ_AXI_BUS_ERROR)
  144. #elif defined(USING_MALI400) || defined(USING_MALI450)
  145. #define MALIGP2_REG_VAL_IRQ_MASK_USED \
  146. (\
  147. MALIGP2_REG_VAL_IRQ_VS_END_CMD_LST | \
  148. MALIGP2_REG_VAL_IRQ_PLBU_END_CMD_LST | \
  149. MALIGP2_REG_VAL_IRQ_PLBU_OUT_OF_MEM | \
  150. MALIGP2_REG_VAL_IRQ_HANG | \
  151. MALIGP2_REG_VAL_IRQ_FORCE_HANG | \
  152. MALIGP2_REG_VAL_IRQ_WRITE_BOUND_ERR | \
  153. MALIGP2_REG_VAL_IRQ_SYNC_ERROR | \
  154. MALIGP2_REG_VAL_IRQ_AXI_BUS_ERROR | \
  155. MALI400GP_REG_VAL_IRQ_VS_INVALID_CMD | \
  156. MALI400GP_REG_VAL_IRQ_PLB_INVALID_CMD | \
  157. MALI400GP_REG_VAL_IRQ_SEMAPHORE_UNDERFLOW | \
  158. MALI400GP_REG_VAL_IRQ_SEMAPHORE_OVERFLOW | \
  159. MALI400GP_REG_VAL_IRQ_PTR_ARRAY_OUT_OF_BOUNDS)
  160. #else
  161. #error "No supported mali core defined"
  162. #endif
  163. /* Mask defining non IRQs on MaliGP2*/
  164. #define MALIGP2_REG_VAL_IRQ_MASK_NONE 0
  165. /** }@ defgroup MALIGP2_IRQ*/
  166. /** @defgroup MALIGP2_STATUS
  167. * The different Status values to the geometry processor.
  168. * @see MALIGP2_CTRL_REG_STATUS
  169. * @{
  170. */
  171. #define MALIGP2_REG_VAL_STATUS_VS_ACTIVE 0x0002
  172. #define MALIGP2_REG_VAL_STATUS_BUS_STOPPED 0x0004
  173. #define MALIGP2_REG_VAL_STATUS_PLBU_ACTIVE 0x0008
  174. #define MALIGP2_REG_VAL_STATUS_BUS_ERROR 0x0040
  175. #define MALIGP2_REG_VAL_STATUS_WRITE_BOUND_ERR 0x0100
  176. /** }@ defgroup MALIGP2_STATUS*/
  177. #define MALIGP2_REG_VAL_STATUS_MASK_ACTIVE (\
  178. MALIGP2_REG_VAL_STATUS_VS_ACTIVE|\
  179. MALIGP2_REG_VAL_STATUS_PLBU_ACTIVE)
  180. #define MALIGP2_REG_VAL_STATUS_MASK_ERROR (\
  181. MALIGP2_REG_VAL_STATUS_BUS_ERROR |\
  182. MALIGP2_REG_VAL_STATUS_WRITE_BOUND_ERR )
  183. /* This should be in the top 16 bit of the version register of gp.*/
  184. #define MALI200_GP_PRODUCT_ID 0xA07
  185. #define MALI300_GP_PRODUCT_ID 0xC07
  186. #define MALI400_GP_PRODUCT_ID 0xB07
  187. #define MALI450_GP_PRODUCT_ID 0xD07
  188. /**
  189. * The different sources for instrumented on the geometry processor.
  190. * @see MALIGP2_REG_ADDR_MGMT_PERF_CNT_0_SRC
  191. */
  192. enum MALIGP2_cont_reg_perf_cnt_src {
  193. MALIGP2_REG_VAL_PERF_CNT1_SRC_NUMBER_OF_VERTICES_PROCESSED = 0x0a,
  194. };
  195. #endif