xref: /rk3399_rockchip-uboot/drivers/video/tegra124/displayport.h (revision 9597494ebfb60418e8a0e7565cca2b7d25512bf5)
159dd5aa8SSimon Glass /*
259dd5aa8SSimon Glass  * Copyright (c) 2014, NVIDIA Corporation.
359dd5aa8SSimon Glass  *
459dd5aa8SSimon Glass  * SPDX-License-Identifier:	GPL-2.0
559dd5aa8SSimon Glass  */
659dd5aa8SSimon Glass 
759dd5aa8SSimon Glass #ifndef _TEGRA_DISPLAYPORT_H
859dd5aa8SSimon Glass #define _TEGRA_DISPLAYPORT_H
959dd5aa8SSimon Glass 
1059dd5aa8SSimon Glass #include <linux/drm_dp_helper.h>
1159dd5aa8SSimon Glass 
1259dd5aa8SSimon Glass struct dpaux_ctlr {
1359dd5aa8SSimon Glass 	u32 reserved0;
1459dd5aa8SSimon Glass 	u32 intr_en_aux;
1559dd5aa8SSimon Glass 	u32 reserved2_4;
1659dd5aa8SSimon Glass 	u32 intr_aux;
1759dd5aa8SSimon Glass };
1859dd5aa8SSimon Glass 
1959dd5aa8SSimon Glass #define DPAUX_INTR_EN_AUX				0x1
2059dd5aa8SSimon Glass #define DPAUX_INTR_AUX					0x5
2159dd5aa8SSimon Glass #define DPAUX_DP_AUXDATA_WRITE_W(i)			(0x9 + 4 * (i))
2259dd5aa8SSimon Glass #define DPAUX_DP_AUXDATA_READ_W(i)			(0x19 + 4 * (i))
2359dd5aa8SSimon Glass #define DPAUX_DP_AUXADDR				0x29
2459dd5aa8SSimon Glass #define DPAUX_DP_AUXCTL					0x2d
2559dd5aa8SSimon Glass #define DPAUX_DP_AUXCTL_CMDLEN_SHIFT			0
2659dd5aa8SSimon Glass #define DPAUX_DP_AUXCTL_CMDLEN_FIELD			0xff
2759dd5aa8SSimon Glass #define DPAUX_DP_AUXCTL_CMD_SHIFT			12
2859dd5aa8SSimon Glass #define DPAUX_DP_AUXCTL_CMD_MASK			(0xf << 12)
2959dd5aa8SSimon Glass #define DPAUX_DP_AUXCTL_CMD_I2CWR			(0 << 12)
3059dd5aa8SSimon Glass #define DPAUX_DP_AUXCTL_CMD_I2CRD			(1 << 12)
3159dd5aa8SSimon Glass #define DPAUX_DP_AUXCTL_CMD_I2CREQWSTAT			(2 << 12)
3259dd5aa8SSimon Glass #define DPAUX_DP_AUXCTL_CMD_MOTWR			(4 << 12)
3359dd5aa8SSimon Glass #define DPAUX_DP_AUXCTL_CMD_MOTRD			(5 << 12)
3459dd5aa8SSimon Glass #define DPAUX_DP_AUXCTL_CMD_MOTREQWSTAT			(6 << 12)
3559dd5aa8SSimon Glass #define DPAUX_DP_AUXCTL_CMD_AUXWR			(8 << 12)
3659dd5aa8SSimon Glass #define DPAUX_DP_AUXCTL_CMD_AUXRD			(9 << 12)
3759dd5aa8SSimon Glass #define DPAUX_DP_AUXCTL_TRANSACTREQ_SHIFT		16
3859dd5aa8SSimon Glass #define DPAUX_DP_AUXCTL_TRANSACTREQ_MASK		(0x1 << 16)
3959dd5aa8SSimon Glass #define DPAUX_DP_AUXCTL_TRANSACTREQ_DONE		(0 << 16)
4059dd5aa8SSimon Glass #define DPAUX_DP_AUXCTL_TRANSACTREQ_PENDING		(1 << 16)
4159dd5aa8SSimon Glass #define DPAUX_DP_AUXCTL_RST_SHIFT			31
4259dd5aa8SSimon Glass #define DPAUX_DP_AUXCTL_RST_DEASSERT			(0 << 31)
4359dd5aa8SSimon Glass #define DPAUX_DP_AUXCTL_RST_ASSERT			(1 << 31)
4459dd5aa8SSimon Glass #define DPAUX_DP_AUXSTAT				0x31
4559dd5aa8SSimon Glass #define DPAUX_DP_AUXSTAT_HPD_STATUS_SHIFT		28
4659dd5aa8SSimon Glass #define DPAUX_DP_AUXSTAT_HPD_STATUS_UNPLUG		(0 << 28)
4759dd5aa8SSimon Glass #define DPAUX_DP_AUXSTAT_HPD_STATUS_PLUGGED		(1 << 28)
4859dd5aa8SSimon Glass #define DPAUX_DP_AUXSTAT_AUXCTL_STATE_SHIFT		20
4959dd5aa8SSimon Glass #define DPAUX_DP_AUXSTAT_AUXCTL_STATE_MASK		(0xf << 20)
5059dd5aa8SSimon Glass #define DPAUX_DP_AUXSTAT_AUXCTL_STATE_IDLE		(0 << 20)
5159dd5aa8SSimon Glass #define DPAUX_DP_AUXSTAT_AUXCTL_STATE_SYNC		(1 << 20)
5259dd5aa8SSimon Glass #define DPAUX_DP_AUXSTAT_AUXCTL_STATE_START1		(2 << 20)
5359dd5aa8SSimon Glass #define DPAUX_DP_AUXSTAT_AUXCTL_STATE_COMMAND		(3 << 20)
5459dd5aa8SSimon Glass #define DPAUX_DP_AUXSTAT_AUXCTL_STATE_ADDRESS		(4 << 20)
5559dd5aa8SSimon Glass #define DPAUX_DP_AUXSTAT_AUXCTL_STATE_LENGTH		(5 << 20)
5659dd5aa8SSimon Glass #define DPAUX_DP_AUXSTAT_AUXCTL_STATE_WRITE1		(6 << 20)
5759dd5aa8SSimon Glass #define DPAUX_DP_AUXSTAT_AUXCTL_STATE_READ1		(7 << 20)
5859dd5aa8SSimon Glass #define DPAUX_DP_AUXSTAT_AUXCTL_STATE_GET_M		(8 << 20)
5959dd5aa8SSimon Glass #define DPAUX_DP_AUXSTAT_AUXCTL_STATE_STOP1		(9 << 20)
6059dd5aa8SSimon Glass #define DPAUX_DP_AUXSTAT_AUXCTL_STATE_STOP2		(10 << 20)
6159dd5aa8SSimon Glass #define DPAUX_DP_AUXSTAT_AUXCTL_STATE_REPLY		(11 << 20)
6259dd5aa8SSimon Glass #define DPAUX_DP_AUXSTAT_AUXCTL_STATE_CLEANUP		(12 << 20)
6359dd5aa8SSimon Glass #define DPAUX_DP_AUXSTAT_REPLYTYPE_SHIFT		16
6459dd5aa8SSimon Glass #define DPAUX_DP_AUXSTAT_REPLYTYPE_MASK			(0xf << 16)
6559dd5aa8SSimon Glass #define DPAUX_DP_AUXSTAT_REPLYTYPE_ACK			(0 << 16)
6659dd5aa8SSimon Glass #define DPAUX_DP_AUXSTAT_REPLYTYPE_NACK			(1 << 16)
6759dd5aa8SSimon Glass #define DPAUX_DP_AUXSTAT_REPLYTYPE_DEFER		(2 << 16)
6859dd5aa8SSimon Glass #define DPAUX_DP_AUXSTAT_REPLYTYPE_I2CNACK		(4 << 16)
6959dd5aa8SSimon Glass #define DPAUX_DP_AUXSTAT_REPLYTYPE_I2CDEFER		(8 << 16)
7059dd5aa8SSimon Glass #define DPAUX_DP_AUXSTAT_NO_STOP_ERROR_SHIFT		11
7159dd5aa8SSimon Glass #define DPAUX_DP_AUXSTAT_NO_STOP_ERROR_NOT_PENDING	(0 << 11)
7259dd5aa8SSimon Glass #define DPAUX_DP_AUXSTAT_NO_STOP_ERROR_PENDING		(1 << 11)
7359dd5aa8SSimon Glass #define DPAUX_DP_AUXSTAT_SINKSTAT_ERROR_SHIFT		10
7459dd5aa8SSimon Glass #define DPAUX_DP_AUXSTAT_SINKSTAT_ERROR_NOT_PENDING	(0 << 10)
7559dd5aa8SSimon Glass #define DPAUX_DP_AUXSTAT_SINKSTAT_ERROR_PENDING		(1 << 10)
7659dd5aa8SSimon Glass #define DPAUX_DP_AUXSTAT_RX_ERROR_SHIFT			9
7759dd5aa8SSimon Glass #define DPAUX_DP_AUXSTAT_RX_ERROR_NOT_PENDING		(0 << 9)
7859dd5aa8SSimon Glass #define DPAUX_DP_AUXSTAT_RX_ERROR_PENDING		(1 << 9)
7959dd5aa8SSimon Glass #define DPAUX_DP_AUXSTAT_TIMEOUT_ERROR_SHIFT		8
8059dd5aa8SSimon Glass #define DPAUX_DP_AUXSTAT_TIMEOUT_ERROR_NOT_PENDING	(0 << 8)
8159dd5aa8SSimon Glass #define DPAUX_DP_AUXSTAT_TIMEOUT_ERROR_PENDING		(1 << 8)
8259dd5aa8SSimon Glass #define DPAUX_DP_AUXSTAT_REPLY_M_SHIFT			0
8359dd5aa8SSimon Glass #define DPAUX_DP_AUXSTAT_REPLY_M_MASK			(0xff << 0)
8459dd5aa8SSimon Glass #define DPAUX_HPD_CONFIG				(0x3d)
8559dd5aa8SSimon Glass #define DPAUX_HPD_IRQ_CONFIG				0x41
8659dd5aa8SSimon Glass #define DPAUX_DP_AUX_CONFIG				0x45
8759dd5aa8SSimon Glass #define DPAUX_HYBRID_PADCTL				0x49
8859dd5aa8SSimon Glass #define DPAUX_HYBRID_PADCTL_I2C_SDA_INPUT_RCV_SHIFT	15
8959dd5aa8SSimon Glass #define DPAUX_HYBRID_PADCTL_I2C_SDA_INPUT_RCV_DISABLE	(0 << 15)
9059dd5aa8SSimon Glass #define DPAUX_HYBRID_PADCTL_I2C_SDA_INPUT_RCV_ENABLE	(1 << 15)
9159dd5aa8SSimon Glass #define DPAUX_HYBRID_PADCTL_I2C_SCL_INPUT_RCV_SHIFT	14
9259dd5aa8SSimon Glass #define DPAUX_HYBRID_PADCTL_I2C_SCL_INPUT_RCV_DISABLE	(0 << 14)
9359dd5aa8SSimon Glass #define DPAUX_HYBRID_PADCTL_I2C_SCL_INPUT_RCV_ENABLE	(1 << 14)
9459dd5aa8SSimon Glass #define DPAUX_HYBRID_PADCTL_AUX_CMH_SHIFT		12
9559dd5aa8SSimon Glass #define DPAUX_HYBRID_PADCTL_AUX_CMH_DEFAULT_MASK	(0x3 << 12)
9659dd5aa8SSimon Glass #define DPAUX_HYBRID_PADCTL_AUX_CMH_V0_60		(0 << 12)
9759dd5aa8SSimon Glass #define DPAUX_HYBRID_PADCTL_AUX_CMH_V0_64		(1 << 12)
9859dd5aa8SSimon Glass #define DPAUX_HYBRID_PADCTL_AUX_CMH_V0_70		(2 << 12)
9959dd5aa8SSimon Glass #define DPAUX_HYBRID_PADCTL_AUX_CMH_V0_56		(3 << 12)
10059dd5aa8SSimon Glass #define DPAUX_HYBRID_PADCTL_AUX_DRVZ_SHIFT		8
10159dd5aa8SSimon Glass #define DPAUX_HYBRID_PADCTL_AUX_DRVZ_DEFAULT_MASK	(0x7 << 8)
10259dd5aa8SSimon Glass #define DPAUX_HYBRID_PADCTL_AUX_DRVZ_OHM_78		(0 << 8)
10359dd5aa8SSimon Glass #define DPAUX_HYBRID_PADCTL_AUX_DRVZ_OHM_60		(1 << 8)
10459dd5aa8SSimon Glass #define DPAUX_HYBRID_PADCTL_AUX_DRVZ_OHM_54		(2 << 8)
10559dd5aa8SSimon Glass #define DPAUX_HYBRID_PADCTL_AUX_DRVZ_OHM_45		(3 << 8)
10659dd5aa8SSimon Glass #define DPAUX_HYBRID_PADCTL_AUX_DRVZ_OHM_50		(4 << 8)
10759dd5aa8SSimon Glass #define DPAUX_HYBRID_PADCTL_AUX_DRVZ_OHM_42		(5 << 8)
10859dd5aa8SSimon Glass #define DPAUX_HYBRID_PADCTL_AUX_DRVZ_OHM_39		(6 << 8)
10959dd5aa8SSimon Glass #define DPAUX_HYBRID_PADCTL_AUX_DRVZ_OHM_34		(7 << 8)
11059dd5aa8SSimon Glass #define DPAUX_HYBRID_PADCTL_AUX_DRVI_SHIFT		2
11159dd5aa8SSimon Glass #define DPAUX_HYBRID_PADCTL_AUX_DRVI_DEFAULT_MASK	(0x3f << 2)
11259dd5aa8SSimon Glass #define DPAUX_HYBRID_PADCTL_AUX_INPUT_RCV_SHIFT		1
11359dd5aa8SSimon Glass #define DPAUX_HYBRID_PADCTL_AUX_INPUT_RCV_DISABLE	(0 << 1)
11459dd5aa8SSimon Glass #define DPAUX_HYBRID_PADCTL_AUX_INPUT_RCV_ENABLE	(1 << 1)
11559dd5aa8SSimon Glass #define DPAUX_HYBRID_PADCTL_MODE_SHIFT			0
11659dd5aa8SSimon Glass #define DPAUX_HYBRID_PADCTL_MODE_AUX			0
11759dd5aa8SSimon Glass #define DPAUX_HYBRID_PADCTL_MODE_I2C			1
11859dd5aa8SSimon Glass #define DPAUX_HYBRID_SPARE				0x4d
11959dd5aa8SSimon Glass #define DPAUX_HYBRID_SPARE_PAD_PWR_POWERUP		0
12059dd5aa8SSimon Glass #define DPAUX_HYBRID_SPARE_PAD_PWR_POWERDOWN		1
12159dd5aa8SSimon Glass 
12259dd5aa8SSimon Glass #define DP_AUX_DEFER_MAX_TRIES		7
12359dd5aa8SSimon Glass #define DP_AUX_TIMEOUT_MAX_TRIES	2
12459dd5aa8SSimon Glass #define DP_POWER_ON_MAX_TRIES		3
12559dd5aa8SSimon Glass 
12659dd5aa8SSimon Glass #define DP_AUX_MAX_BYTES		16
12759dd5aa8SSimon Glass 
12859dd5aa8SSimon Glass #define DP_AUX_TIMEOUT_MS		40
12959dd5aa8SSimon Glass #define DP_DPCP_RETRY_SLEEP_NS		400
13059dd5aa8SSimon Glass 
131*dedc44b4SSimon Glass static const u32 tegra_dp_vs_regs[][4][4] = {
132*dedc44b4SSimon Glass 	/* postcursor2 L0 */
133*dedc44b4SSimon Glass 	{
134*dedc44b4SSimon Glass 		/* pre-emphasis: L0, L1, L2, L3 */
135*dedc44b4SSimon Glass 		{0x13, 0x19, 0x1e, 0x28}, /* voltage swing: L0 */
136*dedc44b4SSimon Glass 		{0x1e, 0x25, 0x2d}, /* L1 */
137*dedc44b4SSimon Glass 		{0x28, 0x32}, /* L2 */
138*dedc44b4SSimon Glass 		{0x3c}, /* L3 */
139*dedc44b4SSimon Glass 	},
140*dedc44b4SSimon Glass 
141*dedc44b4SSimon Glass 	/* postcursor2 L1 */
142*dedc44b4SSimon Glass 	{
143*dedc44b4SSimon Glass 		{0x12, 0x17, 0x1b, 0x25},
144*dedc44b4SSimon Glass 		{0x1c, 0x23, 0x2a},
145*dedc44b4SSimon Glass 		{0x25, 0x2f},
146*dedc44b4SSimon Glass 		{0x39},
147*dedc44b4SSimon Glass 	},
148*dedc44b4SSimon Glass 
149*dedc44b4SSimon Glass 	/* postcursor2 L2 */
150*dedc44b4SSimon Glass 	{
151*dedc44b4SSimon Glass 		{0x12, 0x16, 0x1a, 0x22},
152*dedc44b4SSimon Glass 		{0x1b, 0x20, 0x27},
153*dedc44b4SSimon Glass 		{0x24, 0x2d},
154*dedc44b4SSimon Glass 		{0x36},
155*dedc44b4SSimon Glass 	},
156*dedc44b4SSimon Glass 
157*dedc44b4SSimon Glass 	/* postcursor2 L3 */
158*dedc44b4SSimon Glass 	{
159*dedc44b4SSimon Glass 		{0x11, 0x14, 0x17, 0x1f},
160*dedc44b4SSimon Glass 		{0x19, 0x1e, 0x24},
161*dedc44b4SSimon Glass 		{0x22, 0x2a},
162*dedc44b4SSimon Glass 		{0x32},
163*dedc44b4SSimon Glass 	},
164*dedc44b4SSimon Glass };
165*dedc44b4SSimon Glass 
166*dedc44b4SSimon Glass static const u32 tegra_dp_pe_regs[][4][4] = {
167*dedc44b4SSimon Glass 	/* postcursor2 L0 */
168*dedc44b4SSimon Glass 	{
169*dedc44b4SSimon Glass 		/* pre-emphasis: L0, L1, L2, L3 */
170*dedc44b4SSimon Glass 		{0x00, 0x09, 0x13, 0x25}, /* voltage swing: L0 */
171*dedc44b4SSimon Glass 		{0x00, 0x0f, 0x1e}, /* L1 */
172*dedc44b4SSimon Glass 		{0x00, 0x14}, /* L2 */
173*dedc44b4SSimon Glass 		{0x00}, /* L3 */
174*dedc44b4SSimon Glass 	},
175*dedc44b4SSimon Glass 
176*dedc44b4SSimon Glass 	/* postcursor2 L1 */
177*dedc44b4SSimon Glass 	{
178*dedc44b4SSimon Glass 		{0x00, 0x0a, 0x14, 0x28},
179*dedc44b4SSimon Glass 		{0x00, 0x0f, 0x1e},
180*dedc44b4SSimon Glass 		{0x00, 0x14},
181*dedc44b4SSimon Glass 		{0x00},
182*dedc44b4SSimon Glass 	},
183*dedc44b4SSimon Glass 
184*dedc44b4SSimon Glass 	/* postcursor2 L2 */
185*dedc44b4SSimon Glass 	{
186*dedc44b4SSimon Glass 		{0x00, 0x0a, 0x14, 0x28},
187*dedc44b4SSimon Glass 		{0x00, 0x0f, 0x1e},
188*dedc44b4SSimon Glass 		{0x00, 0x14},
189*dedc44b4SSimon Glass 		{0x00},
190*dedc44b4SSimon Glass 	},
191*dedc44b4SSimon Glass 
192*dedc44b4SSimon Glass 	/* postcursor2 L3 */
193*dedc44b4SSimon Glass 	{
194*dedc44b4SSimon Glass 		{0x00, 0x0a, 0x14, 0x28},
195*dedc44b4SSimon Glass 		{0x00, 0x0f, 0x1e},
196*dedc44b4SSimon Glass 		{0x00, 0x14},
197*dedc44b4SSimon Glass 		{0x00},
198*dedc44b4SSimon Glass 	},
199*dedc44b4SSimon Glass };
200*dedc44b4SSimon Glass 
201*dedc44b4SSimon Glass static const u32 tegra_dp_pc_regs[][4][4] = {
202*dedc44b4SSimon Glass 	/* postcursor2 L0 */
203*dedc44b4SSimon Glass 	{
204*dedc44b4SSimon Glass 		/* pre-emphasis: L0, L1, L2, L3 */
205*dedc44b4SSimon Glass 		{0x00, 0x00, 0x00, 0x00}, /* voltage swing: L0 */
206*dedc44b4SSimon Glass 		{0x00, 0x00, 0x00}, /* L1 */
207*dedc44b4SSimon Glass 		{0x00, 0x00}, /* L2 */
208*dedc44b4SSimon Glass 		{0x00}, /* L3 */
209*dedc44b4SSimon Glass 	},
210*dedc44b4SSimon Glass 
211*dedc44b4SSimon Glass 	/* postcursor2 L1 */
212*dedc44b4SSimon Glass 	{
213*dedc44b4SSimon Glass 		{0x02, 0x02, 0x04, 0x05},
214*dedc44b4SSimon Glass 		{0x02, 0x04, 0x05},
215*dedc44b4SSimon Glass 		{0x04, 0x05},
216*dedc44b4SSimon Glass 		{0x05},
217*dedc44b4SSimon Glass 	},
218*dedc44b4SSimon Glass 
219*dedc44b4SSimon Glass 	/* postcursor2 L2 */
220*dedc44b4SSimon Glass 	{
221*dedc44b4SSimon Glass 		{0x04, 0x05, 0x08, 0x0b},
222*dedc44b4SSimon Glass 		{0x05, 0x09, 0x0b},
223*dedc44b4SSimon Glass 		{0x08, 0x0a},
224*dedc44b4SSimon Glass 		{0x0b},
225*dedc44b4SSimon Glass 	},
226*dedc44b4SSimon Glass 
227*dedc44b4SSimon Glass 	/* postcursor2 L3 */
228*dedc44b4SSimon Glass 	{
229*dedc44b4SSimon Glass 		{0x05, 0x09, 0x0b, 0x12},
230*dedc44b4SSimon Glass 		{0x09, 0x0d, 0x12},
231*dedc44b4SSimon Glass 		{0x0b, 0x0f},
232*dedc44b4SSimon Glass 		{0x12},
233*dedc44b4SSimon Glass 	},
234*dedc44b4SSimon Glass };
235*dedc44b4SSimon Glass 
236*dedc44b4SSimon Glass static const u32 tegra_dp_tx_pu[][4][4] = {
237*dedc44b4SSimon Glass 	/* postcursor2 L0 */
238*dedc44b4SSimon Glass 	{
239*dedc44b4SSimon Glass 		/* pre-emphasis: L0, L1, L2, L3 */
240*dedc44b4SSimon Glass 		{0x20, 0x30, 0x40, 0x60}, /* voltage swing: L0 */
241*dedc44b4SSimon Glass 		{0x30, 0x40, 0x60}, /* L1 */
242*dedc44b4SSimon Glass 		{0x40, 0x60}, /* L2 */
243*dedc44b4SSimon Glass 		{0x60}, /* L3 */
244*dedc44b4SSimon Glass 	},
245*dedc44b4SSimon Glass 
246*dedc44b4SSimon Glass 	/* postcursor2 L1 */
247*dedc44b4SSimon Glass 	{
248*dedc44b4SSimon Glass 		{0x20, 0x20, 0x30, 0x50},
249*dedc44b4SSimon Glass 		{0x30, 0x40, 0x50},
250*dedc44b4SSimon Glass 		{0x40, 0x50},
251*dedc44b4SSimon Glass 		{0x60},
252*dedc44b4SSimon Glass 	},
253*dedc44b4SSimon Glass 
254*dedc44b4SSimon Glass 	/* postcursor2 L2 */
255*dedc44b4SSimon Glass 	{
256*dedc44b4SSimon Glass 		{0x20, 0x20, 0x30, 0x40},
257*dedc44b4SSimon Glass 		{0x30, 0x30, 0x40},
258*dedc44b4SSimon Glass 		{0x40, 0x50},
259*dedc44b4SSimon Glass 		{0x60},
260*dedc44b4SSimon Glass 	},
261*dedc44b4SSimon Glass 
262*dedc44b4SSimon Glass 	/* postcursor2 L3 */
263*dedc44b4SSimon Glass 	{
264*dedc44b4SSimon Glass 		{0x20, 0x20, 0x20, 0x40},
265*dedc44b4SSimon Glass 		{0x30, 0x30, 0x40},
266*dedc44b4SSimon Glass 		{0x40, 0x40},
267*dedc44b4SSimon Glass 		{0x60},
268*dedc44b4SSimon Glass 	},
269*dedc44b4SSimon Glass };
270*dedc44b4SSimon Glass 
271*dedc44b4SSimon Glass enum {
272*dedc44b4SSimon Glass 	DRIVECURRENT_LEVEL0 = 0,
273*dedc44b4SSimon Glass 	DRIVECURRENT_LEVEL1 = 1,
274*dedc44b4SSimon Glass 	DRIVECURRENT_LEVEL2 = 2,
275*dedc44b4SSimon Glass 	DRIVECURRENT_LEVEL3 = 3,
276*dedc44b4SSimon Glass };
277*dedc44b4SSimon Glass 
278*dedc44b4SSimon Glass enum {
279*dedc44b4SSimon Glass 	PREEMPHASIS_DISABLED = 0,
280*dedc44b4SSimon Glass 	PREEMPHASIS_LEVEL1   = 1,
281*dedc44b4SSimon Glass 	PREEMPHASIS_LEVEL2   = 2,
282*dedc44b4SSimon Glass 	PREEMPHASIS_LEVEL3   = 3,
283*dedc44b4SSimon Glass };
284*dedc44b4SSimon Glass 
285*dedc44b4SSimon Glass enum {
286*dedc44b4SSimon Glass 	POSTCURSOR2_LEVEL0 = 0,
287*dedc44b4SSimon Glass 	POSTCURSOR2_LEVEL1 = 1,
288*dedc44b4SSimon Glass 	POSTCURSOR2_LEVEL2 = 2,
289*dedc44b4SSimon Glass 	POSTCURSOR2_LEVEL3 = 3,
290*dedc44b4SSimon Glass 	POSTCURSOR2_SUPPORTED
291*dedc44b4SSimon Glass };
292*dedc44b4SSimon Glass 
tegra_dp_is_max_vs(u32 pe,u32 vs)293*dedc44b4SSimon Glass static inline int tegra_dp_is_max_vs(u32 pe, u32 vs)
294*dedc44b4SSimon Glass {
295*dedc44b4SSimon Glass 	return (vs < (DRIVECURRENT_LEVEL3 - pe)) ? 0 : 1;
296*dedc44b4SSimon Glass }
297*dedc44b4SSimon Glass 
tegra_dp_is_max_pe(u32 pe,u32 vs)298*dedc44b4SSimon Glass static inline int tegra_dp_is_max_pe(u32 pe, u32 vs)
299*dedc44b4SSimon Glass {
300*dedc44b4SSimon Glass 	return (pe < (PREEMPHASIS_LEVEL3 - vs)) ? 0 : 1;
301*dedc44b4SSimon Glass }
302*dedc44b4SSimon Glass 
tegra_dp_is_max_pc(u32 pc)303*dedc44b4SSimon Glass static inline int tegra_dp_is_max_pc(u32 pc)
304*dedc44b4SSimon Glass {
305*dedc44b4SSimon Glass 	return (pc < POSTCURSOR2_LEVEL3) ? 0 : 1;
306*dedc44b4SSimon Glass }
307*dedc44b4SSimon Glass 
30859dd5aa8SSimon Glass /* DPCD definitions which are not defined in drm_dp_helper.h */
30959dd5aa8SSimon Glass #define DP_DPCD_REV_MAJOR_SHIFT				4
31059dd5aa8SSimon Glass #define DP_DPCD_REV_MAJOR_MASK				(0xf << 4)
31159dd5aa8SSimon Glass #define DP_DPCD_REV_MINOR_SHIFT				0
31259dd5aa8SSimon Glass #define DP_DPCD_REV_MINOR_MASK				0xf
31359dd5aa8SSimon Glass 
31459dd5aa8SSimon Glass #define DP_MAX_LINK_RATE_VAL_1_62_GPBS			0x6
31559dd5aa8SSimon Glass #define DP_MAX_LINK_RATE_VAL_2_70_GPBS			0xa
31659dd5aa8SSimon Glass #define DP_MAX_LINK_RATE_VAL_5_40_GPBS			0x4
31759dd5aa8SSimon Glass 
31859dd5aa8SSimon Glass #define DP_MAX_LANE_COUNT_LANE_1			0x1
31959dd5aa8SSimon Glass #define DP_MAX_LANE_COUNT_LANE_2			0x2
32059dd5aa8SSimon Glass #define DP_MAX_LANE_COUNT_LANE_4			0x4
321*dedc44b4SSimon Glass #define DP_MAX_LANE_COUNT_TPS3_SUPPORTED_YES		(1 << 6)
32259dd5aa8SSimon Glass #define DP_MAX_LANE_COUNT_ENHANCED_FRAMING_YES		(1 << 7)
32359dd5aa8SSimon Glass 
324*dedc44b4SSimon Glass #define NV_DPCD_TRAINING_LANEX_SET_DC_SHIFT		0
325*dedc44b4SSimon Glass #define NV_DPCD_TRAINING_LANEX_SET_DC_MAX_REACHED_T	(0x00000001 << 2)
326*dedc44b4SSimon Glass #define NV_DPCD_TRAINING_LANEX_SET_DC_MAX_REACHED_F     (0x00000000 << 2)
327*dedc44b4SSimon Glass #define NV_DPCD_TRAINING_LANEX_SET_PE_SHIFT		3
328*dedc44b4SSimon Glass #define NV_DPCD_TRAINING_LANEX_SET_PE_MAX_REACHED_T	(0x00000001 << 5)
329*dedc44b4SSimon Glass #define NV_DPCD_TRAINING_LANEX_SET_PE_MAX_REACHED_F	(0x00000000 << 5)
330*dedc44b4SSimon Glass 
33159dd5aa8SSimon Glass #define DP_MAX_DOWNSPREAD_VAL_NONE			0
33259dd5aa8SSimon Glass #define DP_MAX_DOWNSPREAD_VAL_0_5_PCT			1
33359dd5aa8SSimon Glass #define DP_MAX_DOWNSPREAD_NO_AUX_HANDSHAKE_LT_T		(1 << 6)
33459dd5aa8SSimon Glass 
33559dd5aa8SSimon Glass #define DP_EDP_CONFIGURATION_CAP_ASC_RESET_YES		1
33659dd5aa8SSimon Glass #define DP_EDP_CONFIGURATION_CAP_FRAMING_CHANGE_YES	(1 << 1)
33759dd5aa8SSimon Glass 
33859dd5aa8SSimon Glass #define DP_LANE_COUNT_SET_ENHANCEDFRAMING_T		(1 << 7)
33959dd5aa8SSimon Glass 
34059dd5aa8SSimon Glass #define DP_TRAINING_PATTERN_SET_SC_DISABLED_T		(1 << 5)
341*dedc44b4SSimon Glass #define NV_DPCD_TRAINING_PATTERN_SET_SC_DISABLED_F	(0x00000000 << 5)
342*dedc44b4SSimon Glass #define NV_DPCD_TRAINING_PATTERN_SET_SC_DISABLED_T	(0x00000001 << 5)
34359dd5aa8SSimon Glass 
34459dd5aa8SSimon Glass #define DP_MAIN_LINK_CHANNEL_CODING_SET_ASC_RESET_DISABLE	0
34559dd5aa8SSimon Glass #define DP_MAIN_LINK_CHANNEL_CODING_SET_ASC_RESET_ENABLE	1
34659dd5aa8SSimon Glass 
34759dd5aa8SSimon Glass #define NV_DPCD_TRAINING_LANE0_1_SET2			0x10f
34859dd5aa8SSimon Glass #define NV_DPCD_TRAINING_LANE2_3_SET2			0x110
34959dd5aa8SSimon Glass #define NV_DPCD_LANEX_SET2_PC2_MAX_REACHED_T		(1 << 2)
350*dedc44b4SSimon Glass #define NV_DPCD_LANEX_SET2_PC2_MAX_REACHED_F		(0 << 2)
35159dd5aa8SSimon Glass #define NV_DPCD_LANEXPLUS1_SET2_PC2_MAX_REACHED_T	(1 << 6)
352*dedc44b4SSimon Glass #define NV_DPCD_LANEXPLUS1_SET2_PC2_MAX_REACHED_F	(0 << 6)
353*dedc44b4SSimon Glass #define NV_DPCD_LANEX_SET2_PC2_SHIFT			0
354*dedc44b4SSimon Glass #define NV_DPCD_LANEXPLUS1_SET2_PC2_SHIFT		4
35559dd5aa8SSimon Glass 
35659dd5aa8SSimon Glass #define NV_DPCD_STATUS_LANEX_CR_DONE_SHIFT		0
35759dd5aa8SSimon Glass #define NV_DPCD_STATUS_LANEX_CR_DONE_NO			(0x00000000)
35859dd5aa8SSimon Glass #define NV_DPCD_STATUS_LANEX_CR_DONE_YES		(0x00000001)
35959dd5aa8SSimon Glass #define NV_DPCD_STATUS_LANEX_CHN_EQ_DONE_SHIFT		1
36059dd5aa8SSimon Glass #define NV_DPCD_STATUS_LANEX_CHN_EQ_DONE_NO		(0x00000000 << 1)
36159dd5aa8SSimon Glass #define NV_DPCD_STATUS_LANEX_CHN_EQ_DONE_YES		(0x00000001 << 1)
36259dd5aa8SSimon Glass #define NV_DPCD_STATUS_LANEX_SYMBOL_LOCKED_SHFIT	2
36359dd5aa8SSimon Glass #define NV_DPCD_STATUS_LANEX_SYMBOL_LOCKED_NO		(0x00000000 << 2)
36459dd5aa8SSimon Glass #define NV_DPCD_STATUS_LANEX_SYMBOL_LOCKED_YES		(0x00000001 << 2)
36559dd5aa8SSimon Glass #define NV_DPCD_STATUS_LANEXPLUS1_CR_DONE_SHIFT		4
36659dd5aa8SSimon Glass #define NV_DPCD_STATUS_LANEXPLUS1_CR_DONE_NO		(0x00000000 << 4)
36759dd5aa8SSimon Glass #define NV_DPCD_STATUS_LANEXPLUS1_CR_DONE_YES		(0x00000001 << 4)
36859dd5aa8SSimon Glass #define NV_DPCD_STATUS_LANEXPLUS1_CHN_EQ_DONE_SHIFT	5
36959dd5aa8SSimon Glass #define NV_DPCD_STATUS_LANEXPLUS1_CHN_EQ_DONE_NO	(0x00000000 << 5)
37059dd5aa8SSimon Glass #define NV_DPCD_STATUS_LANEXPLUS1_CHN_EQ_DONE_YES	(0x00000001 << 5)
37159dd5aa8SSimon Glass #define NV_DPCD_STATUS_LANEXPLUS1_SYMBOL_LOCKED_SHIFT	6
37259dd5aa8SSimon Glass #define NV_DPCD_STATUS_LANEXPLUS1_SYMBOL_LOCKED_NO	(0x00000000 << 6)
37359dd5aa8SSimon Glass #define NV_DPCD_STATUS_LANEXPLUS1_SYMBOL_LOCKED_YES	(0x00000001 << 6)
37459dd5aa8SSimon Glass 
375*dedc44b4SSimon Glass #define NV_DPCD_LANE_ALIGN_STATUS_UPDATED		(0x00000204)
376*dedc44b4SSimon Glass #define NV_DPCD_LANE_ALIGN_STATUS_UPDATED_DONE_NO	(0x00000000)
377*dedc44b4SSimon Glass #define NV_DPCD_LANE_ALIGN_STATUS_UPDATED_DONE_YES	(0x00000001)
378*dedc44b4SSimon Glass 
379*dedc44b4SSimon Glass #define NV_DPCD_STATUS_LANEX_CR_DONE_SHIFT		0
380*dedc44b4SSimon Glass #define NV_DPCD_STATUS_LANEX_CR_DONE_NO			(0x00000000)
381*dedc44b4SSimon Glass #define NV_DPCD_STATUS_LANEX_CR_DONE_YES		(0x00000001)
382*dedc44b4SSimon Glass #define NV_DPCD_STATUS_LANEX_CHN_EQ_DONE_SHIFT		1
383*dedc44b4SSimon Glass #define NV_DPCD_STATUS_LANEX_CHN_EQ_DONE_NO		(0x00000000 << 1)
384*dedc44b4SSimon Glass #define NV_DPCD_STATUS_LANEX_CHN_EQ_DONE_YES		(0x00000001 << 1)
385*dedc44b4SSimon Glass #define NV_DPCD_STATUS_LANEX_SYMBOL_LOCKED_SHFIT	2
386*dedc44b4SSimon Glass #define NV_DPCD_STATUS_LANEX_SYMBOL_LOCKED_NO		(0x00000000 << 2)
387*dedc44b4SSimon Glass #define NV_DPCD_STATUS_LANEX_SYMBOL_LOCKED_YES		(0x00000001 << 2)
388*dedc44b4SSimon Glass #define NV_DPCD_STATUS_LANEXPLUS1_CR_DONE_SHIFT		4
389*dedc44b4SSimon Glass #define NV_DPCD_STATUS_LANEXPLUS1_CR_DONE_NO		(0x00000000 << 4)
390*dedc44b4SSimon Glass #define NV_DPCD_STATUS_LANEXPLUS1_CR_DONE_YES		(0x00000001 << 4)
391*dedc44b4SSimon Glass #define NV_DPCD_STATUS_LANEXPLUS1_CHN_EQ_DONE_SHIFT	5
392*dedc44b4SSimon Glass #define NV_DPCD_STATUS_LANEXPLUS1_CHN_EQ_DONE_NO	(0x00000000 << 5)
393*dedc44b4SSimon Glass #define NV_DPCD_STATUS_LANEXPLUS1_CHN_EQ_DONE_YES	(0x00000001 << 5)
394*dedc44b4SSimon Glass #define NV_DPCD_STATUS_LANEXPLUS1_SYMBOL_LOCKED_SHIFT	6
395*dedc44b4SSimon Glass #define NV_DPCD_STATUS_LANEXPLUS1_SYMBOL_LOCKED_NO	(0x00000000 << 6)
396*dedc44b4SSimon Glass #define NV_DPCD_STATUS_LANEXPLUS1_SYMBOL_LOCKED_YES	(0x00000001 << 6)
397*dedc44b4SSimon Glass 
398*dedc44b4SSimon Glass #define NV_DPCD_ADJUST_REQ_LANEX_DC_SHIFT		0
399*dedc44b4SSimon Glass #define NV_DPCD_ADJUST_REQ_LANEX_DC_MASK		0x3
400*dedc44b4SSimon Glass #define NV_DPCD_ADJUST_REQ_LANEX_PE_SHIFT		2
401*dedc44b4SSimon Glass #define NV_DPCD_ADJUST_REQ_LANEX_PE_MASK		(0x3 << 2)
402*dedc44b4SSimon Glass #define NV_DPCD_ADJUST_REQ_LANEXPLUS1_DC_SHIFT		4
403*dedc44b4SSimon Glass #define NV_DPCD_ADJUST_REQ_LANEXPLUS1_DC_MASK		(0x3 << 4)
404*dedc44b4SSimon Glass #define NV_DPCD_ADJUST_REQ_LANEXPLUS1_PE_SHIFT		6
405*dedc44b4SSimon Glass #define NV_DPCD_ADJUST_REQ_LANEXPLUS1_PE_MASK		(0x3 << 6)
406*dedc44b4SSimon Glass #define NV_DPCD_ADJUST_REQ_POST_CURSOR2			(0x0000020C)
407*dedc44b4SSimon Glass #define NV_DPCD_ADJUST_REQ_POST_CURSOR2_LANE_MASK	0x3
408*dedc44b4SSimon Glass #define NV_DPCD_ADJUST_REQ_POST_CURSOR2_LANE_SHIFT(i)	(i*2)
409*dedc44b4SSimon Glass 
410*dedc44b4SSimon Glass #define NV_DPCD_TRAINING_AUX_RD_INTERVAL		(0x0000000E)
411*dedc44b4SSimon Glass #define NV_DPCD_TRAINING_LANEX_SET_DC_MAX_REACHED_F     (0x00000000 << 2)
41259dd5aa8SSimon Glass #endif
413