hpm_pdma_regs.h 39 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933
  1. /*
  2. * Copyright (c) 2021-2023 HPMicro
  3. *
  4. * SPDX-License-Identifier: BSD-3-Clause
  5. *
  6. */
  7. #ifndef HPM_PDMA_H
  8. #define HPM_PDMA_H
  9. typedef struct {
  10. __RW uint32_t CTRL; /* 0x0: Control Register */
  11. __RW uint32_t STAT; /* 0x4: Status Register */
  12. __RW uint32_t OUT_CTRL; /* 0x8: Out Layer Control Register */
  13. __RW uint32_t OUT_BUF; /* 0xC: Output buffer address */
  14. __R uint8_t RESERVED0[4]; /* 0x10 - 0x13: Reserved */
  15. __RW uint32_t OUT_PITCH; /* 0x14: Outlayer Pitch Register */
  16. __RW uint32_t OUT_LRC; /* 0x18: Output Lower Right Corner Register */
  17. struct {
  18. __RW uint32_t ULC; /* 0x1C: Layer Upper Left Corner Register */
  19. __RW uint32_t LRC; /* 0x20: Layer Lower Right Corner Register */
  20. } OUT_PS[2];
  21. __R uint8_t RESERVED1[4]; /* 0x2C - 0x2F: Reserved */
  22. struct {
  23. __RW uint32_t CTRL; /* 0x30: Layer Control Register */
  24. __RW uint32_t BUF; /* 0x34: Layer data buffer address */
  25. __R uint8_t RESERVED0[8]; /* 0x38 - 0x3F: Reserved */
  26. __RW uint32_t PITCH; /* 0x40: Layer data pitch register */
  27. __RW uint32_t BKGD; /* 0x44: Layer background color register */
  28. __RW uint32_t SCALE; /* 0x48: Layer scale register */
  29. __RW uint32_t OFFSET; /* 0x4C: Layer offset register */
  30. __RW uint32_t CLRKEY_LOW; /* 0x50: Layer low color key register */
  31. __RW uint32_t CLRKEY_HIGH; /* 0x54: Layer high color key register */
  32. __RW uint32_t ORG; /* 0x58: Layer original size register */
  33. __R uint8_t RESERVED1[4]; /* 0x5C - 0x5F: Reserved */
  34. } PS[2];
  35. __R uint8_t RESERVED2[16]; /* 0x90 - 0x9F: Reserved */
  36. __RW uint32_t YUV2RGB_COEF0; /* 0xA0: YUV2RGB coefficients register 0 */
  37. __RW uint32_t YUV2RGB_COEF1; /* 0xA4: YUV2RGB coefficients register 1 */
  38. __RW uint32_t YUV2RGB_COEF2; /* 0xA8: YUV2RGB coefficients register 2 */
  39. __RW uint32_t RGB2YUV_COEF0; /* 0xAC: RGB2YUV coefficients register 0 */
  40. __RW uint32_t RGB2YUV_COEF1; /* 0xB0: RGB2YUV coefficients register 1 */
  41. __RW uint32_t RGB2YUV_COEF2; /* 0xB4: RGB2YUV coefficients register 2 */
  42. __RW uint32_t RGB2YUV_COEF3; /* 0xB8: RGB2YUV coefficients register 3 */
  43. __RW uint32_t RGB2YUV_COEF4; /* 0xBC: RGB2YUV coefficients register 4 */
  44. } PDMA_Type;
  45. /* Bitfield definition for register: CTRL */
  46. /*
  47. * ARQOS (RW)
  48. *
  49. * QoS for AXI read bus
  50. */
  51. #define PDMA_CTRL_ARQOS_MASK (0x780000UL)
  52. #define PDMA_CTRL_ARQOS_SHIFT (19U)
  53. #define PDMA_CTRL_ARQOS_SET(x) (((uint32_t)(x) << PDMA_CTRL_ARQOS_SHIFT) & PDMA_CTRL_ARQOS_MASK)
  54. #define PDMA_CTRL_ARQOS_GET(x) (((uint32_t)(x) & PDMA_CTRL_ARQOS_MASK) >> PDMA_CTRL_ARQOS_SHIFT)
  55. /*
  56. * AWQOS (RW)
  57. *
  58. * QoS for AXI write bus
  59. */
  60. #define PDMA_CTRL_AWQOS_MASK (0x78000UL)
  61. #define PDMA_CTRL_AWQOS_SHIFT (15U)
  62. #define PDMA_CTRL_AWQOS_SET(x) (((uint32_t)(x) << PDMA_CTRL_AWQOS_SHIFT) & PDMA_CTRL_AWQOS_MASK)
  63. #define PDMA_CTRL_AWQOS_GET(x) (((uint32_t)(x) & PDMA_CTRL_AWQOS_MASK) >> PDMA_CTRL_AWQOS_SHIFT)
  64. /*
  65. * PACK_DIR (RW)
  66. *
  67. * Decide the byte sequence of the 32-bit output word {A3, A2, A1, A0}. The bit sequence ina byte is not changed.
  68. * 2'b00: no change {A3, A2, A1, A0}
  69. * 2'b01: {A2, A3, A0, A1}
  70. * 2'b10: {A1, A0, A3, A2}
  71. * 2'b11: {A0, A1, A2, A3}
  72. */
  73. #define PDMA_CTRL_PACK_DIR_MASK (0x6000U)
  74. #define PDMA_CTRL_PACK_DIR_SHIFT (13U)
  75. #define PDMA_CTRL_PACK_DIR_SET(x) (((uint32_t)(x) << PDMA_CTRL_PACK_DIR_SHIFT) & PDMA_CTRL_PACK_DIR_MASK)
  76. #define PDMA_CTRL_PACK_DIR_GET(x) (((uint32_t)(x) & PDMA_CTRL_PACK_DIR_MASK) >> PDMA_CTRL_PACK_DIR_SHIFT)
  77. /*
  78. * AXIERR_IRQ_EN (RW)
  79. *
  80. * Enable interrupt of AXI bus error
  81. */
  82. #define PDMA_CTRL_AXIERR_IRQ_EN_MASK (0x1000U)
  83. #define PDMA_CTRL_AXIERR_IRQ_EN_SHIFT (12U)
  84. #define PDMA_CTRL_AXIERR_IRQ_EN_SET(x) (((uint32_t)(x) << PDMA_CTRL_AXIERR_IRQ_EN_SHIFT) & PDMA_CTRL_AXIERR_IRQ_EN_MASK)
  85. #define PDMA_CTRL_AXIERR_IRQ_EN_GET(x) (((uint32_t)(x) & PDMA_CTRL_AXIERR_IRQ_EN_MASK) >> PDMA_CTRL_AXIERR_IRQ_EN_SHIFT)
  86. /*
  87. * PDMA_DONE_IRQ_EN (RW)
  88. *
  89. * Enable interrupt of PDMA_DONE
  90. */
  91. #define PDMA_CTRL_PDMA_DONE_IRQ_EN_MASK (0x800U)
  92. #define PDMA_CTRL_PDMA_DONE_IRQ_EN_SHIFT (11U)
  93. #define PDMA_CTRL_PDMA_DONE_IRQ_EN_SET(x) (((uint32_t)(x) << PDMA_CTRL_PDMA_DONE_IRQ_EN_SHIFT) & PDMA_CTRL_PDMA_DONE_IRQ_EN_MASK)
  94. #define PDMA_CTRL_PDMA_DONE_IRQ_EN_GET(x) (((uint32_t)(x) & PDMA_CTRL_PDMA_DONE_IRQ_EN_MASK) >> PDMA_CTRL_PDMA_DONE_IRQ_EN_SHIFT)
  95. /*
  96. * CLKGATE (RW)
  97. *
  98. * Assert this bit to gate off clock when the module is not working. If reset to zero, the internal clock is always on.
  99. */
  100. #define PDMA_CTRL_CLKGATE_MASK (0x200U)
  101. #define PDMA_CTRL_CLKGATE_SHIFT (9U)
  102. #define PDMA_CTRL_CLKGATE_SET(x) (((uint32_t)(x) << PDMA_CTRL_CLKGATE_SHIFT) & PDMA_CTRL_CLKGATE_MASK)
  103. #define PDMA_CTRL_CLKGATE_GET(x) (((uint32_t)(x) & PDMA_CTRL_CLKGATE_MASK) >> PDMA_CTRL_CLKGATE_SHIFT)
  104. /*
  105. * IRQ_EN (RW)
  106. *
  107. * Enable normal interrupt
  108. */
  109. #define PDMA_CTRL_IRQ_EN_MASK (0x40U)
  110. #define PDMA_CTRL_IRQ_EN_SHIFT (6U)
  111. #define PDMA_CTRL_IRQ_EN_SET(x) (((uint32_t)(x) << PDMA_CTRL_IRQ_EN_SHIFT) & PDMA_CTRL_IRQ_EN_MASK)
  112. #define PDMA_CTRL_IRQ_EN_GET(x) (((uint32_t)(x) & PDMA_CTRL_IRQ_EN_MASK) >> PDMA_CTRL_IRQ_EN_SHIFT)
  113. /*
  114. * BS16 (RW)
  115. *
  116. * Asserted when the Block Size is 16x16, else 8x8
  117. */
  118. #define PDMA_CTRL_BS16_MASK (0x20U)
  119. #define PDMA_CTRL_BS16_SHIFT (5U)
  120. #define PDMA_CTRL_BS16_SET(x) (((uint32_t)(x) << PDMA_CTRL_BS16_SHIFT) & PDMA_CTRL_BS16_MASK)
  121. #define PDMA_CTRL_BS16_GET(x) (((uint32_t)(x) & PDMA_CTRL_BS16_MASK) >> PDMA_CTRL_BS16_SHIFT)
  122. /*
  123. * P1_EN (RW)
  124. *
  125. * Plane 1 Enable
  126. */
  127. #define PDMA_CTRL_P1_EN_MASK (0x10U)
  128. #define PDMA_CTRL_P1_EN_SHIFT (4U)
  129. #define PDMA_CTRL_P1_EN_SET(x) (((uint32_t)(x) << PDMA_CTRL_P1_EN_SHIFT) & PDMA_CTRL_P1_EN_MASK)
  130. #define PDMA_CTRL_P1_EN_GET(x) (((uint32_t)(x) & PDMA_CTRL_P1_EN_MASK) >> PDMA_CTRL_P1_EN_SHIFT)
  131. /*
  132. * P0_EN (RW)
  133. *
  134. * Plane 0 Enable
  135. */
  136. #define PDMA_CTRL_P0_EN_MASK (0x8U)
  137. #define PDMA_CTRL_P0_EN_SHIFT (3U)
  138. #define PDMA_CTRL_P0_EN_SET(x) (((uint32_t)(x) << PDMA_CTRL_P0_EN_SHIFT) & PDMA_CTRL_P0_EN_MASK)
  139. #define PDMA_CTRL_P0_EN_GET(x) (((uint32_t)(x) & PDMA_CTRL_P0_EN_MASK) >> PDMA_CTRL_P0_EN_SHIFT)
  140. /*
  141. * PDMA_SFTRST (RW)
  142. *
  143. * Software Reset.
  144. * Write 1 to clear PDMA internal logic.
  145. * Write 0 to exit software reset mode.
  146. */
  147. #define PDMA_CTRL_PDMA_SFTRST_MASK (0x2U)
  148. #define PDMA_CTRL_PDMA_SFTRST_SHIFT (1U)
  149. #define PDMA_CTRL_PDMA_SFTRST_SET(x) (((uint32_t)(x) << PDMA_CTRL_PDMA_SFTRST_SHIFT) & PDMA_CTRL_PDMA_SFTRST_MASK)
  150. #define PDMA_CTRL_PDMA_SFTRST_GET(x) (((uint32_t)(x) & PDMA_CTRL_PDMA_SFTRST_MASK) >> PDMA_CTRL_PDMA_SFTRST_SHIFT)
  151. /*
  152. * PDMA_EN (RW)
  153. *
  154. * 1b - Enabled
  155. */
  156. #define PDMA_CTRL_PDMA_EN_MASK (0x1U)
  157. #define PDMA_CTRL_PDMA_EN_SHIFT (0U)
  158. #define PDMA_CTRL_PDMA_EN_SET(x) (((uint32_t)(x) << PDMA_CTRL_PDMA_EN_SHIFT) & PDMA_CTRL_PDMA_EN_MASK)
  159. #define PDMA_CTRL_PDMA_EN_GET(x) (((uint32_t)(x) & PDMA_CTRL_PDMA_EN_MASK) >> PDMA_CTRL_PDMA_EN_SHIFT)
  160. /* Bitfield definition for register: STAT */
  161. /*
  162. * BLOCKY (RO)
  163. *
  164. * Y block that is processing
  165. */
  166. #define PDMA_STAT_BLOCKY_MASK (0xFF000000UL)
  167. #define PDMA_STAT_BLOCKY_SHIFT (24U)
  168. #define PDMA_STAT_BLOCKY_GET(x) (((uint32_t)(x) & PDMA_STAT_BLOCKY_MASK) >> PDMA_STAT_BLOCKY_SHIFT)
  169. /*
  170. * BLOCKX (RO)
  171. *
  172. * X block that is processing
  173. */
  174. #define PDMA_STAT_BLOCKX_MASK (0xFF0000UL)
  175. #define PDMA_STAT_BLOCKX_SHIFT (16U)
  176. #define PDMA_STAT_BLOCKX_GET(x) (((uint32_t)(x) & PDMA_STAT_BLOCKX_MASK) >> PDMA_STAT_BLOCKX_SHIFT)
  177. /*
  178. * PDMA_DONE (RO)
  179. *
  180. * PDMA one image done
  181. */
  182. #define PDMA_STAT_PDMA_DONE_MASK (0x200U)
  183. #define PDMA_STAT_PDMA_DONE_SHIFT (9U)
  184. #define PDMA_STAT_PDMA_DONE_GET(x) (((uint32_t)(x) & PDMA_STAT_PDMA_DONE_MASK) >> PDMA_STAT_PDMA_DONE_SHIFT)
  185. /*
  186. * AXI_ERR_ID (RO)
  187. *
  188. * AXI error ID
  189. */
  190. #define PDMA_STAT_AXI_ERR_ID_MASK (0x1E0U)
  191. #define PDMA_STAT_AXI_ERR_ID_SHIFT (5U)
  192. #define PDMA_STAT_AXI_ERR_ID_GET(x) (((uint32_t)(x) & PDMA_STAT_AXI_ERR_ID_MASK) >> PDMA_STAT_AXI_ERR_ID_SHIFT)
  193. /*
  194. * AXI_0_WRITE_ERR (W1C)
  195. *
  196. * AXI0 write err
  197. */
  198. #define PDMA_STAT_AXI_0_WRITE_ERR_MASK (0x10U)
  199. #define PDMA_STAT_AXI_0_WRITE_ERR_SHIFT (4U)
  200. #define PDMA_STAT_AXI_0_WRITE_ERR_SET(x) (((uint32_t)(x) << PDMA_STAT_AXI_0_WRITE_ERR_SHIFT) & PDMA_STAT_AXI_0_WRITE_ERR_MASK)
  201. #define PDMA_STAT_AXI_0_WRITE_ERR_GET(x) (((uint32_t)(x) & PDMA_STAT_AXI_0_WRITE_ERR_MASK) >> PDMA_STAT_AXI_0_WRITE_ERR_SHIFT)
  202. /*
  203. * AXI_1_READ_ERR (W1C)
  204. *
  205. * AXI1 read err
  206. */
  207. #define PDMA_STAT_AXI_1_READ_ERR_MASK (0x8U)
  208. #define PDMA_STAT_AXI_1_READ_ERR_SHIFT (3U)
  209. #define PDMA_STAT_AXI_1_READ_ERR_SET(x) (((uint32_t)(x) << PDMA_STAT_AXI_1_READ_ERR_SHIFT) & PDMA_STAT_AXI_1_READ_ERR_MASK)
  210. #define PDMA_STAT_AXI_1_READ_ERR_GET(x) (((uint32_t)(x) & PDMA_STAT_AXI_1_READ_ERR_MASK) >> PDMA_STAT_AXI_1_READ_ERR_SHIFT)
  211. /*
  212. * AXI_0_READ_ERR (W1C)
  213. *
  214. * AXI0 read err
  215. */
  216. #define PDMA_STAT_AXI_0_READ_ERR_MASK (0x4U)
  217. #define PDMA_STAT_AXI_0_READ_ERR_SHIFT (2U)
  218. #define PDMA_STAT_AXI_0_READ_ERR_SET(x) (((uint32_t)(x) << PDMA_STAT_AXI_0_READ_ERR_SHIFT) & PDMA_STAT_AXI_0_READ_ERR_MASK)
  219. #define PDMA_STAT_AXI_0_READ_ERR_GET(x) (((uint32_t)(x) & PDMA_STAT_AXI_0_READ_ERR_MASK) >> PDMA_STAT_AXI_0_READ_ERR_SHIFT)
  220. /*
  221. * IRQ (W1C)
  222. *
  223. * Asserted to indicate a IRQ event
  224. */
  225. #define PDMA_STAT_IRQ_MASK (0x1U)
  226. #define PDMA_STAT_IRQ_SHIFT (0U)
  227. #define PDMA_STAT_IRQ_SET(x) (((uint32_t)(x) << PDMA_STAT_IRQ_SHIFT) & PDMA_STAT_IRQ_MASK)
  228. #define PDMA_STAT_IRQ_GET(x) (((uint32_t)(x) & PDMA_STAT_IRQ_MASK) >> PDMA_STAT_IRQ_SHIFT)
  229. /* Bitfield definition for register: OUT_CTRL */
  230. /*
  231. * DSTALPHA (RW)
  232. *
  233. * The destination (P1) system ALPHA value.
  234. */
  235. #define PDMA_OUT_CTRL_DSTALPHA_MASK (0xFF000000UL)
  236. #define PDMA_OUT_CTRL_DSTALPHA_SHIFT (24U)
  237. #define PDMA_OUT_CTRL_DSTALPHA_SET(x) (((uint32_t)(x) << PDMA_OUT_CTRL_DSTALPHA_SHIFT) & PDMA_OUT_CTRL_DSTALPHA_MASK)
  238. #define PDMA_OUT_CTRL_DSTALPHA_GET(x) (((uint32_t)(x) & PDMA_OUT_CTRL_DSTALPHA_MASK) >> PDMA_OUT_CTRL_DSTALPHA_SHIFT)
  239. /*
  240. * SRCALPHA (RW)
  241. *
  242. * The source (P0) system ALPHA value.
  243. */
  244. #define PDMA_OUT_CTRL_SRCALPHA_MASK (0xFF0000UL)
  245. #define PDMA_OUT_CTRL_SRCALPHA_SHIFT (16U)
  246. #define PDMA_OUT_CTRL_SRCALPHA_SET(x) (((uint32_t)(x) << PDMA_OUT_CTRL_SRCALPHA_SHIFT) & PDMA_OUT_CTRL_SRCALPHA_MASK)
  247. #define PDMA_OUT_CTRL_SRCALPHA_GET(x) (((uint32_t)(x) & PDMA_OUT_CTRL_SRCALPHA_MASK) >> PDMA_OUT_CTRL_SRCALPHA_SHIFT)
  248. /*
  249. * DSTALPHA_OP (RW)
  250. *
  251. * The usage of the DSTALPHA[7:0]: (The system alpha value is not the data valid mask, the non-zero alpha value per pixel embedded in the stream indicates a valid pixel. If no such per pixel alpha value, it means all the pixels are valid)
  252. * 0: the DSTALPHA[7:0] is invalid, use the alpha value embedded in the stream
  253. * 1: the DSTALPHA[7:0] is used to override the alpha value embedded in the stream. (useful when the corresponding data stream has no alpha info)
  254. * 2: the DSTALPHA[7:0] is used to scale the alpha value embedded in the stream
  255. * 3: don't multiply the color data with any alpha values for blender inputs.
  256. */
  257. #define PDMA_OUT_CTRL_DSTALPHA_OP_MASK (0xC000U)
  258. #define PDMA_OUT_CTRL_DSTALPHA_OP_SHIFT (14U)
  259. #define PDMA_OUT_CTRL_DSTALPHA_OP_SET(x) (((uint32_t)(x) << PDMA_OUT_CTRL_DSTALPHA_OP_SHIFT) & PDMA_OUT_CTRL_DSTALPHA_OP_MASK)
  260. #define PDMA_OUT_CTRL_DSTALPHA_OP_GET(x) (((uint32_t)(x) & PDMA_OUT_CTRL_DSTALPHA_OP_MASK) >> PDMA_OUT_CTRL_DSTALPHA_OP_SHIFT)
  261. /*
  262. * SRCALPHA_OP (RW)
  263. *
  264. * The usage of the SRCALPHA[7:0]: (The system alpha value is not the data valid mask, the non-zero alpha value per pixel embedded in the stream indicates a valid pixel. If no such per pixel alpha value, it means all the pixels are valid)
  265. * 0: the SRCALPHA[7:0] is invalid, use the alpha value embedded in the stream
  266. * 1: the SRCALPHA[7:0] is used to override the alpha value embedded in the stream . (useful when the corresponding data stream has no alpha info)
  267. * 2: the SRCALPHA[7:0] is used to scale the alpha value embedded in the stream
  268. * 3: don't multiply the color data with any alpha values for blender inputs.
  269. */
  270. #define PDMA_OUT_CTRL_SRCALPHA_OP_MASK (0x3000U)
  271. #define PDMA_OUT_CTRL_SRCALPHA_OP_SHIFT (12U)
  272. #define PDMA_OUT_CTRL_SRCALPHA_OP_SET(x) (((uint32_t)(x) << PDMA_OUT_CTRL_SRCALPHA_OP_SHIFT) & PDMA_OUT_CTRL_SRCALPHA_OP_MASK)
  273. #define PDMA_OUT_CTRL_SRCALPHA_OP_GET(x) (((uint32_t)(x) & PDMA_OUT_CTRL_SRCALPHA_OP_MASK) >> PDMA_OUT_CTRL_SRCALPHA_OP_SHIFT)
  274. /*
  275. * ABLEND_MODE (RW)
  276. *
  277. * Alpha Blending Mode
  278. * 0: SKBlendMode_Clear (If PS1_CTRL[BKGNDCL4CLR] is asserted, use PS1_BKGRND color to fill the range determined by PS1, else fill the range determined by PS1 with zero);
  279. * 1: SKBlendMode_Src ;
  280. * 2: SKBlendMode_Dst
  281. * 3: SKBlendMode_SrcOver
  282. * 4: SKBlendMode_DstOver
  283. * 5: SKBlendMode_SrcIn
  284. * 6: SKBlendMode_DstIn
  285. * 7: SKBlendMode_SrcOut
  286. * 8: SKBlendMode_DstOut
  287. * 9: SKBlendMode_SrcATop
  288. * 10: SKBlendMode_DstATop
  289. * 11: SKBlendMode_Xor
  290. * 12: SKBlendMode_Plus (The conventional belding mode)
  291. * 13: SKBlendMode_Modulate
  292. * 14: SRC org
  293. * 15: DST org
  294. * Others: Reserved.
  295. */
  296. #define PDMA_OUT_CTRL_ABLEND_MODE_MASK (0xF00U)
  297. #define PDMA_OUT_CTRL_ABLEND_MODE_SHIFT (8U)
  298. #define PDMA_OUT_CTRL_ABLEND_MODE_SET(x) (((uint32_t)(x) << PDMA_OUT_CTRL_ABLEND_MODE_SHIFT) & PDMA_OUT_CTRL_ABLEND_MODE_MASK)
  299. #define PDMA_OUT_CTRL_ABLEND_MODE_GET(x) (((uint32_t)(x) & PDMA_OUT_CTRL_ABLEND_MODE_MASK) >> PDMA_OUT_CTRL_ABLEND_MODE_SHIFT)
  300. /*
  301. * NORM_OUT (RW)
  302. *
  303. * Asserted to normalize the output color channels with alpha channels
  304. */
  305. #define PDMA_OUT_CTRL_NORM_OUT_MASK (0x80U)
  306. #define PDMA_OUT_CTRL_NORM_OUT_SHIFT (7U)
  307. #define PDMA_OUT_CTRL_NORM_OUT_SET(x) (((uint32_t)(x) << PDMA_OUT_CTRL_NORM_OUT_SHIFT) & PDMA_OUT_CTRL_NORM_OUT_MASK)
  308. #define PDMA_OUT_CTRL_NORM_OUT_GET(x) (((uint32_t)(x) & PDMA_OUT_CTRL_NORM_OUT_MASK) >> PDMA_OUT_CTRL_NORM_OUT_SHIFT)
  309. /*
  310. * FORMAT (RW)
  311. *
  312. * Output buffer format.
  313. * 0x0 ARGB8888 - 32-bit pixles, byte sequence as B,G,R,A
  314. * 0xE RGB565 - 16-bit pixels, byte sequence as B,R
  315. * 0x12 UYVY1P422 - 16-bit pixels (1-plane , byte sequence as U0,Y0,V0,Y1)
  316. */
  317. #define PDMA_OUT_CTRL_FORMAT_MASK (0x3FU)
  318. #define PDMA_OUT_CTRL_FORMAT_SHIFT (0U)
  319. #define PDMA_OUT_CTRL_FORMAT_SET(x) (((uint32_t)(x) << PDMA_OUT_CTRL_FORMAT_SHIFT) & PDMA_OUT_CTRL_FORMAT_MASK)
  320. #define PDMA_OUT_CTRL_FORMAT_GET(x) (((uint32_t)(x) & PDMA_OUT_CTRL_FORMAT_MASK) >> PDMA_OUT_CTRL_FORMAT_SHIFT)
  321. /* Bitfield definition for register: OUT_BUF */
  322. /*
  323. * ADDR (RW)
  324. *
  325. * Current address pointer for the output frame buffer. The address can have any byte alignment. 64B alignment is recommended for optimal performance.
  326. */
  327. #define PDMA_OUT_BUF_ADDR_MASK (0xFFFFFFFFUL)
  328. #define PDMA_OUT_BUF_ADDR_SHIFT (0U)
  329. #define PDMA_OUT_BUF_ADDR_SET(x) (((uint32_t)(x) << PDMA_OUT_BUF_ADDR_SHIFT) & PDMA_OUT_BUF_ADDR_MASK)
  330. #define PDMA_OUT_BUF_ADDR_GET(x) (((uint32_t)(x) & PDMA_OUT_BUF_ADDR_MASK) >> PDMA_OUT_BUF_ADDR_SHIFT)
  331. /* Bitfield definition for register: OUT_PITCH */
  332. /*
  333. * BYTELEN (RW)
  334. *
  335. * Indicates the number of bytes in memory between two vertically adjacent pixels.
  336. */
  337. #define PDMA_OUT_PITCH_BYTELEN_MASK (0xFFFFU)
  338. #define PDMA_OUT_PITCH_BYTELEN_SHIFT (0U)
  339. #define PDMA_OUT_PITCH_BYTELEN_SET(x) (((uint32_t)(x) << PDMA_OUT_PITCH_BYTELEN_SHIFT) & PDMA_OUT_PITCH_BYTELEN_MASK)
  340. #define PDMA_OUT_PITCH_BYTELEN_GET(x) (((uint32_t)(x) & PDMA_OUT_PITCH_BYTELEN_MASK) >> PDMA_OUT_PITCH_BYTELEN_SHIFT)
  341. /* Bitfield definition for register: OUT_LRC */
  342. /*
  343. * Y (RW)
  344. *
  345. * This field indicates the lower right Y-coordinate (in pixels) of the output frame buffer.
  346. * The value is the height of the output image size.
  347. */
  348. #define PDMA_OUT_LRC_Y_MASK (0x3FFF0000UL)
  349. #define PDMA_OUT_LRC_Y_SHIFT (16U)
  350. #define PDMA_OUT_LRC_Y_SET(x) (((uint32_t)(x) << PDMA_OUT_LRC_Y_SHIFT) & PDMA_OUT_LRC_Y_MASK)
  351. #define PDMA_OUT_LRC_Y_GET(x) (((uint32_t)(x) & PDMA_OUT_LRC_Y_MASK) >> PDMA_OUT_LRC_Y_SHIFT)
  352. /*
  353. * X (RW)
  354. *
  355. * This field indicates the lower right X-coordinate (in pixels) of the output frame buffer.
  356. * Should be the width of the output image size.
  357. */
  358. #define PDMA_OUT_LRC_X_MASK (0x3FFFU)
  359. #define PDMA_OUT_LRC_X_SHIFT (0U)
  360. #define PDMA_OUT_LRC_X_SET(x) (((uint32_t)(x) << PDMA_OUT_LRC_X_SHIFT) & PDMA_OUT_LRC_X_MASK)
  361. #define PDMA_OUT_LRC_X_GET(x) (((uint32_t)(x) & PDMA_OUT_LRC_X_MASK) >> PDMA_OUT_LRC_X_SHIFT)
  362. /* Bitfield definition for register of struct array OUT_PS: ULC */
  363. /*
  364. * Y (RW)
  365. *
  366. * This field indicates the upper left Y-coordinate (in pixels) of the processed surface in the output frame buffer.
  367. */
  368. #define PDMA_OUT_PS_ULC_Y_MASK (0x3FFF0000UL)
  369. #define PDMA_OUT_PS_ULC_Y_SHIFT (16U)
  370. #define PDMA_OUT_PS_ULC_Y_SET(x) (((uint32_t)(x) << PDMA_OUT_PS_ULC_Y_SHIFT) & PDMA_OUT_PS_ULC_Y_MASK)
  371. #define PDMA_OUT_PS_ULC_Y_GET(x) (((uint32_t)(x) & PDMA_OUT_PS_ULC_Y_MASK) >> PDMA_OUT_PS_ULC_Y_SHIFT)
  372. /*
  373. * X (RW)
  374. *
  375. * This field indicates the upper left X-coordinate (in pixels) of the processed surface in the output frame buffer.
  376. */
  377. #define PDMA_OUT_PS_ULC_X_MASK (0x3FFFU)
  378. #define PDMA_OUT_PS_ULC_X_SHIFT (0U)
  379. #define PDMA_OUT_PS_ULC_X_SET(x) (((uint32_t)(x) << PDMA_OUT_PS_ULC_X_SHIFT) & PDMA_OUT_PS_ULC_X_MASK)
  380. #define PDMA_OUT_PS_ULC_X_GET(x) (((uint32_t)(x) & PDMA_OUT_PS_ULC_X_MASK) >> PDMA_OUT_PS_ULC_X_SHIFT)
  381. /* Bitfield definition for register of struct array OUT_PS: LRC */
  382. /*
  383. * Y (RW)
  384. *
  385. * This field indicates the lower right Y-coordinate (in pixels) of the processed surface in the output frame buffer.
  386. */
  387. #define PDMA_OUT_PS_LRC_Y_MASK (0x3FFF0000UL)
  388. #define PDMA_OUT_PS_LRC_Y_SHIFT (16U)
  389. #define PDMA_OUT_PS_LRC_Y_SET(x) (((uint32_t)(x) << PDMA_OUT_PS_LRC_Y_SHIFT) & PDMA_OUT_PS_LRC_Y_MASK)
  390. #define PDMA_OUT_PS_LRC_Y_GET(x) (((uint32_t)(x) & PDMA_OUT_PS_LRC_Y_MASK) >> PDMA_OUT_PS_LRC_Y_SHIFT)
  391. /*
  392. * X (RW)
  393. *
  394. * This field indicates the lower right X-coordinate (in pixels) of the processed surface in the output frame buffer.
  395. */
  396. #define PDMA_OUT_PS_LRC_X_MASK (0x3FFFU)
  397. #define PDMA_OUT_PS_LRC_X_SHIFT (0U)
  398. #define PDMA_OUT_PS_LRC_X_SET(x) (((uint32_t)(x) << PDMA_OUT_PS_LRC_X_SHIFT) & PDMA_OUT_PS_LRC_X_MASK)
  399. #define PDMA_OUT_PS_LRC_X_GET(x) (((uint32_t)(x) & PDMA_OUT_PS_LRC_X_MASK) >> PDMA_OUT_PS_LRC_X_SHIFT)
  400. /* Bitfield definition for register of struct array PS: CTRL */
  401. /*
  402. * PL_ONLY_BLENDOP (RW)
  403. *
  404. * 1: For those pixels that are this plane-only, use the colcor values and alpha values directly as blender output for un-normalized outputs configurations.
  405. * 0: For those pixels that are this plane-only, the operations are determined by other operation configurations.
  406. */
  407. #define PDMA_PS_CTRL_PL_ONLY_BLENDOP_MASK (0x1000000UL)
  408. #define PDMA_PS_CTRL_PL_ONLY_BLENDOP_SHIFT (24U)
  409. #define PDMA_PS_CTRL_PL_ONLY_BLENDOP_SET(x) (((uint32_t)(x) << PDMA_PS_CTRL_PL_ONLY_BLENDOP_SHIFT) & PDMA_PS_CTRL_PL_ONLY_BLENDOP_MASK)
  410. #define PDMA_PS_CTRL_PL_ONLY_BLENDOP_GET(x) (((uint32_t)(x) & PDMA_PS_CTRL_PL_ONLY_BLENDOP_MASK) >> PDMA_PS_CTRL_PL_ONLY_BLENDOP_SHIFT)
  411. /*
  412. * INB13_SWAP (RW)
  413. *
  414. * Swap bit[31:24] and bit [15:8] before pack_dir operation.
  415. */
  416. #define PDMA_PS_CTRL_INB13_SWAP_MASK (0x100000UL)
  417. #define PDMA_PS_CTRL_INB13_SWAP_SHIFT (20U)
  418. #define PDMA_PS_CTRL_INB13_SWAP_SET(x) (((uint32_t)(x) << PDMA_PS_CTRL_INB13_SWAP_SHIFT) & PDMA_PS_CTRL_INB13_SWAP_MASK)
  419. #define PDMA_PS_CTRL_INB13_SWAP_GET(x) (((uint32_t)(x) & PDMA_PS_CTRL_INB13_SWAP_MASK) >> PDMA_PS_CTRL_INB13_SWAP_SHIFT)
  420. /*
  421. * PACK_DIR (RW)
  422. *
  423. * Decide the byte sequence of the 32-bit word {A3, A2, A1, A0}. The bit sequence ina byte is not changed.
  424. * 2'b00: no change {A3, A2, A1, A0}
  425. * 2'b01: {A2, A3, A0, A1}
  426. * 2'b10: {A1, A0, A3, A2}
  427. * 2'b11: {A0, A1, A2, A3}
  428. */
  429. #define PDMA_PS_CTRL_PACK_DIR_MASK (0xC0000UL)
  430. #define PDMA_PS_CTRL_PACK_DIR_SHIFT (18U)
  431. #define PDMA_PS_CTRL_PACK_DIR_SET(x) (((uint32_t)(x) << PDMA_PS_CTRL_PACK_DIR_SHIFT) & PDMA_PS_CTRL_PACK_DIR_MASK)
  432. #define PDMA_PS_CTRL_PACK_DIR_GET(x) (((uint32_t)(x) & PDMA_PS_CTRL_PACK_DIR_MASK) >> PDMA_PS_CTRL_PACK_DIR_SHIFT)
  433. /*
  434. * BKGCL4CLR (RW)
  435. *
  436. * Enable to use background color for clear area
  437. */
  438. #define PDMA_PS_CTRL_BKGCL4CLR_MASK (0x20000UL)
  439. #define PDMA_PS_CTRL_BKGCL4CLR_SHIFT (17U)
  440. #define PDMA_PS_CTRL_BKGCL4CLR_SET(x) (((uint32_t)(x) << PDMA_PS_CTRL_BKGCL4CLR_SHIFT) & PDMA_PS_CTRL_BKGCL4CLR_MASK)
  441. #define PDMA_PS_CTRL_BKGCL4CLR_GET(x) (((uint32_t)(x) & PDMA_PS_CTRL_BKGCL4CLR_MASK) >> PDMA_PS_CTRL_BKGCL4CLR_SHIFT)
  442. /*
  443. * YCBCR_MODE (RW)
  444. *
  445. * YCbCr mode or YUV mode
  446. */
  447. #define PDMA_PS_CTRL_YCBCR_MODE_MASK (0x10000UL)
  448. #define PDMA_PS_CTRL_YCBCR_MODE_SHIFT (16U)
  449. #define PDMA_PS_CTRL_YCBCR_MODE_SET(x) (((uint32_t)(x) << PDMA_PS_CTRL_YCBCR_MODE_SHIFT) & PDMA_PS_CTRL_YCBCR_MODE_MASK)
  450. #define PDMA_PS_CTRL_YCBCR_MODE_GET(x) (((uint32_t)(x) & PDMA_PS_CTRL_YCBCR_MODE_MASK) >> PDMA_PS_CTRL_YCBCR_MODE_SHIFT)
  451. /*
  452. * BYPASS (RW)
  453. *
  454. * Asserted to bypass the CSC stage
  455. */
  456. #define PDMA_PS_CTRL_BYPASS_MASK (0x8000U)
  457. #define PDMA_PS_CTRL_BYPASS_SHIFT (15U)
  458. #define PDMA_PS_CTRL_BYPASS_SET(x) (((uint32_t)(x) << PDMA_PS_CTRL_BYPASS_SHIFT) & PDMA_PS_CTRL_BYPASS_MASK)
  459. #define PDMA_PS_CTRL_BYPASS_GET(x) (((uint32_t)(x) & PDMA_PS_CTRL_BYPASS_MASK) >> PDMA_PS_CTRL_BYPASS_SHIFT)
  460. /*
  461. * VFLIP (RW)
  462. *
  463. * Indicates that the input should be flipped vertically (effect applied before rotation).
  464. */
  465. #define PDMA_PS_CTRL_VFLIP_MASK (0x4000U)
  466. #define PDMA_PS_CTRL_VFLIP_SHIFT (14U)
  467. #define PDMA_PS_CTRL_VFLIP_SET(x) (((uint32_t)(x) << PDMA_PS_CTRL_VFLIP_SHIFT) & PDMA_PS_CTRL_VFLIP_MASK)
  468. #define PDMA_PS_CTRL_VFLIP_GET(x) (((uint32_t)(x) & PDMA_PS_CTRL_VFLIP_MASK) >> PDMA_PS_CTRL_VFLIP_SHIFT)
  469. /*
  470. * HFLIP (RW)
  471. *
  472. * Indicates that the input should be flipped horizontally (effect applied before rotation).
  473. */
  474. #define PDMA_PS_CTRL_HFLIP_MASK (0x2000U)
  475. #define PDMA_PS_CTRL_HFLIP_SHIFT (13U)
  476. #define PDMA_PS_CTRL_HFLIP_SET(x) (((uint32_t)(x) << PDMA_PS_CTRL_HFLIP_SHIFT) & PDMA_PS_CTRL_HFLIP_MASK)
  477. #define PDMA_PS_CTRL_HFLIP_GET(x) (((uint32_t)(x) & PDMA_PS_CTRL_HFLIP_MASK) >> PDMA_PS_CTRL_HFLIP_SHIFT)
  478. /*
  479. * ROTATE (RW)
  480. *
  481. * Indicates the clockwise rotation to be applied at the input buffer. The rotation effect is defined as occurring
  482. * after the FLIP_X and FLIP_Y permutation.
  483. * 0x0 ROT_0
  484. * 0x1 ROT_90
  485. * 0x2 ROT_180
  486. * 0x3 ROT_270
  487. */
  488. #define PDMA_PS_CTRL_ROTATE_MASK (0x1800U)
  489. #define PDMA_PS_CTRL_ROTATE_SHIFT (11U)
  490. #define PDMA_PS_CTRL_ROTATE_SET(x) (((uint32_t)(x) << PDMA_PS_CTRL_ROTATE_SHIFT) & PDMA_PS_CTRL_ROTATE_MASK)
  491. #define PDMA_PS_CTRL_ROTATE_GET(x) (((uint32_t)(x) & PDMA_PS_CTRL_ROTATE_MASK) >> PDMA_PS_CTRL_ROTATE_SHIFT)
  492. /*
  493. * DECY (RW)
  494. *
  495. * Verticle pre decimation filter control.
  496. * 0x0 DISABLE - Disable pre-decimation filter.
  497. * 0x1 DECY2 - Decimate PS by 2.
  498. * 0x2 DECY4 - Decimate PS by 4.
  499. * 0x3 DECY8 - Decimate PS by 8.
  500. */
  501. #define PDMA_PS_CTRL_DECY_MASK (0x600U)
  502. #define PDMA_PS_CTRL_DECY_SHIFT (9U)
  503. #define PDMA_PS_CTRL_DECY_SET(x) (((uint32_t)(x) << PDMA_PS_CTRL_DECY_SHIFT) & PDMA_PS_CTRL_DECY_MASK)
  504. #define PDMA_PS_CTRL_DECY_GET(x) (((uint32_t)(x) & PDMA_PS_CTRL_DECY_MASK) >> PDMA_PS_CTRL_DECY_SHIFT)
  505. /*
  506. * DECX (RW)
  507. *
  508. * Horizontal pre decimation filter control.
  509. * 0x0 DISABLE - Disable pre-decimation filter.
  510. * 0x1 DECX2 - Decimate PS by 2.
  511. * 0x2 DECX4 - Decimate PS by 4.
  512. * 0x3 DECX8 - Decimate PS by 8.
  513. */
  514. #define PDMA_PS_CTRL_DECX_MASK (0x180U)
  515. #define PDMA_PS_CTRL_DECX_SHIFT (7U)
  516. #define PDMA_PS_CTRL_DECX_SET(x) (((uint32_t)(x) << PDMA_PS_CTRL_DECX_SHIFT) & PDMA_PS_CTRL_DECX_MASK)
  517. #define PDMA_PS_CTRL_DECX_GET(x) (((uint32_t)(x) & PDMA_PS_CTRL_DECX_MASK) >> PDMA_PS_CTRL_DECX_SHIFT)
  518. /*
  519. * HW_BYTE_SWAP (RW)
  520. *
  521. * Swap bytes in half-words. For each 16 bit half-word, the two bytes will be swapped.
  522. */
  523. #define PDMA_PS_CTRL_HW_BYTE_SWAP_MASK (0x40U)
  524. #define PDMA_PS_CTRL_HW_BYTE_SWAP_SHIFT (6U)
  525. #define PDMA_PS_CTRL_HW_BYTE_SWAP_SET(x) (((uint32_t)(x) << PDMA_PS_CTRL_HW_BYTE_SWAP_SHIFT) & PDMA_PS_CTRL_HW_BYTE_SWAP_MASK)
  526. #define PDMA_PS_CTRL_HW_BYTE_SWAP_GET(x) (((uint32_t)(x) & PDMA_PS_CTRL_HW_BYTE_SWAP_MASK) >> PDMA_PS_CTRL_HW_BYTE_SWAP_SHIFT)
  527. /*
  528. * FORMAT (RW)
  529. *
  530. * PS buffer format. To select between YUV and YCbCr formats, see bit 16 of this register.
  531. * 0x0 ARGB888 - 32-bit pixels, byte sequence as B,G,R,A
  532. * 0xE RGB565 - 16-bit pixels, byte sequence as B,R
  533. * 0x13 YUYV1P422 - 16-bit pixels (1-plane byte sequence Y0,U0,Y1,V0 interleaved bytes)
  534. */
  535. #define PDMA_PS_CTRL_FORMAT_MASK (0x3FU)
  536. #define PDMA_PS_CTRL_FORMAT_SHIFT (0U)
  537. #define PDMA_PS_CTRL_FORMAT_SET(x) (((uint32_t)(x) << PDMA_PS_CTRL_FORMAT_SHIFT) & PDMA_PS_CTRL_FORMAT_MASK)
  538. #define PDMA_PS_CTRL_FORMAT_GET(x) (((uint32_t)(x) & PDMA_PS_CTRL_FORMAT_MASK) >> PDMA_PS_CTRL_FORMAT_SHIFT)
  539. /* Bitfield definition for register of struct array PS: BUF */
  540. /*
  541. * ADDR (RW)
  542. *
  543. * Address pointer for the PS RGB or Y (luma) input buffer.
  544. */
  545. #define PDMA_PS_BUF_ADDR_MASK (0xFFFFFFFFUL)
  546. #define PDMA_PS_BUF_ADDR_SHIFT (0U)
  547. #define PDMA_PS_BUF_ADDR_SET(x) (((uint32_t)(x) << PDMA_PS_BUF_ADDR_SHIFT) & PDMA_PS_BUF_ADDR_MASK)
  548. #define PDMA_PS_BUF_ADDR_GET(x) (((uint32_t)(x) & PDMA_PS_BUF_ADDR_MASK) >> PDMA_PS_BUF_ADDR_SHIFT)
  549. /* Bitfield definition for register of struct array PS: PITCH */
  550. /*
  551. * BYTELEN (RW)
  552. *
  553. * Indicates the number of bytes in memory between two vertically adjacent pixels.
  554. */
  555. #define PDMA_PS_PITCH_BYTELEN_MASK (0xFFFFU)
  556. #define PDMA_PS_PITCH_BYTELEN_SHIFT (0U)
  557. #define PDMA_PS_PITCH_BYTELEN_SET(x) (((uint32_t)(x) << PDMA_PS_PITCH_BYTELEN_SHIFT) & PDMA_PS_PITCH_BYTELEN_MASK)
  558. #define PDMA_PS_PITCH_BYTELEN_GET(x) (((uint32_t)(x) & PDMA_PS_PITCH_BYTELEN_MASK) >> PDMA_PS_PITCH_BYTELEN_SHIFT)
  559. /* Bitfield definition for register of struct array PS: BKGD */
  560. /*
  561. * COLOR (RW)
  562. *
  563. * Background color (in 32bpp format) for any pixels not within the scaled range of the picture, but within the buffer range specified by the PS ULC/LRC. The top 8-bit is the alpha channel.
  564. */
  565. #define PDMA_PS_BKGD_COLOR_MASK (0xFFFFFFFFUL)
  566. #define PDMA_PS_BKGD_COLOR_SHIFT (0U)
  567. #define PDMA_PS_BKGD_COLOR_SET(x) (((uint32_t)(x) << PDMA_PS_BKGD_COLOR_SHIFT) & PDMA_PS_BKGD_COLOR_MASK)
  568. #define PDMA_PS_BKGD_COLOR_GET(x) (((uint32_t)(x) & PDMA_PS_BKGD_COLOR_MASK) >> PDMA_PS_BKGD_COLOR_SHIFT)
  569. /* Bitfield definition for register of struct array PS: SCALE */
  570. /*
  571. * Y (RW)
  572. *
  573. * This is a two bit integer and 12 bit fractional representation (##.####_####_####) of the X scaling factor for the PS source buffer. The maximum value programmed should be 2 since scaling down by a factor greater than 2 is not supported with the bilinear filter. Decimation and the bilinear filter should be used together to achieve scaling by more than a factor of 2.
  574. */
  575. #define PDMA_PS_SCALE_Y_MASK (0x7FFF0000UL)
  576. #define PDMA_PS_SCALE_Y_SHIFT (16U)
  577. #define PDMA_PS_SCALE_Y_SET(x) (((uint32_t)(x) << PDMA_PS_SCALE_Y_SHIFT) & PDMA_PS_SCALE_Y_MASK)
  578. #define PDMA_PS_SCALE_Y_GET(x) (((uint32_t)(x) & PDMA_PS_SCALE_Y_MASK) >> PDMA_PS_SCALE_Y_SHIFT)
  579. /*
  580. * X (RW)
  581. *
  582. * This is a two bit integer and 12 bit fractional representation (##.####_####_####) of the Y scaling factor for the PS source buffer. The maximum value programmed should be 2 since scaling down by a factor greater than 2 is not supported with the bilinear filter. Decimation and the bilinear filter should be used together to achieve scaling by more than a factor of 2.
  583. */
  584. #define PDMA_PS_SCALE_X_MASK (0x7FFFU)
  585. #define PDMA_PS_SCALE_X_SHIFT (0U)
  586. #define PDMA_PS_SCALE_X_SET(x) (((uint32_t)(x) << PDMA_PS_SCALE_X_SHIFT) & PDMA_PS_SCALE_X_MASK)
  587. #define PDMA_PS_SCALE_X_GET(x) (((uint32_t)(x) & PDMA_PS_SCALE_X_MASK) >> PDMA_PS_SCALE_X_SHIFT)
  588. /* Bitfield definition for register of struct array PS: OFFSET */
  589. /*
  590. * Y (RW)
  591. *
  592. * This is a 12 bit fractional representation (0.####_####_####) of the Y scaling offset. This represents a fixed pixel offset which gets added to the scaled address to determine source data for the scaling engine.
  593. * It is applied after the decimation filter stage, and before the bilinear filter stage.
  594. */
  595. #define PDMA_PS_OFFSET_Y_MASK (0xFFF0000UL)
  596. #define PDMA_PS_OFFSET_Y_SHIFT (16U)
  597. #define PDMA_PS_OFFSET_Y_SET(x) (((uint32_t)(x) << PDMA_PS_OFFSET_Y_SHIFT) & PDMA_PS_OFFSET_Y_MASK)
  598. #define PDMA_PS_OFFSET_Y_GET(x) (((uint32_t)(x) & PDMA_PS_OFFSET_Y_MASK) >> PDMA_PS_OFFSET_Y_SHIFT)
  599. /*
  600. * X (RW)
  601. *
  602. * This is a 12 bit fractional representation (0.####_####_####) of the X scaling offset. This represents a fixed pixel offset which gets added to the scaled address to determine source data for the scaling engine.
  603. * It is applied after the decimation filter stage, and before the bilinear filter stage.
  604. */
  605. #define PDMA_PS_OFFSET_X_MASK (0xFFFU)
  606. #define PDMA_PS_OFFSET_X_SHIFT (0U)
  607. #define PDMA_PS_OFFSET_X_SET(x) (((uint32_t)(x) << PDMA_PS_OFFSET_X_SHIFT) & PDMA_PS_OFFSET_X_MASK)
  608. #define PDMA_PS_OFFSET_X_GET(x) (((uint32_t)(x) & PDMA_PS_OFFSET_X_MASK) >> PDMA_PS_OFFSET_X_SHIFT)
  609. /* Bitfield definition for register of struct array PS: CLRKEY_LOW */
  610. /*
  611. * LIMIT (RW)
  612. *
  613. * Low range of color key applied to PS buffer. To disable PS colorkeying, set the low colorkey to 0xFFFFFF and the high colorkey to 0x000000.
  614. */
  615. #define PDMA_PS_CLRKEY_LOW_LIMIT_MASK (0xFFFFFFUL)
  616. #define PDMA_PS_CLRKEY_LOW_LIMIT_SHIFT (0U)
  617. #define PDMA_PS_CLRKEY_LOW_LIMIT_SET(x) (((uint32_t)(x) << PDMA_PS_CLRKEY_LOW_LIMIT_SHIFT) & PDMA_PS_CLRKEY_LOW_LIMIT_MASK)
  618. #define PDMA_PS_CLRKEY_LOW_LIMIT_GET(x) (((uint32_t)(x) & PDMA_PS_CLRKEY_LOW_LIMIT_MASK) >> PDMA_PS_CLRKEY_LOW_LIMIT_SHIFT)
  619. /* Bitfield definition for register of struct array PS: CLRKEY_HIGH */
  620. /*
  621. * LIMIT (RW)
  622. *
  623. * High range of color key applied to PS buffer. To disable PS colorkeying, set the low colorkey to 0xFFFFFF and the high colorkey to 0x000000
  624. */
  625. #define PDMA_PS_CLRKEY_HIGH_LIMIT_MASK (0xFFFFFFUL)
  626. #define PDMA_PS_CLRKEY_HIGH_LIMIT_SHIFT (0U)
  627. #define PDMA_PS_CLRKEY_HIGH_LIMIT_SET(x) (((uint32_t)(x) << PDMA_PS_CLRKEY_HIGH_LIMIT_SHIFT) & PDMA_PS_CLRKEY_HIGH_LIMIT_MASK)
  628. #define PDMA_PS_CLRKEY_HIGH_LIMIT_GET(x) (((uint32_t)(x) & PDMA_PS_CLRKEY_HIGH_LIMIT_MASK) >> PDMA_PS_CLRKEY_HIGH_LIMIT_SHIFT)
  629. /* Bitfield definition for register of struct array PS: ORG */
  630. /*
  631. * HIGHT (RW)
  632. *
  633. * The number of vertical pixels of the original frame (not -1)
  634. */
  635. #define PDMA_PS_ORG_HIGHT_MASK (0x3FFF0000UL)
  636. #define PDMA_PS_ORG_HIGHT_SHIFT (16U)
  637. #define PDMA_PS_ORG_HIGHT_SET(x) (((uint32_t)(x) << PDMA_PS_ORG_HIGHT_SHIFT) & PDMA_PS_ORG_HIGHT_MASK)
  638. #define PDMA_PS_ORG_HIGHT_GET(x) (((uint32_t)(x) & PDMA_PS_ORG_HIGHT_MASK) >> PDMA_PS_ORG_HIGHT_SHIFT)
  639. /*
  640. * WIDTH (RW)
  641. *
  642. * The number of horizontal pixels of the original frame (not -1)
  643. */
  644. #define PDMA_PS_ORG_WIDTH_MASK (0x3FFFU)
  645. #define PDMA_PS_ORG_WIDTH_SHIFT (0U)
  646. #define PDMA_PS_ORG_WIDTH_SET(x) (((uint32_t)(x) << PDMA_PS_ORG_WIDTH_SHIFT) & PDMA_PS_ORG_WIDTH_MASK)
  647. #define PDMA_PS_ORG_WIDTH_GET(x) (((uint32_t)(x) & PDMA_PS_ORG_WIDTH_MASK) >> PDMA_PS_ORG_WIDTH_SHIFT)
  648. /* Bitfield definition for register: YUV2RGB_COEF0 */
  649. /*
  650. * C0 (RW)
  651. *
  652. * Two's compliment Y multiplier coefficient C0. YUV=0x100 (1.000) YCbCr=0x12A (1.164)
  653. */
  654. #define PDMA_YUV2RGB_COEF0_C0_MASK (0x1FFC0000UL)
  655. #define PDMA_YUV2RGB_COEF0_C0_SHIFT (18U)
  656. #define PDMA_YUV2RGB_COEF0_C0_SET(x) (((uint32_t)(x) << PDMA_YUV2RGB_COEF0_C0_SHIFT) & PDMA_YUV2RGB_COEF0_C0_MASK)
  657. #define PDMA_YUV2RGB_COEF0_C0_GET(x) (((uint32_t)(x) & PDMA_YUV2RGB_COEF0_C0_MASK) >> PDMA_YUV2RGB_COEF0_C0_SHIFT)
  658. /*
  659. * UV_OFFSET (RW)
  660. *
  661. * Two's compliment phase offset implicit for CbCr data UV_OFFSET. Generally used for YCbCr to RGB conversion.
  662. * YCbCr=0x180, YUV=0x000 (typically -128 or 0x180 to indicate normalized -0.5 to 0.5 range).
  663. */
  664. #define PDMA_YUV2RGB_COEF0_UV_OFFSET_MASK (0x3FE00UL)
  665. #define PDMA_YUV2RGB_COEF0_UV_OFFSET_SHIFT (9U)
  666. #define PDMA_YUV2RGB_COEF0_UV_OFFSET_SET(x) (((uint32_t)(x) << PDMA_YUV2RGB_COEF0_UV_OFFSET_SHIFT) & PDMA_YUV2RGB_COEF0_UV_OFFSET_MASK)
  667. #define PDMA_YUV2RGB_COEF0_UV_OFFSET_GET(x) (((uint32_t)(x) & PDMA_YUV2RGB_COEF0_UV_OFFSET_MASK) >> PDMA_YUV2RGB_COEF0_UV_OFFSET_SHIFT)
  668. /*
  669. * Y_OFFSET (RW)
  670. *
  671. * Two's compliment amplitude offset implicit in the Y data Y_OFFSET. For YUV, this is typically 0 and for YCbCr, this is
  672. * typically -16 (0x1F0).
  673. */
  674. #define PDMA_YUV2RGB_COEF0_Y_OFFSET_MASK (0x1FFU)
  675. #define PDMA_YUV2RGB_COEF0_Y_OFFSET_SHIFT (0U)
  676. #define PDMA_YUV2RGB_COEF0_Y_OFFSET_SET(x) (((uint32_t)(x) << PDMA_YUV2RGB_COEF0_Y_OFFSET_SHIFT) & PDMA_YUV2RGB_COEF0_Y_OFFSET_MASK)
  677. #define PDMA_YUV2RGB_COEF0_Y_OFFSET_GET(x) (((uint32_t)(x) & PDMA_YUV2RGB_COEF0_Y_OFFSET_MASK) >> PDMA_YUV2RGB_COEF0_Y_OFFSET_SHIFT)
  678. /* Bitfield definition for register: YUV2RGB_COEF1 */
  679. /*
  680. * C1 (RW)
  681. *
  682. * Two's compliment Red V/Cr multiplier coefficient C1. YUV=0x123 (1.140) YCbCr=0x198 (1.596).
  683. */
  684. #define PDMA_YUV2RGB_COEF1_C1_MASK (0x7FF0000UL)
  685. #define PDMA_YUV2RGB_COEF1_C1_SHIFT (16U)
  686. #define PDMA_YUV2RGB_COEF1_C1_SET(x) (((uint32_t)(x) << PDMA_YUV2RGB_COEF1_C1_SHIFT) & PDMA_YUV2RGB_COEF1_C1_MASK)
  687. #define PDMA_YUV2RGB_COEF1_C1_GET(x) (((uint32_t)(x) & PDMA_YUV2RGB_COEF1_C1_MASK) >> PDMA_YUV2RGB_COEF1_C1_SHIFT)
  688. /*
  689. * C4 (RW)
  690. *
  691. * Two's compliment Blue U/Cb multiplier coefficient C4. YUV=0x208 (2.032) YCbCr=0x204 (2.017).
  692. */
  693. #define PDMA_YUV2RGB_COEF1_C4_MASK (0x7FFU)
  694. #define PDMA_YUV2RGB_COEF1_C4_SHIFT (0U)
  695. #define PDMA_YUV2RGB_COEF1_C4_SET(x) (((uint32_t)(x) << PDMA_YUV2RGB_COEF1_C4_SHIFT) & PDMA_YUV2RGB_COEF1_C4_MASK)
  696. #define PDMA_YUV2RGB_COEF1_C4_GET(x) (((uint32_t)(x) & PDMA_YUV2RGB_COEF1_C4_MASK) >> PDMA_YUV2RGB_COEF1_C4_SHIFT)
  697. /* Bitfield definition for register: YUV2RGB_COEF2 */
  698. /*
  699. * C2 (RW)
  700. *
  701. * Two's compliment Green V/Cr multiplier coefficient C2. YUV=0x76B (-0.581) YCbCr=0x730 (-0.813).
  702. */
  703. #define PDMA_YUV2RGB_COEF2_C2_MASK (0x7FF0000UL)
  704. #define PDMA_YUV2RGB_COEF2_C2_SHIFT (16U)
  705. #define PDMA_YUV2RGB_COEF2_C2_SET(x) (((uint32_t)(x) << PDMA_YUV2RGB_COEF2_C2_SHIFT) & PDMA_YUV2RGB_COEF2_C2_MASK)
  706. #define PDMA_YUV2RGB_COEF2_C2_GET(x) (((uint32_t)(x) & PDMA_YUV2RGB_COEF2_C2_MASK) >> PDMA_YUV2RGB_COEF2_C2_SHIFT)
  707. /*
  708. * C3 (RW)
  709. *
  710. * Two's compliment Green U/Cb multiplier coefficient C3. YUV=0x79C (-0.394) YCbCr=0x79C (-0.392).
  711. */
  712. #define PDMA_YUV2RGB_COEF2_C3_MASK (0x7FFU)
  713. #define PDMA_YUV2RGB_COEF2_C3_SHIFT (0U)
  714. #define PDMA_YUV2RGB_COEF2_C3_SET(x) (((uint32_t)(x) << PDMA_YUV2RGB_COEF2_C3_SHIFT) & PDMA_YUV2RGB_COEF2_C3_MASK)
  715. #define PDMA_YUV2RGB_COEF2_C3_GET(x) (((uint32_t)(x) & PDMA_YUV2RGB_COEF2_C3_MASK) >> PDMA_YUV2RGB_COEF2_C3_SHIFT)
  716. /* Bitfield definition for register: RGB2YUV_COEF0 */
  717. /*
  718. * YCBCR_MODE (RW)
  719. *
  720. * Asserted to use YCrCb mode
  721. */
  722. #define PDMA_RGB2YUV_COEF0_YCBCR_MODE_MASK (0x80000000UL)
  723. #define PDMA_RGB2YUV_COEF0_YCBCR_MODE_SHIFT (31U)
  724. #define PDMA_RGB2YUV_COEF0_YCBCR_MODE_SET(x) (((uint32_t)(x) << PDMA_RGB2YUV_COEF0_YCBCR_MODE_SHIFT) & PDMA_RGB2YUV_COEF0_YCBCR_MODE_MASK)
  725. #define PDMA_RGB2YUV_COEF0_YCBCR_MODE_GET(x) (((uint32_t)(x) & PDMA_RGB2YUV_COEF0_YCBCR_MODE_MASK) >> PDMA_RGB2YUV_COEF0_YCBCR_MODE_SHIFT)
  726. /*
  727. * ENABLE (RW)
  728. *
  729. * Asserted to enable this RGB2YUV CSC stage
  730. */
  731. #define PDMA_RGB2YUV_COEF0_ENABLE_MASK (0x40000000UL)
  732. #define PDMA_RGB2YUV_COEF0_ENABLE_SHIFT (30U)
  733. #define PDMA_RGB2YUV_COEF0_ENABLE_SET(x) (((uint32_t)(x) << PDMA_RGB2YUV_COEF0_ENABLE_SHIFT) & PDMA_RGB2YUV_COEF0_ENABLE_MASK)
  734. #define PDMA_RGB2YUV_COEF0_ENABLE_GET(x) (((uint32_t)(x) & PDMA_RGB2YUV_COEF0_ENABLE_MASK) >> PDMA_RGB2YUV_COEF0_ENABLE_SHIFT)
  735. /*
  736. * C0 (RW)
  737. *
  738. * CSC parameters C0
  739. */
  740. #define PDMA_RGB2YUV_COEF0_C0_MASK (0x1FFC0000UL)
  741. #define PDMA_RGB2YUV_COEF0_C0_SHIFT (18U)
  742. #define PDMA_RGB2YUV_COEF0_C0_SET(x) (((uint32_t)(x) << PDMA_RGB2YUV_COEF0_C0_SHIFT) & PDMA_RGB2YUV_COEF0_C0_MASK)
  743. #define PDMA_RGB2YUV_COEF0_C0_GET(x) (((uint32_t)(x) & PDMA_RGB2YUV_COEF0_C0_MASK) >> PDMA_RGB2YUV_COEF0_C0_SHIFT)
  744. /*
  745. * UV_OFFSET (RW)
  746. *
  747. * CSC parameters UV_OFFSET
  748. */
  749. #define PDMA_RGB2YUV_COEF0_UV_OFFSET_MASK (0x3FE00UL)
  750. #define PDMA_RGB2YUV_COEF0_UV_OFFSET_SHIFT (9U)
  751. #define PDMA_RGB2YUV_COEF0_UV_OFFSET_SET(x) (((uint32_t)(x) << PDMA_RGB2YUV_COEF0_UV_OFFSET_SHIFT) & PDMA_RGB2YUV_COEF0_UV_OFFSET_MASK)
  752. #define PDMA_RGB2YUV_COEF0_UV_OFFSET_GET(x) (((uint32_t)(x) & PDMA_RGB2YUV_COEF0_UV_OFFSET_MASK) >> PDMA_RGB2YUV_COEF0_UV_OFFSET_SHIFT)
  753. /*
  754. * Y_OFFSET (RW)
  755. *
  756. * CSC parameters Y_OFFSET
  757. */
  758. #define PDMA_RGB2YUV_COEF0_Y_OFFSET_MASK (0x1FFU)
  759. #define PDMA_RGB2YUV_COEF0_Y_OFFSET_SHIFT (0U)
  760. #define PDMA_RGB2YUV_COEF0_Y_OFFSET_SET(x) (((uint32_t)(x) << PDMA_RGB2YUV_COEF0_Y_OFFSET_SHIFT) & PDMA_RGB2YUV_COEF0_Y_OFFSET_MASK)
  761. #define PDMA_RGB2YUV_COEF0_Y_OFFSET_GET(x) (((uint32_t)(x) & PDMA_RGB2YUV_COEF0_Y_OFFSET_MASK) >> PDMA_RGB2YUV_COEF0_Y_OFFSET_SHIFT)
  762. /* Bitfield definition for register: RGB2YUV_COEF1 */
  763. /*
  764. * C1 (RW)
  765. *
  766. * CSC parameters C1
  767. */
  768. #define PDMA_RGB2YUV_COEF1_C1_MASK (0x7FF0000UL)
  769. #define PDMA_RGB2YUV_COEF1_C1_SHIFT (16U)
  770. #define PDMA_RGB2YUV_COEF1_C1_SET(x) (((uint32_t)(x) << PDMA_RGB2YUV_COEF1_C1_SHIFT) & PDMA_RGB2YUV_COEF1_C1_MASK)
  771. #define PDMA_RGB2YUV_COEF1_C1_GET(x) (((uint32_t)(x) & PDMA_RGB2YUV_COEF1_C1_MASK) >> PDMA_RGB2YUV_COEF1_C1_SHIFT)
  772. /*
  773. * C4 (RW)
  774. *
  775. * CSC parameters C4
  776. */
  777. #define PDMA_RGB2YUV_COEF1_C4_MASK (0x7FFU)
  778. #define PDMA_RGB2YUV_COEF1_C4_SHIFT (0U)
  779. #define PDMA_RGB2YUV_COEF1_C4_SET(x) (((uint32_t)(x) << PDMA_RGB2YUV_COEF1_C4_SHIFT) & PDMA_RGB2YUV_COEF1_C4_MASK)
  780. #define PDMA_RGB2YUV_COEF1_C4_GET(x) (((uint32_t)(x) & PDMA_RGB2YUV_COEF1_C4_MASK) >> PDMA_RGB2YUV_COEF1_C4_SHIFT)
  781. /* Bitfield definition for register: RGB2YUV_COEF2 */
  782. /*
  783. * C2 (RW)
  784. *
  785. * CSC parameters C2
  786. */
  787. #define PDMA_RGB2YUV_COEF2_C2_MASK (0x7FF0000UL)
  788. #define PDMA_RGB2YUV_COEF2_C2_SHIFT (16U)
  789. #define PDMA_RGB2YUV_COEF2_C2_SET(x) (((uint32_t)(x) << PDMA_RGB2YUV_COEF2_C2_SHIFT) & PDMA_RGB2YUV_COEF2_C2_MASK)
  790. #define PDMA_RGB2YUV_COEF2_C2_GET(x) (((uint32_t)(x) & PDMA_RGB2YUV_COEF2_C2_MASK) >> PDMA_RGB2YUV_COEF2_C2_SHIFT)
  791. /*
  792. * C3 (RW)
  793. *
  794. * CSC parameters C3
  795. */
  796. #define PDMA_RGB2YUV_COEF2_C3_MASK (0x7FFU)
  797. #define PDMA_RGB2YUV_COEF2_C3_SHIFT (0U)
  798. #define PDMA_RGB2YUV_COEF2_C3_SET(x) (((uint32_t)(x) << PDMA_RGB2YUV_COEF2_C3_SHIFT) & PDMA_RGB2YUV_COEF2_C3_MASK)
  799. #define PDMA_RGB2YUV_COEF2_C3_GET(x) (((uint32_t)(x) & PDMA_RGB2YUV_COEF2_C3_MASK) >> PDMA_RGB2YUV_COEF2_C3_SHIFT)
  800. /* Bitfield definition for register: RGB2YUV_COEF3 */
  801. /*
  802. * C6 (RW)
  803. *
  804. * CSC parameters C6
  805. */
  806. #define PDMA_RGB2YUV_COEF3_C6_MASK (0x7FF0000UL)
  807. #define PDMA_RGB2YUV_COEF3_C6_SHIFT (16U)
  808. #define PDMA_RGB2YUV_COEF3_C6_SET(x) (((uint32_t)(x) << PDMA_RGB2YUV_COEF3_C6_SHIFT) & PDMA_RGB2YUV_COEF3_C6_MASK)
  809. #define PDMA_RGB2YUV_COEF3_C6_GET(x) (((uint32_t)(x) & PDMA_RGB2YUV_COEF3_C6_MASK) >> PDMA_RGB2YUV_COEF3_C6_SHIFT)
  810. /*
  811. * C5 (RW)
  812. *
  813. * CSC parameters C5
  814. */
  815. #define PDMA_RGB2YUV_COEF3_C5_MASK (0x7FFU)
  816. #define PDMA_RGB2YUV_COEF3_C5_SHIFT (0U)
  817. #define PDMA_RGB2YUV_COEF3_C5_SET(x) (((uint32_t)(x) << PDMA_RGB2YUV_COEF3_C5_SHIFT) & PDMA_RGB2YUV_COEF3_C5_MASK)
  818. #define PDMA_RGB2YUV_COEF3_C5_GET(x) (((uint32_t)(x) & PDMA_RGB2YUV_COEF3_C5_MASK) >> PDMA_RGB2YUV_COEF3_C5_SHIFT)
  819. /* Bitfield definition for register: RGB2YUV_COEF4 */
  820. /*
  821. * C8 (RW)
  822. *
  823. * CSC parameters C8
  824. */
  825. #define PDMA_RGB2YUV_COEF4_C8_MASK (0x7FF0000UL)
  826. #define PDMA_RGB2YUV_COEF4_C8_SHIFT (16U)
  827. #define PDMA_RGB2YUV_COEF4_C8_SET(x) (((uint32_t)(x) << PDMA_RGB2YUV_COEF4_C8_SHIFT) & PDMA_RGB2YUV_COEF4_C8_MASK)
  828. #define PDMA_RGB2YUV_COEF4_C8_GET(x) (((uint32_t)(x) & PDMA_RGB2YUV_COEF4_C8_MASK) >> PDMA_RGB2YUV_COEF4_C8_SHIFT)
  829. /*
  830. * C7 (RW)
  831. *
  832. * CSC parameters C7
  833. */
  834. #define PDMA_RGB2YUV_COEF4_C7_MASK (0x7FFU)
  835. #define PDMA_RGB2YUV_COEF4_C7_SHIFT (0U)
  836. #define PDMA_RGB2YUV_COEF4_C7_SET(x) (((uint32_t)(x) << PDMA_RGB2YUV_COEF4_C7_SHIFT) & PDMA_RGB2YUV_COEF4_C7_MASK)
  837. #define PDMA_RGB2YUV_COEF4_C7_GET(x) (((uint32_t)(x) & PDMA_RGB2YUV_COEF4_C7_MASK) >> PDMA_RGB2YUV_COEF4_C7_SHIFT)
  838. /* OUT_PS register group index macro definition */
  839. #define PDMA_OUT_PS_0 (0UL)
  840. #define PDMA_OUT_PS_1 (1UL)
  841. /* PS register group index macro definition */
  842. #define PDMA_PS_0 (0UL)
  843. #define PDMA_PS_1 (1UL)
  844. #endif /* HPM_PDMA_H */