sde_rotator_formats.h 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. /* SPDX-License-Identifier: GPL-2.0-only */
  2. /*
  3. * Copyright (c) 2012, 2015-2019, The Linux Foundation. All rights reserved.
  4. */
  5. #ifndef SDE_ROTATOR_FORMATS_H
  6. #define SDE_ROTATOR_FORMATS_H
  7. #include <linux/types.h>
  8. #include <media/msm_sde_rotator.h>
  9. /* Internal rotator pixel formats */
  10. #define SDE_PIX_FMT_RGBA_8888_TILE v4l2_fourcc('Q', 'T', '0', '0')
  11. #define SDE_PIX_FMT_RGBX_8888_TILE v4l2_fourcc('Q', 'T', '0', '1')
  12. #define SDE_PIX_FMT_BGRA_8888_TILE v4l2_fourcc('Q', 'T', '0', '2')
  13. #define SDE_PIX_FMT_BGRX_8888_TILE v4l2_fourcc('Q', 'T', '0', '3')
  14. #define SDE_PIX_FMT_ARGB_8888_TILE v4l2_fourcc('Q', 'T', '0', '4')
  15. #define SDE_PIX_FMT_XRGB_8888_TILE v4l2_fourcc('Q', 'T', '0', '5')
  16. #define SDE_PIX_FMT_ABGR_8888_TILE v4l2_fourcc('Q', 'T', '0', '6')
  17. #define SDE_PIX_FMT_XBGR_8888_TILE v4l2_fourcc('Q', 'T', '0', '7')
  18. #define SDE_PIX_FMT_Y_CBCR_H2V2_TILE v4l2_fourcc('Q', 'T', '0', '8')
  19. #define SDE_PIX_FMT_Y_CRCB_H2V2_TILE v4l2_fourcc('Q', 'T', '0', '9')
  20. #define SDE_PIX_FMT_ARGB_2101010_TILE v4l2_fourcc('Q', 'T', '0', 'A')
  21. #define SDE_PIX_FMT_XRGB_2101010_TILE v4l2_fourcc('Q', 'T', '0', 'B')
  22. #define SDE_PIX_FMT_ABGR_2101010_TILE v4l2_fourcc('Q', 'T', '0', 'C')
  23. #define SDE_PIX_FMT_XBGR_2101010_TILE v4l2_fourcc('Q', 'T', '0', 'D')
  24. #define SDE_PIX_FMT_BGRA_1010102_TILE v4l2_fourcc('Q', 'T', '0', 'E')
  25. #define SDE_PIX_FMT_BGRX_1010102_TILE v4l2_fourcc('Q', 'T', '0', 'F')
  26. #define SDE_PIX_FMT_RGBA_1010102_TILE v4l2_fourcc('Q', 'T', '1', '0')
  27. #define SDE_PIX_FMT_RGBX_1010102_TILE v4l2_fourcc('Q', 'T', '1', '1')
  28. #define SDE_PIX_FMT_Y_CBCR_H2V2_P010_TILE v4l2_fourcc('Q', 'T', '1', '2')
  29. #define SDE_PIX_FMT_RGB_565_TILE v4l2_fourcc('Q', 'T', '1', '3')
  30. #define SDE_ROT_MAX_PLANES 4
  31. #define UBWC_META_MACRO_W_H 16
  32. #define UBWC_META_BLOCK_SIZE 256
  33. /*
  34. * Value of enum chosen to fit the number of bits
  35. * expected by the HW programming.
  36. */
  37. enum {
  38. SDE_COLOR_4BIT,
  39. SDE_COLOR_5BIT,
  40. SDE_COLOR_6BIT,
  41. SDE_COLOR_8BIT,
  42. SDE_COLOR_ALPHA_1BIT = 0,
  43. SDE_COLOR_ALPHA_4BIT = 1,
  44. };
  45. #define C3_ALPHA 3 /* alpha */
  46. #define C2_R_Cr 2 /* R/Cr */
  47. #define C1_B_Cb 1 /* B/Cb */
  48. #define C0_G_Y 0 /* G/luma */
  49. enum sde_mdp_compress_type {
  50. SDE_MDP_COMPRESS_NONE,
  51. SDE_MDP_COMPRESS_UBWC,
  52. };
  53. enum sde_mdp_frame_format_type {
  54. SDE_MDP_FMT_LINEAR,
  55. SDE_MDP_FMT_TILE_A4X,
  56. SDE_MDP_FMT_TILE_A5X,
  57. };
  58. enum sde_mdp_pixel_type {
  59. SDE_MDP_PIXEL_NORMAL,
  60. SDE_MDP_PIXEL_10BIT,
  61. };
  62. enum sde_mdp_sspp_fetch_type {
  63. SDE_MDP_PLANE_INTERLEAVED,
  64. SDE_MDP_PLANE_PLANAR,
  65. SDE_MDP_PLANE_PSEUDO_PLANAR,
  66. };
  67. enum sde_mdp_sspp_chroma_samp_type {
  68. SDE_MDP_CHROMA_RGB,
  69. SDE_MDP_CHROMA_H2V1,
  70. SDE_MDP_CHROMA_H1V2,
  71. SDE_MDP_CHROMA_420
  72. };
  73. enum sde_mdp_format_flag_type {
  74. SDE_MDP_FORMAT_FLAG_PRIVATE = BIT(0)
  75. };
  76. struct sde_mdp_format_params {
  77. u32 format;
  78. const char *description;
  79. u32 flag;
  80. u8 is_yuv;
  81. u8 is_ubwc;
  82. u8 frame_format;
  83. u8 chroma_sample;
  84. u8 solid_fill;
  85. u8 fetch_planes;
  86. u8 unpack_align_msb; /* 0 to LSB, 1 to MSB */
  87. u8 unpack_tight; /* 0 for loose, 1 for tight */
  88. u8 unpack_count; /* 0 = 1 component, 1 = 2 component ... */
  89. u8 bpp;
  90. u8 alpha_enable; /* source has alpha */
  91. u8 pixel_mode; /* 0: normal, 1:10bit */
  92. u8 bits[SDE_ROT_MAX_PLANES];
  93. u8 element[SDE_ROT_MAX_PLANES];
  94. };
  95. struct sde_mdp_format_ubwc_tile_info {
  96. u16 tile_height;
  97. u16 tile_width;
  98. };
  99. struct sde_mdp_format_params_ubwc {
  100. struct sde_mdp_format_params mdp_format;
  101. struct sde_mdp_format_ubwc_tile_info micro;
  102. };
  103. struct sde_mdp_format_params *sde_get_format_params(u32 format);
  104. int sde_rot_get_ubwc_micro_dim(u32 format, u16 *w, u16 *h);
  105. int sde_rot_get_base_tilea5x_pixfmt(u32 src_pixfmt, u32 *dst_pixfmt);
  106. static inline bool sde_mdp_is_tilea4x_format(struct sde_mdp_format_params *fmt)
  107. {
  108. return fmt && (fmt->frame_format == SDE_MDP_FMT_TILE_A4X);
  109. }
  110. static inline bool sde_mdp_is_tilea5x_format(struct sde_mdp_format_params *fmt)
  111. {
  112. return fmt && (fmt->frame_format == SDE_MDP_FMT_TILE_A5X);
  113. }
  114. static inline bool sde_mdp_is_ubwc_format(struct sde_mdp_format_params *fmt)
  115. {
  116. return fmt && (fmt->is_ubwc == SDE_MDP_COMPRESS_UBWC);
  117. }
  118. static inline bool sde_mdp_is_linear_format(struct sde_mdp_format_params *fmt)
  119. {
  120. return fmt && (fmt->frame_format == SDE_MDP_FMT_LINEAR);
  121. }
  122. static inline bool sde_mdp_is_nv12_format(struct sde_mdp_format_params *fmt)
  123. {
  124. return fmt && (fmt->fetch_planes == SDE_MDP_PLANE_PSEUDO_PLANAR) &&
  125. (fmt->chroma_sample == SDE_MDP_CHROMA_420);
  126. }
  127. static inline bool sde_mdp_is_nv12_8b_format(struct sde_mdp_format_params *fmt)
  128. {
  129. return fmt && sde_mdp_is_nv12_format(fmt) &&
  130. (fmt->pixel_mode == SDE_MDP_PIXEL_NORMAL);
  131. }
  132. static inline bool sde_mdp_is_nv12_10b_format(struct sde_mdp_format_params *fmt)
  133. {
  134. return fmt && sde_mdp_is_nv12_format(fmt) &&
  135. (fmt->pixel_mode == SDE_MDP_PIXEL_10BIT);
  136. }
  137. static inline bool sde_mdp_is_tp10_format(struct sde_mdp_format_params *fmt)
  138. {
  139. return fmt && sde_mdp_is_nv12_10b_format(fmt) &&
  140. fmt->unpack_tight;
  141. }
  142. static inline bool sde_mdp_is_p010_format(struct sde_mdp_format_params *fmt)
  143. {
  144. return fmt && sde_mdp_is_nv12_10b_format(fmt) &&
  145. !fmt->unpack_tight;
  146. }
  147. static inline bool sde_mdp_is_yuv_format(struct sde_mdp_format_params *fmt)
  148. {
  149. return fmt && fmt->is_yuv;
  150. }
  151. static inline bool sde_mdp_is_rgb_format(struct sde_mdp_format_params *fmt)
  152. {
  153. return !sde_mdp_is_yuv_format(fmt);
  154. }
  155. static inline bool sde_mdp_is_private_format(struct sde_mdp_format_params *fmt)
  156. {
  157. return fmt && (fmt->flag & SDE_MDP_FORMAT_FLAG_PRIVATE);
  158. }
  159. static inline int sde_mdp_format_blk_size(struct sde_mdp_format_params *fmt)
  160. {
  161. return sde_mdp_is_tp10_format(fmt) ? 96 : 128;
  162. }
  163. #endif