cam_cpas_api.h 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789
  1. /* SPDX-License-Identifier: GPL-2.0-only */
  2. /*
  3. * Copyright (c) 2017-2021, The Linux Foundation. All rights reserved.
  4. */
  5. #ifndef _CAM_CPAS_API_H_
  6. #define _CAM_CPAS_API_H_
  7. #include <linux/device.h>
  8. #include <linux/platform_device.h>
  9. #include <media/cam_cpas.h>
  10. #include "cam_soc_util.h"
  11. #define CAM_HW_IDENTIFIER_LENGTH 128
  12. /* Default AXI Bandwidth vote */
  13. #define CAM_CPAS_DEFAULT_AXI_BW 1024
  14. /* Default RT AXI Bandwidth vote */
  15. #define CAM_CPAS_DEFAULT_RT_AXI_BW 2000000000L
  16. #define CAM_CPAS_MAX_PATHS_PER_CLIENT 15
  17. #define CAM_CPAS_API_PATH_DATA_STD_START 512
  18. /* Qos Selection mask */
  19. #define CAM_CPAS_QOS_DEFAULT_SETTINGS_MASK 0x1
  20. #define CAM_CPAS_QOS_CUSTOM_SETTINGS_MASK 0x2
  21. /**
  22. * enum cam_cpas_reg_base - Enum for register base identifier. These
  23. * are the identifiers used in generic register
  24. * write/read APIs provided by cpas driver.
  25. */
  26. enum cam_cpas_reg_base {
  27. CAM_CPAS_REG_CPASTOP,
  28. CAM_CPAS_REG_CAMNOC,
  29. CAM_CPAS_REG_CAMSS,
  30. CAM_CPAS_REG_RPMH,
  31. CAM_CPAS_REG_MAX
  32. };
  33. /**
  34. * enum cam_cpas_hw_index - Enum for identify HW index
  35. */
  36. enum cam_cpas_hw_index {
  37. CAM_CPAS_HW_IDX_ANY = 0,
  38. CAM_CPAS_HW_IDX_0 = 1<<0,
  39. CAM_CPAS_HW_IDX_1 = 1<<1,
  40. CAM_CPAS_HW_IDX_2 = 1<<2,
  41. CAM_CPAS_HW_IDX_3 = 1<<3,
  42. CAM_CPAS_HW_IDX_4 = 1<<4,
  43. CAM_CPAS_HW_IDX_5 = 1<<5,
  44. CAM_CPAS_HW_IDX_6 = 1<<6,
  45. CAM_CPAS_HW_IDX_7 = 1<<7,
  46. CAM_CPAS_HW_IDX_MAX = 1<<8
  47. };
  48. /**
  49. * enum cam_cpas_camera_version Enum for Titan Camera Versions
  50. */
  51. enum cam_cpas_camera_version {
  52. CAM_CPAS_CAMERA_VERSION_NONE = 0,
  53. CAM_CPAS_CAMERA_VERSION_150 = 0x00010500,
  54. CAM_CPAS_CAMERA_VERSION_170 = 0x00010700,
  55. CAM_CPAS_CAMERA_VERSION_175 = 0x00010705,
  56. CAM_CPAS_CAMERA_VERSION_480 = 0x00040800,
  57. CAM_CPAS_CAMERA_VERSION_520 = 0x00050200,
  58. CAM_CPAS_CAMERA_VERSION_540 = 0x00050400,
  59. CAM_CPAS_CAMERA_VERSION_580 = 0x00050800,
  60. CAM_CPAS_CAMERA_VERSION_545 = 0x00050405,
  61. CAM_CPAS_CAMERA_VERSION_570 = 0x00050700,
  62. CAM_CPAS_CAMERA_VERSION_680 = 0x00060800,
  63. CAM_CPAS_CAMERA_VERSION_165 = 0x00010605,
  64. CAM_CPAS_CAMERA_VERSION_780 = 0x00070800,
  65. CAM_CPAS_CAMERA_VERSION_MAX
  66. };
  67. /**
  68. * enum cam_cpas_version Enum for Titan CPAS Versions
  69. */
  70. enum cam_cpas_version {
  71. CAM_CPAS_VERSION_NONE = 0,
  72. CAM_CPAS_VERSION_100 = 0x10000000,
  73. CAM_CPAS_VERSION_101 = 0x10000001,
  74. CAM_CPAS_VERSION_110 = 0x10010000,
  75. CAM_CPAS_VERSION_120 = 0x10020000,
  76. CAM_CPAS_VERSION_130 = 0x10030000,
  77. CAM_CPAS_VERSION_200 = 0x20000000,
  78. CAM_CPAS_VERSION_MAX
  79. };
  80. /**
  81. * enum cam_cpas_camera_version_map_id Enum for camera version map id
  82. * This enum is mapped with cam_cpas_camera_version
  83. */
  84. enum cam_cpas_camera_version_map_id {
  85. CAM_CPAS_CAMERA_VERSION_ID_150 = 0x0,
  86. CAM_CPAS_CAMERA_VERSION_ID_170 = 0x1,
  87. CAM_CPAS_CAMERA_VERSION_ID_175 = 0x2,
  88. CAM_CPAS_CAMERA_VERSION_ID_480 = 0x3,
  89. CAM_CPAS_CAMERA_VERSION_ID_580 = 0x4,
  90. CAM_CPAS_CAMERA_VERSION_ID_520 = 0x5,
  91. CAM_CPAS_CAMERA_VERSION_ID_540 = 0x6,
  92. CAM_CPAS_CAMERA_VERSION_ID_545 = 0x7,
  93. CAM_CPAS_CAMERA_VERSION_ID_570 = 0x8,
  94. CAM_CPAS_CAMERA_VERSION_ID_680 = 0x9,
  95. CAM_CPAS_CAMERA_VERSION_ID_165 = 0xA,
  96. CAM_CPAS_CAMERA_VERSION_ID_780 = 0xB,
  97. CAM_CPAS_CAMERA_VERSION_ID_MAX
  98. };
  99. /**
  100. * enum cam_cpas_version_map_id Enum for cpas version map id
  101. * This enum is mapped with cam_cpas_version
  102. */
  103. enum cam_cpas_version_map_id {
  104. CAM_CPAS_VERSION_ID_100 = 0x0,
  105. CAM_CPAS_VERSION_ID_101 = 0x1,
  106. CAM_CPAS_VERSION_ID_110 = 0x2,
  107. CAM_CPAS_VERSION_ID_120 = 0x3,
  108. CAM_CPAS_VERSION_ID_130 = 0x4,
  109. CAM_CPAS_VERSION_ID_200 = 0x5,
  110. CAM_CPAS_VERSION_ID_MAX
  111. };
  112. /**
  113. * enum cam_cpas_hw_version - Enum for Titan CPAS HW Versions
  114. */
  115. enum cam_cpas_hw_version {
  116. CAM_CPAS_TITAN_NONE = 0,
  117. CAM_CPAS_TITAN_150_V100 = 0x150100,
  118. CAM_CPAS_TITAN_165_V100 = 0x165100,
  119. CAM_CPAS_TITAN_170_V100 = 0x170100,
  120. CAM_CPAS_TITAN_170_V110 = 0x170110,
  121. CAM_CPAS_TITAN_170_V120 = 0x170120,
  122. CAM_CPAS_TITAN_170_V200 = 0x170200,
  123. CAM_CPAS_TITAN_175_V100 = 0x175100,
  124. CAM_CPAS_TITAN_175_V101 = 0x175101,
  125. CAM_CPAS_TITAN_175_V120 = 0x175120,
  126. CAM_CPAS_TITAN_175_V130 = 0x175130,
  127. CAM_CPAS_TITAN_480_V100 = 0x480100,
  128. CAM_CPAS_TITAN_580_V100 = 0x580100,
  129. CAM_CPAS_TITAN_540_V100 = 0x540100,
  130. CAM_CPAS_TITAN_520_V100 = 0x520100,
  131. CAM_CPAS_TITAN_545_V100 = 0x545100,
  132. CAM_CPAS_TITAN_570_V100 = 0x570100,
  133. CAM_CPAS_TITAN_570_V200 = 0x570200,
  134. CAM_CPAS_TITAN_680_V100 = 0x680100,
  135. CAM_CPAS_TITAN_780_V100 = 0x780100,
  136. CAM_CPAS_TITAN_MAX
  137. };
  138. /**
  139. * enum cam_camnoc_irq_type - Enum for camnoc irq types
  140. *
  141. * @CAM_CAMNOC_IRQ_SLAVE_ERROR: Each slave port in CAMNOC (3 QSB ports and
  142. * 1 QHB port) has an error logger. The error
  143. * observed at any slave port is logged into
  144. * the error logger register and an IRQ is
  145. * triggered
  146. * @CAM_CAMNOC_IRQ_IFE_UBWC_ENCODE_ERROR : Triggered if any error detected
  147. * in the IFE UBWC encoder instance
  148. * @CAM_CAMNOC_IRQ_IFE_UBWC_STATS_ENCODE_ERROR: Triggered if any error detected
  149. * in the IFE UBWC-Stats encoder
  150. * instance
  151. * @CAM_CAMNOC_IRQ_IFE02_UBWC_ENCODE_ERROR : Triggered if any error detected
  152. * in the IFE0 UBWC encoder instance
  153. * @CAM_CAMNOC_IRQ_IFE13_UBWC_ENCODE_ERROR : Triggered if any error detected
  154. * in the IFE1 or IFE3 UBWC encoder
  155. * instance
  156. * @CAM_CAMNOC_IRQ_IFE0_UBWC_ENCODE_ERROR : Triggered if any error detected
  157. * in the IFE0 UBWC encoder instance
  158. * @CAM_CAMNOC_IRQ_IFE1_WR_UBWC_ENCODE_ERROR : Triggered if any error detected
  159. * in the IFE1 UBWC encoder
  160. * instance
  161. * @CAM_CAMNOC_IRQ_IPE_UBWC_ENCODE_ERROR : Triggered if any error detected
  162. * in the IPE write path encoder
  163. * instance
  164. * @CAM_CAMNOC_IRQ_BPS_UBWC_ENCODE_ERROR : Triggered if any error detected
  165. * in the BPS write path encoder
  166. * instance
  167. * @CAM_CAMNOC_IRQ_IPE1_BPS_UBWC_DECODE_ERROR: Triggered if any error detected
  168. * in the IPE1/BPS read path decoder
  169. * instance
  170. * @CAM_CAMNOC_IRQ_IPE0_UBWC_DECODE_ERROR : Triggered if any error detected
  171. * in the IPE0 read path decoder
  172. * instance
  173. * @CAM_CAMNOC_IRQ_IPE1_UBWC_DECODE_ERROR : Triggered if any error detected
  174. * in the IPE1 read path decoder
  175. * instance
  176. * @CAM_CAMNOC_IRQ_IPE_BPS_UBWC_DECODE_ERROR: Triggered if any error detected
  177. * in the IPE/BPS UBWC decoder
  178. * instance
  179. * @CAM_CAMNOC_IRQ_IPE_BPS_UBWC_ENCODE_ERROR: Triggered if any error detected
  180. * in the IPE/BPS UBWC encoder
  181. * instance
  182. * @CAM_CAMNOC_IRQ_AHB_TIMEOUT : Triggered when the QHS_ICP slave
  183. * times out after 4000 AHB cycles
  184. */
  185. enum cam_camnoc_irq_type {
  186. CAM_CAMNOC_IRQ_SLAVE_ERROR,
  187. CAM_CAMNOC_IRQ_IFE_UBWC_ENCODE_ERROR,
  188. CAM_CAMNOC_IRQ_IFE_UBWC_STATS_ENCODE_ERROR,
  189. CAM_CAMNOC_IRQ_IFE_UBWC_STATS_1_ENCODE_ERROR,
  190. CAM_CAMNOC_IRQ_IFE02_UBWC_ENCODE_ERROR,
  191. CAM_CAMNOC_IRQ_IFE13_UBWC_ENCODE_ERROR,
  192. CAM_CAMNOC_IRQ_IFE0_UBWC_ENCODE_ERROR,
  193. CAM_CAMNOC_IRQ_IFE1_WRITE_UBWC_ENCODE_ERROR,
  194. CAM_CAMNOC_IRQ_IPE_UBWC_ENCODE_ERROR,
  195. CAM_CAMNOC_IRQ_BPS_UBWC_ENCODE_ERROR,
  196. CAM_CAMNOC_IRQ_IPE1_BPS_UBWC_DECODE_ERROR,
  197. CAM_CAMNOC_IRQ_IPE0_UBWC_DECODE_ERROR,
  198. CAM_CAMNOC_IRQ_IPE1_UBWC_DECODE_ERROR,
  199. CAM_CAMNOC_IRQ_IPE_BPS_UBWC_DECODE_ERROR,
  200. CAM_CAMNOC_IRQ_IPE_BPS_UBWC_ENCODE_ERROR,
  201. CAM_CAMNOC_IRQ_AHB_TIMEOUT,
  202. };
  203. /**
  204. * enum cam_sys_cache_config_types - Enum for camera llc's
  205. */
  206. enum cam_sys_cache_config_types {
  207. CAM_LLCC_SMALL_1 = 0,
  208. CAM_LLCC_SMALL_2 = 1,
  209. CAM_LLCC_MAX = 2,
  210. };
  211. /**
  212. * struct cam_camnoc_irq_slave_err_data : Data for Slave error.
  213. *
  214. * @mainctrl : Err logger mainctrl info
  215. * @errvld : Err logger errvld info
  216. * @errlog0_low : Err logger errlog0_low info
  217. * @errlog0_high : Err logger errlog0_high info
  218. * @errlog1_low : Err logger errlog1_low info
  219. * @errlog1_high : Err logger errlog1_high info
  220. * @errlog2_low : Err logger errlog2_low info
  221. * @errlog2_high : Err logger errlog2_high info
  222. * @errlog3_low : Err logger errlog3_low info
  223. * @errlog3_high : Err logger errlog3_high info
  224. *
  225. */
  226. struct cam_camnoc_irq_slave_err_data {
  227. union {
  228. struct {
  229. uint32_t stall_en : 1; /* bit 0 */
  230. uint32_t fault_en : 1; /* bit 1 */
  231. uint32_t rsv : 30; /* bits 2-31 */
  232. };
  233. uint32_t value;
  234. } mainctrl;
  235. union {
  236. struct {
  237. uint32_t err_vld : 1; /* bit 0 */
  238. uint32_t rsv : 31; /* bits 1-31 */
  239. };
  240. uint32_t value;
  241. } errvld;
  242. union {
  243. struct {
  244. uint32_t loginfo_vld : 1; /* bit 0 */
  245. uint32_t word_error : 1; /* bit 1 */
  246. uint32_t non_secure : 1; /* bit 2 */
  247. uint32_t device : 1; /* bit 3 */
  248. uint32_t opc : 3; /* bits 4 - 6 */
  249. uint32_t rsv0 : 1; /* bit 7 */
  250. uint32_t err_code : 3; /* bits 8 - 10 */
  251. uint32_t sizef : 3; /* bits 11 - 13 */
  252. uint32_t rsv1 : 2; /* bits 14 - 15 */
  253. uint32_t addr_space : 6; /* bits 16 - 21 */
  254. uint32_t rsv2 : 10; /* bits 22 - 31 */
  255. };
  256. uint32_t value;
  257. } errlog0_low;
  258. union {
  259. struct {
  260. uint32_t len1 : 10; /* bits 0 - 9 */
  261. uint32_t rsv : 22; /* bits 10 - 31 */
  262. };
  263. uint32_t value;
  264. } errlog0_high;
  265. union {
  266. struct {
  267. uint32_t path : 16; /* bits 0 - 15 */
  268. uint32_t rsv : 16; /* bits 16 - 31 */
  269. };
  270. uint32_t value;
  271. } errlog1_low;
  272. union {
  273. struct {
  274. uint32_t extid : 18; /* bits 0 - 17 */
  275. uint32_t rsv : 14; /* bits 18 - 31 */
  276. };
  277. uint32_t value;
  278. } errlog1_high;
  279. union {
  280. struct {
  281. uint32_t errlog2_lsb : 32; /* bits 0 - 31 */
  282. };
  283. uint32_t value;
  284. } errlog2_low;
  285. union {
  286. struct {
  287. uint32_t errlog2_msb : 16; /* bits 0 - 16 */
  288. uint32_t rsv : 16; /* bits 16 - 31 */
  289. };
  290. uint32_t value;
  291. } errlog2_high;
  292. union {
  293. struct {
  294. uint32_t errlog3_lsb : 32; /* bits 0 - 31 */
  295. };
  296. uint32_t value;
  297. } errlog3_low;
  298. union {
  299. struct {
  300. uint32_t errlog3_msb : 32; /* bits 0 - 31 */
  301. };
  302. uint32_t value;
  303. } errlog3_high;
  304. };
  305. /**
  306. * struct cam_camnoc_irq_ubwc_enc_data : Data for UBWC Encode error.
  307. *
  308. * @encerr_status : Encode error status
  309. *
  310. */
  311. struct cam_camnoc_irq_ubwc_enc_data {
  312. union {
  313. struct {
  314. uint32_t encerrstatus : 3; /* bits 0 - 2 */
  315. uint32_t rsv : 29; /* bits 3 - 31 */
  316. };
  317. uint32_t value;
  318. } encerr_status;
  319. };
  320. /**
  321. * struct cam_camnoc_irq_ubwc_dec_data : Data for UBWC Decode error.
  322. *
  323. * @decerr_status : Decoder error status
  324. * @thr_err : Set to 1 if
  325. * At least one of the bflc_len fields in the bit steam exceeds
  326. * its threshold value. This error is possible only for
  327. * RGBA1010102, TP10, and RGB565 formats
  328. * @fcl_err : Set to 1 if
  329. * Fast clear with a legal non-RGB format
  330. * @len_md_err : Set to 1 if
  331. * The calculated burst length does not match burst length
  332. * specified by the metadata value
  333. * @format_err : Set to 1 if
  334. * Illegal format
  335. * 1. bad format :2,3,6
  336. * 2. For 32B MAL, metadata=6
  337. * 3. For 32B MAL RGB565, Metadata != 0,1,7
  338. * 4. For 64B MAL RGB565, metadata[3:1] == 1,2
  339. *
  340. */
  341. struct cam_camnoc_irq_ubwc_dec_data {
  342. union {
  343. struct {
  344. uint32_t thr_err : 1; /* bit 0 */
  345. uint32_t fcl_err : 1; /* bit 1 */
  346. uint32_t len_md_err : 1; /* bit 2 */
  347. uint32_t format_err : 1; /* bit 3 */
  348. uint32_t rsv : 28; /* bits 4 - 31 */
  349. };
  350. uint32_t value;
  351. } decerr_status;
  352. };
  353. struct cam_camnoc_irq_ahb_timeout_data {
  354. uint32_t data;
  355. };
  356. /**
  357. * struct cam_cpas_irq_data : CAMNOC IRQ data
  358. *
  359. * @irq_type : To identify the type of IRQ
  360. * @u : Union of irq err data information
  361. * @slave_err : Data for Slave error.
  362. * Valid if type is CAM_CAMNOC_IRQ_SLAVE_ERROR
  363. * @enc_err : Data for UBWC Encode error.
  364. * Valid if type is one of below:
  365. * CAM_CAMNOC_IRQ_IFE02_UBWC_ENCODE_ERROR
  366. * CAM_CAMNOC_IRQ_IFE13_UBWC_ENCODE_ERROR
  367. * CAM_CAMNOC_IRQ_IPE_BPS_UBWC_ENCODE_ERROR
  368. * @dec_err : Data for UBWC Decode error.
  369. * Valid if type is CAM_CAMNOC_IRQ_IPE_BPS_UBWC_DECODE_ERROR
  370. * @ahb_err : Data for Slave error.
  371. * Valid if type is CAM_CAMNOC_IRQ_AHB_TIMEOUT
  372. *
  373. */
  374. struct cam_cpas_irq_data {
  375. enum cam_camnoc_irq_type irq_type;
  376. union {
  377. struct cam_camnoc_irq_slave_err_data slave_err;
  378. struct cam_camnoc_irq_ubwc_enc_data enc_err;
  379. struct cam_camnoc_irq_ubwc_dec_data dec_err;
  380. struct cam_camnoc_irq_ahb_timeout_data ahb_err;
  381. } u;
  382. };
  383. /**
  384. * struct cam_cpas_register_params : Register params for cpas client
  385. *
  386. * @identifier : Input identifier string which is the device label
  387. * from dt like vfe, ife, jpeg etc
  388. * @cell_index : Input integer identifier pointing to the cell index
  389. * from dt of the device. This can be used to form a
  390. * unique string with @identifier like vfe0, ife1,
  391. * jpeg0, etc
  392. * @dev : device handle
  393. * @userdata : Input private data which will be passed as
  394. * an argument while callback.
  395. * @cam_cpas_callback : Input callback pointer for triggering the
  396. * callbacks from CPAS driver.
  397. * @client_handle : CPAS client handle
  398. * @userdata : User data given at the time of register
  399. * @event_type : event type
  400. * @event_data : event data
  401. * @client_handle : Output Unique handle generated for this register
  402. *
  403. */
  404. struct cam_cpas_register_params {
  405. char identifier[CAM_HW_IDENTIFIER_LENGTH];
  406. uint32_t cell_index;
  407. struct device *dev;
  408. void *userdata;
  409. bool (*cam_cpas_client_cb)(
  410. uint32_t client_handle,
  411. void *userdata,
  412. struct cam_cpas_irq_data *irq_data);
  413. uint32_t client_handle;
  414. };
  415. /**
  416. * enum cam_vote_type - Enum for voting type
  417. *
  418. * @CAM_VOTE_ABSOLUTE : Absolute vote
  419. * @CAM_VOTE_DYNAMIC : Dynamic vote
  420. */
  421. enum cam_vote_type {
  422. CAM_VOTE_ABSOLUTE,
  423. CAM_VOTE_DYNAMIC,
  424. };
  425. /**
  426. * struct cam_ahb_vote : AHB vote
  427. *
  428. * @type : AHB voting type.
  429. * CAM_VOTE_ABSOLUTE : vote based on the value 'level' is set
  430. * CAM_VOTE_DYNAMIC : vote calculated dynamically using 'freq'
  431. * and 'dev' handle is set
  432. * @level : AHB vote level
  433. * @freq : AHB vote dynamic frequency
  434. *
  435. */
  436. struct cam_ahb_vote {
  437. enum cam_vote_type type;
  438. union {
  439. enum cam_vote_level level;
  440. unsigned long freq;
  441. } vote;
  442. };
  443. /**
  444. * struct cam_axi_vote : AXI vote
  445. *
  446. * @num_paths: Number of paths on which BW vote is sent to CPAS
  447. * @axi_path: Per path BW vote info
  448. *
  449. */
  450. struct cam_axi_vote {
  451. uint32_t num_paths;
  452. struct cam_axi_per_path_bw_vote axi_path[CAM_CPAS_MAX_PATHS_PER_CLIENT];
  453. };
  454. /**
  455. * cam_cpas_register_client()
  456. *
  457. * @brief: API to register cpas client
  458. *
  459. * @register_params: Input params to register as a client to CPAS
  460. *
  461. * @return 0 on success.
  462. *
  463. */
  464. int cam_cpas_register_client(
  465. struct cam_cpas_register_params *register_params);
  466. /**
  467. * cam_cpas_unregister_client()
  468. *
  469. * @brief: API to unregister cpas client
  470. *
  471. * @client_handle: Client handle to be unregistered
  472. *
  473. * @return 0 on success.
  474. *
  475. */
  476. int cam_cpas_unregister_client(uint32_t client_handle);
  477. /**
  478. * cam_cpas_start()
  479. *
  480. * @brief: API to start cpas client hw. Clients have to vote for minimal
  481. * bandwidth requirements for AHB, AXI. Use cam_cpas_update_ahb_vote
  482. * to scale bandwidth after start.
  483. *
  484. * @client_handle: client cpas handle
  485. * @ahb_vote : Pointer to ahb vote info
  486. * @axi_vote : Pointer to axi bandwidth vote info
  487. *
  488. * If AXI vote is not applicable to a particular client, use the value exposed
  489. * by CAM_CPAS_DEFAULT_AXI_BW as the default vote request.
  490. *
  491. * @return 0 on success.
  492. *
  493. */
  494. int cam_cpas_start(
  495. uint32_t client_handle,
  496. struct cam_ahb_vote *ahb_vote,
  497. struct cam_axi_vote *axi_vote);
  498. /**
  499. * cam_cpas_stop()
  500. *
  501. * @brief: API to stop cpas client hw. Bandwidth for AHB, AXI votes
  502. * would be removed for this client on this call. Clients should not
  503. * use cam_cpas_update_ahb_vote or cam_cpas_update_axi_vote
  504. * to remove their bandwidth vote.
  505. *
  506. * @client_handle: client cpas handle
  507. *
  508. * @return 0 on success.
  509. *
  510. */
  511. int cam_cpas_stop(uint32_t client_handle);
  512. /**
  513. * cam_cpas_update_ahb_vote()
  514. *
  515. * @brief: API to update AHB vote requirement. Use this function only
  516. * between cam_cpas_start and cam_cpas_stop in case clients wants
  517. * to scale to different vote level. Do not use this function to de-vote,
  518. * removing client's vote is implicit on cam_cpas_stop
  519. *
  520. * @client_handle : Client cpas handle
  521. * @ahb_vote : Pointer to ahb vote info
  522. *
  523. * @return 0 on success.
  524. *
  525. */
  526. int cam_cpas_update_ahb_vote(
  527. uint32_t client_handle,
  528. struct cam_ahb_vote *ahb_vote);
  529. /**
  530. * cam_cpas_update_axi_vote()
  531. *
  532. * @brief: API to update AXI vote requirement. Use this function only
  533. * between cam_cpas_start and cam_cpas_stop in case clients wants
  534. * to scale to different vote level. Do not use this function to de-vote,
  535. * removing client's vote is implicit on cam_cpas_stop
  536. *
  537. * @client_handle : Client cpas handle
  538. * @axi_vote : Pointer to axi bandwidth vote info
  539. *
  540. * @return 0 on success.
  541. *
  542. */
  543. int cam_cpas_update_axi_vote(
  544. uint32_t client_handle,
  545. struct cam_axi_vote *axi_vote);
  546. /**
  547. * cam_cpas_reg_write()
  548. *
  549. * @brief: API to write a register value in CPAS register space
  550. *
  551. * @client_handle : Client cpas handle
  552. * @reg_base : Register base identifier
  553. * @offset : Offset from the register base address
  554. * @mb : Whether to do reg write with memory barrier
  555. * @value : Value to be written in register
  556. *
  557. * @return 0 on success.
  558. *
  559. */
  560. int cam_cpas_reg_write(
  561. uint32_t client_handle,
  562. enum cam_cpas_reg_base reg_base,
  563. uint32_t offset,
  564. bool mb,
  565. uint32_t value);
  566. /**
  567. * cam_cpas_reg_read()
  568. *
  569. * @brief: API to read a register value from CPAS register space
  570. *
  571. * @client_handle : Client cpas handle
  572. * @reg_base : Register base identifier
  573. * @offset : Offset from the register base address
  574. * @mb : Whether to do reg read with memory barrier
  575. * @value : Value to be red from register
  576. *
  577. * @return 0 on success.
  578. *
  579. */
  580. int cam_cpas_reg_read(
  581. uint32_t client_handle,
  582. enum cam_cpas_reg_base reg_base,
  583. uint32_t offset,
  584. bool mb,
  585. uint32_t *value);
  586. /**
  587. * cam_cpas_get_hw_info()
  588. *
  589. * @brief: API to get camera hw information
  590. *
  591. * @camera_family : Camera family type. One of
  592. * CAM_FAMILY_CAMERA_SS
  593. * CAM_FAMILY_CPAS_SS
  594. * @camera_version : Camera platform version
  595. * @cpas_version : Camera cpas version
  596. * @cam_caps : Camera capability
  597. * @cam_fuse_info : Camera fuse info
  598. *
  599. * @return 0 on success.
  600. *
  601. */
  602. int cam_cpas_get_hw_info(
  603. uint32_t *camera_family,
  604. struct cam_hw_version *camera_version,
  605. struct cam_hw_version *cpas_version,
  606. uint32_t *cam_caps,
  607. struct cam_cpas_fuse_info *cam_fuse_info);
  608. /**
  609. * cam_cpas_get_cpas_hw_version()
  610. *
  611. * @brief: API to get camera cpas hw version
  612. *
  613. * @hw_version : Camera cpas hw version
  614. *
  615. * @return 0 on success.
  616. *
  617. */
  618. int cam_cpas_get_cpas_hw_version(
  619. uint32_t *hw_version);
  620. /**
  621. * cam_cpas_is_feature_supported()
  622. *
  623. * @brief: API to get camera features
  624. *
  625. * @flag : Camera hw features to check
  626. *
  627. * @hw_map : To indicate which HWs are supported
  628. *
  629. * @fule_val : Return fule value in case of value type feature
  630. *
  631. * @return 1 if feature is supported
  632. *
  633. */
  634. bool cam_cpas_is_feature_supported(uint32_t flag, uint32_t hw_map,
  635. uint32_t *fuse_val);
  636. /**
  637. * cam_cpas_axi_util_path_type_to_string()
  638. *
  639. * @brief: API to get string for given path type
  640. *
  641. * @path_data_type : Path type
  642. *
  643. * @return string.
  644. *
  645. */
  646. const char *cam_cpas_axi_util_path_type_to_string(
  647. uint32_t path_data_type);
  648. /**
  649. * cam_cpas_axi_util_trans_type_to_string()
  650. *
  651. * @brief: API to get string for given transaction type
  652. *
  653. * @path_data_type : Transaction type
  654. *
  655. * @return string.
  656. *
  657. */
  658. const char *cam_cpas_axi_util_trans_type_to_string(
  659. uint32_t path_data_type);
  660. /**
  661. * cam_cpas_log_votes()
  662. *
  663. * @brief: API to print the all bw votes of axi client. It also print the
  664. * applied camnoc axi clock vote value and ahb vote value
  665. *
  666. * @return 0 on success.
  667. *
  668. */
  669. void cam_cpas_log_votes(void);
  670. /**
  671. * cam_cpas_select_qos_settings()
  672. *
  673. * @brief: API to select specific qos settings based on usecase requirements
  674. *
  675. * @return 0 on success.
  676. *
  677. */
  678. int cam_cpas_select_qos_settings(uint32_t selection_mask);
  679. /**
  680. * cam_cpas_notify_event()
  681. *
  682. * @brief: API that clients can notify about their events. CPAS save the event
  683. * and any other useful information related to this event. This will
  684. * be printed while cpas state dump - cam_cpas_log_votes.
  685. * One such example is IFE notifiying SOF or EPOCH to cpas and cpas
  686. * saving axi clock information (camnoc_axi, mnoc_hf) at that point
  687. * and printing latest history on IFE overflow.
  688. *
  689. * @identifier_string: Identifier string passed by caller
  690. * @identifier_value: Identifier value passed by caller
  691. *
  692. * @return 0 on success.
  693. *
  694. */
  695. int cam_cpas_notify_event(const char *identifier_string,
  696. int32_t identifier_value);
  697. /**
  698. * cam_cpas_get_scid()
  699. *
  700. * @brief: API to obtain slice id for the given type
  701. *
  702. * @type: Cache type
  703. *
  704. * @return slice id, -1 for invalid id.
  705. *
  706. */
  707. int cam_cpas_get_scid(enum cam_sys_cache_config_types type);
  708. /**
  709. * cam_cpas_activate_llcc()
  710. *
  711. * @brief: API to activate system cache
  712. *
  713. * @type: Cache type
  714. *
  715. * @return 0 for success.
  716. *
  717. */
  718. int cam_cpas_activate_llcc(enum cam_sys_cache_config_types type);
  719. /**
  720. * cam_cpas_deactivate_llcc()
  721. *
  722. * @brief: API to de-activate system cache
  723. *
  724. * @type: Cache type
  725. *
  726. * @return 0 for success.
  727. *
  728. */
  729. int cam_cpas_deactivate_llcc(enum cam_sys_cache_config_types type);
  730. /**
  731. * cam_cpas_dump_camnoc_buff_fill_info()
  732. *
  733. * @brief: API to dump camnoc buffer fill level info
  734. *
  735. * @client_handle : Client cpas handle
  736. *
  737. * @return 0 on success
  738. *
  739. */
  740. int cam_cpas_dump_camnoc_buff_fill_info(uint32_t client_handle);
  741. #endif /* _CAM_CPAS_API_H_ */