dcn10_hubp.h 32 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746
  1. /* Copyright 2012-15 Advanced Micro Devices, Inc.
  2. *
  3. * Permission is hereby granted, free of charge, to any person obtaining a
  4. * copy of this software and associated documentation files (the "Software"),
  5. * to deal in the Software without restriction, including without limitation
  6. * the rights to use, copy, modify, merge, publish, distribute, sublicense,
  7. * and/or sell copies of the Software, and to permit persons to whom the
  8. * Software is furnished to do so, subject to the following conditions:
  9. *
  10. * The above copyright notice and this permission notice shall be included in
  11. * all copies or substantial portions of the Software.
  12. *
  13. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  14. * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  15. * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
  16. * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
  17. * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
  18. * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
  19. * OTHER DEALINGS IN THE SOFTWARE.
  20. *
  21. * Authors: AMD
  22. *
  23. */
  24. #ifndef __DC_MEM_INPUT_DCN10_H__
  25. #define __DC_MEM_INPUT_DCN10_H__
  26. #include "hubp.h"
  27. #define TO_DCN10_HUBP(hubp)\
  28. container_of(hubp, struct dcn10_hubp, base)
  29. /* Register address initialization macro for all ASICs (including those with reduced functionality) */
  30. #define HUBP_REG_LIST_DCN(id)\
  31. SRI(DCHUBP_CNTL, HUBP, id),\
  32. SRI(HUBPREQ_DEBUG_DB, HUBP, id),\
  33. SRI(DCSURF_ADDR_CONFIG, HUBP, id),\
  34. SRI(DCSURF_TILING_CONFIG, HUBP, id),\
  35. SRI(DCSURF_SURFACE_PITCH, HUBPREQ, id),\
  36. SRI(DCSURF_SURFACE_PITCH_C, HUBPREQ, id),\
  37. SRI(DCSURF_SURFACE_CONFIG, HUBP, id),\
  38. SRI(DCSURF_FLIP_CONTROL, HUBPREQ, id),\
  39. SRI(DCSURF_PRI_VIEWPORT_DIMENSION, HUBP, id), \
  40. SRI(DCSURF_PRI_VIEWPORT_START, HUBP, id), \
  41. SRI(DCSURF_SEC_VIEWPORT_DIMENSION, HUBP, id), \
  42. SRI(DCSURF_SEC_VIEWPORT_START, HUBP, id), \
  43. SRI(DCSURF_PRI_VIEWPORT_DIMENSION_C, HUBP, id), \
  44. SRI(DCSURF_PRI_VIEWPORT_START_C, HUBP, id), \
  45. SRI(DCSURF_PRIMARY_SURFACE_ADDRESS_HIGH, HUBPREQ, id),\
  46. SRI(DCSURF_PRIMARY_SURFACE_ADDRESS, HUBPREQ, id),\
  47. SRI(DCSURF_SECONDARY_SURFACE_ADDRESS_HIGH, HUBPREQ, id),\
  48. SRI(DCSURF_SECONDARY_SURFACE_ADDRESS, HUBPREQ, id),\
  49. SRI(DCSURF_PRIMARY_META_SURFACE_ADDRESS_HIGH, HUBPREQ, id),\
  50. SRI(DCSURF_PRIMARY_META_SURFACE_ADDRESS, HUBPREQ, id),\
  51. SRI(DCSURF_SECONDARY_META_SURFACE_ADDRESS_HIGH, HUBPREQ, id),\
  52. SRI(DCSURF_SECONDARY_META_SURFACE_ADDRESS, HUBPREQ, id),\
  53. SRI(DCSURF_PRIMARY_SURFACE_ADDRESS_HIGH_C, HUBPREQ, id),\
  54. SRI(DCSURF_PRIMARY_SURFACE_ADDRESS_C, HUBPREQ, id),\
  55. SRI(DCSURF_PRIMARY_META_SURFACE_ADDRESS_HIGH_C, HUBPREQ, id),\
  56. SRI(DCSURF_PRIMARY_META_SURFACE_ADDRESS_C, HUBPREQ, id),\
  57. SRI(DCSURF_SURFACE_INUSE, HUBPREQ, id),\
  58. SRI(DCSURF_SURFACE_INUSE_HIGH, HUBPREQ, id),\
  59. SRI(DCSURF_SURFACE_INUSE_C, HUBPREQ, id),\
  60. SRI(DCSURF_SURFACE_INUSE_HIGH_C, HUBPREQ, id),\
  61. SRI(DCSURF_SURFACE_EARLIEST_INUSE, HUBPREQ, id),\
  62. SRI(DCSURF_SURFACE_EARLIEST_INUSE_HIGH, HUBPREQ, id),\
  63. SRI(DCSURF_SURFACE_EARLIEST_INUSE_C, HUBPREQ, id),\
  64. SRI(DCSURF_SURFACE_EARLIEST_INUSE_HIGH_C, HUBPREQ, id),\
  65. SRI(DCSURF_SURFACE_CONTROL, HUBPREQ, id),\
  66. SRI(HUBPRET_CONTROL, HUBPRET, id),\
  67. SRI(DCN_EXPANSION_MODE, HUBPREQ, id),\
  68. SRI(DCHUBP_REQ_SIZE_CONFIG, HUBP, id),\
  69. SRI(DCHUBP_REQ_SIZE_CONFIG_C, HUBP, id),\
  70. SRI(BLANK_OFFSET_0, HUBPREQ, id),\
  71. SRI(BLANK_OFFSET_1, HUBPREQ, id),\
  72. SRI(DST_DIMENSIONS, HUBPREQ, id),\
  73. SRI(DST_AFTER_SCALER, HUBPREQ, id),\
  74. SRI(VBLANK_PARAMETERS_0, HUBPREQ, id),\
  75. SRI(REF_FREQ_TO_PIX_FREQ, HUBPREQ, id),\
  76. SRI(VBLANK_PARAMETERS_1, HUBPREQ, id),\
  77. SRI(VBLANK_PARAMETERS_3, HUBPREQ, id),\
  78. SRI(NOM_PARAMETERS_4, HUBPREQ, id),\
  79. SRI(NOM_PARAMETERS_5, HUBPREQ, id),\
  80. SRI(PER_LINE_DELIVERY_PRE, HUBPREQ, id),\
  81. SRI(PER_LINE_DELIVERY, HUBPREQ, id),\
  82. SRI(VBLANK_PARAMETERS_2, HUBPREQ, id),\
  83. SRI(VBLANK_PARAMETERS_4, HUBPREQ, id),\
  84. SRI(NOM_PARAMETERS_6, HUBPREQ, id),\
  85. SRI(NOM_PARAMETERS_7, HUBPREQ, id),\
  86. SRI(DCN_TTU_QOS_WM, HUBPREQ, id),\
  87. SRI(DCN_GLOBAL_TTU_CNTL, HUBPREQ, id),\
  88. SRI(DCN_SURF0_TTU_CNTL0, HUBPREQ, id),\
  89. SRI(DCN_SURF0_TTU_CNTL1, HUBPREQ, id),\
  90. SRI(DCN_SURF1_TTU_CNTL0, HUBPREQ, id),\
  91. SRI(DCN_SURF1_TTU_CNTL1, HUBPREQ, id),\
  92. SRI(DCN_CUR0_TTU_CNTL0, HUBPREQ, id),\
  93. SRI(DCN_CUR0_TTU_CNTL1, HUBPREQ, id),\
  94. SRI(HUBP_CLK_CNTL, HUBP, id)
  95. /* Register address initialization macro for ASICs with VM */
  96. #define HUBP_REG_LIST_DCN_VM(id)\
  97. SRI(NOM_PARAMETERS_0, HUBPREQ, id),\
  98. SRI(NOM_PARAMETERS_1, HUBPREQ, id),\
  99. SRI(NOM_PARAMETERS_2, HUBPREQ, id),\
  100. SRI(NOM_PARAMETERS_3, HUBPREQ, id),\
  101. SRI(DCN_VM_MX_L1_TLB_CNTL, HUBPREQ, id)
  102. #define HUBP_REG_LIST_DCN10(id)\
  103. HUBP_REG_LIST_DCN(id),\
  104. HUBP_REG_LIST_DCN_VM(id),\
  105. SRI(PREFETCH_SETTINS, HUBPREQ, id),\
  106. SRI(PREFETCH_SETTINS_C, HUBPREQ, id),\
  107. SRI(DCN_VM_CONTEXT0_PAGE_TABLE_BASE_ADDR_MSB, HUBPREQ, id),\
  108. SRI(DCN_VM_CONTEXT0_PAGE_TABLE_BASE_ADDR_LSB, HUBPREQ, id),\
  109. SRI(DCN_VM_CONTEXT0_PAGE_TABLE_START_ADDR_MSB, HUBPREQ, id),\
  110. SRI(DCN_VM_CONTEXT0_PAGE_TABLE_START_ADDR_LSB, HUBPREQ, id),\
  111. SRI(DCN_VM_CONTEXT0_PAGE_TABLE_END_ADDR_MSB, HUBPREQ, id),\
  112. SRI(DCN_VM_CONTEXT0_PAGE_TABLE_END_ADDR_LSB, HUBPREQ, id),\
  113. SRI(DCN_VM_CONTEXT0_PROTECTION_FAULT_DEFAULT_ADDR_MSB, HUBPREQ, id),\
  114. SRI(DCN_VM_CONTEXT0_PROTECTION_FAULT_DEFAULT_ADDR_LSB, HUBPREQ, id),\
  115. SRI(DCN_VM_SYSTEM_APERTURE_DEFAULT_ADDR_MSB, HUBPREQ, id),\
  116. SRI(DCN_VM_SYSTEM_APERTURE_DEFAULT_ADDR_LSB, HUBPREQ, id),\
  117. SRI(DCN_VM_SYSTEM_APERTURE_LOW_ADDR_MSB, HUBPREQ, id),\
  118. SRI(DCN_VM_SYSTEM_APERTURE_LOW_ADDR_LSB, HUBPREQ, id),\
  119. SRI(DCN_VM_SYSTEM_APERTURE_HIGH_ADDR_MSB, HUBPREQ, id),\
  120. SRI(DCN_VM_SYSTEM_APERTURE_HIGH_ADDR_LSB, HUBPREQ, id),\
  121. SR(DCHUBBUB_SDPIF_FB_BASE),\
  122. SR(DCHUBBUB_SDPIF_FB_OFFSET),\
  123. SRI(CURSOR_SETTINS, HUBPREQ, id), \
  124. SRI(CURSOR_SURFACE_ADDRESS_HIGH, CURSOR, id), \
  125. SRI(CURSOR_SURFACE_ADDRESS, CURSOR, id), \
  126. SRI(CURSOR_SIZE, CURSOR, id), \
  127. SRI(CURSOR_CONTROL, CURSOR, id), \
  128. SRI(CURSOR_POSITION, CURSOR, id), \
  129. SRI(CURSOR_HOT_SPOT, CURSOR, id), \
  130. SRI(CURSOR_DST_OFFSET, CURSOR, id)
  131. #define HUBP_COMMON_REG_VARIABLE_LIST \
  132. uint32_t DCHUBP_CNTL; \
  133. uint32_t HUBPREQ_DEBUG_DB; \
  134. uint32_t DCSURF_ADDR_CONFIG; \
  135. uint32_t DCSURF_TILING_CONFIG; \
  136. uint32_t DCSURF_SURFACE_PITCH; \
  137. uint32_t DCSURF_SURFACE_PITCH_C; \
  138. uint32_t DCSURF_SURFACE_CONFIG; \
  139. uint32_t DCSURF_FLIP_CONTROL; \
  140. uint32_t DCSURF_PRI_VIEWPORT_DIMENSION; \
  141. uint32_t DCSURF_PRI_VIEWPORT_START; \
  142. uint32_t DCSURF_SEC_VIEWPORT_DIMENSION; \
  143. uint32_t DCSURF_SEC_VIEWPORT_START; \
  144. uint32_t DCSURF_PRI_VIEWPORT_DIMENSION_C; \
  145. uint32_t DCSURF_PRI_VIEWPORT_START_C; \
  146. uint32_t DCSURF_PRIMARY_SURFACE_ADDRESS_HIGH; \
  147. uint32_t DCSURF_PRIMARY_SURFACE_ADDRESS; \
  148. uint32_t DCSURF_SECONDARY_SURFACE_ADDRESS_HIGH; \
  149. uint32_t DCSURF_SECONDARY_SURFACE_ADDRESS; \
  150. uint32_t DCSURF_PRIMARY_META_SURFACE_ADDRESS_HIGH; \
  151. uint32_t DCSURF_PRIMARY_META_SURFACE_ADDRESS; \
  152. uint32_t DCSURF_SECONDARY_META_SURFACE_ADDRESS_HIGH; \
  153. uint32_t DCSURF_SECONDARY_META_SURFACE_ADDRESS; \
  154. uint32_t DCSURF_PRIMARY_SURFACE_ADDRESS_HIGH_C; \
  155. uint32_t DCSURF_PRIMARY_SURFACE_ADDRESS_C; \
  156. uint32_t DCSURF_PRIMARY_META_SURFACE_ADDRESS_HIGH_C; \
  157. uint32_t DCSURF_PRIMARY_META_SURFACE_ADDRESS_C; \
  158. uint32_t DCSURF_SURFACE_INUSE; \
  159. uint32_t DCSURF_SURFACE_INUSE_HIGH; \
  160. uint32_t DCSURF_SURFACE_INUSE_C; \
  161. uint32_t DCSURF_SURFACE_INUSE_HIGH_C; \
  162. uint32_t DCSURF_SURFACE_EARLIEST_INUSE; \
  163. uint32_t DCSURF_SURFACE_EARLIEST_INUSE_HIGH; \
  164. uint32_t DCSURF_SURFACE_EARLIEST_INUSE_C; \
  165. uint32_t DCSURF_SURFACE_EARLIEST_INUSE_HIGH_C; \
  166. uint32_t DCSURF_SURFACE_CONTROL; \
  167. uint32_t HUBPRET_CONTROL; \
  168. uint32_t DCN_EXPANSION_MODE; \
  169. uint32_t DCHUBP_REQ_SIZE_CONFIG; \
  170. uint32_t DCHUBP_REQ_SIZE_CONFIG_C; \
  171. uint32_t BLANK_OFFSET_0; \
  172. uint32_t BLANK_OFFSET_1; \
  173. uint32_t DST_DIMENSIONS; \
  174. uint32_t DST_AFTER_SCALER; \
  175. uint32_t PREFETCH_SETTINS; \
  176. uint32_t PREFETCH_SETTINGS; \
  177. uint32_t VBLANK_PARAMETERS_0; \
  178. uint32_t REF_FREQ_TO_PIX_FREQ; \
  179. uint32_t VBLANK_PARAMETERS_1; \
  180. uint32_t VBLANK_PARAMETERS_3; \
  181. uint32_t NOM_PARAMETERS_0; \
  182. uint32_t NOM_PARAMETERS_1; \
  183. uint32_t NOM_PARAMETERS_4; \
  184. uint32_t NOM_PARAMETERS_5; \
  185. uint32_t PER_LINE_DELIVERY_PRE; \
  186. uint32_t PER_LINE_DELIVERY; \
  187. uint32_t PREFETCH_SETTINS_C; \
  188. uint32_t PREFETCH_SETTINGS_C; \
  189. uint32_t VBLANK_PARAMETERS_2; \
  190. uint32_t VBLANK_PARAMETERS_4; \
  191. uint32_t NOM_PARAMETERS_2; \
  192. uint32_t NOM_PARAMETERS_3; \
  193. uint32_t NOM_PARAMETERS_6; \
  194. uint32_t NOM_PARAMETERS_7; \
  195. uint32_t DCN_TTU_QOS_WM; \
  196. uint32_t DCN_GLOBAL_TTU_CNTL; \
  197. uint32_t DCN_SURF0_TTU_CNTL0; \
  198. uint32_t DCN_SURF0_TTU_CNTL1; \
  199. uint32_t DCN_SURF1_TTU_CNTL0; \
  200. uint32_t DCN_SURF1_TTU_CNTL1; \
  201. uint32_t DCN_CUR0_TTU_CNTL0; \
  202. uint32_t DCN_CUR0_TTU_CNTL1; \
  203. uint32_t DCN_VM_CONTEXT0_PAGE_TABLE_BASE_ADDR_MSB; \
  204. uint32_t DCN_VM_CONTEXT0_PAGE_TABLE_BASE_ADDR_LSB; \
  205. uint32_t DCN_VM_CONTEXT0_PAGE_TABLE_START_ADDR_MSB; \
  206. uint32_t DCN_VM_CONTEXT0_PAGE_TABLE_START_ADDR_LSB; \
  207. uint32_t DCN_VM_CONTEXT0_PAGE_TABLE_END_ADDR_MSB; \
  208. uint32_t DCN_VM_CONTEXT0_PAGE_TABLE_END_ADDR_LSB; \
  209. uint32_t DCN_VM_CONTEXT0_PROTECTION_FAULT_DEFAULT_ADDR_MSB; \
  210. uint32_t DCN_VM_CONTEXT0_PROTECTION_FAULT_DEFAULT_ADDR_LSB; \
  211. uint32_t DCN_VM_MX_L1_TLB_CNTL; \
  212. uint32_t DCN_VM_SYSTEM_APERTURE_DEFAULT_ADDR_MSB; \
  213. uint32_t DCN_VM_SYSTEM_APERTURE_DEFAULT_ADDR_LSB; \
  214. uint32_t DCN_VM_SYSTEM_APERTURE_LOW_ADDR_MSB; \
  215. uint32_t DCN_VM_SYSTEM_APERTURE_LOW_ADDR_LSB; \
  216. uint32_t DCN_VM_SYSTEM_APERTURE_HIGH_ADDR_MSB; \
  217. uint32_t DCN_VM_SYSTEM_APERTURE_HIGH_ADDR_LSB; \
  218. uint32_t DCN_VM_SYSTEM_APERTURE_LOW_ADDR; \
  219. uint32_t DCN_VM_SYSTEM_APERTURE_HIGH_ADDR; \
  220. uint32_t DCHUBBUB_SDPIF_FB_BASE; \
  221. uint32_t DCHUBBUB_SDPIF_FB_OFFSET; \
  222. uint32_t DCN_VM_FB_LOCATION_TOP; \
  223. uint32_t DCN_VM_FB_LOCATION_BASE; \
  224. uint32_t DCN_VM_FB_OFFSET; \
  225. uint32_t DCN_VM_AGP_BASE; \
  226. uint32_t DCN_VM_AGP_BOT; \
  227. uint32_t DCN_VM_AGP_TOP; \
  228. uint32_t CURSOR_SETTINS; \
  229. uint32_t CURSOR_SETTINGS; \
  230. uint32_t CURSOR_SURFACE_ADDRESS_HIGH; \
  231. uint32_t CURSOR_SURFACE_ADDRESS; \
  232. uint32_t CURSOR_SIZE; \
  233. uint32_t CURSOR_CONTROL; \
  234. uint32_t CURSOR_POSITION; \
  235. uint32_t CURSOR_HOT_SPOT; \
  236. uint32_t CURSOR_DST_OFFSET; \
  237. uint32_t HUBP_CLK_CNTL
  238. #define HUBP_SF(reg_name, field_name, post_fix)\
  239. .field_name = reg_name ## __ ## field_name ## post_fix
  240. /* Mask/shift struct generation macro for all ASICs (including those with reduced functionality) */
  241. #define HUBP_MASK_SH_LIST_DCN(mask_sh)\
  242. HUBP_SF(HUBP0_DCHUBP_CNTL, HUBP_BLANK_EN, mask_sh),\
  243. HUBP_SF(HUBP0_DCHUBP_CNTL, HUBP_TTU_DISABLE, mask_sh),\
  244. HUBP_SF(HUBP0_DCHUBP_CNTL, HUBP_UNDERFLOW_STATUS, mask_sh),\
  245. HUBP_SF(HUBP0_DCHUBP_CNTL, HUBP_NO_OUTSTANDING_REQ, mask_sh),\
  246. HUBP_SF(HUBP0_DCHUBP_CNTL, HUBP_VTG_SEL, mask_sh),\
  247. HUBP_SF(HUBP0_DCHUBP_CNTL, HUBP_DISABLE, mask_sh),\
  248. HUBP_SF(HUBP0_DCSURF_ADDR_CONFIG, NUM_PIPES, mask_sh),\
  249. HUBP_SF(HUBP0_DCSURF_ADDR_CONFIG, NUM_BANKS, mask_sh),\
  250. HUBP_SF(HUBP0_DCSURF_ADDR_CONFIG, PIPE_INTERLEAVE, mask_sh),\
  251. HUBP_SF(HUBP0_DCSURF_ADDR_CONFIG, NUM_SE, mask_sh),\
  252. HUBP_SF(HUBP0_DCSURF_ADDR_CONFIG, NUM_RB_PER_SE, mask_sh),\
  253. HUBP_SF(HUBP0_DCSURF_ADDR_CONFIG, MAX_COMPRESSED_FRAGS, mask_sh),\
  254. HUBP_SF(HUBP0_DCSURF_TILING_CONFIG, SW_MODE, mask_sh),\
  255. HUBP_SF(HUBP0_DCSURF_TILING_CONFIG, META_LINEAR, mask_sh),\
  256. HUBP_SF(HUBP0_DCSURF_TILING_CONFIG, RB_ALIGNED, mask_sh),\
  257. HUBP_SF(HUBP0_DCSURF_TILING_CONFIG, PIPE_ALIGNED, mask_sh),\
  258. HUBP_SF(HUBPREQ0_DCSURF_SURFACE_PITCH, PITCH, mask_sh),\
  259. HUBP_SF(HUBPREQ0_DCSURF_SURFACE_PITCH, META_PITCH, mask_sh),\
  260. HUBP_SF(HUBPREQ0_DCSURF_SURFACE_PITCH_C, PITCH_C, mask_sh),\
  261. HUBP_SF(HUBPREQ0_DCSURF_SURFACE_PITCH_C, META_PITCH_C, mask_sh),\
  262. HUBP_SF(HUBP0_DCSURF_SURFACE_CONFIG, SURFACE_PIXEL_FORMAT, mask_sh),\
  263. HUBP_SF(HUBPREQ0_DCSURF_FLIP_CONTROL, SURFACE_FLIP_TYPE, mask_sh),\
  264. HUBP_SF(HUBPREQ0_DCSURF_FLIP_CONTROL, SURFACE_FLIP_MODE_FOR_STEREOSYNC, mask_sh),\
  265. HUBP_SF(HUBPREQ0_DCSURF_FLIP_CONTROL, SURFACE_FLIP_IN_STEREOSYNC, mask_sh),\
  266. HUBP_SF(HUBPREQ0_DCSURF_FLIP_CONTROL, SURFACE_FLIP_PENDING, mask_sh),\
  267. HUBP_SF(HUBPREQ0_DCSURF_FLIP_CONTROL, SURFACE_UPDATE_LOCK, mask_sh),\
  268. HUBP_SF(HUBP0_DCSURF_PRI_VIEWPORT_DIMENSION, PRI_VIEWPORT_WIDTH, mask_sh),\
  269. HUBP_SF(HUBP0_DCSURF_PRI_VIEWPORT_DIMENSION, PRI_VIEWPORT_HEIGHT, mask_sh),\
  270. HUBP_SF(HUBP0_DCSURF_PRI_VIEWPORT_START, PRI_VIEWPORT_X_START, mask_sh),\
  271. HUBP_SF(HUBP0_DCSURF_PRI_VIEWPORT_START, PRI_VIEWPORT_Y_START, mask_sh),\
  272. HUBP_SF(HUBP0_DCSURF_SEC_VIEWPORT_DIMENSION, SEC_VIEWPORT_WIDTH, mask_sh),\
  273. HUBP_SF(HUBP0_DCSURF_SEC_VIEWPORT_DIMENSION, SEC_VIEWPORT_HEIGHT, mask_sh),\
  274. HUBP_SF(HUBP0_DCSURF_SEC_VIEWPORT_START, SEC_VIEWPORT_X_START, mask_sh),\
  275. HUBP_SF(HUBP0_DCSURF_SEC_VIEWPORT_START, SEC_VIEWPORT_Y_START, mask_sh),\
  276. HUBP_SF(HUBP0_DCSURF_PRI_VIEWPORT_DIMENSION_C, PRI_VIEWPORT_WIDTH_C, mask_sh),\
  277. HUBP_SF(HUBP0_DCSURF_PRI_VIEWPORT_DIMENSION_C, PRI_VIEWPORT_HEIGHT_C, mask_sh),\
  278. HUBP_SF(HUBP0_DCSURF_PRI_VIEWPORT_START_C, PRI_VIEWPORT_X_START_C, mask_sh),\
  279. HUBP_SF(HUBP0_DCSURF_PRI_VIEWPORT_START_C, PRI_VIEWPORT_Y_START_C, mask_sh),\
  280. HUBP_SF(HUBPREQ0_DCSURF_PRIMARY_SURFACE_ADDRESS_HIGH, PRIMARY_SURFACE_ADDRESS_HIGH, mask_sh),\
  281. HUBP_SF(HUBPREQ0_DCSURF_PRIMARY_SURFACE_ADDRESS, PRIMARY_SURFACE_ADDRESS, mask_sh),\
  282. HUBP_SF(HUBPREQ0_DCSURF_SECONDARY_SURFACE_ADDRESS_HIGH, SECONDARY_SURFACE_ADDRESS_HIGH, mask_sh),\
  283. HUBP_SF(HUBPREQ0_DCSURF_SECONDARY_SURFACE_ADDRESS, SECONDARY_SURFACE_ADDRESS, mask_sh),\
  284. HUBP_SF(HUBPREQ0_DCSURF_PRIMARY_META_SURFACE_ADDRESS_HIGH, PRIMARY_META_SURFACE_ADDRESS_HIGH, mask_sh),\
  285. HUBP_SF(HUBPREQ0_DCSURF_PRIMARY_META_SURFACE_ADDRESS, PRIMARY_META_SURFACE_ADDRESS, mask_sh),\
  286. HUBP_SF(HUBPREQ0_DCSURF_SECONDARY_META_SURFACE_ADDRESS_HIGH, SECONDARY_META_SURFACE_ADDRESS_HIGH, mask_sh),\
  287. HUBP_SF(HUBPREQ0_DCSURF_SECONDARY_META_SURFACE_ADDRESS, SECONDARY_META_SURFACE_ADDRESS, mask_sh),\
  288. HUBP_SF(HUBPREQ0_DCSURF_PRIMARY_SURFACE_ADDRESS_HIGH_C, PRIMARY_SURFACE_ADDRESS_HIGH_C, mask_sh),\
  289. HUBP_SF(HUBPREQ0_DCSURF_PRIMARY_SURFACE_ADDRESS_C, PRIMARY_SURFACE_ADDRESS_C, mask_sh),\
  290. HUBP_SF(HUBPREQ0_DCSURF_PRIMARY_META_SURFACE_ADDRESS_HIGH_C, PRIMARY_META_SURFACE_ADDRESS_HIGH_C, mask_sh),\
  291. HUBP_SF(HUBPREQ0_DCSURF_PRIMARY_META_SURFACE_ADDRESS_C, PRIMARY_META_SURFACE_ADDRESS_C, mask_sh),\
  292. HUBP_SF(HUBPREQ0_DCSURF_SURFACE_INUSE, SURFACE_INUSE_ADDRESS, mask_sh),\
  293. HUBP_SF(HUBPREQ0_DCSURF_SURFACE_INUSE_HIGH, SURFACE_INUSE_ADDRESS_HIGH, mask_sh),\
  294. HUBP_SF(HUBPREQ0_DCSURF_SURFACE_INUSE_C, SURFACE_INUSE_ADDRESS_C, mask_sh),\
  295. HUBP_SF(HUBPREQ0_DCSURF_SURFACE_INUSE_HIGH_C, SURFACE_INUSE_ADDRESS_HIGH_C, mask_sh),\
  296. HUBP_SF(HUBPREQ0_DCSURF_SURFACE_EARLIEST_INUSE, SURFACE_EARLIEST_INUSE_ADDRESS, mask_sh),\
  297. HUBP_SF(HUBPREQ0_DCSURF_SURFACE_EARLIEST_INUSE_HIGH, SURFACE_EARLIEST_INUSE_ADDRESS_HIGH, mask_sh),\
  298. HUBP_SF(HUBPREQ0_DCSURF_SURFACE_EARLIEST_INUSE_C, SURFACE_EARLIEST_INUSE_ADDRESS_C, mask_sh),\
  299. HUBP_SF(HUBPREQ0_DCSURF_SURFACE_EARLIEST_INUSE_HIGH_C, SURFACE_EARLIEST_INUSE_ADDRESS_HIGH_C, mask_sh),\
  300. HUBP_SF(HUBPREQ0_DCSURF_SURFACE_CONTROL, PRIMARY_SURFACE_TMZ, mask_sh),\
  301. HUBP_SF(HUBPREQ0_DCSURF_SURFACE_CONTROL, PRIMARY_SURFACE_TMZ_C, mask_sh),\
  302. HUBP_SF(HUBPREQ0_DCSURF_SURFACE_CONTROL, PRIMARY_META_SURFACE_TMZ, mask_sh),\
  303. HUBP_SF(HUBPREQ0_DCSURF_SURFACE_CONTROL, PRIMARY_META_SURFACE_TMZ_C, mask_sh),\
  304. HUBP_SF(HUBPREQ0_DCSURF_SURFACE_CONTROL, PRIMARY_SURFACE_DCC_EN, mask_sh),\
  305. HUBP_SF(HUBPREQ0_DCSURF_SURFACE_CONTROL, PRIMARY_SURFACE_DCC_IND_64B_BLK, mask_sh),\
  306. HUBP_SF(HUBPREQ0_DCSURF_SURFACE_CONTROL, SECONDARY_SURFACE_TMZ, mask_sh),\
  307. HUBP_SF(HUBPREQ0_DCSURF_SURFACE_CONTROL, SECONDARY_SURFACE_TMZ_C, mask_sh),\
  308. HUBP_SF(HUBPREQ0_DCSURF_SURFACE_CONTROL, SECONDARY_META_SURFACE_TMZ, mask_sh),\
  309. HUBP_SF(HUBPREQ0_DCSURF_SURFACE_CONTROL, SECONDARY_META_SURFACE_TMZ_C, mask_sh),\
  310. HUBP_SF(HUBPREQ0_DCSURF_SURFACE_CONTROL, SECONDARY_SURFACE_DCC_EN, mask_sh),\
  311. HUBP_SF(HUBPREQ0_DCSURF_SURFACE_CONTROL, SECONDARY_SURFACE_DCC_IND_64B_BLK, mask_sh),\
  312. HUBP_SF(HUBPRET0_HUBPRET_CONTROL, DET_BUF_PLANE1_BASE_ADDRESS, mask_sh),\
  313. HUBP_SF(HUBPRET0_HUBPRET_CONTROL, CROSSBAR_SRC_CB_B, mask_sh),\
  314. HUBP_SF(HUBPRET0_HUBPRET_CONTROL, CROSSBAR_SRC_CR_R, mask_sh),\
  315. HUBP_SF(HUBPREQ0_DCN_EXPANSION_MODE, DRQ_EXPANSION_MODE, mask_sh),\
  316. HUBP_SF(HUBPREQ0_DCN_EXPANSION_MODE, PRQ_EXPANSION_MODE, mask_sh),\
  317. HUBP_SF(HUBPREQ0_DCN_EXPANSION_MODE, MRQ_EXPANSION_MODE, mask_sh),\
  318. HUBP_SF(HUBPREQ0_DCN_EXPANSION_MODE, CRQ_EXPANSION_MODE, mask_sh),\
  319. HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG, CHUNK_SIZE, mask_sh),\
  320. HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG, MIN_CHUNK_SIZE, mask_sh),\
  321. HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG, META_CHUNK_SIZE, mask_sh),\
  322. HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG, MIN_META_CHUNK_SIZE, mask_sh),\
  323. HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG, DPTE_GROUP_SIZE, mask_sh),\
  324. HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG, MPTE_GROUP_SIZE, mask_sh),\
  325. HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG, SWATH_HEIGHT, mask_sh),\
  326. HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG, PTE_ROW_HEIGHT_LINEAR, mask_sh),\
  327. HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG_C, CHUNK_SIZE_C, mask_sh),\
  328. HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG_C, MIN_CHUNK_SIZE_C, mask_sh),\
  329. HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG_C, META_CHUNK_SIZE_C, mask_sh),\
  330. HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG_C, MIN_META_CHUNK_SIZE_C, mask_sh),\
  331. HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG_C, DPTE_GROUP_SIZE_C, mask_sh),\
  332. HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG_C, MPTE_GROUP_SIZE_C, mask_sh),\
  333. HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG_C, SWATH_HEIGHT_C, mask_sh),\
  334. HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG_C, PTE_ROW_HEIGHT_LINEAR_C, mask_sh),\
  335. HUBP_SF(HUBPREQ0_BLANK_OFFSET_0, REFCYC_H_BLANK_END, mask_sh),\
  336. HUBP_SF(HUBPREQ0_BLANK_OFFSET_0, DLG_V_BLANK_END, mask_sh),\
  337. HUBP_SF(HUBPREQ0_BLANK_OFFSET_1, MIN_DST_Y_NEXT_START, mask_sh),\
  338. HUBP_SF(HUBPREQ0_DST_DIMENSIONS, REFCYC_PER_HTOTAL, mask_sh),\
  339. HUBP_SF(HUBPREQ0_DST_AFTER_SCALER, REFCYC_X_AFTER_SCALER, mask_sh),\
  340. HUBP_SF(HUBPREQ0_DST_AFTER_SCALER, DST_Y_AFTER_SCALER, mask_sh),\
  341. HUBP_SF(HUBPREQ0_VBLANK_PARAMETERS_0, DST_Y_PER_VM_VBLANK, mask_sh),\
  342. HUBP_SF(HUBPREQ0_VBLANK_PARAMETERS_0, DST_Y_PER_ROW_VBLANK, mask_sh),\
  343. HUBP_SF(HUBPREQ0_REF_FREQ_TO_PIX_FREQ, REF_FREQ_TO_PIX_FREQ, mask_sh),\
  344. HUBP_SF(HUBPREQ0_VBLANK_PARAMETERS_1, REFCYC_PER_PTE_GROUP_VBLANK_L, mask_sh),\
  345. HUBP_SF(HUBPREQ0_VBLANK_PARAMETERS_3, REFCYC_PER_META_CHUNK_VBLANK_L, mask_sh),\
  346. HUBP_SF(HUBPREQ0_NOM_PARAMETERS_4, DST_Y_PER_META_ROW_NOM_L, mask_sh),\
  347. HUBP_SF(HUBPREQ0_NOM_PARAMETERS_5, REFCYC_PER_META_CHUNK_NOM_L, mask_sh),\
  348. HUBP_SF(HUBPREQ0_PER_LINE_DELIVERY_PRE, REFCYC_PER_LINE_DELIVERY_PRE_L, mask_sh),\
  349. HUBP_SF(HUBPREQ0_PER_LINE_DELIVERY_PRE, REFCYC_PER_LINE_DELIVERY_PRE_C, mask_sh),\
  350. HUBP_SF(HUBPREQ0_PER_LINE_DELIVERY, REFCYC_PER_LINE_DELIVERY_L, mask_sh),\
  351. HUBP_SF(HUBPREQ0_PER_LINE_DELIVERY, REFCYC_PER_LINE_DELIVERY_C, mask_sh),\
  352. HUBP_SF(HUBPREQ0_VBLANK_PARAMETERS_2, REFCYC_PER_PTE_GROUP_VBLANK_C, mask_sh),\
  353. HUBP_SF(HUBPREQ0_VBLANK_PARAMETERS_4, REFCYC_PER_META_CHUNK_VBLANK_C, mask_sh),\
  354. HUBP_SF(HUBPREQ0_NOM_PARAMETERS_6, DST_Y_PER_META_ROW_NOM_C, mask_sh),\
  355. HUBP_SF(HUBPREQ0_NOM_PARAMETERS_7, REFCYC_PER_META_CHUNK_NOM_C, mask_sh),\
  356. HUBP_SF(HUBPREQ0_DCN_TTU_QOS_WM, QoS_LEVEL_LOW_WM, mask_sh),\
  357. HUBP_SF(HUBPREQ0_DCN_TTU_QOS_WM, QoS_LEVEL_HIGH_WM, mask_sh),\
  358. HUBP_SF(HUBPREQ0_DCN_GLOBAL_TTU_CNTL, MIN_TTU_VBLANK, mask_sh),\
  359. HUBP_SF(HUBPREQ0_DCN_GLOBAL_TTU_CNTL, QoS_LEVEL_FLIP, mask_sh),\
  360. HUBP_SF(HUBPREQ0_DCN_SURF0_TTU_CNTL0, REFCYC_PER_REQ_DELIVERY, mask_sh),\
  361. HUBP_SF(HUBPREQ0_DCN_SURF0_TTU_CNTL0, QoS_LEVEL_FIXED, mask_sh),\
  362. HUBP_SF(HUBPREQ0_DCN_SURF0_TTU_CNTL0, QoS_RAMP_DISABLE, mask_sh),\
  363. HUBP_SF(HUBPREQ0_DCN_SURF0_TTU_CNTL1, REFCYC_PER_REQ_DELIVERY_PRE, mask_sh),\
  364. HUBP_SF(HUBP0_HUBP_CLK_CNTL, HUBP_CLOCK_ENABLE, mask_sh)
  365. /* Mask/shift struct generation macro for ASICs with VM */
  366. #define HUBP_MASK_SH_LIST_DCN_VM(mask_sh)\
  367. HUBP_SF(HUBPREQ0_NOM_PARAMETERS_0, DST_Y_PER_PTE_ROW_NOM_L, mask_sh),\
  368. HUBP_SF(HUBPREQ0_NOM_PARAMETERS_1, REFCYC_PER_PTE_GROUP_NOM_L, mask_sh),\
  369. HUBP_SF(HUBPREQ0_NOM_PARAMETERS_2, DST_Y_PER_PTE_ROW_NOM_C, mask_sh),\
  370. HUBP_SF(HUBPREQ0_NOM_PARAMETERS_3, REFCYC_PER_PTE_GROUP_NOM_C, mask_sh),\
  371. HUBP_SF(HUBPREQ0_DCN_VM_MX_L1_TLB_CNTL, ENABLE_L1_TLB, mask_sh),\
  372. HUBP_SF(HUBPREQ0_DCN_VM_MX_L1_TLB_CNTL, SYSTEM_ACCESS_MODE, mask_sh),\
  373. HUBP_SF(HUBPREQ0_DCN_CUR0_TTU_CNTL0, REFCYC_PER_REQ_DELIVERY, mask_sh),\
  374. HUBP_SF(HUBPREQ0_DCN_CUR0_TTU_CNTL0, QoS_LEVEL_FIXED, mask_sh),\
  375. HUBP_SF(HUBPREQ0_DCN_CUR0_TTU_CNTL0, QoS_RAMP_DISABLE, mask_sh),\
  376. HUBP_SF(HUBPREQ0_DCN_CUR0_TTU_CNTL1, REFCYC_PER_REQ_DELIVERY_PRE, mask_sh)
  377. #define HUBP_MASK_SH_LIST_DCN10(mask_sh)\
  378. HUBP_MASK_SH_LIST_DCN(mask_sh),\
  379. HUBP_MASK_SH_LIST_DCN_VM(mask_sh),\
  380. HUBP_SF(HUBP0_DCSURF_SURFACE_CONFIG, ROTATION_ANGLE, mask_sh),\
  381. HUBP_SF(HUBP0_DCSURF_SURFACE_CONFIG, H_MIRROR_EN, mask_sh),\
  382. HUBP_SF(HUBPREQ0_PREFETCH_SETTINS, DST_Y_PREFETCH, mask_sh),\
  383. HUBP_SF(HUBPREQ0_PREFETCH_SETTINS, VRATIO_PREFETCH, mask_sh),\
  384. HUBP_SF(HUBPREQ0_PREFETCH_SETTINS_C, VRATIO_PREFETCH_C, mask_sh),\
  385. HUBP_SF(HUBPREQ0_DCN_VM_CONTEXT0_PAGE_TABLE_BASE_ADDR_MSB, VM_CONTEXT0_PAGE_TABLE_BASE_ADDR_MSB, mask_sh),\
  386. HUBP_SF(HUBPREQ0_DCN_VM_CONTEXT0_PAGE_TABLE_BASE_ADDR_LSB, VM_CONTEXT0_PAGE_TABLE_BASE_ADDR_LSB, mask_sh),\
  387. HUBP_SF(HUBPREQ0_DCN_VM_CONTEXT0_PAGE_TABLE_START_ADDR_MSB, VM_CONTEXT0_PAGE_TABLE_START_ADDR_MSB, mask_sh),\
  388. HUBP_SF(HUBPREQ0_DCN_VM_CONTEXT0_PAGE_TABLE_START_ADDR_LSB, VM_CONTEXT0_PAGE_TABLE_START_ADDR_LSB, mask_sh),\
  389. HUBP_SF(HUBPREQ0_DCN_VM_CONTEXT0_PAGE_TABLE_END_ADDR_MSB, VM_CONTEXT0_PAGE_TABLE_END_ADDR_MSB, mask_sh),\
  390. HUBP_SF(HUBPREQ0_DCN_VM_CONTEXT0_PAGE_TABLE_END_ADDR_LSB, VM_CONTEXT0_PAGE_TABLE_END_ADDR_LSB, mask_sh),\
  391. HUBP_SF(HUBPREQ0_DCN_VM_CONTEXT0_PROTECTION_FAULT_DEFAULT_ADDR_MSB, VM_CONTEXT0_PROTECTION_FAULT_DEFAULT_ADDR_MSB, mask_sh),\
  392. HUBP_SF(HUBPREQ0_DCN_VM_CONTEXT0_PROTECTION_FAULT_DEFAULT_ADDR_MSB, VM_CONTEXT0_PROTECTION_FAULT_DEFAULT_SYSTEM, mask_sh),\
  393. HUBP_SF(HUBPREQ0_DCN_VM_CONTEXT0_PROTECTION_FAULT_DEFAULT_ADDR_LSB, VM_CONTEXT0_PROTECTION_FAULT_DEFAULT_ADDR_LSB, mask_sh),\
  394. HUBP_SF(HUBPREQ0_DCN_VM_SYSTEM_APERTURE_LOW_ADDR_MSB, MC_VM_SYSTEM_APERTURE_LOW_ADDR_MSB, mask_sh),\
  395. HUBP_SF(HUBPREQ0_DCN_VM_SYSTEM_APERTURE_LOW_ADDR_LSB, MC_VM_SYSTEM_APERTURE_LOW_ADDR_LSB, mask_sh),\
  396. HUBP_SF(HUBPREQ0_DCN_VM_SYSTEM_APERTURE_HIGH_ADDR_MSB, MC_VM_SYSTEM_APERTURE_HIGH_ADDR_MSB, mask_sh),\
  397. HUBP_SF(HUBPREQ0_DCN_VM_SYSTEM_APERTURE_HIGH_ADDR_LSB, MC_VM_SYSTEM_APERTURE_HIGH_ADDR_LSB, mask_sh),\
  398. HUBP_SF(DCHUBBUB_SDPIF_FB_BASE, SDPIF_FB_BASE, mask_sh),\
  399. HUBP_SF(DCHUBBUB_SDPIF_FB_OFFSET, SDPIF_FB_OFFSET, mask_sh),\
  400. HUBP_SF(HUBPREQ0_DCN_VM_SYSTEM_APERTURE_DEFAULT_ADDR_MSB, MC_VM_SYSTEM_APERTURE_DEFAULT_SYSTEM, mask_sh),\
  401. HUBP_SF(HUBPREQ0_DCN_VM_SYSTEM_APERTURE_DEFAULT_ADDR_MSB, MC_VM_SYSTEM_APERTURE_DEFAULT_ADDR_MSB, mask_sh),\
  402. HUBP_SF(HUBPREQ0_DCN_VM_SYSTEM_APERTURE_DEFAULT_ADDR_LSB, MC_VM_SYSTEM_APERTURE_DEFAULT_ADDR_LSB, mask_sh),\
  403. HUBP_SF(HUBPREQ0_CURSOR_SETTINS, CURSOR0_DST_Y_OFFSET, mask_sh), \
  404. HUBP_SF(HUBPREQ0_CURSOR_SETTINS, CURSOR0_CHUNK_HDL_ADJUST, mask_sh), \
  405. HUBP_SF(CURSOR0_CURSOR_SURFACE_ADDRESS_HIGH, CURSOR_SURFACE_ADDRESS_HIGH, mask_sh), \
  406. HUBP_SF(CURSOR0_CURSOR_SURFACE_ADDRESS, CURSOR_SURFACE_ADDRESS, mask_sh), \
  407. HUBP_SF(CURSOR0_CURSOR_SIZE, CURSOR_WIDTH, mask_sh), \
  408. HUBP_SF(CURSOR0_CURSOR_SIZE, CURSOR_HEIGHT, mask_sh), \
  409. HUBP_SF(CURSOR0_CURSOR_CONTROL, CURSOR_MODE, mask_sh), \
  410. HUBP_SF(CURSOR0_CURSOR_CONTROL, CURSOR_2X_MAGNIFY, mask_sh), \
  411. HUBP_SF(CURSOR0_CURSOR_CONTROL, CURSOR_PITCH, mask_sh), \
  412. HUBP_SF(CURSOR0_CURSOR_CONTROL, CURSOR_LINES_PER_CHUNK, mask_sh), \
  413. HUBP_SF(CURSOR0_CURSOR_CONTROL, CURSOR_ENABLE, mask_sh), \
  414. HUBP_SF(CURSOR0_CURSOR_POSITION, CURSOR_X_POSITION, mask_sh), \
  415. HUBP_SF(CURSOR0_CURSOR_POSITION, CURSOR_Y_POSITION, mask_sh), \
  416. HUBP_SF(CURSOR0_CURSOR_HOT_SPOT, CURSOR_HOT_SPOT_X, mask_sh), \
  417. HUBP_SF(CURSOR0_CURSOR_HOT_SPOT, CURSOR_HOT_SPOT_Y, mask_sh), \
  418. HUBP_SF(CURSOR0_CURSOR_DST_OFFSET, CURSOR_DST_X_OFFSET, mask_sh)
  419. #define DCN_HUBP_REG_FIELD_LIST(type) \
  420. type HUBP_BLANK_EN;\
  421. type HUBP_DISABLE;\
  422. type HUBP_TTU_DISABLE;\
  423. type HUBP_NO_OUTSTANDING_REQ;\
  424. type HUBP_VTG_SEL;\
  425. type HUBP_UNDERFLOW_STATUS;\
  426. type NUM_PIPES;\
  427. type NUM_BANKS;\
  428. type PIPE_INTERLEAVE;\
  429. type NUM_SE;\
  430. type NUM_RB_PER_SE;\
  431. type MAX_COMPRESSED_FRAGS;\
  432. type SW_MODE;\
  433. type META_LINEAR;\
  434. type RB_ALIGNED;\
  435. type PIPE_ALIGNED;\
  436. type PITCH;\
  437. type META_PITCH;\
  438. type PITCH_C;\
  439. type META_PITCH_C;\
  440. type ROTATION_ANGLE;\
  441. type H_MIRROR_EN;\
  442. type SURFACE_PIXEL_FORMAT;\
  443. type SURFACE_FLIP_TYPE;\
  444. type SURFACE_FLIP_MODE_FOR_STEREOSYNC;\
  445. type SURFACE_FLIP_IN_STEREOSYNC;\
  446. type SURFACE_UPDATE_LOCK;\
  447. type SURFACE_FLIP_PENDING;\
  448. type PRI_VIEWPORT_WIDTH; \
  449. type PRI_VIEWPORT_HEIGHT; \
  450. type PRI_VIEWPORT_X_START; \
  451. type PRI_VIEWPORT_Y_START; \
  452. type SEC_VIEWPORT_WIDTH; \
  453. type SEC_VIEWPORT_HEIGHT; \
  454. type SEC_VIEWPORT_X_START; \
  455. type SEC_VIEWPORT_Y_START; \
  456. type PRI_VIEWPORT_WIDTH_C; \
  457. type PRI_VIEWPORT_HEIGHT_C; \
  458. type PRI_VIEWPORT_X_START_C; \
  459. type PRI_VIEWPORT_Y_START_C; \
  460. type PRIMARY_SURFACE_ADDRESS_HIGH;\
  461. type PRIMARY_SURFACE_ADDRESS;\
  462. type SECONDARY_SURFACE_ADDRESS_HIGH;\
  463. type SECONDARY_SURFACE_ADDRESS;\
  464. type PRIMARY_META_SURFACE_ADDRESS_HIGH;\
  465. type PRIMARY_META_SURFACE_ADDRESS;\
  466. type SECONDARY_META_SURFACE_ADDRESS_HIGH;\
  467. type SECONDARY_META_SURFACE_ADDRESS;\
  468. type PRIMARY_SURFACE_ADDRESS_HIGH_C;\
  469. type PRIMARY_SURFACE_ADDRESS_C;\
  470. type PRIMARY_META_SURFACE_ADDRESS_HIGH_C;\
  471. type PRIMARY_META_SURFACE_ADDRESS_C;\
  472. type SURFACE_INUSE_ADDRESS;\
  473. type SURFACE_INUSE_ADDRESS_HIGH;\
  474. type SURFACE_INUSE_ADDRESS_C;\
  475. type SURFACE_INUSE_ADDRESS_HIGH_C;\
  476. type SURFACE_EARLIEST_INUSE_ADDRESS;\
  477. type SURFACE_EARLIEST_INUSE_ADDRESS_HIGH;\
  478. type SURFACE_EARLIEST_INUSE_ADDRESS_C;\
  479. type SURFACE_EARLIEST_INUSE_ADDRESS_HIGH_C;\
  480. type PRIMARY_SURFACE_TMZ;\
  481. type PRIMARY_SURFACE_TMZ_C;\
  482. type SECONDARY_SURFACE_TMZ;\
  483. type SECONDARY_SURFACE_TMZ_C;\
  484. type PRIMARY_META_SURFACE_TMZ;\
  485. type PRIMARY_META_SURFACE_TMZ_C;\
  486. type SECONDARY_META_SURFACE_TMZ;\
  487. type SECONDARY_META_SURFACE_TMZ_C;\
  488. type PRIMARY_SURFACE_DCC_EN;\
  489. type PRIMARY_SURFACE_DCC_IND_64B_BLK;\
  490. type SECONDARY_SURFACE_DCC_EN;\
  491. type SECONDARY_SURFACE_DCC_IND_64B_BLK;\
  492. type DET_BUF_PLANE1_BASE_ADDRESS;\
  493. type CROSSBAR_SRC_CB_B;\
  494. type CROSSBAR_SRC_CR_R;\
  495. type DRQ_EXPANSION_MODE;\
  496. type PRQ_EXPANSION_MODE;\
  497. type MRQ_EXPANSION_MODE;\
  498. type CRQ_EXPANSION_MODE;\
  499. type CHUNK_SIZE;\
  500. type MIN_CHUNK_SIZE;\
  501. type META_CHUNK_SIZE;\
  502. type MIN_META_CHUNK_SIZE;\
  503. type DPTE_GROUP_SIZE;\
  504. type MPTE_GROUP_SIZE;\
  505. type SWATH_HEIGHT;\
  506. type PTE_ROW_HEIGHT_LINEAR;\
  507. type CHUNK_SIZE_C;\
  508. type MIN_CHUNK_SIZE_C;\
  509. type META_CHUNK_SIZE_C;\
  510. type MIN_META_CHUNK_SIZE_C;\
  511. type DPTE_GROUP_SIZE_C;\
  512. type MPTE_GROUP_SIZE_C;\
  513. type SWATH_HEIGHT_C;\
  514. type PTE_ROW_HEIGHT_LINEAR_C;\
  515. type REFCYC_H_BLANK_END;\
  516. type DLG_V_BLANK_END;\
  517. type MIN_DST_Y_NEXT_START;\
  518. type REFCYC_PER_HTOTAL;\
  519. type REFCYC_X_AFTER_SCALER;\
  520. type DST_Y_AFTER_SCALER;\
  521. type DST_Y_PREFETCH;\
  522. type VRATIO_PREFETCH;\
  523. type DST_Y_PER_VM_VBLANK;\
  524. type DST_Y_PER_ROW_VBLANK;\
  525. type REF_FREQ_TO_PIX_FREQ;\
  526. type REFCYC_PER_PTE_GROUP_VBLANK_L;\
  527. type REFCYC_PER_META_CHUNK_VBLANK_L;\
  528. type DST_Y_PER_PTE_ROW_NOM_L;\
  529. type REFCYC_PER_PTE_GROUP_NOM_L;\
  530. type DST_Y_PER_META_ROW_NOM_L;\
  531. type REFCYC_PER_META_CHUNK_NOM_L;\
  532. type REFCYC_PER_LINE_DELIVERY_PRE_L;\
  533. type REFCYC_PER_LINE_DELIVERY_PRE_C;\
  534. type REFCYC_PER_LINE_DELIVERY_L;\
  535. type REFCYC_PER_LINE_DELIVERY_C;\
  536. type VRATIO_PREFETCH_C;\
  537. type REFCYC_PER_PTE_GROUP_VBLANK_C;\
  538. type REFCYC_PER_META_CHUNK_VBLANK_C;\
  539. type DST_Y_PER_PTE_ROW_NOM_C;\
  540. type REFCYC_PER_PTE_GROUP_NOM_C;\
  541. type DST_Y_PER_META_ROW_NOM_C;\
  542. type REFCYC_PER_META_CHUNK_NOM_C;\
  543. type QoS_LEVEL_LOW_WM;\
  544. type QoS_LEVEL_HIGH_WM;\
  545. type MIN_TTU_VBLANK;\
  546. type QoS_LEVEL_FLIP;\
  547. type REFCYC_PER_REQ_DELIVERY;\
  548. type QoS_LEVEL_FIXED;\
  549. type QoS_RAMP_DISABLE;\
  550. type REFCYC_PER_REQ_DELIVERY_PRE;\
  551. type VM_CONTEXT0_PAGE_TABLE_BASE_ADDR_MSB;\
  552. type VM_CONTEXT0_PAGE_TABLE_BASE_ADDR_LSB;\
  553. type VM_CONTEXT0_PAGE_TABLE_START_ADDR_MSB;\
  554. type VM_CONTEXT0_PAGE_TABLE_START_ADDR_LSB;\
  555. type VM_CONTEXT0_PAGE_TABLE_END_ADDR_MSB;\
  556. type VM_CONTEXT0_PAGE_TABLE_END_ADDR_LSB;\
  557. type VM_CONTEXT0_PROTECTION_FAULT_DEFAULT_ADDR_MSB;\
  558. type VM_CONTEXT0_PROTECTION_FAULT_DEFAULT_SYSTEM;\
  559. type VM_CONTEXT0_PROTECTION_FAULT_DEFAULT_ADDR_LSB;\
  560. type ENABLE_L1_TLB;\
  561. type SYSTEM_ACCESS_MODE;\
  562. type HUBP_CLOCK_ENABLE;\
  563. type MC_VM_SYSTEM_APERTURE_DEFAULT_SYSTEM;\
  564. type MC_VM_SYSTEM_APERTURE_DEFAULT_ADDR_MSB;\
  565. type MC_VM_SYSTEM_APERTURE_DEFAULT_ADDR_LSB;\
  566. type MC_VM_SYSTEM_APERTURE_LOW_ADDR_MSB;\
  567. type MC_VM_SYSTEM_APERTURE_LOW_ADDR_LSB;\
  568. type MC_VM_SYSTEM_APERTURE_HIGH_ADDR_MSB;\
  569. type MC_VM_SYSTEM_APERTURE_HIGH_ADDR_LSB;\
  570. type MC_VM_SYSTEM_APERTURE_LOW_ADDR;\
  571. type MC_VM_SYSTEM_APERTURE_HIGH_ADDR;\
  572. type SDPIF_FB_TOP;\
  573. type SDPIF_FB_BASE;\
  574. type SDPIF_FB_OFFSET;\
  575. type SDPIF_AGP_BASE;\
  576. type SDPIF_AGP_BOT;\
  577. type SDPIF_AGP_TOP;\
  578. type FB_TOP;\
  579. type FB_BASE;\
  580. type FB_OFFSET;\
  581. type AGP_BASE;\
  582. type AGP_BOT;\
  583. type AGP_TOP;\
  584. /* todo: get these from GVM instead of reading registers ourselves */\
  585. type PAGE_DIRECTORY_ENTRY_HI32;\
  586. type PAGE_DIRECTORY_ENTRY_LO32;\
  587. type LOGICAL_PAGE_NUMBER_HI4;\
  588. type LOGICAL_PAGE_NUMBER_LO32;\
  589. type PHYSICAL_PAGE_ADDR_HI4;\
  590. type PHYSICAL_PAGE_ADDR_LO32;\
  591. type PHYSICAL_PAGE_NUMBER_MSB;\
  592. type PHYSICAL_PAGE_NUMBER_LSB;\
  593. type LOGICAL_ADDR;\
  594. type CURSOR0_DST_Y_OFFSET; \
  595. type CURSOR0_CHUNK_HDL_ADJUST; \
  596. type CURSOR_SURFACE_ADDRESS_HIGH; \
  597. type CURSOR_SURFACE_ADDRESS; \
  598. type CURSOR_WIDTH; \
  599. type CURSOR_HEIGHT; \
  600. type CURSOR_MODE; \
  601. type CURSOR_2X_MAGNIFY; \
  602. type CURSOR_PITCH; \
  603. type CURSOR_LINES_PER_CHUNK; \
  604. type CURSOR_ENABLE; \
  605. type CURSOR_X_POSITION; \
  606. type CURSOR_Y_POSITION; \
  607. type CURSOR_HOT_SPOT_X; \
  608. type CURSOR_HOT_SPOT_Y; \
  609. type CURSOR_DST_X_OFFSET; \
  610. type OUTPUT_FP
  611. struct dcn_mi_registers {
  612. HUBP_COMMON_REG_VARIABLE_LIST;
  613. };
  614. struct dcn_mi_shift {
  615. DCN_HUBP_REG_FIELD_LIST(uint8_t);
  616. };
  617. struct dcn_mi_mask {
  618. DCN_HUBP_REG_FIELD_LIST(uint32_t);
  619. };
  620. struct dcn_hubp_state {
  621. struct _vcs_dpi_display_dlg_regs_st dlg_attr;
  622. struct _vcs_dpi_display_ttu_regs_st ttu_attr;
  623. struct _vcs_dpi_display_rq_regs_st rq_regs;
  624. uint32_t pixel_format;
  625. uint32_t inuse_addr_hi;
  626. uint32_t inuse_addr_lo;
  627. uint32_t viewport_width;
  628. uint32_t viewport_height;
  629. uint32_t rotation_angle;
  630. uint32_t h_mirror_en;
  631. uint32_t sw_mode;
  632. uint32_t dcc_en;
  633. uint32_t blank_en;
  634. uint32_t underflow_status;
  635. uint32_t ttu_disable;
  636. uint32_t min_ttu_vblank;
  637. uint32_t qos_level_low_wm;
  638. uint32_t qos_level_high_wm;
  639. };
  640. struct dcn10_hubp {
  641. struct hubp base;
  642. struct dcn_hubp_state state;
  643. const struct dcn_mi_registers *hubp_regs;
  644. const struct dcn_mi_shift *hubp_shift;
  645. const struct dcn_mi_mask *hubp_mask;
  646. };
  647. void hubp1_program_surface_config(
  648. struct hubp *hubp,
  649. enum surface_pixel_format format,
  650. union dc_tiling_info *tiling_info,
  651. union plane_size *plane_size,
  652. enum dc_rotation_angle rotation,
  653. struct dc_plane_dcc_param *dcc,
  654. bool horizontal_mirror,
  655. unsigned int compat_level);
  656. void hubp1_program_deadline(
  657. struct hubp *hubp,
  658. struct _vcs_dpi_display_dlg_regs_st *dlg_attr,
  659. struct _vcs_dpi_display_ttu_regs_st *ttu_attr);
  660. void hubp1_program_requestor(
  661. struct hubp *hubp,
  662. struct _vcs_dpi_display_rq_regs_st *rq_regs);
  663. void hubp1_program_pixel_format(
  664. struct hubp *hubp,
  665. enum surface_pixel_format format);
  666. void hubp1_program_size(
  667. struct hubp *hubp,
  668. enum surface_pixel_format format,
  669. const union plane_size *plane_size,
  670. struct dc_plane_dcc_param *dcc);
  671. void hubp1_program_rotation(
  672. struct hubp *hubp,
  673. enum dc_rotation_angle rotation,
  674. bool horizontal_mirror);
  675. void hubp1_program_tiling(
  676. struct hubp *hubp,
  677. const union dc_tiling_info *info,
  678. const enum surface_pixel_format pixel_format);
  679. void hubp1_dcc_control(struct hubp *hubp,
  680. bool enable,
  681. bool independent_64b_blks);
  682. bool hubp1_program_surface_flip_and_addr(
  683. struct hubp *hubp,
  684. const struct dc_plane_address *address,
  685. bool flip_immediate);
  686. bool hubp1_is_flip_pending(struct hubp *hubp);
  687. void hubp1_cursor_set_attributes(
  688. struct hubp *hubp,
  689. const struct dc_cursor_attributes *attr);
  690. void hubp1_cursor_set_position(
  691. struct hubp *hubp,
  692. const struct dc_cursor_position *pos,
  693. const struct dc_cursor_mi_param *param);
  694. void hubp1_set_blank(struct hubp *hubp, bool blank);
  695. void min_set_viewport(struct hubp *hubp,
  696. const struct rect *viewport,
  697. const struct rect *viewport_c);
  698. void hubp1_clk_cntl(struct hubp *hubp, bool enable);
  699. void hubp1_vtg_sel(struct hubp *hubp, uint32_t otg_inst);
  700. void dcn10_hubp_construct(
  701. struct dcn10_hubp *hubp1,
  702. struct dc_context *ctx,
  703. uint32_t inst,
  704. const struct dcn_mi_registers *hubp_regs,
  705. const struct dcn_mi_shift *hubp_shift,
  706. const struct dcn_mi_mask *hubp_mask);
  707. void hubp1_read_state(struct hubp *hubp);
  708. enum cursor_pitch hubp1_get_cursor_pitch(unsigned int pitch);
  709. #endif