armada_hw.h 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330
  1. /* SPDX-License-Identifier: GPL-2.0-only */
  2. /*
  3. * Copyright (C) 2012 Russell King
  4. * Rewritten from the dovefb driver, and Armada510 manuals.
  5. */
  6. #ifndef ARMADA_HW_H
  7. #define ARMADA_HW_H
  8. /*
  9. * Note: the following registers are written from IRQ context:
  10. * LCD_SPU_V_PORCH, LCD_SPU_ADV_REG, LCD_SPUT_V_H_TOTAL
  11. * LCD_SPU_DMA_START_ADDR_[YUV][01], LCD_SPU_DMA_PITCH_YC,
  12. * LCD_SPU_DMA_PITCH_UV, LCD_SPU_DMA_OVSA_HPXL_VLN,
  13. * LCD_SPU_DMA_HPXL_VLN, LCD_SPU_DZM_HPXL_VLN, LCD_SPU_DMA_CTRL0
  14. */
  15. enum {
  16. LCD_SPU_ADV_REG = 0x0084, /* Armada 510 */
  17. LCD_SPU_DMA_START_ADDR_Y0 = 0x00c0,
  18. LCD_SPU_DMA_START_ADDR_U0 = 0x00c4,
  19. LCD_SPU_DMA_START_ADDR_V0 = 0x00c8,
  20. LCD_CFG_DMA_START_ADDR_0 = 0x00cc,
  21. LCD_SPU_DMA_START_ADDR_Y1 = 0x00d0,
  22. LCD_SPU_DMA_START_ADDR_U1 = 0x00d4,
  23. LCD_SPU_DMA_START_ADDR_V1 = 0x00d8,
  24. LCD_CFG_DMA_START_ADDR_1 = 0x00dc,
  25. LCD_SPU_DMA_PITCH_YC = 0x00e0,
  26. LCD_SPU_DMA_PITCH_UV = 0x00e4,
  27. LCD_SPU_DMA_OVSA_HPXL_VLN = 0x00e8,
  28. LCD_SPU_DMA_HPXL_VLN = 0x00ec,
  29. LCD_SPU_DZM_HPXL_VLN = 0x00f0,
  30. LCD_CFG_GRA_START_ADDR0 = 0x00f4,
  31. LCD_CFG_GRA_START_ADDR1 = 0x00f8,
  32. LCD_CFG_GRA_PITCH = 0x00fc,
  33. LCD_SPU_GRA_OVSA_HPXL_VLN = 0x0100,
  34. LCD_SPU_GRA_HPXL_VLN = 0x0104,
  35. LCD_SPU_GZM_HPXL_VLN = 0x0108,
  36. LCD_SPU_HWC_OVSA_HPXL_VLN = 0x010c,
  37. LCD_SPU_HWC_HPXL_VLN = 0x0110,
  38. LCD_SPUT_V_H_TOTAL = 0x0114,
  39. LCD_SPU_V_H_ACTIVE = 0x0118,
  40. LCD_SPU_H_PORCH = 0x011c,
  41. LCD_SPU_V_PORCH = 0x0120,
  42. LCD_SPU_BLANKCOLOR = 0x0124,
  43. LCD_SPU_ALPHA_COLOR1 = 0x0128,
  44. LCD_SPU_ALPHA_COLOR2 = 0x012c,
  45. LCD_SPU_COLORKEY_Y = 0x0130,
  46. LCD_SPU_COLORKEY_U = 0x0134,
  47. LCD_SPU_COLORKEY_V = 0x0138,
  48. LCD_CFG_RDREG4F = 0x013c, /* Armada 510 */
  49. LCD_SPU_SPI_RXDATA = 0x0140,
  50. LCD_SPU_ISA_RXDATA = 0x0144,
  51. LCD_SPU_HWC_RDDAT = 0x0158,
  52. LCD_SPU_GAMMA_RDDAT = 0x015c,
  53. LCD_SPU_PALETTE_RDDAT = 0x0160,
  54. LCD_SPU_IOPAD_IN = 0x0178,
  55. LCD_CFG_RDREG5F = 0x017c,
  56. LCD_SPU_SPI_CTRL = 0x0180,
  57. LCD_SPU_SPI_TXDATA = 0x0184,
  58. LCD_SPU_SMPN_CTRL = 0x0188,
  59. LCD_SPU_DMA_CTRL0 = 0x0190,
  60. LCD_SPU_DMA_CTRL1 = 0x0194,
  61. LCD_SPU_SRAM_CTRL = 0x0198,
  62. LCD_SPU_SRAM_WRDAT = 0x019c,
  63. LCD_SPU_SRAM_PARA0 = 0x01a0, /* Armada 510 */
  64. LCD_SPU_SRAM_PARA1 = 0x01a4,
  65. LCD_CFG_SCLK_DIV = 0x01a8,
  66. LCD_SPU_CONTRAST = 0x01ac,
  67. LCD_SPU_SATURATION = 0x01b0,
  68. LCD_SPU_CBSH_HUE = 0x01b4,
  69. LCD_SPU_DUMB_CTRL = 0x01b8,
  70. LCD_SPU_IOPAD_CONTROL = 0x01bc,
  71. LCD_SPU_IRQ_ENA = 0x01c0,
  72. LCD_SPU_IRQ_ISR = 0x01c4,
  73. };
  74. /* For LCD_SPU_ADV_REG */
  75. enum {
  76. ADV_VSYNC_L_OFF = 0xfff << 20,
  77. ADV_GRACOLORKEY = 1 << 19,
  78. ADV_VIDCOLORKEY = 1 << 18,
  79. ADV_HWC32BLEND = 1 << 15,
  80. ADV_HWC32ARGB = 1 << 14,
  81. ADV_HWC32ENABLE = 1 << 13,
  82. ADV_VSYNCOFFEN = 1 << 12,
  83. ADV_VSYNC_H_OFF = 0xfff << 0,
  84. };
  85. /* LCD_CFG_RDREG4F - Armada 510 only */
  86. enum {
  87. CFG_SRAM_WAIT = BIT(11),
  88. CFG_SMPN_FASTTX = BIT(10),
  89. CFG_DMA_ARB = BIT(9),
  90. CFG_DMA_WM_EN = BIT(8),
  91. CFG_DMA_WM_MASK = 0xff,
  92. #define CFG_DMA_WM(x) ((x) & CFG_DMA_WM_MASK)
  93. };
  94. enum {
  95. CFG_565 = 0,
  96. CFG_1555 = 1,
  97. CFG_888PACK = 2,
  98. CFG_X888 = 3,
  99. CFG_8888 = 4,
  100. CFG_422PACK = 5,
  101. CFG_422 = 6,
  102. CFG_420 = 7,
  103. CFG_PSEUDO4 = 9,
  104. CFG_PSEUDO8 = 10,
  105. CFG_SWAPRB = 1 << 4,
  106. CFG_SWAPUV = 1 << 3,
  107. CFG_SWAPYU = 1 << 2,
  108. CFG_YUV2RGB = 1 << 1,
  109. };
  110. /* For LCD_SPU_DMA_CTRL0 */
  111. enum {
  112. CFG_NOBLENDING = 1 << 31,
  113. CFG_GAMMA_ENA = 1 << 30,
  114. CFG_CBSH_ENA = 1 << 29,
  115. CFG_PALETTE_ENA = 1 << 28,
  116. CFG_ARBFAST_ENA = 1 << 27,
  117. CFG_HWC_1BITMOD = 1 << 26,
  118. CFG_HWC_1BITENA = 1 << 25,
  119. CFG_HWC_ENA = 1 << 24,
  120. CFG_DMAFORMAT = 0xf << 20,
  121. #define CFG_DMA_FMT(x) ((x) << 20)
  122. CFG_GRAFORMAT = 0xf << 16,
  123. #define CFG_GRA_FMT(x) ((x) << 16)
  124. #define CFG_GRA_MOD(x) ((x) << 8)
  125. CFG_GRA_FTOGGLE = 1 << 15,
  126. CFG_GRA_HSMOOTH = 1 << 14,
  127. CFG_GRA_TSTMODE = 1 << 13,
  128. CFG_GRA_ENA = 1 << 8,
  129. #define CFG_DMA_MOD(x) ((x) << 0)
  130. CFG_DMA_FTOGGLE = 1 << 7,
  131. CFG_DMA_HSMOOTH = 1 << 6,
  132. CFG_DMA_TSTMODE = 1 << 5,
  133. CFG_DMA_ENA = 1 << 0,
  134. };
  135. enum {
  136. CKMODE_DISABLE = 0,
  137. CKMODE_Y = 1,
  138. CKMODE_U = 2,
  139. CKMODE_RGB = 3,
  140. CKMODE_V = 4,
  141. CKMODE_R = 5,
  142. CKMODE_G = 6,
  143. CKMODE_B = 7,
  144. };
  145. /* For LCD_SPU_DMA_CTRL1 */
  146. enum {
  147. CFG_FRAME_TRIG = 1 << 31,
  148. CFG_VSYNC_INV = 1 << 27,
  149. CFG_CKMODE_MASK = 0x7 << 24,
  150. #define CFG_CKMODE(x) ((x) << 24)
  151. CFG_CARRY = 1 << 23,
  152. CFG_GATED_CLK = 1 << 21,
  153. CFG_PWRDN_ENA = 1 << 20,
  154. CFG_DSCALE_MASK = 0x3 << 18,
  155. CFG_DSCALE_NONE = 0x0 << 18,
  156. CFG_DSCALE_HALF = 0x1 << 18,
  157. CFG_DSCALE_QUAR = 0x2 << 18,
  158. CFG_ALPHAM_MASK = 0x3 << 16,
  159. CFG_ALPHAM_VIDEO = 0x0 << 16,
  160. CFG_ALPHAM_GRA = 0x1 << 16,
  161. CFG_ALPHAM_CFG = 0x2 << 16,
  162. CFG_ALPHA_MASK = 0xff << 8,
  163. #define CFG_ALPHA(x) ((x) << 8)
  164. CFG_PIXCMD_MASK = 0xff,
  165. };
  166. /* For LCD_SPU_SRAM_CTRL */
  167. enum {
  168. SRAM_READ = 0 << 14,
  169. SRAM_WRITE = 2 << 14,
  170. SRAM_INIT = 3 << 14,
  171. SRAM_GAMMA_YR = 0x0 << 8,
  172. SRAM_GAMMA_UG = 0x1 << 8,
  173. SRAM_GAMMA_VB = 0x2 << 8,
  174. SRAM_PALETTE = 0x3 << 8,
  175. SRAM_HWC32_RAM1 = 0xc << 8,
  176. SRAM_HWC32_RAM2 = 0xd << 8,
  177. SRAM_HWC32_RAMR = SRAM_HWC32_RAM1,
  178. SRAM_HWC32_RAMG = SRAM_HWC32_RAM2,
  179. SRAM_HWC32_RAMB = 0xe << 8,
  180. SRAM_HWC32_TRAN = 0xf << 8,
  181. SRAM_HWC = 0xf << 8,
  182. };
  183. /* For LCD_SPU_SRAM_PARA1 */
  184. enum {
  185. CFG_CSB_256x32 = 1 << 15, /* cursor */
  186. CFG_CSB_256x24 = 1 << 14, /* palette */
  187. CFG_CSB_256x8 = 1 << 13, /* gamma */
  188. CFG_PDWN1920x32 = 1 << 8, /* Armada 510: power down vscale ram */
  189. CFG_PDWN256x32 = 1 << 7, /* power down cursor */
  190. CFG_PDWN256x24 = 1 << 6, /* power down palette */
  191. CFG_PDWN256x8 = 1 << 5, /* power down gamma */
  192. CFG_PDWNHWC = 1 << 4, /* Armada 510: power down all hwc ram */
  193. CFG_PDWN32x32 = 1 << 3, /* power down slave->smart ram */
  194. CFG_PDWN16x66 = 1 << 2, /* power down UV fifo */
  195. CFG_PDWN32x66 = 1 << 1, /* power down Y fifo */
  196. CFG_PDWN64x66 = 1 << 0, /* power down graphic fifo */
  197. };
  198. /* For LCD_CFG_SCLK_DIV */
  199. enum {
  200. /* Armada 510 */
  201. SCLK_510_AXI = 0x0 << 30,
  202. SCLK_510_EXTCLK0 = 0x1 << 30,
  203. SCLK_510_PLL = 0x2 << 30,
  204. SCLK_510_EXTCLK1 = 0x3 << 30,
  205. SCLK_510_DIV_CHANGE = 1 << 29,
  206. SCLK_510_FRAC_DIV_MASK = 0xfff << 16,
  207. SCLK_510_INT_DIV_MASK = 0xffff << 0,
  208. /* Armada 16x */
  209. SCLK_16X_AHB = 0x0 << 28,
  210. SCLK_16X_PCLK = 0x1 << 28,
  211. SCLK_16X_AXI = 0x4 << 28,
  212. SCLK_16X_PLL = 0x8 << 28,
  213. SCLK_16X_FRAC_DIV_MASK = 0xfff << 16,
  214. SCLK_16X_INT_DIV_MASK = 0xffff << 0,
  215. };
  216. /* For LCD_SPU_DUMB_CTRL */
  217. enum {
  218. DUMB16_RGB565_0 = 0x0 << 28,
  219. DUMB16_RGB565_1 = 0x1 << 28,
  220. DUMB18_RGB666_0 = 0x2 << 28,
  221. DUMB18_RGB666_1 = 0x3 << 28,
  222. DUMB12_RGB444_0 = 0x4 << 28,
  223. DUMB12_RGB444_1 = 0x5 << 28,
  224. DUMB24_RGB888_0 = 0x6 << 28,
  225. DUMB_BLANK = 0x7 << 28,
  226. DUMB_MASK = 0xf << 28,
  227. CFG_BIAS_OUT = 1 << 8,
  228. CFG_REV_RGB = 1 << 7,
  229. CFG_INV_CBLANK = 1 << 6,
  230. CFG_INV_CSYNC = 1 << 5, /* Normally active high */
  231. CFG_INV_HENA = 1 << 4,
  232. CFG_INV_VSYNC = 1 << 3, /* Normally active high */
  233. CFG_INV_HSYNC = 1 << 2, /* Normally active high */
  234. CFG_INV_PCLK = 1 << 1,
  235. CFG_DUMB_ENA = 1 << 0,
  236. };
  237. /* For LCD_SPU_IOPAD_CONTROL */
  238. enum {
  239. CFG_VSCALE_LN_EN = 3 << 18,
  240. CFG_GRA_VM_ENA = 1 << 15,
  241. CFG_DMA_VM_ENA = 1 << 13,
  242. CFG_CMD_VM_ENA = 1 << 11,
  243. CFG_CSC_MASK = 3 << 8,
  244. CFG_CSC_YUV_CCIR709 = 1 << 9,
  245. CFG_CSC_YUV_CCIR601 = 0 << 9,
  246. CFG_CSC_RGB_STUDIO = 1 << 8,
  247. CFG_CSC_RGB_COMPUTER = 0 << 8,
  248. CFG_IOPAD_MASK = 0xf << 0,
  249. CFG_IOPAD_DUMB24 = 0x0 << 0,
  250. CFG_IOPAD_DUMB18SPI = 0x1 << 0,
  251. CFG_IOPAD_DUMB18GPIO = 0x2 << 0,
  252. CFG_IOPAD_DUMB16SPI = 0x3 << 0,
  253. CFG_IOPAD_DUMB16GPIO = 0x4 << 0,
  254. CFG_IOPAD_DUMB12GPIO = 0x5 << 0,
  255. CFG_IOPAD_SMART18 = 0x6 << 0,
  256. CFG_IOPAD_SMART16 = 0x7 << 0,
  257. CFG_IOPAD_SMART8 = 0x8 << 0,
  258. };
  259. #define IOPAD_DUMB24 0x0
  260. /* For LCD_SPU_IRQ_ENA */
  261. enum {
  262. DMA_FRAME_IRQ0_ENA = 1 << 31,
  263. DMA_FRAME_IRQ1_ENA = 1 << 30,
  264. DMA_FRAME_IRQ_ENA = DMA_FRAME_IRQ0_ENA | DMA_FRAME_IRQ1_ENA,
  265. DMA_FF_UNDERFLOW_ENA = 1 << 29,
  266. GRA_FRAME_IRQ0_ENA = 1 << 27,
  267. GRA_FRAME_IRQ1_ENA = 1 << 26,
  268. GRA_FRAME_IRQ_ENA = GRA_FRAME_IRQ0_ENA | GRA_FRAME_IRQ1_ENA,
  269. GRA_FF_UNDERFLOW_ENA = 1 << 25,
  270. VSYNC_IRQ_ENA = 1 << 23,
  271. DUMB_FRAMEDONE_ENA = 1 << 22,
  272. TWC_FRAMEDONE_ENA = 1 << 21,
  273. HWC_FRAMEDONE_ENA = 1 << 20,
  274. SLV_IRQ_ENA = 1 << 19,
  275. SPI_IRQ_ENA = 1 << 18,
  276. PWRDN_IRQ_ENA = 1 << 17,
  277. ERR_IRQ_ENA = 1 << 16,
  278. CLEAN_SPU_IRQ_ISR = 0xffff,
  279. };
  280. /* For LCD_SPU_IRQ_ISR */
  281. enum {
  282. DMA_FRAME_IRQ0 = 1 << 31,
  283. DMA_FRAME_IRQ1 = 1 << 30,
  284. DMA_FRAME_IRQ = DMA_FRAME_IRQ0 | DMA_FRAME_IRQ1,
  285. DMA_FF_UNDERFLOW = 1 << 29,
  286. GRA_FRAME_IRQ0 = 1 << 27,
  287. GRA_FRAME_IRQ1 = 1 << 26,
  288. GRA_FRAME_IRQ = GRA_FRAME_IRQ0 | GRA_FRAME_IRQ1,
  289. GRA_FF_UNDERFLOW = 1 << 25,
  290. VSYNC_IRQ = 1 << 23,
  291. DUMB_FRAMEDONE = 1 << 22,
  292. TWC_FRAMEDONE = 1 << 21,
  293. HWC_FRAMEDONE = 1 << 20,
  294. SLV_IRQ = 1 << 19,
  295. SPI_IRQ = 1 << 18,
  296. PWRDN_IRQ = 1 << 17,
  297. ERR_IRQ = 1 << 16,
  298. DMA_FRAME_IRQ0_LEVEL = 1 << 15,
  299. DMA_FRAME_IRQ1_LEVEL = 1 << 14,
  300. DMA_FRAME_CNT_ISR = 3 << 12,
  301. GRA_FRAME_IRQ0_LEVEL = 1 << 11,
  302. GRA_FRAME_IRQ1_LEVEL = 1 << 10,
  303. GRA_FRAME_CNT_ISR = 3 << 8,
  304. VSYNC_IRQ_LEVEL = 1 << 7,
  305. DUMB_FRAMEDONE_LEVEL = 1 << 6,
  306. TWC_FRAMEDONE_LEVEL = 1 << 5,
  307. HWC_FRAMEDONE_LEVEL = 1 << 4,
  308. SLV_FF_EMPTY = 1 << 3,
  309. DMA_FF_ALLEMPTY = 1 << 2,
  310. GRA_FF_ALLEMPTY = 1 << 1,
  311. PWRDN_IRQ_LEVEL = 1 << 0,
  312. };
  313. #endif