tidss_dispc7.h 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. /*
  3. * Copyright (C) 2016-2018 Texas Instruments Incorporated - http://www.ti.com/
  4. * Author: Jyri Sarha <jsarha@ti.com>
  5. */
  6. #ifndef __TIDSS_DISPC7_H
  7. #define __TIDSS_DISPC7_H
  8. #define DISPC7_MAX_COMMONS 4
  9. #define DISPC7_MAX_PORTS 4
  10. #define DISPC7_MAX_PLANES 4
  11. struct dispc7_features_scaling {
  12. u32 in_width_max_5tap_rgb;
  13. u32 in_width_max_3tap_rgb;
  14. u32 in_width_max_5tap_yuv;
  15. u32 in_width_max_3tap_yuv;
  16. u32 upscale_limit;
  17. u32 downscale_limit_5tap;
  18. u32 downscale_limit_3tap;
  19. u32 xinc_max;
  20. };
  21. struct dispc7_errata {
  22. bool i2000; /* DSS Does Not Support YUV Pixel Data Formats */
  23. };
  24. enum dispc7_vp_bus_type {
  25. DISPC7_VP_DPI, /* DPI output */
  26. DISPC7_VP_OLDI, /* OLDI (LVDS) output */
  27. DISPC7_VP_INTERNAL, /* SoC internal routing */
  28. DISPC7_VP_MAX_BUS_TYPE,
  29. };
  30. enum dispc7_dss_subrevision {
  31. DSS7_AM6,
  32. DSS7_J721E,
  33. };
  34. struct dispc7_features {
  35. int max_pclk_kHz[DISPC7_VP_MAX_BUS_TYPE];
  36. u32 num_commons;
  37. const char *common_name[DISPC7_MAX_COMMONS];
  38. bool common_cfg[DISPC7_MAX_COMMONS];
  39. struct dispc7_features_scaling scaling;
  40. enum dispc7_dss_subrevision subrev;
  41. u32 num_vps;
  42. const char *vp_name[DISPC7_MAX_PORTS]; /* Should match dt reg names */
  43. const char *ovr_name[DISPC7_MAX_PORTS]; /* Should match dt reg names */
  44. const char *vpclk_name[DISPC7_MAX_PORTS]; /* Should match dt clk names */
  45. const enum dispc7_vp_bus_type vp_bus_type[DISPC7_MAX_PORTS];
  46. struct tidss_vp_feat vp_feat;
  47. u32 num_planes;
  48. const char *vid_name[DISPC7_MAX_PLANES]; /* Should match dt reg names */
  49. bool vid_lite[DISPC7_MAX_PLANES];
  50. u32 vid_order[DISPC7_MAX_PLANES];
  51. bool has_writeback;
  52. const char *wb_name; /* Should match dt reg names */
  53. struct dispc7_errata errata;
  54. };
  55. enum dss7_common_regs {
  56. NOT_APPLICABLE_OFF = 0,
  57. DSS_REVISION_OFF,
  58. DSS_SYSCONFIG_OFF,
  59. DSS_SYSSTATUS_OFF,
  60. DISPC_IRQ_EOI_OFF,
  61. DISPC_IRQSTATUS_RAW_OFF,
  62. DISPC_IRQSTATUS_OFF,
  63. DISPC_IRQENABLE_SET_OFF,
  64. DISPC_IRQENABLE_CLR_OFF,
  65. DISPC_VID_IRQENABLE_OFF,
  66. DISPC_VID_IRQSTATUS_OFF,
  67. DISPC_VP_IRQENABLE_OFF,
  68. DISPC_VP_IRQSTATUS_OFF,
  69. WB_IRQENABLE_OFF,
  70. WB_IRQSTATUS_OFF,
  71. DISPC_GLOBAL_MFLAG_ATTRIBUTE_OFF,
  72. DISPC_GLOBAL_OUTPUT_ENABLE_OFF,
  73. DISPC_GLOBAL_BUFFER_OFF,
  74. DSS_CBA_CFG_OFF,
  75. DISPC_DBG_CONTROL_OFF,
  76. DISPC_DBG_STATUS_OFF,
  77. DISPC_CLKGATING_DISABLE_OFF,
  78. DISPC_SECURE_DISABLE_OFF,
  79. FBDC_REVISION_1_OFF,
  80. FBDC_REVISION_2_OFF,
  81. FBDC_REVISION_3_OFF,
  82. FBDC_REVISION_4_OFF,
  83. FBDC_REVISION_5_OFF,
  84. FBDC_REVISION_6_OFF,
  85. FBDC_COMMON_CONTROL_OFF,
  86. FBDC_CONSTANT_COLOR_0_OFF,
  87. FBDC_CONSTANT_COLOR_1_OFF,
  88. DISPC_CONNECTIONS_OFF,
  89. DISPC_MSS_VP1_OFF,
  90. DISPC_MSS_VP3_OFF,
  91. DSS7_COMMON_REG_TABLE_LEN,
  92. };
  93. enum dss7_writeback_connections {
  94. DSS7_WB_BYPASS = 0x0,
  95. DSS7_WB_VIDL2 = 0x1,
  96. DSS7_WB_OVR1 = 0x2,
  97. DSS7_WB_OVR2 = 0x4,
  98. DSS7_WB_OVR3 = 0x8,
  99. DSS7_WB_OVR4 = 0x10,
  100. };
  101. /*
  102. * dispc7_common_regmap should be defined as const u16 * and pointing
  103. * to a valid dss common register map for the platform, before the
  104. * macros bellow can be used.
  105. */
  106. #define REG(r) (dispc7_common_regmap[r ## _OFF])
  107. #define DSS_REVISION REG(DSS_REVISION)
  108. #define DSS_SYSCONFIG REG(DSS_SYSCONFIG)
  109. #define DSS_SYSSTATUS REG(DSS_SYSSTATUS)
  110. #define DISPC_IRQ_EOI REG(DISPC_IRQ_EOI)
  111. #define DISPC_IRQSTATUS_RAW REG(DISPC_IRQSTATUS_RAW)
  112. #define DISPC_IRQSTATUS REG(DISPC_IRQSTATUS)
  113. #define DISPC_IRQENABLE_SET REG(DISPC_IRQENABLE_SET)
  114. #define DISPC_IRQENABLE_CLR REG(DISPC_IRQENABLE_CLR)
  115. #define DISPC_VID_IRQENABLE(n) (REG(DISPC_VID_IRQENABLE) + (n) * 4)
  116. #define DISPC_VID_IRQSTATUS(n) (REG(DISPC_VID_IRQSTATUS) + (n) * 4)
  117. #define DISPC_VP_IRQENABLE(n) (REG(DISPC_VP_IRQENABLE) + (n) * 4)
  118. #define DISPC_VP_IRQSTATUS(n) (REG(DISPC_VP_IRQSTATUS) + (n) * 4)
  119. #define WB_IRQENABLE REG(WB_IRQENABLE)
  120. #define WB_IRQSTATUS REG(WB_IRQSTATUS)
  121. #define DISPC_GLOBAL_MFLAG_ATTRIBUTE REG(DISPC_GLOBAL_MFLAG_ATTRIBUTE)
  122. #define DISPC_GLOBAL_OUTPUT_ENABLE REG(DISPC_GLOBAL_OUTPUT_ENABLE)
  123. #define DISPC_GLOBAL_BUFFER REG(DISPC_GLOBAL_BUFFER)
  124. #define DSS_CBA_CFG REG(DSS_CBA_CFG)
  125. #define DISPC_DBG_CONTROL REG(DISPC_DBG_CONTROL)
  126. #define DISPC_DBG_STATUS REG(DISPC_DBG_STATUS)
  127. #define DISPC_CLKGATING_DISABLE REG(DISPC_CLKGATING_DISABLE)
  128. #define DISPC_SECURE_DISABLE REG(DISPC_SECURE_DISABLE)
  129. #define FBDC_REVISION_1 REG(FBDC_REVISION_1)
  130. #define FBDC_REVISION_2 REG(FBDC_REVISION_2)
  131. #define FBDC_REVISION_3 REG(FBDC_REVISION_3)
  132. #define FBDC_REVISION_4 REG(FBDC_REVISION_4)
  133. #define FBDC_REVISION_5 REG(FBDC_REVISION_5)
  134. #define FBDC_REVISION_6 REG(FBDC_REVISION_6)
  135. #define FBDC_COMMON_CONTROL REG(FBDC_COMMON_CONTROL)
  136. #define FBDC_CONSTANT_COLOR_0 REG(FBDC_CONSTANT_COLOR_0)
  137. #define FBDC_CONSTANT_COLOR_1 REG(FBDC_CONSTANT_COLOR_1)
  138. #define DISPC_CONNECTIONS REG(DISPC_CONNECTIONS)
  139. #define DISPC_MSS_VP1 REG(DISPC_MSS_VP1)
  140. #define DISPC_MSS_VP3 REG(DISPC_MSS_VP3)
  141. /* COMMON1 not implemented */
  142. /* VID */
  143. #define DISPC_VID_ACCUH_0 0x0
  144. #define DISPC_VID_ACCUH_1 0x4
  145. #define DISPC_VID_ACCUH2_0 0x8
  146. #define DISPC_VID_ACCUH2_1 0xc
  147. #define DISPC_VID_ACCUV_0 0x10
  148. #define DISPC_VID_ACCUV_1 0x14
  149. #define DISPC_VID_ACCUV2_0 0x18
  150. #define DISPC_VID_ACCUV2_1 0x1c
  151. #define DISPC_VID_ATTRIBUTES 0x20
  152. #define DISPC_VID_ATTRIBUTES2 0x24
  153. #define DISPC_VID_BA_0 0x28
  154. #define DISPC_VID_BA_1 0x2c
  155. #define DISPC_VID_BA_UV_0 0x30
  156. #define DISPC_VID_BA_UV_1 0x34
  157. #define DISPC_VID_BUF_SIZE_STATUS 0x38
  158. #define DISPC_VID_BUF_THRESHOLD 0x3c
  159. #define DISPC_VID_CSC_COEF(n) (0x40 + (n) * 4)
  160. #define DISPC_VID_FIRH 0x5c
  161. #define DISPC_VID_FIRH2 0x60
  162. #define DISPC_VID_FIRV 0x64
  163. #define DISPC_VID_FIRV2 0x68
  164. #define DISPC_VID_FIR_COEFS_H0 0x6c
  165. #define DISPC_VID_FIR_COEF_H0(phase) (0x6c + (phase) * 4)
  166. #define DISPC_VID_FIR_COEFS_H0_C 0x90
  167. #define DISPC_VID_FIR_COEF_H0_C(phase) (0x90 + (phase) * 4)
  168. #define DISPC_VID_FIR_COEFS_H12 0xb4
  169. #define DISPC_VID_FIR_COEF_H12(phase) (0xb4 + (phase) * 4)
  170. #define DISPC_VID_FIR_COEFS_H12_C 0xf4
  171. #define DISPC_VID_FIR_COEF_H12_C(phase) (0xf4 + (phase) * 4)
  172. #define DISPC_VID_FIR_COEFS_V0 0x134
  173. #define DISPC_VID_FIR_COEF_V0(phase) (0x134 + (phase) * 4)
  174. #define DISPC_VID_FIR_COEFS_V0_C 0x158
  175. #define DISPC_VID_FIR_COEF_V0_C(phase) (0x158 + (phase) * 4)
  176. #define DISPC_VID_FIR_COEFS_V12 0x17c
  177. #define DISPC_VID_FIR_COEF_V12(phase) (0x17c + (phase) * 4)
  178. #define DISPC_VID_FIR_COEFS_V12_C 0x1bc
  179. #define DISPC_VID_FIR_COEF_V12_C(phase) (0x1bc + (phase) * 4)
  180. #define DISPC_VID_GLOBAL_ALPHA 0x1fc
  181. #define DISPC_VID_MFLAG_THRESHOLD 0x208
  182. #define DISPC_VID_PICTURE_SIZE 0x20c
  183. #define DISPC_VID_PIXEL_INC 0x210
  184. #define DISPC_VID_PRELOAD 0x218
  185. #define DISPC_VID_ROW_INC 0x21c
  186. #define DISPC_VID_SIZE 0x220
  187. #define DISPC_VID_BA_EXT_0 0x22c
  188. #define DISPC_VID_BA_EXT_1 0x230
  189. #define DISPC_VID_BA_UV_EXT_0 0x234
  190. #define DISPC_VID_BA_UV_EXT_1 0x238
  191. #define DISPC_VID_CSC_COEF7 0x23c
  192. #define DISPC_VID_ROW_INC_UV 0x248
  193. #define DISPC_VID_CLUT 0x260
  194. #define DISPC_VID_SAFETY_ATTRIBUTES 0x2a0
  195. #define DISPC_VID_SAFETY_CAPT_SIGNATURE 0x2a4
  196. #define DISPC_VID_SAFETY_POSITION 0x2a8
  197. #define DISPC_VID_SAFETY_REF_SIGNATURE 0x2ac
  198. #define DISPC_VID_SAFETY_SIZE 0x2b0
  199. #define DISPC_VID_SAFETY_LFSR_SEED 0x2b4
  200. #define DISPC_VID_LUMAKEY 0x2b8
  201. #define DISPC_VID_DMA_BUFSIZE 0x2bc /* J721E */
  202. /* WB */
  203. #define DISPC_WB_ACCUH_0 0x0
  204. #define DISPC_WB_ACCUH_1 0x4
  205. #define DISPC_WB_ACCUH2_0 0x8
  206. #define DISPC_WB_ACCUH2_1 0xc
  207. #define DISPC_WB_ACCUV_0 0x10
  208. #define DISPC_WB_ACCUV_1 0x14
  209. #define DISPC_WB_ACCUV2_0 0x18
  210. #define DISPC_WB_ACCUV2_1 0x1c
  211. #define DISPC_WB_ATTRIBUTES 0x20
  212. #define DISPC_WB_ATTRIBUTES2 0x24
  213. #define DISPC_WB_BA_0 0x28
  214. #define DISPC_WB_BA_1 0x2c
  215. #define DISPC_WB_BA_UV_0 0x30
  216. #define DISPC_WB_BA_UV_1 0x34
  217. #define DISPC_WB_BUF_SIZE_STATUS 0x38
  218. #define DISPC_WB_BUF_THRESHOLD 0x3c
  219. #define DISPC_WB_CSC_COEF(n) (0x40 + (n) * 4)
  220. #define DISPC_WB_FIRH 0x5c
  221. #define DISPC_WB_FIRH2 0x60
  222. #define DISPC_WB_FIRV 0x64
  223. #define DISPC_WB_FIRV2 0x68
  224. #define DISPC_WB_FIR_COEFS_H0 0x6c
  225. #define DISPC_WB_FIR_COEF_H0(phase) (0x6c + (phase) * 4)
  226. #define DISPC_WB_FIR_COEFS_H0_C 0x90
  227. #define DISPC_WB_FIR_COEF_H0_C(phase) (0x90 + (phase) * 4)
  228. #define DISPC_WB_FIR_COEFS_H12 0xb4
  229. #define DISPC_WB_FIR_COEF_H12(phase) (0xb4 + (phase) * 4)
  230. #define DISPC_WB_FIR_COEFS_H12_C 0xf4
  231. #define DISPC_WB_FIR_COEF_H12_C(phase) (0xf4 + (phase) * 4)
  232. #define DISPC_WB_FIR_COEFS_V0 0x134
  233. #define DISPC_WB_FIR_COEF_V0(phase) (0x134 + (phase) * 4)
  234. #define DISPC_WB_FIR_COEFS_V0_C 0x158
  235. #define DISPC_WB_FIR_COEF_V0_C(phase) (0x158 + (phase) * 4)
  236. #define DISPC_WB_FIR_COEFS_V12 0x17c
  237. #define DISPC_WB_FIR_COEF_V12(phase) (0x17c + (phase) * 4)
  238. #define DISPC_WB_FIR_COEFS_V12_C 0x1bc
  239. #define DISPC_WB_FIR_COEF_V12_C(phase) (0x1bc + (phase) * 4)
  240. #define DISPC_WB_MFLAG_THRESHOLD 0x204
  241. #define DISPC_WB_PICTURE_SIZE 0x208
  242. #define DISPC_WB_SIZE 0x210
  243. #define DISPC_WB_POSITION 0x214
  244. #define DISPC_WB_CSC_COEF7 0x21c
  245. #define DISPC_WB_ROW_INC 0x224
  246. #define DISPC_WB_ROW_INC_UV 0x228
  247. #define DISPC_WB_BA_EXT_0 0x22c
  248. #define DISPC_WB_BA_EXT_1 0x230
  249. #define DISPC_WB_BA_UV_EXT_0 0x234
  250. #define DISPC_WB_BA_UV_EXT_1 0x238
  251. #define DISPC_WB_SECURE 0x248
  252. /* OVR */
  253. #define DISPC_OVR_CONFIG 0x0
  254. #define DISPC_OVR_VIRTVP 0x4 /* J721E */
  255. #define DISPC_OVR_DEFAULT_COLOR 0x8
  256. #define DISPC_OVR_DEFAULT_COLOR2 0xc
  257. #define DISPC_OVR_TRANS_COLOR_MAX 0x10
  258. #define DISPC_OVR_TRANS_COLOR_MAX2 0x14
  259. #define DISPC_OVR_TRANS_COLOR_MIN 0x18
  260. #define DISPC_OVR_TRANS_COLOR_MIN2 0x1c
  261. #define DISPC_OVR_ATTRIBUTES(n) (0x20 + (n) * 4)
  262. #define DISPC_OVR_ATTRIBUTES2(n) (0x34 + (n) * 4) /* J721E */
  263. /* VP */
  264. #define DISPC_VP_CONFIG 0x0
  265. #define DISPC_VP_CONTROL 0x4
  266. #define DISPC_VP_CSC_COEF0 0x8
  267. #define DISPC_VP_CSC_COEF1 0xc
  268. #define DISPC_VP_CSC_COEF2 0x10
  269. #define DISPC_VP_DATA_CYCLE_0 0x14
  270. #define DISPC_VP_DATA_CYCLE_1 0x18
  271. #define DISPC_VP_DATA_CYCLE_2 0x1c
  272. #define DISPC_VP_LINE_NUMBER 0x44
  273. #define DISPC_VP_POL_FREQ 0x4c
  274. #define DISPC_VP_SIZE_SCREEN 0x50
  275. #define DISPC_VP_TIMING_H 0x54
  276. #define DISPC_VP_TIMING_V 0x58
  277. #define DISPC_VP_CSC_COEF3 0x5c
  278. #define DISPC_VP_CSC_COEF4 0x60
  279. #define DISPC_VP_CSC_COEF5 0x64
  280. #define DISPC_VP_CSC_COEF6 0x68
  281. #define DISPC_VP_CSC_COEF7 0x6c
  282. #define DISPC_VP_SAFETY_ATTRIBUTES_0 0x70
  283. #define DISPC_VP_SAFETY_ATTRIBUTES_1 0x74
  284. #define DISPC_VP_SAFETY_ATTRIBUTES_2 0x78
  285. #define DISPC_VP_SAFETY_ATTRIBUTES_3 0x7c
  286. #define DISPC_VP_SAFETY_CAPT_SIGNATURE_0 0x90
  287. #define DISPC_VP_SAFETY_CAPT_SIGNATURE_1 0x94
  288. #define DISPC_VP_SAFETY_CAPT_SIGNATURE_2 0x98
  289. #define DISPC_VP_SAFETY_CAPT_SIGNATURE_3 0x9c
  290. #define DISPC_VP_SAFETY_POSITION_0 0xb0
  291. #define DISPC_VP_SAFETY_POSITION_1 0xb4
  292. #define DISPC_VP_SAFETY_POSITION_2 0xb8
  293. #define DISPC_VP_SAFETY_POSITION_3 0xbc
  294. #define DISPC_VP_SAFETY_REF_SIGNATURE_0 0xd0
  295. #define DISPC_VP_SAFETY_REF_SIGNATURE_1 0xd4
  296. #define DISPC_VP_SAFETY_REF_SIGNATURE_2 0xd8
  297. #define DISPC_VP_SAFETY_REF_SIGNATURE_3 0xdc
  298. #define DISPC_VP_SAFETY_SIZE_0 0xf0
  299. #define DISPC_VP_SAFETY_SIZE_1 0xf4
  300. #define DISPC_VP_SAFETY_SIZE_2 0xf8
  301. #define DISPC_VP_SAFETY_SIZE_3 0xfc
  302. #define DISPC_VP_SAFETY_LFSR_SEED 0x110
  303. #define DISPC_VP_GAMMA_TABLE 0x120
  304. #define DISPC_VP_DSS_OLDI_CFG 0x160
  305. #define DISPC_VP_DSS_OLDI_STATUS 0x164
  306. #define DISPC_VP_DSS_OLDI_LB 0x168
  307. #define DISPC_VP_DSS_MERGE_SPLIT 0x16c /* J721E */
  308. #define DISPC_VP_DSS_DMA_THREADSIZE 0x170 /* J721E */
  309. #define DISPC_VP_DSS_DMA_THREADSIZE_STATUS 0x174 /* J721E */
  310. /* CTRL_MMR0 access trough syscon */
  311. #define CTRLMMR0P1_OLDI_DAT0_IO_CTRL 0x41E0
  312. #define CTRLMMR0P1_OLDI_DAT1_IO_CTRL 0x41E4
  313. #define CTRLMMR0P1_OLDI_DAT2_IO_CTRL 0x41E8
  314. #define CTRLMMR0P1_OLDI_DAT3_IO_CTRL 0x41EC
  315. #define CTRLMMR0P1_OLDI_CLK_IO_CTRL 0x41F0
  316. #define CTRLMMR0P1_OLDI_PWRDN_TX BIT(8)
  317. #endif /* __TIDSS_DISPC7_H */