xref: /linux/drivers/gpu/drm/i915/display/intel_color_regs.h (revision a1ff5a7d78a036d6c2178ee5acd6ba4946243800)
1 /* SPDX-License-Identifier: MIT */
2 /*
3  * Copyright © 2023 Intel Corporation
4  */
5 
6 #ifndef __INTEL_COLOR_REGS_H__
7 #define __INTEL_COLOR_REGS_H__
8 
9 #include "intel_display_reg_defs.h"
10 
11 /* GMCH palette */
12 #define _PALETTE_A		0xa000
13 #define _PALETTE_B		0xa800
14 #define _CHV_PALETTE_C		0xc000
15 /* 8bit mode / i965+ 10.6 interpolated mode ldw/udw */
16 #define   PALETTE_RED_MASK		REG_GENMASK(23, 16)
17 #define   PALETTE_GREEN_MASK		REG_GENMASK(15, 8)
18 #define   PALETTE_BLUE_MASK		REG_GENMASK(7, 0)
19 /* pre-i965 10bit interpolated mode ldw */
20 #define   PALETTE_10BIT_RED_LDW_MASK	REG_GENMASK(23, 16)
21 #define   PALETTE_10BIT_GREEN_LDW_MASK	REG_GENMASK(15, 8)
22 #define   PALETTE_10BIT_BLUE_LDW_MASK	REG_GENMASK(7, 0)
23 /* pre-i965 10bit interpolated mode udw */
24 #define   PALETTE_10BIT_RED_EXP_MASK	REG_GENMASK(23, 22)
25 #define   PALETTE_10BIT_RED_MANT_MASK	REG_GENMASK(21, 18)
26 #define   PALETTE_10BIT_RED_UDW_MASK	REG_GENMASK(17, 16)
27 #define   PALETTE_10BIT_GREEN_EXP_MASK	REG_GENMASK(15, 14)
28 #define   PALETTE_10BIT_GREEN_MANT_MASK	REG_GENMASK(13, 10)
29 #define   PALETTE_10BIT_GREEN_UDW_MASK	REG_GENMASK(9, 8)
30 #define   PALETTE_10BIT_BLUE_EXP_MASK	REG_GENMASK(7, 6)
31 #define   PALETTE_10BIT_BLUE_MANT_MASK	REG_GENMASK(5, 2)
32 #define   PALETTE_10BIT_BLUE_UDW_MASK	REG_GENMASK(1, 0)
33 #define PALETTE(dev_priv, pipe, i) _MMIO(DISPLAY_MMIO_BASE(dev_priv) +			\
34 			       _PICK_EVEN_2RANGES(pipe, 2,			\
35 						  _PALETTE_A, _PALETTE_B,	\
36 						  _CHV_PALETTE_C, _CHV_PALETTE_C) + \
37 						  (i) * 4)
38 
39 /* i965/g4x/vlv/chv */
40 #define  _PIPEAGCMAX			0x70010
41 #define  _PIPEBGCMAX			0x71010
42 #define PIPEGCMAX(dev_priv, pipe, i)	_MMIO_PIPE2(dev_priv, pipe, _PIPEAGCMAX + (i) * 4) /* u1.16 */
43 
44 /* ilk+ palette */
45 #define _LGC_PALETTE_A           0x4a000
46 #define _LGC_PALETTE_B           0x4a800
47 /* see PALETTE_* for the bits */
48 #define LGC_PALETTE(pipe, i) _MMIO(_PIPE(pipe, _LGC_PALETTE_A, _LGC_PALETTE_B) + (i) * 4)
49 
50 /* ilk/snb precision palette */
51 #define _PREC_PALETTE_A           0x4b000
52 #define _PREC_PALETTE_B           0x4c000
53 /* 10bit mode */
54 #define   PREC_PALETTE_10_RED_MASK		REG_GENMASK(29, 20)
55 #define   PREC_PALETTE_10_GREEN_MASK		REG_GENMASK(19, 10)
56 #define   PREC_PALETTE_10_BLUE_MASK		REG_GENMASK(9, 0)
57 /* 12.4 interpolated mode ldw */
58 #define   PREC_PALETTE_12P4_RED_LDW_MASK	REG_GENMASK(29, 24)
59 #define   PREC_PALETTE_12P4_GREEN_LDW_MASK	REG_GENMASK(19, 14)
60 #define   PREC_PALETTE_12P4_BLUE_LDW_MASK	REG_GENMASK(9, 4)
61 /* 12.4 interpolated mode udw */
62 #define   PREC_PALETTE_12P4_RED_UDW_MASK	REG_GENMASK(29, 20)
63 #define   PREC_PALETTE_12P4_GREEN_UDW_MASK	REG_GENMASK(19, 10)
64 #define   PREC_PALETTE_12P4_BLUE_UDW_MASK	REG_GENMASK(9, 0)
65 #define PREC_PALETTE(pipe, i) _MMIO(_PIPE(pipe, _PREC_PALETTE_A, _PREC_PALETTE_B) + (i) * 4)
66 
67 #define  _PREC_PIPEAGCMAX              0x4d000
68 #define  _PREC_PIPEBGCMAX              0x4d010
69 #define PREC_PIPEGCMAX(pipe, i)        _MMIO(_PIPE(pipe, _PIPEAGCMAX, _PIPEBGCMAX) + (i) * 4) /* u1.16 */
70 
71 #define _GAMMA_MODE_A		0x4a480
72 #define _GAMMA_MODE_B		0x4ac80
73 #define GAMMA_MODE(pipe) _MMIO_PIPE(pipe, _GAMMA_MODE_A, _GAMMA_MODE_B)
74 #define  PRE_CSC_GAMMA_ENABLE			REG_BIT(31) /* icl+ */
75 #define  POST_CSC_GAMMA_ENABLE			REG_BIT(30) /* icl+ */
76 #define  PALETTE_ANTICOL_DISABLE		REG_BIT(15) /* skl+ */
77 #define  GAMMA_MODE_MODE_MASK			REG_GENMASK(1, 0)
78 #define  GAMMA_MODE_MODE_8BIT			REG_FIELD_PREP(GAMMA_MODE_MODE_MASK, 0)
79 #define  GAMMA_MODE_MODE_10BIT			REG_FIELD_PREP(GAMMA_MODE_MODE_MASK, 1)
80 #define  GAMMA_MODE_MODE_12BIT			REG_FIELD_PREP(GAMMA_MODE_MODE_MASK, 2)
81 #define  GAMMA_MODE_MODE_SPLIT			REG_FIELD_PREP(GAMMA_MODE_MODE_MASK, 3) /* ivb-bdw */
82 #define  GAMMA_MODE_MODE_12BIT_MULTI_SEG	REG_FIELD_PREP(GAMMA_MODE_MODE_MASK, 3) /* icl-tgl */
83 
84 /* pipe CSC */
85 #define _PIPE_A_CSC_COEFF_RY_GY	0x49010
86 #define _PIPE_A_CSC_COEFF_BY	0x49014
87 #define _PIPE_A_CSC_COEFF_RU_GU	0x49018
88 #define _PIPE_A_CSC_COEFF_BU	0x4901c
89 #define _PIPE_A_CSC_COEFF_RV_GV	0x49020
90 #define _PIPE_A_CSC_COEFF_BV	0x49024
91 
92 #define _PIPE_A_CSC_MODE	0x49028
93 #define  ICL_CSC_ENABLE			(1 << 31) /* icl+ */
94 #define  ICL_OUTPUT_CSC_ENABLE		(1 << 30) /* icl+ */
95 #define  CSC_BLACK_SCREEN_OFFSET	(1 << 2) /* ilk/snb */
96 #define  CSC_POSITION_BEFORE_GAMMA	(1 << 1) /* pre-glk */
97 #define  CSC_MODE_YUV_TO_RGB		(1 << 0) /* ilk/snb */
98 
99 #define _PIPE_A_CSC_PREOFF_HI	0x49030
100 #define _PIPE_A_CSC_PREOFF_ME	0x49034
101 #define _PIPE_A_CSC_PREOFF_LO	0x49038
102 #define _PIPE_A_CSC_POSTOFF_HI	0x49040
103 #define _PIPE_A_CSC_POSTOFF_ME	0x49044
104 #define _PIPE_A_CSC_POSTOFF_LO	0x49048
105 
106 #define _PIPE_B_CSC_COEFF_RY_GY	0x49110
107 #define _PIPE_B_CSC_COEFF_BY	0x49114
108 #define _PIPE_B_CSC_COEFF_RU_GU	0x49118
109 #define _PIPE_B_CSC_COEFF_BU	0x4911c
110 #define _PIPE_B_CSC_COEFF_RV_GV	0x49120
111 #define _PIPE_B_CSC_COEFF_BV	0x49124
112 #define _PIPE_B_CSC_MODE	0x49128
113 #define _PIPE_B_CSC_PREOFF_HI	0x49130
114 #define _PIPE_B_CSC_PREOFF_ME	0x49134
115 #define _PIPE_B_CSC_PREOFF_LO	0x49138
116 #define _PIPE_B_CSC_POSTOFF_HI	0x49140
117 #define _PIPE_B_CSC_POSTOFF_ME	0x49144
118 #define _PIPE_B_CSC_POSTOFF_LO	0x49148
119 
120 #define PIPE_CSC_COEFF_RY_GY(pipe)	_MMIO_PIPE(pipe, _PIPE_A_CSC_COEFF_RY_GY, _PIPE_B_CSC_COEFF_RY_GY)
121 #define PIPE_CSC_COEFF_BY(pipe)		_MMIO_PIPE(pipe, _PIPE_A_CSC_COEFF_BY, _PIPE_B_CSC_COEFF_BY)
122 #define PIPE_CSC_COEFF_RU_GU(pipe)	_MMIO_PIPE(pipe, _PIPE_A_CSC_COEFF_RU_GU, _PIPE_B_CSC_COEFF_RU_GU)
123 #define PIPE_CSC_COEFF_BU(pipe)		_MMIO_PIPE(pipe, _PIPE_A_CSC_COEFF_BU, _PIPE_B_CSC_COEFF_BU)
124 #define PIPE_CSC_COEFF_RV_GV(pipe)	_MMIO_PIPE(pipe, _PIPE_A_CSC_COEFF_RV_GV, _PIPE_B_CSC_COEFF_RV_GV)
125 #define PIPE_CSC_COEFF_BV(pipe)		_MMIO_PIPE(pipe, _PIPE_A_CSC_COEFF_BV, _PIPE_B_CSC_COEFF_BV)
126 #define PIPE_CSC_MODE(pipe)		_MMIO_PIPE(pipe, _PIPE_A_CSC_MODE, _PIPE_B_CSC_MODE)
127 #define PIPE_CSC_PREOFF_HI(pipe)	_MMIO_PIPE(pipe, _PIPE_A_CSC_PREOFF_HI, _PIPE_B_CSC_PREOFF_HI)
128 #define PIPE_CSC_PREOFF_ME(pipe)	_MMIO_PIPE(pipe, _PIPE_A_CSC_PREOFF_ME, _PIPE_B_CSC_PREOFF_ME)
129 #define PIPE_CSC_PREOFF_LO(pipe)	_MMIO_PIPE(pipe, _PIPE_A_CSC_PREOFF_LO, _PIPE_B_CSC_PREOFF_LO)
130 #define PIPE_CSC_POSTOFF_HI(pipe)	_MMIO_PIPE(pipe, _PIPE_A_CSC_POSTOFF_HI, _PIPE_B_CSC_POSTOFF_HI)
131 #define PIPE_CSC_POSTOFF_ME(pipe)	_MMIO_PIPE(pipe, _PIPE_A_CSC_POSTOFF_ME, _PIPE_B_CSC_POSTOFF_ME)
132 #define PIPE_CSC_POSTOFF_LO(pipe)	_MMIO_PIPE(pipe, _PIPE_A_CSC_POSTOFF_LO, _PIPE_B_CSC_POSTOFF_LO)
133 
134 /* Pipe Output CSC */
135 #define _PIPE_A_OUTPUT_CSC_COEFF_RY_GY	0x49050
136 #define _PIPE_A_OUTPUT_CSC_COEFF_BY	0x49054
137 #define _PIPE_A_OUTPUT_CSC_COEFF_RU_GU	0x49058
138 #define _PIPE_A_OUTPUT_CSC_COEFF_BU	0x4905c
139 #define _PIPE_A_OUTPUT_CSC_COEFF_RV_GV	0x49060
140 #define _PIPE_A_OUTPUT_CSC_COEFF_BV	0x49064
141 #define _PIPE_A_OUTPUT_CSC_PREOFF_HI	0x49068
142 #define _PIPE_A_OUTPUT_CSC_PREOFF_ME	0x4906c
143 #define _PIPE_A_OUTPUT_CSC_PREOFF_LO	0x49070
144 #define _PIPE_A_OUTPUT_CSC_POSTOFF_HI	0x49074
145 #define _PIPE_A_OUTPUT_CSC_POSTOFF_ME	0x49078
146 #define _PIPE_A_OUTPUT_CSC_POSTOFF_LO	0x4907c
147 
148 #define _PIPE_B_OUTPUT_CSC_COEFF_RY_GY	0x49150
149 #define _PIPE_B_OUTPUT_CSC_COEFF_BY	0x49154
150 #define _PIPE_B_OUTPUT_CSC_COEFF_RU_GU	0x49158
151 #define _PIPE_B_OUTPUT_CSC_COEFF_BU	0x4915c
152 #define _PIPE_B_OUTPUT_CSC_COEFF_RV_GV	0x49160
153 #define _PIPE_B_OUTPUT_CSC_COEFF_BV	0x49164
154 #define _PIPE_B_OUTPUT_CSC_PREOFF_HI	0x49168
155 #define _PIPE_B_OUTPUT_CSC_PREOFF_ME	0x4916c
156 #define _PIPE_B_OUTPUT_CSC_PREOFF_LO	0x49170
157 #define _PIPE_B_OUTPUT_CSC_POSTOFF_HI	0x49174
158 #define _PIPE_B_OUTPUT_CSC_POSTOFF_ME	0x49178
159 #define _PIPE_B_OUTPUT_CSC_POSTOFF_LO	0x4917c
160 
161 #define PIPE_CSC_OUTPUT_COEFF_RY_GY(pipe)	_MMIO_PIPE(pipe,\
162 							   _PIPE_A_OUTPUT_CSC_COEFF_RY_GY,\
163 							   _PIPE_B_OUTPUT_CSC_COEFF_RY_GY)
164 #define PIPE_CSC_OUTPUT_COEFF_BY(pipe)		_MMIO_PIPE(pipe, \
165 							   _PIPE_A_OUTPUT_CSC_COEFF_BY, \
166 							   _PIPE_B_OUTPUT_CSC_COEFF_BY)
167 #define PIPE_CSC_OUTPUT_COEFF_RU_GU(pipe)	_MMIO_PIPE(pipe, \
168 							   _PIPE_A_OUTPUT_CSC_COEFF_RU_GU, \
169 							   _PIPE_B_OUTPUT_CSC_COEFF_RU_GU)
170 #define PIPE_CSC_OUTPUT_COEFF_BU(pipe)		_MMIO_PIPE(pipe, \
171 							   _PIPE_A_OUTPUT_CSC_COEFF_BU, \
172 							   _PIPE_B_OUTPUT_CSC_COEFF_BU)
173 #define PIPE_CSC_OUTPUT_COEFF_RV_GV(pipe)	_MMIO_PIPE(pipe, \
174 							   _PIPE_A_OUTPUT_CSC_COEFF_RV_GV, \
175 							   _PIPE_B_OUTPUT_CSC_COEFF_RV_GV)
176 #define PIPE_CSC_OUTPUT_COEFF_BV(pipe)		_MMIO_PIPE(pipe, \
177 							   _PIPE_A_OUTPUT_CSC_COEFF_BV, \
178 							   _PIPE_B_OUTPUT_CSC_COEFF_BV)
179 #define PIPE_CSC_OUTPUT_PREOFF_HI(pipe)		_MMIO_PIPE(pipe, \
180 							   _PIPE_A_OUTPUT_CSC_PREOFF_HI, \
181 							   _PIPE_B_OUTPUT_CSC_PREOFF_HI)
182 #define PIPE_CSC_OUTPUT_PREOFF_ME(pipe)		_MMIO_PIPE(pipe, \
183 							   _PIPE_A_OUTPUT_CSC_PREOFF_ME, \
184 							   _PIPE_B_OUTPUT_CSC_PREOFF_ME)
185 #define PIPE_CSC_OUTPUT_PREOFF_LO(pipe)		_MMIO_PIPE(pipe, \
186 							   _PIPE_A_OUTPUT_CSC_PREOFF_LO, \
187 							   _PIPE_B_OUTPUT_CSC_PREOFF_LO)
188 #define PIPE_CSC_OUTPUT_POSTOFF_HI(pipe)	_MMIO_PIPE(pipe, \
189 							   _PIPE_A_OUTPUT_CSC_POSTOFF_HI, \
190 							   _PIPE_B_OUTPUT_CSC_POSTOFF_HI)
191 #define PIPE_CSC_OUTPUT_POSTOFF_ME(pipe)	_MMIO_PIPE(pipe, \
192 							   _PIPE_A_OUTPUT_CSC_POSTOFF_ME, \
193 							   _PIPE_B_OUTPUT_CSC_POSTOFF_ME)
194 #define PIPE_CSC_OUTPUT_POSTOFF_LO(pipe)	_MMIO_PIPE(pipe, \
195 							   _PIPE_A_OUTPUT_CSC_POSTOFF_LO, \
196 							   _PIPE_B_OUTPUT_CSC_POSTOFF_LO)
197 
198 /* pipe degamma/gamma LUTs on IVB+ */
199 #define _PAL_PREC_INDEX_A	0x4A400
200 #define _PAL_PREC_INDEX_B	0x4AC00
201 #define _PAL_PREC_INDEX_C	0x4B400
202 #define   PAL_PREC_SPLIT_MODE		REG_BIT(31)
203 #define   PAL_PREC_AUTO_INCREMENT	REG_BIT(15)
204 #define   PAL_PREC_INDEX_VALUE_MASK	REG_GENMASK(9, 0)
205 #define   PAL_PREC_INDEX_VALUE(x)	REG_FIELD_PREP(PAL_PREC_INDEX_VALUE_MASK, (x))
206 #define _PAL_PREC_DATA_A	0x4A404
207 #define _PAL_PREC_DATA_B	0x4AC04
208 #define _PAL_PREC_DATA_C	0x4B404
209 /* see PREC_PALETTE_* for the bits */
210 #define _PAL_PREC_GC_MAX_A	0x4A410
211 #define _PAL_PREC_GC_MAX_B	0x4AC10
212 #define _PAL_PREC_GC_MAX_C	0x4B410
213 #define _PAL_PREC_EXT_GC_MAX_A	0x4A420
214 #define _PAL_PREC_EXT_GC_MAX_B	0x4AC20
215 #define _PAL_PREC_EXT_GC_MAX_C	0x4B420
216 #define _PAL_PREC_EXT2_GC_MAX_A	0x4A430
217 #define _PAL_PREC_EXT2_GC_MAX_B	0x4AC30
218 #define _PAL_PREC_EXT2_GC_MAX_C	0x4B430
219 
220 #define PREC_PAL_INDEX(pipe)		_MMIO_PIPE(pipe, _PAL_PREC_INDEX_A, _PAL_PREC_INDEX_B)
221 #define PREC_PAL_DATA(pipe)		_MMIO_PIPE(pipe, _PAL_PREC_DATA_A, _PAL_PREC_DATA_B)
222 #define PREC_PAL_GC_MAX(pipe, i)	_MMIO(_PIPE(pipe, _PAL_PREC_GC_MAX_A, _PAL_PREC_GC_MAX_B) + (i) * 4) /* u1.16 */
223 #define PREC_PAL_EXT_GC_MAX(pipe, i)	_MMIO(_PIPE(pipe, _PAL_PREC_EXT_GC_MAX_A, _PAL_PREC_EXT_GC_MAX_B) + (i) * 4) /* u3.16 */
224 #define PREC_PAL_EXT2_GC_MAX(pipe, i)	_MMIO(_PIPE(pipe, _PAL_PREC_EXT2_GC_MAX_A, _PAL_PREC_EXT2_GC_MAX_B) + (i) * 4) /* glk+, u3.16 */
225 
226 #define _PRE_CSC_GAMC_INDEX_A	0x4A484
227 #define _PRE_CSC_GAMC_INDEX_B	0x4AC84
228 #define _PRE_CSC_GAMC_INDEX_C	0x4B484
229 #define   PRE_CSC_GAMC_AUTO_INCREMENT	REG_BIT(10)
230 #define   PRE_CSC_GAMC_INDEX_VALUE_MASK	REG_GENMASK(7, 0)
231 #define   PRE_CSC_GAMC_INDEX_VALUE(x)	REG_FIELD_PREP(PRE_CSC_GAMC_INDEX_VALUE_MASK, (x))
232 #define _PRE_CSC_GAMC_DATA_A	0x4A488
233 #define _PRE_CSC_GAMC_DATA_B	0x4AC88
234 #define _PRE_CSC_GAMC_DATA_C	0x4B488
235 
236 #define PRE_CSC_GAMC_INDEX(pipe)	_MMIO_PIPE(pipe, _PRE_CSC_GAMC_INDEX_A, _PRE_CSC_GAMC_INDEX_B)
237 #define PRE_CSC_GAMC_DATA(pipe)		_MMIO_PIPE(pipe, _PRE_CSC_GAMC_DATA_A, _PRE_CSC_GAMC_DATA_B)
238 
239 /* ICL Multi segmented gamma */
240 #define _PAL_PREC_MULTI_SEG_INDEX_A	0x4A408
241 #define _PAL_PREC_MULTI_SEG_INDEX_B	0x4AC08
242 #define   PAL_PREC_MULTI_SEG_AUTO_INCREMENT	REG_BIT(15)
243 #define   PAL_PREC_MULTI_SEG_INDEX_VALUE_MASK	REG_GENMASK(4, 0)
244 #define   PAL_PREC_MULTI_SEG_INDEX_VALUE(x)	REG_FIELD_PREP(PAL_PREC_MULTI_SEG_INDEX_VALUE_MASK, (x))
245 
246 #define _PAL_PREC_MULTI_SEG_DATA_A	0x4A40C
247 #define _PAL_PREC_MULTI_SEG_DATA_B	0x4AC0C
248 /* see PREC_PALETTE_12P4_* for the bits */
249 
250 #define PREC_PAL_MULTI_SEG_INDEX(pipe)	_MMIO_PIPE(pipe, \
251 					_PAL_PREC_MULTI_SEG_INDEX_A, \
252 					_PAL_PREC_MULTI_SEG_INDEX_B)
253 #define PREC_PAL_MULTI_SEG_DATA(pipe)	_MMIO_PIPE(pipe, \
254 					_PAL_PREC_MULTI_SEG_DATA_A, \
255 					_PAL_PREC_MULTI_SEG_DATA_B)
256 
257 #define _PIPE_A_WGC_C01_C00	0x600B0 /* s2.10 */
258 #define _PIPE_A_WGC_C02		0x600B4 /* s2.10 */
259 #define _PIPE_A_WGC_C11_C10	0x600B8 /* s2.10 */
260 #define _PIPE_A_WGC_C12		0x600BC /* s2.10 */
261 #define _PIPE_A_WGC_C21_C20	0x600C0 /* s2.10 */
262 #define _PIPE_A_WGC_C22		0x600C4 /* s2.10 */
263 
264 #define PIPE_WGC_C01_C00(dev_priv, pipe)		_MMIO_TRANS2(dev_priv, pipe, _PIPE_A_WGC_C01_C00)
265 #define PIPE_WGC_C02(dev_priv, pipe)		_MMIO_TRANS2(dev_priv, pipe, _PIPE_A_WGC_C02)
266 #define PIPE_WGC_C11_C10(dev_priv, pipe)		_MMIO_TRANS2(dev_priv, pipe, _PIPE_A_WGC_C11_C10)
267 #define PIPE_WGC_C12(dev_priv, pipe)		_MMIO_TRANS2(dev_priv, pipe, _PIPE_A_WGC_C12)
268 #define PIPE_WGC_C21_C20(dev_priv, pipe)		_MMIO_TRANS2(dev_priv, pipe, _PIPE_A_WGC_C21_C20)
269 #define PIPE_WGC_C22(dev_priv, pipe)		_MMIO_TRANS2(dev_priv, pipe, _PIPE_A_WGC_C22)
270 
271 /* pipe CSC & degamma/gamma LUTs on CHV */
272 #define _CGM_PIPE_A_CSC_COEFF01	(VLV_DISPLAY_BASE + 0x67900)
273 #define _CGM_PIPE_A_CSC_COEFF23	(VLV_DISPLAY_BASE + 0x67904)
274 #define _CGM_PIPE_A_CSC_COEFF45	(VLV_DISPLAY_BASE + 0x67908)
275 #define _CGM_PIPE_A_CSC_COEFF67	(VLV_DISPLAY_BASE + 0x6790C)
276 #define _CGM_PIPE_A_CSC_COEFF8	(VLV_DISPLAY_BASE + 0x67910)
277 #define _CGM_PIPE_A_DEGAMMA	(VLV_DISPLAY_BASE + 0x66000)
278 /* cgm degamma ldw */
279 #define   CGM_PIPE_DEGAMMA_GREEN_LDW_MASK	REG_GENMASK(29, 16)
280 #define   CGM_PIPE_DEGAMMA_BLUE_LDW_MASK	REG_GENMASK(13, 0)
281 /* cgm degamma udw */
282 #define   CGM_PIPE_DEGAMMA_RED_UDW_MASK		REG_GENMASK(13, 0)
283 #define _CGM_PIPE_A_GAMMA	(VLV_DISPLAY_BASE + 0x67000)
284 /* cgm gamma ldw */
285 #define   CGM_PIPE_GAMMA_GREEN_LDW_MASK		REG_GENMASK(25, 16)
286 #define   CGM_PIPE_GAMMA_BLUE_LDW_MASK		REG_GENMASK(9, 0)
287 /* cgm gamma udw */
288 #define   CGM_PIPE_GAMMA_RED_UDW_MASK		REG_GENMASK(9, 0)
289 #define _CGM_PIPE_A_MODE	(VLV_DISPLAY_BASE + 0x67A00)
290 #define   CGM_PIPE_MODE_GAMMA	(1 << 2)
291 #define   CGM_PIPE_MODE_CSC	(1 << 1)
292 #define   CGM_PIPE_MODE_DEGAMMA	(1 << 0)
293 
294 #define _CGM_PIPE_B_CSC_COEFF01	(VLV_DISPLAY_BASE + 0x69900)
295 #define _CGM_PIPE_B_CSC_COEFF23	(VLV_DISPLAY_BASE + 0x69904)
296 #define _CGM_PIPE_B_CSC_COEFF45	(VLV_DISPLAY_BASE + 0x69908)
297 #define _CGM_PIPE_B_CSC_COEFF67	(VLV_DISPLAY_BASE + 0x6990C)
298 #define _CGM_PIPE_B_CSC_COEFF8	(VLV_DISPLAY_BASE + 0x69910)
299 #define _CGM_PIPE_B_DEGAMMA	(VLV_DISPLAY_BASE + 0x68000)
300 #define _CGM_PIPE_B_GAMMA	(VLV_DISPLAY_BASE + 0x69000)
301 #define _CGM_PIPE_B_MODE	(VLV_DISPLAY_BASE + 0x69A00)
302 
303 #define CGM_PIPE_CSC_COEFF01(pipe)	_MMIO_PIPE(pipe, _CGM_PIPE_A_CSC_COEFF01, _CGM_PIPE_B_CSC_COEFF01)
304 #define CGM_PIPE_CSC_COEFF23(pipe)	_MMIO_PIPE(pipe, _CGM_PIPE_A_CSC_COEFF23, _CGM_PIPE_B_CSC_COEFF23)
305 #define CGM_PIPE_CSC_COEFF45(pipe)	_MMIO_PIPE(pipe, _CGM_PIPE_A_CSC_COEFF45, _CGM_PIPE_B_CSC_COEFF45)
306 #define CGM_PIPE_CSC_COEFF67(pipe)	_MMIO_PIPE(pipe, _CGM_PIPE_A_CSC_COEFF67, _CGM_PIPE_B_CSC_COEFF67)
307 #define CGM_PIPE_CSC_COEFF8(pipe)	_MMIO_PIPE(pipe, _CGM_PIPE_A_CSC_COEFF8, _CGM_PIPE_B_CSC_COEFF8)
308 #define CGM_PIPE_DEGAMMA(pipe, i, w)	_MMIO(_PIPE(pipe, _CGM_PIPE_A_DEGAMMA, _CGM_PIPE_B_DEGAMMA) + (i) * 8 + (w) * 4)
309 #define CGM_PIPE_GAMMA(pipe, i, w)	_MMIO(_PIPE(pipe, _CGM_PIPE_A_GAMMA, _CGM_PIPE_B_GAMMA) + (i) * 8 + (w) * 4)
310 #define CGM_PIPE_MODE(pipe)		_MMIO_PIPE(pipe, _CGM_PIPE_A_MODE, _CGM_PIPE_B_MODE)
311 
312 /* Skylake+ pipe bottom (background) color */
313 #define _SKL_BOTTOM_COLOR_A		0x70034
314 #define _SKL_BOTTOM_COLOR_B		0x71034
315 #define   SKL_BOTTOM_COLOR_GAMMA_ENABLE		REG_BIT(31)
316 #define   SKL_BOTTOM_COLOR_CSC_ENABLE		REG_BIT(30)
317 #define SKL_BOTTOM_COLOR(pipe)		_MMIO_PIPE(pipe, _SKL_BOTTOM_COLOR_A, _SKL_BOTTOM_COLOR_B)
318 
319 #endif /* __INTEL_COLOR_REGS_H__ */
320