cvp_hfi_helper.h 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476
  1. /* SPDX-License-Identifier: GPL-2.0-only */
  2. /*
  3. * Copyright (c) 2018-2021, The Linux Foundation. All rights reserved.
  4. */
  5. #ifndef __H_CVP_HFI_HELPER_H__
  6. #define __H_CVP_HFI_HELPER_H__
  7. #define HFI_COMMON_BASE (0)
  8. #define HFI_DOMAIN_BASE_COMMON (HFI_COMMON_BASE + 0)
  9. #define HFI_DOMAIN_BASE_CVP (HFI_COMMON_BASE + 0x04000000)
  10. #define HFI_ARCH_COMMON_OFFSET (0)
  11. #define HFI_CMD_START_OFFSET (0x00010000)
  12. #define HFI_MSG_START_OFFSET (0x00020000)
  13. #define HFI_ERR_NONE HFI_COMMON_BASE
  14. #define HFI_ERR_SYS_FATAL (HFI_COMMON_BASE + 0x1)
  15. #define HFI_ERR_SYS_INVALID_PARAMETER (HFI_COMMON_BASE + 0x2)
  16. #define HFI_ERR_SYS_VERSION_MISMATCH (HFI_COMMON_BASE + 0x3)
  17. #define HFI_ERR_SYS_INSUFFICIENT_RESOURCES (HFI_COMMON_BASE + 0x4)
  18. #define HFI_ERR_SYS_MAX_SESSIONS_REACHED (HFI_COMMON_BASE + 0x5)
  19. #define HFI_ERR_SYS_UNSUPPORTED_CODEC (HFI_COMMON_BASE + 0x6)
  20. #define HFI_ERR_SYS_SESSION_IN_USE (HFI_COMMON_BASE + 0x7)
  21. #define HFI_ERR_SYS_SESSION_ID_OUT_OF_RANGE (HFI_COMMON_BASE + 0x8)
  22. #define HFI_ERR_SYS_UNSUPPORTED_DOMAIN (HFI_COMMON_BASE + 0x9)
  23. #define HFI_ERR_SYS_NOC_ERROR (HFI_COMMON_BASE + 0x11)
  24. #define HFI_ERR_SESSION_FATAL (HFI_COMMON_BASE + 0x1001)
  25. #define HFI_ERR_SESSION_INVALID_PARAMETER (HFI_COMMON_BASE + 0x1002)
  26. #define HFI_ERR_SESSION_BAD_POINTER (HFI_COMMON_BASE + 0x1003)
  27. #define HFI_ERR_SESSION_INVALID_SESSION_ID (HFI_COMMON_BASE + 0x1004)
  28. #define HFI_ERR_SESSION_INVALID_STREAM_ID (HFI_COMMON_BASE + 0x1005)
  29. #define HFI_ERR_SESSION_INCORRECT_STATE_OPERATION \
  30. (HFI_COMMON_BASE + 0x1006)
  31. #define HFI_ERR_SESSION_UNSUPPORTED_PROPERTY (HFI_COMMON_BASE + 0x1007)
  32. #define HFI_ERR_SESSION_UNSUPPORTED_SETTING (HFI_COMMON_BASE + 0x1008)
  33. #define HFI_ERR_SESSION_INSUFFICIENT_RESOURCES (HFI_COMMON_BASE + 0x1009)
  34. #define HFI_ERR_SESSION_STREAM_CORRUPT (HFI_COMMON_BASE + 0x100B)
  35. #define HFI_ERR_SESSION_ENC_OVERFLOW (HFI_COMMON_BASE + 0x100C)
  36. #define HFI_ERR_SESSION_UNSUPPORTED_STREAM (HFI_COMMON_BASE + 0x100D)
  37. #define HFI_ERR_SESSION_CMDSIZE (HFI_COMMON_BASE + 0x100E)
  38. #define HFI_ERR_SESSION_UNSUPPORT_CMD (HFI_COMMON_BASE + 0x100F)
  39. #define HFI_ERR_SESSION_UNSUPPORT_BUFFERTYPE (HFI_COMMON_BASE + 0x1010)
  40. #define HFI_ERR_SESSION_BUFFERCOUNT_TOOSMALL (HFI_COMMON_BASE + 0x1011)
  41. #define HFI_ERR_SESSION_INVALID_SCALE_FACTOR (HFI_COMMON_BASE + 0x1012)
  42. #define HFI_ERR_SESSION_UPSCALE_NOT_SUPPORTED (HFI_COMMON_BASE + 0x1013)
  43. #define HFI_ERR_SESSION_FLUSHED (HFI_COMMON_BASE + 0x101C)
  44. #define HFI_EVENT_SYS_ERROR (HFI_COMMON_BASE + 0x1)
  45. #define HFI_EVENT_SESSION_ERROR (HFI_COMMON_BASE + 0x2)
  46. #define HFI_TME_PROFILE_DEFAULT 0x00000001
  47. #define HFI_TME_PROFILE_FRC 0x00000002
  48. #define HFI_TME_PROFILE_ASW 0x00000004
  49. #define HFI_TME_PROFILE_DFS_BOKEH 0x00000008
  50. #define HFI_TME_LEVEL_INTEGER 0x00000001
  51. #define HFI_BUFFER_INPUT (HFI_COMMON_BASE + 0x1)
  52. #define HFI_BUFFER_OUTPUT (HFI_COMMON_BASE + 0x2)
  53. #define HFI_BUFFER_OUTPUT2 (HFI_COMMON_BASE + 0x3)
  54. #define HFI_BUFFER_INTERNAL_PERSIST (HFI_COMMON_BASE + 0x4)
  55. #define HFI_BUFFER_INTERNAL_PERSIST_1 (HFI_COMMON_BASE + 0x5)
  56. #define HFI_BUFFER_COMMON_INTERNAL_SCRATCH (HFI_COMMON_BASE + 0x6)
  57. #define HFI_BUFFER_COMMON_INTERNAL_SCRATCH_1 (HFI_COMMON_BASE + 0x7)
  58. #define HFI_BUFFER_COMMON_INTERNAL_SCRATCH_2 (HFI_COMMON_BASE + 0x8)
  59. #define HFI_BUFFER_COMMON_INTERNAL_RECON (HFI_COMMON_BASE + 0x9)
  60. #define HFI_BUFFER_EXTRADATA_OUTPUT (HFI_COMMON_BASE + 0xA)
  61. #define HFI_BUFFER_EXTRADATA_OUTPUT2 (HFI_COMMON_BASE + 0xB)
  62. #define HFI_BUFFER_EXTRADATA_INPUT (HFI_COMMON_BASE + 0xC)
  63. #define HFI_PROPERTY_SYS_COMMON_START \
  64. (HFI_DOMAIN_BASE_COMMON + HFI_ARCH_COMMON_OFFSET + 0x0000)
  65. #define HFI_PROPERTY_SYS_DEBUG_CONFIG \
  66. (HFI_PROPERTY_SYS_COMMON_START + 0x001)
  67. #define HFI_PROPERTY_SYS_RESOURCE_OCMEM_REQUIREMENT_INFO \
  68. (HFI_PROPERTY_SYS_COMMON_START + 0x002)
  69. #define HFI_PROPERTY_SYS_CONFIG_VCODEC_CLKFREQ \
  70. (HFI_PROPERTY_SYS_COMMON_START + 0x003)
  71. #define HFI_PROPERTY_SYS_IDLE_INDICATOR \
  72. (HFI_PROPERTY_SYS_COMMON_START + 0x004)
  73. #define HFI_PROPERTY_SYS_CODEC_POWER_PLANE_CTRL \
  74. (HFI_PROPERTY_SYS_COMMON_START + 0x005)
  75. #define HFI_PROPERTY_SYS_IMAGE_VERSION \
  76. (HFI_PROPERTY_SYS_COMMON_START + 0x006)
  77. #define HFI_PROPERTY_SYS_CONFIG_COVERAGE \
  78. (HFI_PROPERTY_SYS_COMMON_START + 0x007)
  79. #define HFI_PROPERTY_SYS_UBWC_CONFIG \
  80. (HFI_PROPERTY_SYS_COMMON_START + 0x008)
  81. #define HFI_DEBUG_MSG_LOW 0x00000001
  82. #define HFI_DEBUG_MSG_MEDIUM 0x00000002
  83. #define HFI_DEBUG_MSG_HIGH 0x00000004
  84. #define HFI_DEBUG_MSG_ERROR 0x00000008
  85. #define HFI_DEBUG_MSG_FATAL 0x00000010
  86. #define HFI_DEBUG_MSG_PERF 0x00000020
  87. #define HFI_DEBUG_MODE_QUEUE 0x00000001
  88. #define HFI_DEBUG_MODE_QDSS 0x00000002
  89. struct cvp_hfi_debug_config {
  90. u32 debug_config;
  91. u32 debug_mode;
  92. };
  93. struct cvp_hfi_enable {
  94. u32 enable;
  95. };
  96. #define HFI_RESOURCE_SYSCACHE 0x00000002
  97. struct cvp_hfi_resource_subcache_type {
  98. u32 size;
  99. u32 sc_id;
  100. };
  101. struct cvp_hfi_resource_syscache_info_type {
  102. u32 num_entries;
  103. struct cvp_hfi_resource_subcache_type rg_subcache_entries[1];
  104. };
  105. #define HFI_CMD_SYS_COMMON_START \
  106. (HFI_DOMAIN_BASE_COMMON + HFI_ARCH_COMMON_OFFSET + HFI_CMD_START_OFFSET \
  107. + 0x0000)
  108. #define HFI_CMD_SYS_INIT (HFI_CMD_SYS_COMMON_START + 0x001)
  109. #define HFI_CMD_SYS_PC_PREP (HFI_CMD_SYS_COMMON_START + 0x002)
  110. #define HFI_CMD_SYS_SET_RESOURCE (HFI_CMD_SYS_COMMON_START + 0x003)
  111. #define HFI_CMD_SYS_RELEASE_RESOURCE (HFI_CMD_SYS_COMMON_START + 0x004)
  112. #define HFI_CMD_SYS_SET_PROPERTY (HFI_CMD_SYS_COMMON_START + 0x005)
  113. #define HFI_CMD_SYS_GET_PROPERTY (HFI_CMD_SYS_COMMON_START + 0x006)
  114. #define HFI_CMD_SYS_SESSION_INIT (HFI_CMD_SYS_COMMON_START + 0x007)
  115. #define HFI_CMD_SYS_SESSION_END (HFI_CMD_SYS_COMMON_START + 0x008)
  116. #define HFI_CMD_SYS_SET_BUFFERS (HFI_CMD_SYS_COMMON_START + 0x009)
  117. #define HFI_CMD_SYS_SESSION_ABORT (HFI_CMD_SYS_COMMON_START + 0x00A)
  118. #define HFI_CMD_SYS_TEST_START (HFI_CMD_SYS_COMMON_START + 0x100)
  119. #define HFI_MSG_SYS_COMMON_START \
  120. (HFI_DOMAIN_BASE_COMMON + HFI_ARCH_COMMON_OFFSET + \
  121. HFI_MSG_START_OFFSET + 0x0000)
  122. #define HFI_MSG_SYS_INIT_DONE (HFI_MSG_SYS_COMMON_START + 0x1)
  123. #define HFI_MSG_SYS_PC_PREP_DONE (HFI_MSG_SYS_COMMON_START + 0x2)
  124. #define HFI_MSG_SYS_RELEASE_RESOURCE (HFI_MSG_SYS_COMMON_START + 0x3)
  125. #define HFI_MSG_SYS_DEBUG (HFI_MSG_SYS_COMMON_START + 0x4)
  126. #define HFI_MSG_SYS_SESSION_INIT_DONE (HFI_MSG_SYS_COMMON_START + 0x6)
  127. #define HFI_MSG_SYS_SESSION_END_DONE (HFI_MSG_SYS_COMMON_START + 0x7)
  128. #define HFI_MSG_SYS_IDLE (HFI_MSG_SYS_COMMON_START + 0x8)
  129. #define HFI_MSG_SYS_COV (HFI_MSG_SYS_COMMON_START + 0x9)
  130. #define HFI_MSG_SYS_PROPERTY_INFO (HFI_MSG_SYS_COMMON_START + 0xA)
  131. #define HFI_MSG_SYS_SESSION_ABORT_DONE (HFI_MSG_SYS_COMMON_START + 0xC)
  132. #define HFI_MSG_SESSION_SYNC_DONE (HFI_MSG_SESSION_OX_START + 0xD)
  133. #define HFI_MSG_SESSION_COMMON_START \
  134. (HFI_DOMAIN_BASE_COMMON + HFI_ARCH_COMMON_OFFSET + \
  135. HFI_MSG_START_OFFSET + 0x1000)
  136. #define HFI_MSG_EVENT_NOTIFY (HFI_MSG_SESSION_COMMON_START + 0x1)
  137. #define HFI_MSG_SESSION_GET_SEQUENCE_HEADER_DONE \
  138. (HFI_MSG_SESSION_COMMON_START + 0x2)
  139. #define HFI_CMD_SYS_TEST_SSR (HFI_CMD_SYS_TEST_START + 0x1)
  140. #define HFI_TEST_SSR_SW_ERR_FATAL 0x1
  141. #define HFI_TEST_SSR_SW_DIV_BY_ZERO 0x2
  142. #define HFI_TEST_SSR_HW_WDOG_IRQ 0x3
  143. struct cvp_hal_cmd_pkt_hdr {
  144. u32 size;
  145. u32 packet_type;
  146. };
  147. struct cvp_hal_msg_pkt_hdr {
  148. u32 size;
  149. u32 packet;
  150. };
  151. struct cvp_hal_session_cmd_pkt {
  152. u32 size;
  153. u32 packet_type;
  154. u32 session_id;
  155. };
  156. struct cvp_hfi_cmd_sys_init_packet {
  157. u32 size;
  158. u32 packet_type;
  159. u32 arch_type;
  160. };
  161. struct cvp_hfi_cmd_sys_pc_prep_packet {
  162. u32 size;
  163. u32 packet_type;
  164. };
  165. struct cvp_hfi_cmd_sys_set_resource_packet {
  166. u32 size;
  167. u32 packet_type;
  168. u32 resource_handle;
  169. u32 resource_type;
  170. u32 rg_resource_data[1];
  171. };
  172. struct cvp_hfi_cmd_sys_release_resource_packet {
  173. u32 size;
  174. u32 packet_type;
  175. u32 resource_type;
  176. u32 resource_handle;
  177. };
  178. struct cvp_hfi_cmd_sys_set_property_packet {
  179. u32 size;
  180. u32 packet_type;
  181. u32 num_properties;
  182. u32 rg_property_data[1];
  183. };
  184. struct cvp_hfi_cmd_sys_get_property_packet {
  185. u32 size;
  186. u32 packet_type;
  187. u32 num_properties;
  188. u32 rg_property_data[1];
  189. };
  190. enum HFI_SESSION_TYPE {
  191. HFI_SESSION_CV = 1,
  192. HFI_SESSION_DMM,
  193. HFI_SESSION_ODT,
  194. HFI_SESSION_FD
  195. };
  196. struct cvp_hfi_cmd_sys_session_init_packet {
  197. u32 size;
  198. u32 packet_type;
  199. u32 session_id;
  200. u32 session_type;
  201. u32 session_kmask;
  202. u32 session_prio;
  203. u32 is_secure;
  204. u32 dsp_ac_mask;
  205. };
  206. struct cvp_hfi_cmd_sys_session_end_packet {
  207. u32 size;
  208. u32 packet_type;
  209. u32 session_id;
  210. };
  211. struct cvp_hfi_cmd_sys_set_buffers_packet {
  212. u32 size;
  213. u32 packet_type;
  214. u32 buffer_type;
  215. u32 buffer_size;
  216. u32 num_buffers;
  217. u32 rg_buffer_addr[1];
  218. };
  219. struct cvp_hfi_cmd_sys_set_ubwc_config_packet_type {
  220. u32 size;
  221. u32 packet_type;
  222. struct {
  223. u32 max_channel_override : 1;
  224. u32 mal_length_override : 1;
  225. u32 hb_override : 1;
  226. u32 bank_swzl_level_override : 1;
  227. u32 bank_spreading_override : 1;
  228. u32 reserved : 27;
  229. } override_bit_info;
  230. u32 max_channels;
  231. u32 mal_length;
  232. u32 highest_bank_bit;
  233. u32 bank_swzl_level;
  234. u32 bank_spreading;
  235. u32 reserved[2];
  236. };
  237. struct cvp_hfi_cmd_session_set_property_packet {
  238. u32 size;
  239. u32 packet_type;
  240. u32 session_id;
  241. u32 num_properties;
  242. u32 rg_property_data[1];
  243. };
  244. struct cvp_hfi_client {
  245. u32 transaction_id;
  246. u32 data1;
  247. u32 data2;
  248. u64 kdata;
  249. u32 reserved1;
  250. u32 reserved2;
  251. } __packed;
  252. struct cvp_hfi_buf_type {
  253. u32 iova;
  254. u32 size;
  255. u32 offset;
  256. u32 flags;
  257. u32 reserved1;
  258. u32 reserved2;
  259. };
  260. struct cvp_hfi_cmd_session_set_buffers_packet {
  261. u32 size;
  262. u32 packet_type;
  263. u32 session_id;
  264. struct cvp_hfi_client client_data;
  265. struct cvp_hfi_buf_type buf_type;
  266. } __packed;
  267. struct cvp_session_release_buffers_packet {
  268. u32 size;
  269. u32 packet_type;
  270. u32 session_id;
  271. struct cvp_hfi_client client_data;
  272. u32 kernel_type;
  273. u32 buffer_type;
  274. u32 num_buffers;
  275. u32 buffer_idx;
  276. } __packed;
  277. struct cvp_hfi_cmd_session_hdr {
  278. u32 size;
  279. u32 packet_type;
  280. u32 session_id;
  281. struct cvp_hfi_client client_data;
  282. u32 stream_idx;
  283. } __packed;
  284. struct cvp_hfi_msg_session_hdr {
  285. u32 size;
  286. u32 packet_type;
  287. u32 session_id;
  288. u32 error_type;
  289. struct cvp_hfi_client client_data;
  290. u32 stream_idx;
  291. } __packed;
  292. #define HFI_MAX_HW_ACTIVATIONS_PER_FRAME (6)
  293. #define HFI_MAX_HW_THREADS (4)
  294. enum hfi_hw_thread {
  295. HFI_HW_FDU,
  296. HFI_HW_MPU,
  297. HFI_HW_OD,
  298. HFI_HW_ICA
  299. };
  300. struct cvp_hfi_msg_session_hdr_ext {
  301. u32 size;
  302. u32 packet_type;
  303. u32 session_id;
  304. u32 error_type;
  305. struct cvp_hfi_client client_data;
  306. u32 stream_idx;
  307. u32 busy_cycles;
  308. u32 total_cycles;
  309. u32 hw_cycles[HFI_MAX_HW_THREADS][HFI_MAX_HW_ACTIVATIONS_PER_FRAME];
  310. u32 fw_cycles[HFI_MAX_HW_ACTIVATIONS_PER_FRAME];
  311. } __packed;
  312. struct cvp_hfi_buffer_mapping_type {
  313. u32 index;
  314. u32 device_addr;
  315. u32 size;
  316. };
  317. struct cvp_hfi_cmd_session_sync_process_packet {
  318. u32 size;
  319. u32 packet_type;
  320. u32 session_id;
  321. u32 sync_id;
  322. u32 rg_data[1];
  323. };
  324. struct cvp_hfi_msg_event_notify_packet {
  325. u32 size;
  326. u32 packet_type;
  327. u32 session_id;
  328. u32 event_id;
  329. u32 event_data1;
  330. u32 event_data2;
  331. u32 rg_ext_event_data[1];
  332. };
  333. struct cvp_hfi_msg_session_op_cfg_packet {
  334. u32 size;
  335. u32 packet_type;
  336. u32 session_id;
  337. u32 error_type;
  338. struct cvp_hfi_client client_data;
  339. u32 stream_idx;
  340. u32 op_conf_id;
  341. } __packed;
  342. struct cvp_hfi_msg_sys_init_done_packet {
  343. u32 size;
  344. u32 packet_type;
  345. u32 error_type;
  346. u32 num_properties;
  347. u32 rg_property_data[1];
  348. };
  349. struct cvp_hfi_msg_sys_pc_prep_done_packet {
  350. u32 size;
  351. u32 packet_type;
  352. u32 error_type;
  353. };
  354. struct cvp_hfi_msg_sys_release_resource_done_packet {
  355. u32 size;
  356. u32 packet_type;
  357. u32 resource_handle;
  358. u32 error_type;
  359. };
  360. struct cvp_hfi_msg_sys_session_init_done_packet {
  361. u32 size;
  362. u32 packet_type;
  363. u32 session_id;
  364. u32 error_type;
  365. u32 num_properties;
  366. u32 rg_property_data[1];
  367. };
  368. struct cvp_hfi_msg_sys_session_end_done_packet {
  369. u32 size;
  370. u32 packet_type;
  371. u32 session_id;
  372. u32 error_type;
  373. };
  374. struct cvp_hfi_msg_session_get_sequence_header_done_packet {
  375. u32 size;
  376. u32 packet_type;
  377. u32 session_id;
  378. u32 error_type;
  379. u32 header_len;
  380. u32 sequence_header;
  381. };
  382. struct cvp_hfi_msg_sys_debug_packet {
  383. u32 size;
  384. u32 packet_type;
  385. u32 msg_type;
  386. u32 msg_size;
  387. u32 time_stamp_hi;
  388. u32 time_stamp_lo;
  389. u8 rg_msg_data[1];
  390. };
  391. struct cvp_hfi_packet_header {
  392. u32 size;
  393. u32 packet_type;
  394. };
  395. struct cvp_hfi_sfr_struct {
  396. u32 bufSize;
  397. u8 rg_data[1];
  398. };
  399. struct cvp_hfi_cmd_sys_test_ssr_packet {
  400. u32 size;
  401. u32 packet_type;
  402. u32 trigger_type;
  403. };
  404. struct cvp_hfi_msg_sys_session_flush_done_packet {
  405. u32 size;
  406. u32 packet_type;
  407. u32 session_id;
  408. u32 error_type;
  409. struct cvp_hfi_client client_data;
  410. };
  411. #endif