msm_drm_pp.h 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802
  1. /* SPDX-License-Identifier: GPL-2.0-only WITH Linux-syscall-note */
  2. /*
  3. * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
  4. * Copyright (c) 2017-2021, The Linux Foundation. All rights reserved.
  5. */
  6. #ifndef _MSM_DRM_PP_H_
  7. #define _MSM_DRM_PP_H_
  8. #include <linux/types.h>
  9. #include <drm/drm.h>
  10. #define ENABLE_EVENT_SPR_OPR_VALUE
  11. #define ENABLE_EVENT_INTF_MISR_SIGNATURE
  12. #define MAX_DSI_DISPLAY 4
  13. /**
  14. * struct drm_msm_pcc_coeff - PCC coefficient structure for each color
  15. * component.
  16. * @c: constant coefficient.
  17. * @r: red coefficient.
  18. * @g: green coefficient.
  19. * @b: blue coefficient.
  20. * @rg: red green coefficient.
  21. * @gb: green blue coefficient.
  22. * @rb: red blue coefficient.
  23. * @rgb: red blue green coefficient.
  24. */
  25. struct drm_msm_pcc_coeff {
  26. __u32 c;
  27. __u32 r;
  28. __u32 g;
  29. __u32 b;
  30. __u32 rg;
  31. __u32 gb;
  32. __u32 rb;
  33. __u32 rgb;
  34. };
  35. #define PCC_BEFORE (1 << 0)
  36. /**
  37. * struct drm_msm_pcc - pcc feature structure
  38. * @flags: for customizing operations. Values can be
  39. * - PCC_BEFORE: Operate PCC using a 'before' arrangement
  40. * @r: red coefficients.
  41. * @g: green coefficients.
  42. * @b: blue coefficients.
  43. * @r_rr: second order coefficients
  44. * @r_gg: second order coefficients
  45. * @r_bb: second order coefficients
  46. * @g_rr: second order coefficients
  47. * @g_gg: second order coefficients
  48. * @g_bb: second order coefficients
  49. * @b_rr: second order coefficients
  50. * @b_gg: second order coefficients
  51. * @b_bb: second order coefficients
  52. */
  53. #define DRM_MSM_PCC3
  54. struct drm_msm_pcc {
  55. __u64 flags;
  56. struct drm_msm_pcc_coeff r;
  57. struct drm_msm_pcc_coeff g;
  58. struct drm_msm_pcc_coeff b;
  59. __u32 r_rr;
  60. __u32 r_gg;
  61. __u32 r_bb;
  62. __u32 g_rr;
  63. __u32 g_gg;
  64. __u32 g_bb;
  65. __u32 b_rr;
  66. __u32 b_gg;
  67. __u32 b_bb;
  68. };
  69. /* struct drm_msm_pa_vlut - picture adjustment vLUT structure
  70. * flags: for customizing vlut operation
  71. * val: vLUT values
  72. */
  73. #define PA_VLUT_SIZE 256
  74. struct drm_msm_pa_vlut {
  75. __u64 flags;
  76. __u32 val[PA_VLUT_SIZE];
  77. };
  78. #define PA_HSIC_HUE_ENABLE (1 << 0)
  79. #define PA_HSIC_SAT_ENABLE (1 << 1)
  80. #define PA_HSIC_VAL_ENABLE (1 << 2)
  81. #define PA_HSIC_CONT_ENABLE (1 << 3)
  82. /**
  83. * struct drm_msm_pa_hsic - pa hsic feature structure
  84. * @flags: flags for the feature customization, values can be:
  85. * - PA_HSIC_HUE_ENABLE: Enable hue adjustment
  86. * - PA_HSIC_SAT_ENABLE: Enable saturation adjustment
  87. * - PA_HSIC_VAL_ENABLE: Enable value adjustment
  88. * - PA_HSIC_CONT_ENABLE: Enable contrast adjustment
  89. *
  90. * @hue: hue setting
  91. * @saturation: saturation setting
  92. * @value: value setting
  93. * @contrast: contrast setting
  94. */
  95. #define DRM_MSM_PA_HSIC
  96. struct drm_msm_pa_hsic {
  97. __u64 flags;
  98. __u32 hue;
  99. __u32 saturation;
  100. __u32 value;
  101. __u32 contrast;
  102. };
  103. #define MEMCOL_PROT_HUE (1 << 0)
  104. #define MEMCOL_PROT_SAT (1 << 1)
  105. #define MEMCOL_PROT_VAL (1 << 2)
  106. #define MEMCOL_PROT_CONT (1 << 3)
  107. #define MEMCOL_PROT_SIXZONE (1 << 4)
  108. #define MEMCOL_PROT_BLEND (1 << 5)
  109. /* struct drm_msm_memcol - Memory color feature structure.
  110. * Skin, sky, foliage features are supported.
  111. * @prot_flags: Bit mask for enabling protection feature.
  112. * @color_adjust_p0: Adjustment curve.
  113. * @color_adjust_p1: Adjustment curve.
  114. * @color_adjust_p2: Adjustment curve.
  115. * @blend_gain: Blend gain weightage from othe PA features.
  116. * @sat_hold: Saturation hold value.
  117. * @val_hold: Value hold info.
  118. * @hue_region: Hue qualifier.
  119. * @sat_region: Saturation qualifier.
  120. * @val_region: Value qualifier.
  121. */
  122. #define DRM_MSM_MEMCOL
  123. struct drm_msm_memcol {
  124. __u64 prot_flags;
  125. __u32 color_adjust_p0;
  126. __u32 color_adjust_p1;
  127. __u32 color_adjust_p2;
  128. __u32 blend_gain;
  129. __u32 sat_hold;
  130. __u32 val_hold;
  131. __u32 hue_region;
  132. __u32 sat_region;
  133. __u32 val_region;
  134. };
  135. #define DRM_MSM_SIXZONE
  136. #define SIXZONE_LUT_SIZE 384
  137. #define SIXZONE_HUE_ENABLE (1 << 0)
  138. #define SIXZONE_SAT_ENABLE (1 << 1)
  139. #define SIXZONE_VAL_ENABLE (1 << 2)
  140. #define SIXZONE_SV_ENABLE (1 << 3)
  141. /* struct drm_msm_sixzone_curve - Sixzone HSV adjustment curve structure.
  142. * @p0: Hue adjustment.
  143. * @p1: Saturation/Value adjustment.
  144. */
  145. struct drm_msm_sixzone_curve {
  146. __u32 p1;
  147. __u32 p0;
  148. };
  149. /* struct drm_msm_sixzone - Sixzone feature structure.
  150. * @flags: for feature customization, values can be:
  151. * - SIXZONE_HUE_ENABLE: Enable hue adjustment
  152. * - SIXZONE_SAT_ENABLE: Enable saturation adjustment
  153. * - SIXZONE_VAL_ENABLE: Enable value adjustment
  154. * - SIXZONE_SV_ENABLE: Enable SV feature
  155. * @threshold: threshold qualifier.
  156. * @adjust_p0: Adjustment curve.
  157. * @adjust_p1: Adjustment curve.
  158. * @sat_hold: Saturation hold info.
  159. * @val_hold: Value hold info.
  160. * @curve: HSV adjustment curve lut.
  161. * @sat_adjust_p0: Saturation adjustment curve.
  162. * @sat_adjust_p1: Saturation adjustment curve.
  163. * @curve_p2: Saturation Mid/Saturation High adjustment
  164. */
  165. struct drm_msm_sixzone {
  166. __u64 flags;
  167. __u32 threshold;
  168. __u32 adjust_p0;
  169. __u32 adjust_p1;
  170. __u32 sat_hold;
  171. __u32 val_hold;
  172. struct drm_msm_sixzone_curve curve[SIXZONE_LUT_SIZE];
  173. __u32 sat_adjust_p0;
  174. __u32 sat_adjust_p1;
  175. __u32 curve_p2[SIXZONE_LUT_SIZE];
  176. };
  177. #define GAMUT_3D_MODE_17 1
  178. #define GAMUT_3D_MODE_5 2
  179. #define GAMUT_3D_MODE_13 3
  180. #define GAMUT_3D_MODE17_TBL_SZ 1229
  181. #define GAMUT_3D_MODE5_TBL_SZ 32
  182. #define GAMUT_3D_MODE13_TBL_SZ 550
  183. #define GAMUT_3D_SCALE_OFF_SZ 16
  184. #define GAMUT_3D_SCALEB_OFF_SZ 12
  185. #define GAMUT_3D_TBL_NUM 4
  186. #define GAMUT_3D_SCALE_OFF_TBL_NUM 3
  187. #define GAMUT_3D_MAP_EN (1 << 0)
  188. /**
  189. * struct drm_msm_3d_col - 3d gamut color component structure
  190. * @c0: Holds c0 value
  191. * @c2_c1: Holds c2/c1 values
  192. */
  193. struct drm_msm_3d_col {
  194. __u32 c2_c1;
  195. __u32 c0;
  196. };
  197. /**
  198. * struct drm_msm_3d_gamut - 3d gamut feature structure
  199. * @flags: flags for the feature values are:
  200. * 0 - no map
  201. * GAMUT_3D_MAP_EN - enable map
  202. * @mode: lut mode can take following values:
  203. * - GAMUT_3D_MODE_17
  204. * - GAMUT_3D_MODE_5
  205. * - GAMUT_3D_MODE_13
  206. * @scale_off: Scale offset table
  207. * @col: Color component tables
  208. */
  209. struct drm_msm_3d_gamut {
  210. __u64 flags;
  211. __u32 mode;
  212. __u32 scale_off[GAMUT_3D_SCALE_OFF_TBL_NUM][GAMUT_3D_SCALE_OFF_SZ];
  213. struct drm_msm_3d_col col[GAMUT_3D_TBL_NUM][GAMUT_3D_MODE17_TBL_SZ];
  214. };
  215. #define PGC_TBL_LEN 512
  216. #define PGC_8B_ROUND (1 << 0)
  217. /**
  218. * struct drm_msm_pgc_lut - pgc lut feature structure
  219. * @flags: flags for the featue values can be:
  220. * - PGC_8B_ROUND
  221. * @c0: color0 component lut
  222. * @c1: color1 component lut
  223. * @c2: color2 component lut
  224. */
  225. struct drm_msm_pgc_lut {
  226. __u64 flags;
  227. __u32 c0[PGC_TBL_LEN];
  228. __u32 c1[PGC_TBL_LEN];
  229. __u32 c2[PGC_TBL_LEN];
  230. };
  231. #define IGC_TBL_LEN 256
  232. #define IGC_DITHER_ENABLE (1 << 0)
  233. /**
  234. * struct drm_msm_igc_lut - igc lut feature structure
  235. * @flags: flags for the feature customization, values can be:
  236. * - IGC_DITHER_ENABLE: Enable dither functionality
  237. * @c0: color0 component lut
  238. * @c1: color1 component lut
  239. * @c2: color2 component lut
  240. * @strength: dither strength, considered valid when IGC_DITHER_ENABLE
  241. * is set in flags. Strength value based on source bit width.
  242. * @c0_last: color0 lut_last component
  243. * @c1_last: color1 lut_last component
  244. * @c2_last: color2 lut_last component
  245. */
  246. struct drm_msm_igc_lut {
  247. __u64 flags;
  248. __u32 c0[IGC_TBL_LEN];
  249. __u32 c1[IGC_TBL_LEN];
  250. __u32 c2[IGC_TBL_LEN];
  251. __u32 strength;
  252. __u32 c0_last;
  253. __u32 c1_last;
  254. __u32 c2_last;
  255. };
  256. #define LAST_LUT 2
  257. #define HIST_V_SIZE 256
  258. /**
  259. * struct drm_msm_hist - histogram feature structure
  260. * @flags: for customizing operations
  261. * @data: histogram data
  262. */
  263. struct drm_msm_hist {
  264. __u64 flags;
  265. __u32 data[HIST_V_SIZE];
  266. };
  267. #define AD4_LUT_GRP0_SIZE 33
  268. #define AD4_LUT_GRP1_SIZE 32
  269. /*
  270. * struct drm_msm_ad4_init - ad4 init structure set by user-space client.
  271. * Init param values can change based on tuning
  272. * hence it is passed by user-space clients.
  273. */
  274. struct drm_msm_ad4_init {
  275. __u32 init_param_001[AD4_LUT_GRP0_SIZE];
  276. __u32 init_param_002[AD4_LUT_GRP0_SIZE];
  277. __u32 init_param_003[AD4_LUT_GRP0_SIZE];
  278. __u32 init_param_004[AD4_LUT_GRP0_SIZE];
  279. __u32 init_param_005[AD4_LUT_GRP1_SIZE];
  280. __u32 init_param_006[AD4_LUT_GRP1_SIZE];
  281. __u32 init_param_007[AD4_LUT_GRP0_SIZE];
  282. __u32 init_param_008[AD4_LUT_GRP0_SIZE];
  283. __u32 init_param_009;
  284. __u32 init_param_010;
  285. __u32 init_param_011;
  286. __u32 init_param_012;
  287. __u32 init_param_013;
  288. __u32 init_param_014;
  289. __u32 init_param_015;
  290. __u32 init_param_016;
  291. __u32 init_param_017;
  292. __u32 init_param_018;
  293. __u32 init_param_019;
  294. __u32 init_param_020;
  295. __u32 init_param_021;
  296. __u32 init_param_022;
  297. __u32 init_param_023;
  298. __u32 init_param_024;
  299. __u32 init_param_025;
  300. __u32 init_param_026;
  301. __u32 init_param_027;
  302. __u32 init_param_028;
  303. __u32 init_param_029;
  304. __u32 init_param_030;
  305. __u32 init_param_031;
  306. __u32 init_param_032;
  307. __u32 init_param_033;
  308. __u32 init_param_034;
  309. __u32 init_param_035;
  310. __u32 init_param_036;
  311. __u32 init_param_037;
  312. __u32 init_param_038;
  313. __u32 init_param_039;
  314. __u32 init_param_040;
  315. __u32 init_param_041;
  316. __u32 init_param_042;
  317. __u32 init_param_043;
  318. __u32 init_param_044;
  319. __u32 init_param_045;
  320. __u32 init_param_046;
  321. __u32 init_param_047;
  322. __u32 init_param_048;
  323. __u32 init_param_049;
  324. __u32 init_param_050;
  325. __u32 init_param_051;
  326. __u32 init_param_052;
  327. __u32 init_param_053;
  328. __u32 init_param_054;
  329. __u32 init_param_055;
  330. __u32 init_param_056;
  331. __u32 init_param_057;
  332. __u32 init_param_058;
  333. __u32 init_param_059;
  334. __u32 init_param_060;
  335. __u32 init_param_061;
  336. __u32 init_param_062;
  337. __u32 init_param_063;
  338. __u32 init_param_064;
  339. __u32 init_param_065;
  340. __u32 init_param_066;
  341. __u32 init_param_067;
  342. __u32 init_param_068;
  343. __u32 init_param_069;
  344. __u32 init_param_070;
  345. __u32 init_param_071;
  346. __u32 init_param_072;
  347. __u32 init_param_073;
  348. __u32 init_param_074;
  349. __u32 init_param_075;
  350. };
  351. /*
  352. * struct drm_msm_ad4_cfg - ad4 config structure set by user-space client.
  353. * Config param values can vary based on tuning,
  354. * hence it is passed by user-space clients.
  355. */
  356. struct drm_msm_ad4_cfg {
  357. __u32 cfg_param_001;
  358. __u32 cfg_param_002;
  359. __u32 cfg_param_003;
  360. __u32 cfg_param_004;
  361. __u32 cfg_param_005;
  362. __u32 cfg_param_006;
  363. __u32 cfg_param_007;
  364. __u32 cfg_param_008;
  365. __u32 cfg_param_009;
  366. __u32 cfg_param_010;
  367. __u32 cfg_param_011;
  368. __u32 cfg_param_012;
  369. __u32 cfg_param_013;
  370. __u32 cfg_param_014;
  371. __u32 cfg_param_015;
  372. __u32 cfg_param_016;
  373. __u32 cfg_param_017;
  374. __u32 cfg_param_018;
  375. __u32 cfg_param_019;
  376. __u32 cfg_param_020;
  377. __u32 cfg_param_021;
  378. __u32 cfg_param_022;
  379. __u32 cfg_param_023;
  380. __u32 cfg_param_024;
  381. __u32 cfg_param_025;
  382. __u32 cfg_param_026;
  383. __u32 cfg_param_027;
  384. __u32 cfg_param_028;
  385. __u32 cfg_param_029;
  386. __u32 cfg_param_030;
  387. __u32 cfg_param_031;
  388. __u32 cfg_param_032;
  389. __u32 cfg_param_033;
  390. __u32 cfg_param_034;
  391. __u32 cfg_param_035;
  392. __u32 cfg_param_036;
  393. __u32 cfg_param_037;
  394. __u32 cfg_param_038;
  395. __u32 cfg_param_039;
  396. __u32 cfg_param_040;
  397. __u32 cfg_param_041;
  398. __u32 cfg_param_042;
  399. __u32 cfg_param_043;
  400. __u32 cfg_param_044;
  401. __u32 cfg_param_045;
  402. __u32 cfg_param_046;
  403. __u32 cfg_param_047;
  404. __u32 cfg_param_048;
  405. __u32 cfg_param_049;
  406. __u32 cfg_param_050;
  407. __u32 cfg_param_051;
  408. __u32 cfg_param_052;
  409. __u32 cfg_param_053;
  410. };
  411. #define DITHER_MATRIX_SZ 16
  412. #define DITHER_LUMA_MODE (1 << 0)
  413. /**
  414. * struct drm_msm_dither - dither feature structure
  415. * @flags: flags for the feature customization, values can be:
  416. -DITHER_LUMA_MODE: Enable LUMA dither mode
  417. * @temporal_en: temperal dither enable
  418. * @c0_bitdepth: c0 component bit depth
  419. * @c1_bitdepth: c1 component bit depth
  420. * @c2_bitdepth: c2 component bit depth
  421. * @c3_bitdepth: c2 component bit depth
  422. * @matrix: dither strength matrix
  423. */
  424. struct drm_msm_dither {
  425. __u64 flags;
  426. __u32 temporal_en;
  427. __u32 c0_bitdepth;
  428. __u32 c1_bitdepth;
  429. __u32 c2_bitdepth;
  430. __u32 c3_bitdepth;
  431. __u32 matrix[DITHER_MATRIX_SZ];
  432. };
  433. /**
  434. * struct drm_msm_pa_dither - dspp dither feature structure
  435. * @flags: for customizing operations
  436. * @strength: dither strength
  437. * @offset_en: offset enable bit
  438. * @matrix: dither data matrix
  439. */
  440. #define DRM_MSM_PA_DITHER
  441. struct drm_msm_pa_dither {
  442. __u64 flags;
  443. __u32 strength;
  444. __u32 offset_en;
  445. __u32 matrix[DITHER_MATRIX_SZ];
  446. };
  447. /**
  448. * struct drm_msm_ad4_roi_cfg - ad4 roi params config set
  449. * by user-space client.
  450. * @h_x - hotizontal direction start
  451. * @h_y - hotizontal direction end
  452. * @v_x - vertical direction start
  453. * @v_y - vertical direction end
  454. * @factor_in - the alpha value for inside roi region
  455. * @factor_out - the alpha value for outside roi region
  456. */
  457. #define DRM_MSM_AD4_ROI
  458. struct drm_msm_ad4_roi_cfg {
  459. __u32 h_x;
  460. __u32 h_y;
  461. __u32 v_x;
  462. __u32 v_y;
  463. __u32 factor_in;
  464. __u32 factor_out;
  465. };
  466. #define LTM_FEATURE_DEF 1
  467. #define LTM_DATA_SIZE_0 32
  468. #define LTM_DATA_SIZE_1 128
  469. #define LTM_DATA_SIZE_2 256
  470. #define LTM_DATA_SIZE_3 33
  471. #define LTM_BUFFER_SIZE 5
  472. #define LTM_GUARD_BYTES 255
  473. #define LTM_BLOCK_SIZE 4
  474. #define LTM_STATS_SAT (1 << 1)
  475. #define LTM_STATS_MERGE_SAT (1 << 2)
  476. #define LTM_HIST_CHECKSUM_SUPPORT (1 << 0)
  477. /*
  478. * struct drm_msm_ltm_stats_data - LTM stats data structure
  479. */
  480. struct drm_msm_ltm_stats_data {
  481. __u32 stats_01[LTM_DATA_SIZE_0][LTM_DATA_SIZE_1];
  482. __u32 stats_02[LTM_DATA_SIZE_2];
  483. __u32 stats_03[LTM_DATA_SIZE_0];
  484. __u32 stats_04[LTM_DATA_SIZE_0];
  485. __u32 stats_05[LTM_DATA_SIZE_0];
  486. __u32 status_flag;
  487. __u32 display_h;
  488. __u32 display_v;
  489. __u32 init_h[LTM_BLOCK_SIZE];
  490. __u32 init_v;
  491. __u32 inc_h;
  492. __u32 inc_v;
  493. __u32 portrait_en;
  494. __u32 merge_en;
  495. __u32 cfg_param_01;
  496. __u32 cfg_param_02;
  497. __u32 cfg_param_03;
  498. __u32 cfg_param_04;
  499. __u32 feature_flag;
  500. __u32 checksum;
  501. };
  502. /*
  503. * struct drm_msm_ltm_init_param - LTM init param structure
  504. */
  505. struct drm_msm_ltm_init_param {
  506. __u32 init_param_01;
  507. __u32 init_param_02;
  508. __u32 init_param_03;
  509. __u32 init_param_04;
  510. };
  511. /*
  512. * struct drm_msm_ltm_cfg_param - LTM config param structure
  513. */
  514. struct drm_msm_ltm_cfg_param {
  515. __u32 cfg_param_01;
  516. __u32 cfg_param_02;
  517. __u32 cfg_param_03;
  518. __u32 cfg_param_04;
  519. __u32 cfg_param_05;
  520. __u32 cfg_param_06;
  521. };
  522. /*
  523. * struct drm_msm_ltm_data - LTM data structure
  524. */
  525. struct drm_msm_ltm_data {
  526. __u32 data[LTM_DATA_SIZE_0][LTM_DATA_SIZE_3];
  527. };
  528. /*
  529. * struct drm_msm_ltm_buffers_crtl - LTM buffer control structure.
  530. * This struct will be used to init and
  531. * de-init the LTM buffers in driver.
  532. * @num_of_buffers: valid number of buffers used
  533. * @fds: fd array to for all the valid buffers
  534. */
  535. struct drm_msm_ltm_buffers_ctrl {
  536. __u32 num_of_buffers;
  537. __u32 fds[LTM_BUFFER_SIZE];
  538. };
  539. /*
  540. * struct drm_msm_ltm_buffer - LTM buffer structure.
  541. * This struct will be passed from driver to user
  542. * space for LTM stats data notification.
  543. * @fd: fd assicated with the buffer that has LTM stats data
  544. * @offset: offset from base address that used for alignment
  545. * @status status flag for error indication
  546. */
  547. struct drm_msm_ltm_buffer {
  548. __u32 fd;
  549. __u32 offset;
  550. __u32 status;
  551. };
  552. #define SPR_INIT_PARAM_SIZE_1 4
  553. #define SPR_INIT_PARAM_SIZE_2 5
  554. #define SPR_INIT_PARAM_SIZE_3 16
  555. #define SPR_INIT_PARAM_SIZE_4 24
  556. #define SPR_INIT_PARAM_SIZE_5 32
  557. #define SPR_INIT_PARAM_SIZE_6 7
  558. #define SPR_FLAG_BYPASS (1 << 0)
  559. /**
  560. * struct drm_msm_spr_init_cfg - SPR initial configuration structure
  561. */
  562. struct drm_msm_spr_init_cfg {
  563. __u64 flags;
  564. __u16 cfg0;
  565. __u16 cfg1;
  566. __u16 cfg2;
  567. __u16 cfg3;
  568. __u16 cfg4;
  569. __u16 cfg5;
  570. __u16 cfg6;
  571. __u16 cfg7;
  572. __u16 cfg8;
  573. __u16 cfg9;
  574. __u32 cfg10;
  575. __u16 cfg11[SPR_INIT_PARAM_SIZE_1];
  576. __u16 cfg12[SPR_INIT_PARAM_SIZE_1];
  577. __u16 cfg13[SPR_INIT_PARAM_SIZE_1];
  578. __u16 cfg14[SPR_INIT_PARAM_SIZE_2];
  579. __u16 cfg15[SPR_INIT_PARAM_SIZE_5];
  580. int cfg16[SPR_INIT_PARAM_SIZE_3];
  581. int cfg17[SPR_INIT_PARAM_SIZE_4];
  582. __u16 cfg18_en;
  583. __u8 cfg18[SPR_INIT_PARAM_SIZE_6];
  584. };
  585. /**
  586. * struct drm_msm_spr_udc_cfg - SPR UDC configuration structure
  587. */
  588. #define SPR_UDC_PARAM_SIZE_1 27
  589. #define SPR_UDC_PARAM_SIZE_2 1536
  590. struct drm_msm_spr_udc_cfg {
  591. __u64 flags;
  592. __u16 init_cfg4;
  593. __u16 init_cfg11[SPR_INIT_PARAM_SIZE_1];
  594. __u16 cfg1[SPR_UDC_PARAM_SIZE_1];
  595. __u16 cfg2[SPR_UDC_PARAM_SIZE_2];
  596. };
  597. #define FEATURE_DEM
  598. #define CFG0_PARAM_LEN 8
  599. #define CFG1_PARAM_LEN 8
  600. #define CFG1_PARAM0_LEN 153
  601. #define CFG0_PARAM2_LEN 256
  602. #define CFG5_PARAM01_LEN 4
  603. #define CFG3_PARAM01_LEN 4
  604. struct drm_msm_dem_cfg {
  605. __u64 flags;
  606. __u32 pentile;
  607. __u32 cfg0_en;
  608. __u32 cfg0_param0_len;
  609. __u32 cfg0_param0[CFG0_PARAM_LEN];
  610. __u32 cfg0_param1_len;
  611. __u32 cfg0_param1[CFG0_PARAM_LEN];
  612. __u32 cfg0_param2_len;
  613. __u64 cfg0_param2_c0[CFG0_PARAM2_LEN];
  614. __u64 cfg0_param2_c1[CFG0_PARAM2_LEN];
  615. __u64 cfg0_param2_c2[CFG0_PARAM2_LEN];
  616. __u32 cfg0_param3_len;
  617. __u32 cfg0_param3_c0[CFG0_PARAM_LEN];
  618. __u32 cfg0_param3_c1[CFG0_PARAM_LEN];
  619. __u32 cfg0_param3_c2[CFG0_PARAM_LEN];
  620. __u32 cfg0_param4_len;
  621. __u32 cfg0_param4[CFG0_PARAM_LEN];
  622. __u32 cfg1_en;
  623. __u32 cfg1_high_idx;
  624. __u32 cfg1_low_idx;
  625. __u32 cfg01_param0_len;
  626. __u32 cfg01_param0[CFG1_PARAM_LEN];
  627. __u32 cfg1_param0_len;
  628. __u32 cfg1_param0_c0[CFG1_PARAM0_LEN];
  629. __u32 cfg1_param0_c1[CFG1_PARAM0_LEN];
  630. __u32 cfg1_param0_c2[CFG1_PARAM0_LEN];
  631. __u32 cfg2_en;
  632. __u32 cfg3_en;
  633. __u32 cfg3_param0_len;
  634. __u32 cfg3_param0_a[CFG3_PARAM01_LEN];
  635. __u32 cfg3_param0_b[CFG3_PARAM01_LEN];
  636. __u32 cfg3_ab_adj;
  637. __u32 cfg4_en;
  638. __u32 cfg5_en;
  639. __u32 cfg5_param0_len;
  640. __u32 cfg5_param0[CFG5_PARAM01_LEN];
  641. __u32 cfg5_param1_len;
  642. __u32 cfg5_param1[CFG5_PARAM01_LEN];
  643. __u32 c0_depth;
  644. __u32 c1_depth;
  645. __u32 c2_depth;
  646. __u32 src_id;
  647. };
  648. /**
  649. * struct drm_msm_ad4_manual_str_cfg - ad4 manual strength config set
  650. * by user-space client.
  651. * @in_str - strength for inside roi region
  652. * @out_str - strength for outside roi region
  653. */
  654. #define DRM_MSM_AD4_MANUAL_STRENGTH
  655. struct drm_msm_ad4_manual_str_cfg {
  656. __u32 in_str;
  657. __u32 out_str;
  658. };
  659. #define RC_DATA_SIZE_MAX 2720
  660. #define RC_CFG_SIZE_MAX 4
  661. struct drm_msm_rc_mask_cfg {
  662. __u64 flags;
  663. __u32 cfg_param_01;
  664. __u32 cfg_param_02;
  665. __u32 cfg_param_03;
  666. __u32 cfg_param_04[RC_CFG_SIZE_MAX];
  667. __u32 cfg_param_05[RC_CFG_SIZE_MAX];
  668. __u32 cfg_param_06[RC_CFG_SIZE_MAX];
  669. __u64 cfg_param_07;
  670. __u32 cfg_param_08;
  671. __u64 cfg_param_09[RC_DATA_SIZE_MAX];
  672. __u32 height;
  673. __u32 width;
  674. };
  675. #define FP16_SUPPORTED
  676. #define FP16_GC_FLAG_ALPHA_EN (1 << 0)
  677. /* FP16 GC mode options */
  678. #define FP16_GC_MODE_INVALID 0
  679. #define FP16_GC_MODE_SRGB 1
  680. #define FP16_GC_MODE_PQ 2
  681. /**
  682. * struct drm_msm_fp16_gc - FP16 GC configuration structure
  683. * @in flags - Settings flags for FP16 GC
  684. * @in mode - Gamma correction mode to use for FP16 GC
  685. */
  686. struct drm_msm_fp16_gc {
  687. __u64 flags;
  688. __u64 mode;
  689. };
  690. /**
  691. * struct drm_msm_fp16_csc - FP16 CSC configuration structure
  692. * @in flags - Settings flags for FP16 CSC. Currently unused
  693. * @in cfg_param_0_len - Length of data for cfg_param_0
  694. * @in cfg_param_0 - Data for param 0. Max size is FP16_CSC_CFG0_PARAM_LEN
  695. * @in cfg_param_1_len - Length of data for cfg_param_1
  696. * @in cfg_param_1 - Data for param 1. Max size is FP16_CSC_CFG1_PARAM_LEN
  697. */
  698. #define FP16_CSC_CFG0_PARAM_LEN 12
  699. #define FP16_CSC_CFG1_PARAM_LEN 8
  700. struct drm_msm_fp16_csc {
  701. __u64 flags;
  702. __u32 cfg_param_0_len;
  703. __u32 cfg_param_0[FP16_CSC_CFG0_PARAM_LEN];
  704. __u32 cfg_param_1_len;
  705. __u32 cfg_param_1[FP16_CSC_CFG1_PARAM_LEN];
  706. };
  707. #define DIMMING_ENABLE (1 << 0)
  708. #define DIMMING_MIN_BL_VALID (1 << 1)
  709. struct drm_msm_backlight_info {
  710. __u32 brightness_max;
  711. __u32 brightness;
  712. __u32 bl_level_max;
  713. __u32 bl_level;
  714. __u32 bl_scale;
  715. __u32 bl_scale_sv;
  716. __u32 status;
  717. __u32 min_bl;
  718. __u32 bl_scale_max;
  719. __u32 bl_scale_sv_max;
  720. };
  721. #define DIMMING_BL_LUT_LEN 8192
  722. struct drm_msm_dimming_bl_lut {
  723. __u32 length;
  724. __u32 mapped_bl[DIMMING_BL_LUT_LEN];
  725. };
  726. struct drm_msm_opr_value {
  727. __u32 num_valid_opr;
  728. __u32 opr_value[MAX_DSI_DISPLAY];
  729. };
  730. #define SDE_MAX_ROI 4
  731. struct drm_msm_roi {
  732. __u32 num_rects;
  733. struct drm_clip_rect roi[SDE_MAX_ROI];
  734. };
  735. struct drm_msm_misr_sign {
  736. __u64 num_valid_misr;
  737. struct drm_msm_roi roi_list;
  738. __u64 misr_sign_value[MAX_DSI_DISPLAY];
  739. };
  740. #define UCSC_SUPPORTED
  741. #define UCSC_CSC_CFG0_PARAM_LEN FP16_CSC_CFG0_PARAM_LEN
  742. #define UCSC_CSC_CFG1_PARAM_LEN FP16_CSC_CFG1_PARAM_LEN
  743. typedef struct drm_msm_fp16_csc drm_msm_ucsc_csc;
  744. #endif /* _MSM_DRM_PP_H_ */