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