pvr_stream_defs.c 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351
  1. // SPDX-License-Identifier: GPL-2.0-only OR MIT
  2. /* Copyright (c) 2023 Imagination Technologies Ltd. */
  3. #include "pvr_device_info.h"
  4. #include "pvr_rogue_fwif_client.h"
  5. #include "pvr_rogue_fwif_stream.h"
  6. #include "pvr_stream.h"
  7. #include "pvr_stream_defs.h"
  8. #include <linux/stddef.h>
  9. #include <uapi/drm/pvr_drm.h>
  10. #define PVR_STREAM_DEF_SET(owner, member, _size, _array_size, _feature) \
  11. { .offset = offsetof(struct owner, member), \
  12. .size = (_size), \
  13. .array_size = (_array_size), \
  14. .feature = (_feature) }
  15. #define PVR_STREAM_DEF(owner, member, member_size) \
  16. PVR_STREAM_DEF_SET(owner, member, PVR_STREAM_SIZE_ ## member_size, 0, PVR_FEATURE_NONE)
  17. #define PVR_STREAM_DEF_FEATURE(owner, member, member_size, feature) \
  18. PVR_STREAM_DEF_SET(owner, member, PVR_STREAM_SIZE_ ## member_size, 0, feature)
  19. #define PVR_STREAM_DEF_NOT_FEATURE(owner, member, member_size, feature) \
  20. PVR_STREAM_DEF_SET(owner, member, PVR_STREAM_SIZE_ ## member_size, 0, \
  21. (feature) | PVR_FEATURE_NOT)
  22. #define PVR_STREAM_DEF_ARRAY(owner, member) \
  23. PVR_STREAM_DEF_SET(owner, member, PVR_STREAM_SIZE_ARRAY, \
  24. sizeof(((struct owner *)0)->member), PVR_FEATURE_NONE)
  25. #define PVR_STREAM_DEF_ARRAY_FEATURE(owner, member, feature) \
  26. PVR_STREAM_DEF_SET(owner, member, PVR_STREAM_SIZE_ARRAY, \
  27. sizeof(((struct owner *)0)->member), feature)
  28. #define PVR_STREAM_DEF_ARRAY_NOT_FEATURE(owner, member, feature) \
  29. PVR_STREAM_DEF_SET(owner, member, PVR_STREAM_SIZE_ARRAY, \
  30. sizeof(((struct owner *)0)->member), (feature) | PVR_FEATURE_NOT)
  31. /*
  32. * When adding new parameters to the stream definition, the new parameters must go after the
  33. * existing parameters, to preserve order. As parameters are naturally aligned, care must be taken
  34. * with respect to implicit padding in the stream; padding should be minimised as much as possible.
  35. */
  36. static const struct pvr_stream_def rogue_fwif_cmd_geom_stream[] = {
  37. PVR_STREAM_DEF(rogue_fwif_cmd_geom, regs.vdm_ctrl_stream_base, 64),
  38. PVR_STREAM_DEF(rogue_fwif_cmd_geom, regs.tpu_border_colour_table, 64),
  39. PVR_STREAM_DEF_FEATURE(rogue_fwif_cmd_geom, regs.vdm_draw_indirect0, 64,
  40. PVR_FEATURE_VDM_DRAWINDIRECT),
  41. PVR_STREAM_DEF_FEATURE(rogue_fwif_cmd_geom, regs.vdm_draw_indirect1, 32,
  42. PVR_FEATURE_VDM_DRAWINDIRECT),
  43. PVR_STREAM_DEF(rogue_fwif_cmd_geom, regs.ppp_ctrl, 32),
  44. PVR_STREAM_DEF(rogue_fwif_cmd_geom, regs.te_psg, 32),
  45. PVR_STREAM_DEF(rogue_fwif_cmd_geom, regs.vdm_context_resume_task0_size, 32),
  46. PVR_STREAM_DEF_FEATURE(rogue_fwif_cmd_geom, regs.vdm_context_resume_task3_size, 32,
  47. PVR_FEATURE_VDM_OBJECT_LEVEL_LLS),
  48. PVR_STREAM_DEF(rogue_fwif_cmd_geom, regs.view_idx, 32),
  49. PVR_STREAM_DEF_FEATURE(rogue_fwif_cmd_geom, regs.pds_coeff_free_prog, 32,
  50. PVR_FEATURE_TESSELLATION),
  51. };
  52. static const struct pvr_stream_def rogue_fwif_cmd_geom_stream_brn49927[] = {
  53. PVR_STREAM_DEF(rogue_fwif_cmd_geom, regs.tpu, 32),
  54. };
  55. static const struct pvr_stream_ext_def cmd_geom_ext_streams_0[] = {
  56. {
  57. .stream = rogue_fwif_cmd_geom_stream_brn49927,
  58. .stream_len = ARRAY_SIZE(rogue_fwif_cmd_geom_stream_brn49927),
  59. .header_mask = PVR_STREAM_EXTHDR_GEOM0_BRN49927,
  60. .quirk = 49927,
  61. },
  62. };
  63. static const struct pvr_stream_ext_header cmd_geom_ext_headers[] = {
  64. {
  65. .ext_streams = cmd_geom_ext_streams_0,
  66. .ext_streams_num = ARRAY_SIZE(cmd_geom_ext_streams_0),
  67. .valid_mask = PVR_STREAM_EXTHDR_GEOM0_VALID,
  68. },
  69. };
  70. const struct pvr_stream_cmd_defs pvr_cmd_geom_stream = {
  71. .type = PVR_STREAM_TYPE_GEOM,
  72. .main_stream = rogue_fwif_cmd_geom_stream,
  73. .main_stream_len = ARRAY_SIZE(rogue_fwif_cmd_geom_stream),
  74. .ext_nr_headers = ARRAY_SIZE(cmd_geom_ext_headers),
  75. .ext_headers = cmd_geom_ext_headers,
  76. .dest_size = sizeof(struct rogue_fwif_cmd_geom),
  77. };
  78. static const struct pvr_stream_def rogue_fwif_cmd_frag_stream[] = {
  79. PVR_STREAM_DEF(rogue_fwif_cmd_frag, regs.isp_scissor_base, 64),
  80. PVR_STREAM_DEF(rogue_fwif_cmd_frag, regs.isp_dbias_base, 64),
  81. PVR_STREAM_DEF(rogue_fwif_cmd_frag, regs.isp_oclqry_base, 64),
  82. PVR_STREAM_DEF(rogue_fwif_cmd_frag, regs.isp_zlsctl, 64),
  83. PVR_STREAM_DEF(rogue_fwif_cmd_frag, regs.isp_zload_store_base, 64),
  84. PVR_STREAM_DEF(rogue_fwif_cmd_frag, regs.isp_stencil_load_store_base, 64),
  85. PVR_STREAM_DEF_FEATURE(rogue_fwif_cmd_frag, regs.fb_cdc_zls, 64,
  86. PVR_FEATURE_REQUIRES_FB_CDC_ZLS_SETUP),
  87. PVR_STREAM_DEF_ARRAY(rogue_fwif_cmd_frag, regs.pbe_word),
  88. PVR_STREAM_DEF(rogue_fwif_cmd_frag, regs.tpu_border_colour_table, 64),
  89. PVR_STREAM_DEF_ARRAY(rogue_fwif_cmd_frag, regs.pds_bgnd),
  90. PVR_STREAM_DEF_ARRAY(rogue_fwif_cmd_frag, regs.pds_pr_bgnd),
  91. PVR_STREAM_DEF_ARRAY(rogue_fwif_cmd_frag, regs.usc_clear_register),
  92. PVR_STREAM_DEF(rogue_fwif_cmd_frag, regs.usc_pixel_output_ctrl, 32),
  93. PVR_STREAM_DEF(rogue_fwif_cmd_frag, regs.isp_bgobjdepth, 32),
  94. PVR_STREAM_DEF(rogue_fwif_cmd_frag, regs.isp_bgobjvals, 32),
  95. PVR_STREAM_DEF(rogue_fwif_cmd_frag, regs.isp_aa, 32),
  96. PVR_STREAM_DEF_FEATURE(rogue_fwif_cmd_frag, regs.isp_xtp_pipe_enable, 32,
  97. PVR_FEATURE_S7_TOP_INFRASTRUCTURE),
  98. PVR_STREAM_DEF(rogue_fwif_cmd_frag, regs.isp_ctl, 32),
  99. PVR_STREAM_DEF(rogue_fwif_cmd_frag, regs.event_pixel_pds_info, 32),
  100. PVR_STREAM_DEF_FEATURE(rogue_fwif_cmd_frag, regs.pixel_phantom, 32,
  101. PVR_FEATURE_CLUSTER_GROUPING),
  102. PVR_STREAM_DEF(rogue_fwif_cmd_frag, regs.view_idx, 32),
  103. PVR_STREAM_DEF(rogue_fwif_cmd_frag, regs.event_pixel_pds_data, 32),
  104. PVR_STREAM_DEF_FEATURE(rogue_fwif_cmd_frag, regs.isp_oclqry_stride, 32,
  105. PVR_FEATURE_GPU_MULTICORE_SUPPORT),
  106. PVR_STREAM_DEF_FEATURE(rogue_fwif_cmd_frag, regs.isp_zls_pixels, 32,
  107. PVR_FEATURE_ZLS_SUBTILE),
  108. PVR_STREAM_DEF_FEATURE(rogue_fwif_cmd_frag, regs.rgx_cr_blackpearl_fix, 32,
  109. PVR_FEATURE_ISP_ZLS_D24_S8_PACKING_OGL_MODE),
  110. PVR_STREAM_DEF(rogue_fwif_cmd_frag, zls_stride, 32),
  111. PVR_STREAM_DEF(rogue_fwif_cmd_frag, sls_stride, 32),
  112. PVR_STREAM_DEF_FEATURE(rogue_fwif_cmd_frag, execute_count, 32,
  113. PVR_FEATURE_GPU_MULTICORE_SUPPORT),
  114. };
  115. static const struct pvr_stream_def rogue_fwif_cmd_frag_stream_brn47217[] = {
  116. PVR_STREAM_DEF(rogue_fwif_cmd_frag, regs.isp_oclqry_stride, 32),
  117. };
  118. static const struct pvr_stream_def rogue_fwif_cmd_frag_stream_brn49927[] = {
  119. PVR_STREAM_DEF(rogue_fwif_cmd_frag, regs.tpu, 32),
  120. };
  121. static const struct pvr_stream_ext_def cmd_frag_ext_streams_0[] = {
  122. {
  123. .stream = rogue_fwif_cmd_frag_stream_brn47217,
  124. .stream_len = ARRAY_SIZE(rogue_fwif_cmd_frag_stream_brn47217),
  125. .header_mask = PVR_STREAM_EXTHDR_FRAG0_BRN47217,
  126. .quirk = 47217,
  127. },
  128. {
  129. .stream = rogue_fwif_cmd_frag_stream_brn49927,
  130. .stream_len = ARRAY_SIZE(rogue_fwif_cmd_frag_stream_brn49927),
  131. .header_mask = PVR_STREAM_EXTHDR_FRAG0_BRN49927,
  132. .quirk = 49927,
  133. },
  134. };
  135. static const struct pvr_stream_ext_header cmd_frag_ext_headers[] = {
  136. {
  137. .ext_streams = cmd_frag_ext_streams_0,
  138. .ext_streams_num = ARRAY_SIZE(cmd_frag_ext_streams_0),
  139. .valid_mask = PVR_STREAM_EXTHDR_FRAG0_VALID,
  140. },
  141. };
  142. const struct pvr_stream_cmd_defs pvr_cmd_frag_stream = {
  143. .type = PVR_STREAM_TYPE_FRAG,
  144. .main_stream = rogue_fwif_cmd_frag_stream,
  145. .main_stream_len = ARRAY_SIZE(rogue_fwif_cmd_frag_stream),
  146. .ext_nr_headers = ARRAY_SIZE(cmd_frag_ext_headers),
  147. .ext_headers = cmd_frag_ext_headers,
  148. .dest_size = sizeof(struct rogue_fwif_cmd_frag),
  149. };
  150. static const struct pvr_stream_def rogue_fwif_cmd_compute_stream[] = {
  151. PVR_STREAM_DEF(rogue_fwif_cmd_compute, regs.tpu_border_colour_table, 64),
  152. PVR_STREAM_DEF_FEATURE(rogue_fwif_cmd_compute, regs.cdm_cb_queue, 64,
  153. PVR_FEATURE_CDM_USER_MODE_QUEUE),
  154. PVR_STREAM_DEF_FEATURE(rogue_fwif_cmd_compute, regs.cdm_cb_base, 64,
  155. PVR_FEATURE_CDM_USER_MODE_QUEUE),
  156. PVR_STREAM_DEF_FEATURE(rogue_fwif_cmd_compute, regs.cdm_cb, 64,
  157. PVR_FEATURE_CDM_USER_MODE_QUEUE),
  158. PVR_STREAM_DEF_NOT_FEATURE(rogue_fwif_cmd_compute, regs.cdm_ctrl_stream_base, 64,
  159. PVR_FEATURE_CDM_USER_MODE_QUEUE),
  160. PVR_STREAM_DEF(rogue_fwif_cmd_compute, regs.cdm_context_state_base_addr, 64),
  161. PVR_STREAM_DEF(rogue_fwif_cmd_compute, regs.cdm_resume_pds1, 32),
  162. PVR_STREAM_DEF_FEATURE(rogue_fwif_cmd_compute, regs.cdm_item, 32,
  163. PVR_FEATURE_COMPUTE_MORTON_CAPABLE),
  164. PVR_STREAM_DEF_FEATURE(rogue_fwif_cmd_compute, regs.compute_cluster, 32,
  165. PVR_FEATURE_CLUSTER_GROUPING),
  166. PVR_STREAM_DEF_FEATURE(rogue_fwif_cmd_compute, regs.tpu_tag_cdm_ctrl, 32,
  167. PVR_FEATURE_TPU_DM_GLOBAL_REGISTERS),
  168. PVR_STREAM_DEF_FEATURE(rogue_fwif_cmd_compute, stream_start_offset, 32,
  169. PVR_FEATURE_CDM_USER_MODE_QUEUE),
  170. PVR_STREAM_DEF_FEATURE(rogue_fwif_cmd_compute, execute_count, 32,
  171. PVR_FEATURE_GPU_MULTICORE_SUPPORT),
  172. };
  173. static const struct pvr_stream_def rogue_fwif_cmd_compute_stream_brn49927[] = {
  174. PVR_STREAM_DEF(rogue_fwif_cmd_compute, regs.tpu, 32),
  175. };
  176. static const struct pvr_stream_ext_def cmd_compute_ext_streams_0[] = {
  177. {
  178. .stream = rogue_fwif_cmd_compute_stream_brn49927,
  179. .stream_len = ARRAY_SIZE(rogue_fwif_cmd_compute_stream_brn49927),
  180. .header_mask = PVR_STREAM_EXTHDR_COMPUTE0_BRN49927,
  181. .quirk = 49927,
  182. },
  183. };
  184. static const struct pvr_stream_ext_header cmd_compute_ext_headers[] = {
  185. {
  186. .ext_streams = cmd_compute_ext_streams_0,
  187. .ext_streams_num = ARRAY_SIZE(cmd_compute_ext_streams_0),
  188. .valid_mask = PVR_STREAM_EXTHDR_COMPUTE0_VALID,
  189. },
  190. };
  191. const struct pvr_stream_cmd_defs pvr_cmd_compute_stream = {
  192. .type = PVR_STREAM_TYPE_COMPUTE,
  193. .main_stream = rogue_fwif_cmd_compute_stream,
  194. .main_stream_len = ARRAY_SIZE(rogue_fwif_cmd_compute_stream),
  195. .ext_nr_headers = ARRAY_SIZE(cmd_compute_ext_headers),
  196. .ext_headers = cmd_compute_ext_headers,
  197. .dest_size = sizeof(struct rogue_fwif_cmd_compute),
  198. };
  199. static const struct pvr_stream_def rogue_fwif_cmd_transfer_stream[] = {
  200. PVR_STREAM_DEF(rogue_fwif_cmd_transfer, regs.pds_bgnd0_base, 64),
  201. PVR_STREAM_DEF(rogue_fwif_cmd_transfer, regs.pds_bgnd1_base, 64),
  202. PVR_STREAM_DEF(rogue_fwif_cmd_transfer, regs.pds_bgnd3_sizeinfo, 64),
  203. PVR_STREAM_DEF(rogue_fwif_cmd_transfer, regs.isp_mtile_base, 64),
  204. PVR_STREAM_DEF_ARRAY(rogue_fwif_cmd_transfer, regs.pbe_wordx_mrty),
  205. PVR_STREAM_DEF(rogue_fwif_cmd_transfer, regs.isp_bgobjvals, 32),
  206. PVR_STREAM_DEF(rogue_fwif_cmd_transfer, regs.usc_pixel_output_ctrl, 32),
  207. PVR_STREAM_DEF(rogue_fwif_cmd_transfer, regs.usc_clear_register0, 32),
  208. PVR_STREAM_DEF(rogue_fwif_cmd_transfer, regs.usc_clear_register1, 32),
  209. PVR_STREAM_DEF(rogue_fwif_cmd_transfer, regs.usc_clear_register2, 32),
  210. PVR_STREAM_DEF(rogue_fwif_cmd_transfer, regs.usc_clear_register3, 32),
  211. PVR_STREAM_DEF(rogue_fwif_cmd_transfer, regs.isp_mtile_size, 32),
  212. PVR_STREAM_DEF(rogue_fwif_cmd_transfer, regs.isp_render_origin, 32),
  213. PVR_STREAM_DEF(rogue_fwif_cmd_transfer, regs.isp_ctl, 32),
  214. PVR_STREAM_DEF(rogue_fwif_cmd_transfer, regs.isp_aa, 32),
  215. PVR_STREAM_DEF(rogue_fwif_cmd_transfer, regs.event_pixel_pds_info, 32),
  216. PVR_STREAM_DEF(rogue_fwif_cmd_transfer, regs.event_pixel_pds_code, 32),
  217. PVR_STREAM_DEF(rogue_fwif_cmd_transfer, regs.event_pixel_pds_data, 32),
  218. PVR_STREAM_DEF(rogue_fwif_cmd_transfer, regs.isp_render, 32),
  219. PVR_STREAM_DEF(rogue_fwif_cmd_transfer, regs.isp_rgn, 32),
  220. PVR_STREAM_DEF_FEATURE(rogue_fwif_cmd_transfer, regs.isp_xtp_pipe_enable, 32,
  221. PVR_FEATURE_S7_TOP_INFRASTRUCTURE),
  222. PVR_STREAM_DEF_FEATURE(rogue_fwif_cmd_transfer, regs.frag_screen, 32,
  223. PVR_FEATURE_GPU_MULTICORE_SUPPORT),
  224. };
  225. const struct pvr_stream_cmd_defs pvr_cmd_transfer_stream = {
  226. .type = PVR_STREAM_TYPE_TRANSFER,
  227. .main_stream = rogue_fwif_cmd_transfer_stream,
  228. .main_stream_len = ARRAY_SIZE(rogue_fwif_cmd_transfer_stream),
  229. .ext_nr_headers = 0,
  230. .dest_size = sizeof(struct rogue_fwif_cmd_transfer),
  231. };
  232. static const struct pvr_stream_def rogue_fwif_static_render_context_state_stream[] = {
  233. PVR_STREAM_DEF(rogue_fwif_geom_registers_caswitch,
  234. geom_reg_vdm_context_state_base_addr, 64),
  235. PVR_STREAM_DEF(rogue_fwif_geom_registers_caswitch,
  236. geom_reg_vdm_context_state_resume_addr, 64),
  237. PVR_STREAM_DEF(rogue_fwif_geom_registers_caswitch,
  238. geom_reg_ta_context_state_base_addr, 64),
  239. PVR_STREAM_DEF(rogue_fwif_geom_registers_caswitch,
  240. geom_state[0].geom_reg_vdm_context_store_task0, 64),
  241. PVR_STREAM_DEF(rogue_fwif_geom_registers_caswitch,
  242. geom_state[0].geom_reg_vdm_context_store_task1, 64),
  243. PVR_STREAM_DEF(rogue_fwif_geom_registers_caswitch,
  244. geom_state[0].geom_reg_vdm_context_store_task2, 64),
  245. PVR_STREAM_DEF(rogue_fwif_geom_registers_caswitch,
  246. geom_state[0].geom_reg_vdm_context_store_task3, 64),
  247. PVR_STREAM_DEF(rogue_fwif_geom_registers_caswitch,
  248. geom_state[0].geom_reg_vdm_context_store_task4, 64),
  249. PVR_STREAM_DEF(rogue_fwif_geom_registers_caswitch,
  250. geom_state[0].geom_reg_vdm_context_resume_task0, 64),
  251. PVR_STREAM_DEF(rogue_fwif_geom_registers_caswitch,
  252. geom_state[0].geom_reg_vdm_context_resume_task1, 64),
  253. PVR_STREAM_DEF(rogue_fwif_geom_registers_caswitch,
  254. geom_state[0].geom_reg_vdm_context_resume_task2, 64),
  255. PVR_STREAM_DEF(rogue_fwif_geom_registers_caswitch,
  256. geom_state[0].geom_reg_vdm_context_resume_task3, 64),
  257. PVR_STREAM_DEF(rogue_fwif_geom_registers_caswitch,
  258. geom_state[0].geom_reg_vdm_context_resume_task4, 64),
  259. PVR_STREAM_DEF(rogue_fwif_geom_registers_caswitch,
  260. geom_state[1].geom_reg_vdm_context_store_task0, 64),
  261. PVR_STREAM_DEF(rogue_fwif_geom_registers_caswitch,
  262. geom_state[1].geom_reg_vdm_context_store_task1, 64),
  263. PVR_STREAM_DEF(rogue_fwif_geom_registers_caswitch,
  264. geom_state[1].geom_reg_vdm_context_store_task2, 64),
  265. PVR_STREAM_DEF(rogue_fwif_geom_registers_caswitch,
  266. geom_state[1].geom_reg_vdm_context_store_task3, 64),
  267. PVR_STREAM_DEF(rogue_fwif_geom_registers_caswitch,
  268. geom_state[1].geom_reg_vdm_context_store_task4, 64),
  269. PVR_STREAM_DEF(rogue_fwif_geom_registers_caswitch,
  270. geom_state[1].geom_reg_vdm_context_resume_task0, 64),
  271. PVR_STREAM_DEF(rogue_fwif_geom_registers_caswitch,
  272. geom_state[1].geom_reg_vdm_context_resume_task1, 64),
  273. PVR_STREAM_DEF(rogue_fwif_geom_registers_caswitch,
  274. geom_state[1].geom_reg_vdm_context_resume_task2, 64),
  275. PVR_STREAM_DEF(rogue_fwif_geom_registers_caswitch,
  276. geom_state[1].geom_reg_vdm_context_resume_task3, 64),
  277. PVR_STREAM_DEF(rogue_fwif_geom_registers_caswitch,
  278. geom_state[1].geom_reg_vdm_context_resume_task4, 64),
  279. };
  280. const struct pvr_stream_cmd_defs pvr_static_render_context_state_stream = {
  281. .type = PVR_STREAM_TYPE_STATIC_RENDER_CONTEXT,
  282. .main_stream = rogue_fwif_static_render_context_state_stream,
  283. .main_stream_len = ARRAY_SIZE(rogue_fwif_static_render_context_state_stream),
  284. .ext_nr_headers = 0,
  285. .dest_size = sizeof(struct rogue_fwif_geom_registers_caswitch),
  286. };
  287. static const struct pvr_stream_def rogue_fwif_static_compute_context_state_stream[] = {
  288. PVR_STREAM_DEF(rogue_fwif_cdm_registers_cswitch, cdmreg_cdm_context_pds0, 64),
  289. PVR_STREAM_DEF(rogue_fwif_cdm_registers_cswitch, cdmreg_cdm_context_pds1, 64),
  290. PVR_STREAM_DEF(rogue_fwif_cdm_registers_cswitch, cdmreg_cdm_terminate_pds, 64),
  291. PVR_STREAM_DEF(rogue_fwif_cdm_registers_cswitch, cdmreg_cdm_terminate_pds1, 64),
  292. PVR_STREAM_DEF(rogue_fwif_cdm_registers_cswitch, cdmreg_cdm_resume_pds0, 64),
  293. PVR_STREAM_DEF(rogue_fwif_cdm_registers_cswitch, cdmreg_cdm_context_pds0_b, 64),
  294. PVR_STREAM_DEF(rogue_fwif_cdm_registers_cswitch, cdmreg_cdm_resume_pds0_b, 64),
  295. };
  296. const struct pvr_stream_cmd_defs pvr_static_compute_context_state_stream = {
  297. .type = PVR_STREAM_TYPE_STATIC_COMPUTE_CONTEXT,
  298. .main_stream = rogue_fwif_static_compute_context_state_stream,
  299. .main_stream_len = ARRAY_SIZE(rogue_fwif_static_compute_context_state_stream),
  300. .ext_nr_headers = 0,
  301. .dest_size = sizeof(struct rogue_fwif_cdm_registers_cswitch),
  302. };