1 /* SPDX-License-Identifier: GPL-2.0-only */
3 #include <device/mmio.h>
4 #include <console/console.h>
6 #include <device/device.h>
9 #include <soc/addressmap.h>
10 #include <soc/display.h>
15 #define edp_debug(x...) do {if (0) printk(BIOS_DEBUG, x); } while (0)
17 static struct rk_edp rk_edp
;
21 #define DP_LINK_STATUS_SIZE 6
23 static const char *voltage_names
[] = {
24 "0.4V", "0.6V", "0.8V", "1.2V"
26 static const char *pre_emph_names
[] = {
27 "0dB", "3.5dB", "6dB", "9.5dB"
30 #define DP_VOLTAGE_MAX DP_TRAIN_VOLTAGE_SWING_1200
31 #define DP_PRE_EMPHASIS_MAX DP_TRAIN_PRE_EMPHASIS_9_5
33 static void rk_edp_init_refclk(struct rk_edp
*edp
)
35 write32(&edp
->regs
->analog_ctl_2
, SEL_24M
);
36 write32(&edp
->regs
->pll_reg_1
, REF_CLK_24M
);
39 write32(&edp
->regs
->pll_reg_2
, LDO_OUTPUT_V_SEL_145
| KVCO_DEFALUT
|
40 CHG_PUMP_CUR_SEL_5US
| V2L_CUR_SEL_1MA
);
42 write32(&edp
->regs
->pll_reg_3
, LOCK_DET_CNT_SEL_256
|
43 LOOP_FILTER_RESET
| PALL_SSC_RESET
| LOCK_DET_BYPASS
|
44 PLL_LOCK_DET_MODE
| PLL_LOCK_DET_FORCE
);
46 write32(&edp
->regs
->pll_reg_5
, REGULATOR_V_SEL_950MV
| STANDBY_CUR_SEL
|
47 CHG_PUMP_INOUT_CTRL_1200MV
| CHG_PUMP_INPUT_CTRL_OP
);
49 write32(&edp
->regs
->ssc_reg
, SSC_OFFSET
| SSC_MODE
| SSC_DEPTH
);
51 write32(&edp
->regs
->tx_common
, TX_SWING_PRE_EMP_MODE
|
52 PRE_DRIVER_PW_CTRL1
| LP_MODE_CLK_REGULATOR
|
53 RESISTOR_MSB_CTRL
| RESISTOR_CTRL
);
55 write32(&edp
->regs
->dp_aux
, DP_AUX_COMMON_MODE
|
56 DP_AUX_EN
| AUX_TERM_50OHM
);
58 write32(&edp
->regs
->dp_bias
, DP_BG_OUT_SEL
| DP_DB_CUR_CTRL
|
59 DP_BG_SEL
| DP_RESISTOR_TUNE_BG
);
61 write32(&edp
->regs
->dp_reserv2
,
62 CH1_CH3_SWING_EMP_CTRL
| CH0_CH2_SWING_EMP_CTRL
);
65 static void rk_edp_init_interrupt(struct rk_edp
*edp
)
67 /* Set interrupt pin assertion polarity as high */
68 write32(&edp
->regs
->int_ctl
, INT_POL
);
70 /* Clear pending registers */
71 write32(&edp
->regs
->common_int_sta_1
, 0xff);
72 write32(&edp
->regs
->common_int_sta_2
, 0x4f);
73 write32(&edp
->regs
->common_int_sta_3
, 0xff);
74 write32(&edp
->regs
->common_int_sta_4
, 0x27);
75 write32(&edp
->regs
->dp_int_sta
, 0x7f);
77 /* 0:mask,1: unmask */
78 write32(&edp
->regs
->common_int_mask_1
, 0x00);
79 write32(&edp
->regs
->common_int_mask_2
, 0x00);
80 write32(&edp
->regs
->common_int_mask_3
, 0x00);
81 write32(&edp
->regs
->common_int_mask_4
, 0x00);
82 write32(&edp
->regs
->int_sta_mask
, 0x00);
85 static void rk_edp_enable_sw_function(struct rk_edp
*edp
)
87 clrbits32(&edp
->regs
->func_en_1
, SW_FUNC_EN_N
);
90 static int rk_edp_get_pll_lock_status(struct rk_edp
*edp
)
94 val
= read32(&edp
->regs
->dp_debug_ctl
);
95 return (val
& PLL_LOCK
) ? DP_PLL_LOCKED
: DP_PLL_UNLOCKED
;
98 static void rk_edp_init_analog_func(struct rk_edp
*edp
)
102 write32(&edp
->regs
->dp_pd
, 0x00);
104 write32(&edp
->regs
->common_int_sta_1
, PLL_LOCK_CHG
);
106 clrbits32(&edp
->regs
->dp_debug_ctl
, F_PLL_LOCK
| PLL_LOCK_CTRL
);
108 stopwatch_init_msecs_expire(&sw
, PLL_LOCK_TIMEOUT
);
110 while (rk_edp_get_pll_lock_status(edp
) == DP_PLL_UNLOCKED
) {
111 if (stopwatch_expired(&sw
)) {
112 printk(BIOS_ERR
, "%s: PLL is not locked\n", __func__
);
117 /* Enable Serdes FIFO function and Link symbol clock domain module */
118 clrbits32(&edp
->regs
->func_en_2
, SERDES_FIFO_FUNC_EN_N
|
119 LS_CLK_DOMAIN_FUNC_EN_N
| AUX_FUNC_EN_N
|
123 static void rk_edp_init_aux(struct rk_edp
*edp
)
125 /* Clear interrupts related to AUX channel */
126 write32(&edp
->regs
->dp_int_sta
, AUX_FUNC_EN_N
);
128 /* Disable AUX channel module */
129 setbits32(&edp
->regs
->func_en_2
, AUX_FUNC_EN_N
);
131 /* Receive AUX Channel DEFER commands equal to DEFFER_COUNT*64 */
132 write32(&edp
->regs
->aux_ch_defer_dtl
, DEFER_CTRL_EN
| DEFER_COUNT(1));
134 /* Enable AUX channel module */
135 clrbits32(&edp
->regs
->func_en_2
, AUX_FUNC_EN_N
);
138 static int rk_edp_aux_enable(struct rk_edp
*edp
)
142 setbits32(&edp
->regs
->aux_ch_ctl_2
, AUX_EN
);
143 stopwatch_init_msecs_expire(&sw
, 20);
145 if (!(read32(&edp
->regs
->aux_ch_ctl_2
) & AUX_EN
))
147 } while (!stopwatch_expired(&sw
));
153 static int rk_edp_is_aux_reply(struct rk_edp
*edp
)
157 stopwatch_init_msecs_expire(&sw
, 10);
159 while (!(read32(&edp
->regs
->dp_int_sta
) & RPLY_RECEIV
)) {
160 if (stopwatch_expired(&sw
))
164 write32(&edp
->regs
->dp_int_sta
, RPLY_RECEIV
);
169 static int rk_edp_start_aux_transaction(struct rk_edp
*edp
)
173 /* Enable AUX CH operation */
174 if (rk_edp_aux_enable(edp
)) {
175 edp_debug("AUX CH enable timeout!\n");
179 /* Is AUX CH command reply received? */
180 if (rk_edp_is_aux_reply(edp
)) {
181 edp_debug("AUX CH command reply failed!\n");
185 /* Clear interrupt source for AUX CH access error */
186 val
= read32(&edp
->regs
->dp_int_sta
);
188 write32(&edp
->regs
->dp_int_sta
, AUX_ERR
);
192 /* Check AUX CH error access status */
193 val
= read32(&edp
->regs
->dp_int_sta
);
194 if ((val
& AUX_STATUS_MASK
) != 0) {
195 edp_debug("AUX CH error happens: %d\n\n",
196 val
& AUX_STATUS_MASK
);
203 static int rk_edp_dpcd_transfer(struct rk_edp
*edp
,
204 unsigned int val_addr
, u8
*data
,
206 enum dpcd_request request
)
214 len
= MIN(length
, 16);
215 for (try_times
= 0; try_times
< 10; try_times
++) {
217 /* Clear AUX CH data buffer */
219 write32(&edp
->regs
->buf_data_ctl
, val
);
221 /* Select DPCD device address */
222 val
= AUX_ADDR_7_0(val_addr
);
223 write32(&edp
->regs
->aux_addr_7_0
, val
);
224 val
= AUX_ADDR_15_8(val_addr
);
225 write32(&edp
->regs
->aux_addr_15_8
, val
);
226 val
= AUX_ADDR_19_16(val_addr
);
227 write32(&edp
->regs
->aux_addr_19_16
, val
);
230 * Set DisplayPort transaction and read 1 byte
231 * If bit 3 is 1, DisplayPort transaction.
232 * If Bit 3 is 0, I2C transaction.
234 if (request
== DPCD_WRITE
) {
235 val
= AUX_LENGTH(len
) |
236 AUX_TX_COMM_DP_TRANSACTION
|
238 for (i
= 0; i
< len
; i
++)
239 write32(&edp
->regs
->buf_data
[i
],
242 val
= AUX_LENGTH(len
) |
243 AUX_TX_COMM_DP_TRANSACTION
|
246 write32(&edp
->regs
->aux_ch_ctl_1
, val
);
248 /* Start AUX transaction */
249 retval
= rk_edp_start_aux_transaction(edp
);
253 printk(BIOS_WARNING
, "read dpcd Aux Transaction fail!\n");
260 if (request
== DPCD_READ
) {
261 for (i
= 0; i
< len
; i
++)
262 *data
++ = (u8
)read32(&edp
->regs
->buf_data
[i
]);
271 static int rk_edp_dpcd_read(struct rk_edp
*edp
, u32 addr
,
272 u8
*values
, size_t size
)
274 return rk_edp_dpcd_transfer(edp
, addr
, values
, size
, DPCD_READ
);
277 static int rk_edp_dpcd_write(struct rk_edp
*edp
, u32 addr
,
278 u8
*values
, size_t size
)
280 return rk_edp_dpcd_transfer(edp
, addr
, values
, size
, DPCD_WRITE
);
283 static int rk_edp_link_power_up(struct rk_edp
*edp
)
288 /* DP_SET_POWER register is only available on DPCD v1.1 and later */
289 if (edp
->link_train
.revision
< 0x11)
292 err
= rk_edp_dpcd_read(edp
, DPCD_LINK_POWER_STATE
, &value
, 1);
296 value
&= ~DP_SET_POWER_MASK
;
297 value
|= DP_SET_POWER_D0
;
299 err
= rk_edp_dpcd_write(edp
, DPCD_LINK_POWER_STATE
, &value
, 1);
304 * According to the DP 1.1 specification, a "Sink Device must exit the
305 * power saving state within 1 ms" (Section 2.5.3.1, Table 5-52, "Sink
306 * Control Field" (register 0x600).
313 static int rk_edp_link_configure(struct rk_edp
*edp
)
317 values
[0] = edp
->link_train
.link_rate
;
318 values
[1] = edp
->link_train
.lane_count
;
320 return rk_edp_dpcd_write(edp
, DPCD_LINK_BW_SET
, values
, sizeof(values
));
323 static void rk_edp_set_link_training(struct rk_edp
*edp
,
324 const u8
*training_values
)
328 for (i
= 0; i
< edp
->link_train
.lane_count
; i
++)
329 write32(&edp
->regs
->ln_link_trn_ctl
[i
], training_values
[i
]);
332 static u8
edp_link_status(const u8
*link_status
, int r
)
334 return link_status
[r
- DPCD_LANE0_1_STATUS
];
337 static int rk_edp_dpcd_read_link_status(struct rk_edp
*edp
, u8
*link_status
)
339 return rk_edp_dpcd_read(edp
, DPCD_LANE0_1_STATUS
, link_status
,
340 DP_LINK_STATUS_SIZE
);
343 static u8
edp_get_lane_status(const u8
*link_status
, int lane
)
345 int i
= DPCD_LANE0_1_STATUS
+ (lane
>> 1);
346 int s
= (lane
& 1) * 4;
347 u8 l
= edp_link_status(link_status
, i
);
349 return (l
>> s
) & 0xf;
352 static int rk_edp_clock_recovery_ok(const u8
*link_status
, int lane_count
)
357 for (lane
= 0; lane
< lane_count
; lane
++) {
358 lane_status
= edp_get_lane_status(link_status
, lane
);
359 if ((lane_status
& DP_LANE_CR_DONE
) == 0)
365 static int rk_edp_channel_eq_ok(const u8
*link_status
, int lane_count
)
371 lane_align
= edp_link_status(link_status
,
372 DPCD_LANE_ALIGN_STATUS_UPDATED
);
373 if ((lane_align
& DP_INTERLANE_ALIGN_DONE
) == 0)
375 for (lane
= 0; lane
< lane_count
; lane
++) {
376 lane_status
= edp_get_lane_status(link_status
, lane
);
377 if ((lane_status
& DP_CHANNEL_EQ_BITS
) != DP_CHANNEL_EQ_BITS
)
384 rk_edp_get_adjust_request_voltage(const u8
*link_status
, int lane
)
386 int i
= DPCD_ADJUST_REQUEST_LANE0_1
+ (lane
>> 1);
387 int s
= ((lane
& 1) ?
388 DP_ADJUST_VOLTAGE_SWING_LANE1_SHIFT
:
389 DP_ADJUST_VOLTAGE_SWING_LANE0_SHIFT
);
390 u8 l
= edp_link_status(link_status
, i
);
392 return ((l
>> s
) & 0x3) << DP_TRAIN_VOLTAGE_SWING_SHIFT
;
395 static u8
rk_edp_get_adjust_request_pre_emphasis(const u8
*link_status
,
398 int i
= DPCD_ADJUST_REQUEST_LANE0_1
+ (lane
>> 1);
399 int s
= ((lane
& 1) ?
400 DP_ADJUST_PRE_EMPHASIS_LANE1_SHIFT
:
401 DP_ADJUST_PRE_EMPHASIS_LANE0_SHIFT
);
402 u8 l
= edp_link_status(link_status
, i
);
404 return ((l
>> s
) & 0x3) << DP_TRAIN_PRE_EMPHASIS_SHIFT
;
407 static void edp_get_adjust_train(const u8
*link_status
, int lane_count
,
414 for (lane
= 0; lane
< lane_count
; lane
++) {
416 rk_edp_get_adjust_request_voltage(link_status
, lane
);
418 rk_edp_get_adjust_request_pre_emphasis(link_status
,
421 printk(BIOS_DEBUG
, "requested signal parameters: lane %d "
422 "voltage %s pre_emph %s\n", lane
,
423 voltage_names
[this_v
>> DP_TRAIN_VOLTAGE_SWING_SHIFT
],
424 pre_emph_names
[this_p
>> DP_TRAIN_PRE_EMPHASIS_SHIFT
]);
432 if (v
>= DP_VOLTAGE_MAX
)
433 v
|= DP_TRAIN_MAX_SWING_REACHED
;
435 if (p
>= DP_PRE_EMPHASIS_MAX
)
436 p
|= DP_TRAIN_MAX_PRE_EMPHASIS_REACHED
;
438 printk(BIOS_DEBUG
, "using signal parameters: voltage %s pre_emph %s\n",
439 voltage_names
[(v
& DP_TRAIN_VOLTAGE_SWING_MASK
)
440 >> DP_TRAIN_VOLTAGE_SWING_SHIFT
],
441 pre_emph_names
[(p
& DP_TRAIN_PRE_EMPHASIS_MASK
)
442 >> DP_TRAIN_PRE_EMPHASIS_SHIFT
]);
444 for (lane
= 0; lane
< 4; lane
++)
445 train_set
[lane
] = v
| p
;
448 static int rk_edp_link_train_cr(struct rk_edp
*edp
)
451 u8 voltage
, tries
= 0;
452 u8 status
[DP_LINK_STATUS_SIZE
];
456 value
= DP_TRAINING_PATTERN_1
;
457 write32(&edp
->regs
->dp_training_ptn_set
, value
);
458 rk_edp_dpcd_write(edp
, DPCD_TRAINING_PATTERN_SET
, &value
, 1);
459 memset(edp
->train_set
, 0, 4);
461 /* clock recovery loop */
467 rk_edp_set_link_training(edp
, edp
->train_set
);
468 rk_edp_dpcd_write(edp
, DPCD_TRAINING_LANE0_SET
,
470 edp
->link_train
.lane_count
);
474 if (rk_edp_dpcd_read_link_status(edp
, status
) < 0) {
475 printk(BIOS_ERR
, "displayport link status failed\n");
479 if (rk_edp_clock_recovery_ok(status
,
480 edp
->link_train
.lane_count
)) {
485 for (i
= 0; i
< edp
->link_train
.lane_count
; i
++) {
486 if ((edp
->train_set
[i
] &
487 DP_TRAIN_MAX_SWING_REACHED
) == 0)
490 if (i
== edp
->link_train
.lane_count
) {
491 printk(BIOS_ERR
, "clock recovery reached max voltage\n");
495 if ((edp
->train_set
[0] &
496 DP_TRAIN_VOLTAGE_SWING_MASK
) == voltage
) {
498 if (tries
== MAX_CR_LOOP
) {
499 printk(BIOS_ERR
, "clock recovery tried 5 times\n");
505 voltage
= edp
->train_set
[0] & DP_TRAIN_VOLTAGE_SWING_MASK
;
507 /* Compute new train_set as requested by sink */
508 edp_get_adjust_train(status
, edp
->link_train
.lane_count
,
511 if (!clock_recovery
) {
512 printk(BIOS_ERR
, "clock recovery failed\n");
515 printk(BIOS_DEBUG
, "clock recovery at voltage %d pre-emphasis %d\n",
516 edp
->train_set
[0] & DP_TRAIN_VOLTAGE_SWING_MASK
,
517 (edp
->train_set
[0] & DP_TRAIN_PRE_EMPHASIS_MASK
) >>
518 DP_TRAIN_PRE_EMPHASIS_SHIFT
);
523 static int rk_edp_link_train_ce(struct rk_edp
*edp
)
527 u8 status
[DP_LINK_STATUS_SIZE
];
529 value
= DP_TRAINING_PATTERN_2
;
530 write32(&edp
->regs
->dp_training_ptn_set
, value
);
531 rk_edp_dpcd_write(edp
, DPCD_TRAINING_PATTERN_SET
, &value
, 1);
533 /* channel equalization loop */
535 for (tries
= 0; tries
< 5; tries
++) {
536 rk_edp_set_link_training(edp
, edp
->train_set
);
537 rk_edp_dpcd_write(edp
, DPCD_TRAINING_LANE0_SET
,
539 edp
->link_train
.lane_count
);
542 if (rk_edp_dpcd_read_link_status(edp
, status
) < 0) {
543 printk(BIOS_ERR
, "displayport link status failed\n");
547 if (rk_edp_channel_eq_ok(status
,
548 edp
->link_train
.lane_count
)) {
552 edp_get_adjust_train(status
,
553 edp
->link_train
.lane_count
,
558 printk(BIOS_ERR
, "channel eq failed\n");
561 printk(BIOS_DEBUG
, "channel eq at voltage %d pre-emphasis %d\n",
562 edp
->train_set
[0] & DP_TRAIN_VOLTAGE_SWING_MASK
,
563 (edp
->train_set
[0] & DP_TRAIN_PRE_EMPHASIS_MASK
)
564 >> DP_TRAIN_PRE_EMPHASIS_SHIFT
);
569 static int rk_edp_init_training(struct rk_edp
*edp
)
574 err
= rk_edp_dpcd_read(edp
, DPCD_DPCD_REV
, values
, sizeof(values
));
578 edp
->link_train
.revision
= values
[0];
579 edp
->link_train
.link_rate
= values
[1];
580 edp
->link_train
.lane_count
= values
[2] & DP_MAX_LANE_COUNT_MASK
;
582 edp_debug("max link rate:%d.%dGps max number of lanes:%d\n",
583 edp
->link_train
.link_rate
* 27 / 100,
584 edp
->link_train
.link_rate
* 27 % 100,
585 edp
->link_train
.lane_count
);
587 if ((edp
->link_train
.link_rate
!= LINK_RATE_1_62GBPS
) &&
588 (edp
->link_train
.link_rate
!= LINK_RATE_2_70GBPS
)) {
589 edp_debug("Rx Max Link Rate is abnormal :%x\n",
590 edp
->link_train
.link_rate
);
594 if (edp
->link_train
.lane_count
== 0) {
595 edp_debug("Rx Max Lane count is abnormal :%x\n",
596 edp
->link_train
.lane_count
);
600 rk_edp_link_power_up(edp
);
601 rk_edp_link_configure(edp
);
605 static int rk_edp_hw_link_training(struct rk_edp
*edp
)
610 /* Set link rate and count as you want to establish*/
611 write32(&edp
->regs
->link_bw_set
, edp
->link_train
.link_rate
);
612 write32(&edp
->regs
->lane_count_set
, edp
->link_train
.lane_count
);
614 if (rk_edp_link_train_cr(edp
))
616 if (rk_edp_link_train_ce(edp
))
619 write32(&edp
->regs
->dp_hw_link_training
, HW_LT_EN
);
620 stopwatch_init_msecs_expire(&sw
, 10);
622 val
= read32(&edp
->regs
->dp_hw_link_training
);
623 if (!(val
& HW_LT_EN
))
625 } while (!stopwatch_expired(&sw
));
626 if (val
& HW_LT_ERR_CODE_MASK
) {
627 printk(BIOS_ERR
, "edp hw link training error: %d\n",
628 val
>> HW_LT_ERR_CODE_SHIFT
);
635 static int rk_edp_select_i2c_device(struct rk_edp
*edp
,
636 unsigned int device_addr
,
637 unsigned int val_addr
)
642 /* Set EDID device address */
644 write32(&edp
->regs
->aux_addr_7_0
, val
);
645 write32(&edp
->regs
->aux_addr_15_8
, 0x0);
646 write32(&edp
->regs
->aux_addr_19_16
, 0x0);
648 /* Set offset from base address of EDID device */
649 write32(&edp
->regs
->buf_data
[0], val_addr
);
652 * Set I2C transaction and write address
653 * If bit 3 is 1, DisplayPort transaction.
654 * If Bit 3 is 0, I2C transaction.
656 val
= AUX_TX_COMM_I2C_TRANSACTION
| AUX_TX_COMM_MOT
|
658 write32(&edp
->regs
->aux_ch_ctl_1
, val
);
660 /* Start AUX transaction */
661 retval
= rk_edp_start_aux_transaction(edp
);
663 edp_debug("select_i2c_device Aux Transaction fail!\n");
668 static int rk_edp_read_bytes_from_i2c(struct rk_edp
*edp
,
669 unsigned int device_addr
,
670 unsigned int val_addr
,
676 unsigned int cur_data_idx
;
677 unsigned int defer
= 0;
680 for (i
= 0; i
< count
; i
+= 16) {
681 for (j
= 0; j
< 10; j
++) { /* try 10 times */
682 /* Clear AUX CH data buffer */
684 write32(&edp
->regs
->buf_data_ctl
, val
);
686 /* Set normal AUX CH command */
687 clrbits32(&edp
->regs
->aux_ch_ctl_2
, ADDR_ONLY
);
690 * If Rx sends defer, Tx sends only reads
691 * request without sending address
694 retval
= rk_edp_select_i2c_device(edp
,
695 device_addr
, val_addr
+ i
);
700 * Set I2C transaction and write data
701 * If bit 3 is 1, DisplayPort transaction.
702 * If Bit 3 is 0, I2C transaction.
704 val
= AUX_LENGTH(16) | AUX_TX_COMM_I2C_TRANSACTION
|
706 write32(&edp
->regs
->aux_ch_ctl_1
, val
);
708 /* Start AUX transaction */
709 retval
= rk_edp_start_aux_transaction(edp
);
713 edp_debug("Aux Transaction fail!\n");
717 /* Check if Rx sends defer */
718 val
= read32(&edp
->regs
->aux_rx_comm
);
719 if (val
== AUX_RX_COMM_AUX_DEFER
||
720 val
== AUX_RX_COMM_I2C_DEFER
) {
721 edp_debug("Defer: %d\n\n", val
);
729 for (cur_data_idx
= 0; cur_data_idx
< 16; cur_data_idx
++) {
730 val
= read32(&edp
->regs
->buf_data
[cur_data_idx
]);
731 edid
[i
+ cur_data_idx
] = (u8
)val
;
738 static int rk_edp_read_edid(struct rk_edp
*edp
, struct edid
*edid
)
740 u8 buf
[EDID_LENGTH
* 2];
741 u32 edid_size
= EDID_LENGTH
;
745 retval
= rk_edp_read_bytes_from_i2c(edp
, EDID_ADDR
,
746 EDID_HEADER
, EDID_LENGTH
,
749 printk(BIOS_ERR
, "EDID Read failed!\n");
753 /* check if edid have extension flag, and read additional EDID data */
754 if (buf
[EDID_EXTENSION_FLAG
]) {
755 edid_size
+= EDID_LENGTH
;
756 retval
= rk_edp_read_bytes_from_i2c(edp
, EDID_ADDR
,
757 EDID_LENGTH
, EDID_LENGTH
,
760 printk(BIOS_ERR
, "EDID Read failed!\n");
765 if (decode_edid(buf
, edid_size
, edid
) != EDID_CONFORMANT
) {
766 printk(BIOS_ERR
, "%s: Failed to decode EDID.\n",
771 edp_debug("EDID Read success!\n");
775 static int rk_edp_set_link_train(struct rk_edp
*edp
)
779 if (rk_edp_init_training(edp
)) {
780 printk(BIOS_ERR
, "DP LT init failed!\n");
784 retval
= rk_edp_hw_link_training(edp
);
789 static void rk_edp_init_video(struct rk_edp
*edp
)
793 val
= VSYNC_DET
| VID_FORMAT_CHG
| VID_CLK_CHG
;
794 write32(&edp
->regs
->common_int_sta_1
, val
);
796 val
= CHA_CRI(4) | CHA_CTRL
;
797 write32(&edp
->regs
->sys_ctl_2
, val
);
799 val
= VID_HRES_TH(2) | VID_VRES_TH(0);
800 write32(&edp
->regs
->video_ctl_8
, val
);
803 static void rk_edp_config_video_slave_mode(struct rk_edp
*edp
)
805 clrbits32(&edp
->regs
->func_en_1
,
806 VID_FIFO_FUNC_EN_N
| VID_CAP_FUNC_EN_N
);
809 static void rk_edp_set_video_cr_mn(struct rk_edp
*edp
,
810 enum clock_recovery_m_value_type type
,
816 if (type
== REGISTER_M
) {
817 setbits32(&edp
->regs
->sys_ctl_4
, FIX_M_VID
);
818 val
= m_value
& 0xff;
819 write32(&edp
->regs
->m_vid_0
, val
);
820 val
= (m_value
>> 8) & 0xff;
821 write32(&edp
->regs
->m_vid_1
, val
);
822 val
= (m_value
>> 16) & 0xff;
823 write32(&edp
->regs
->m_vid_2
, val
);
825 val
= n_value
& 0xff;
826 write32(&edp
->regs
->n_vid_0
, val
);
827 val
= (n_value
>> 8) & 0xff;
828 write32(&edp
->regs
->n_vid_1
, val
);
829 val
= (n_value
>> 16) & 0xff;
830 write32(&edp
->regs
->n_vid_2
, val
);
832 clrbits32(&edp
->regs
->sys_ctl_4
, FIX_M_VID
);
834 write32(&edp
->regs
->n_vid_0
, 0x00);
835 write32(&edp
->regs
->n_vid_1
, 0x80);
836 write32(&edp
->regs
->n_vid_2
, 0x00);
840 static int rk_edp_is_video_stream_clock_on(struct rk_edp
*edp
)
845 stopwatch_init_msecs_expire(&sw
, 100);
847 val
= read32(&edp
->regs
->sys_ctl_1
);
849 /*must write value to update DET_STA bit status*/
850 write32(&edp
->regs
->sys_ctl_1
, val
);
851 val
= read32(&edp
->regs
->sys_ctl_1
);
852 if (!(val
& DET_STA
))
855 val
= read32(&edp
->regs
->sys_ctl_2
);
857 /*must write value to update CHA_STA bit status*/
858 write32(&edp
->regs
->sys_ctl_2
, val
);
859 val
= read32(&edp
->regs
->sys_ctl_2
);
860 if (!(val
& CHA_STA
))
862 } while (!stopwatch_expired(&sw
));
867 static int rk_edp_is_video_stream_on(struct rk_edp
*edp
)
872 stopwatch_init_msecs_expire(&sw
, 100);
874 val
= read32(&edp
->regs
->sys_ctl_3
);
876 /*must write value to update STRM_VALID bit status*/
877 write32(&edp
->regs
->sys_ctl_3
, val
);
879 val
= read32(&edp
->regs
->sys_ctl_3
);
880 if (!(val
& STRM_VALID
))
882 } while (!stopwatch_expired(&sw
));
887 static int rk_edp_config_video(struct rk_edp
*edp
)
889 rk_edp_config_video_slave_mode(edp
);
891 if (rk_edp_get_pll_lock_status(edp
) == DP_PLL_UNLOCKED
) {
892 edp_debug("PLL is not locked yet.\n");
896 if (rk_edp_is_video_stream_clock_on(edp
))
899 /* Set to use the register calculated M/N video */
900 rk_edp_set_video_cr_mn(edp
, CALCULATED_M
, 0, 0);
902 /* For video bist, Video timing must be generated by register */
903 clrbits32(&edp
->regs
->video_ctl_10
, F_SEL
);
905 /* Disable video mute */
906 clrbits32(&edp
->regs
->video_ctl_1
, VIDEO_MUTE
);
911 static void rockchip_edp_force_hpd(struct rk_edp
*edp
)
915 val
= read32(&edp
->regs
->sys_ctl_3
);
916 val
|= (F_HPD
| HPD_CTRL
);
917 write32(&edp
->regs
->sys_ctl_3
, val
);
920 static int rockchip_edp_get_plug_in_status(struct rk_edp
*edp
)
924 val
= read32(&edp
->regs
->sys_ctl_3
);
925 if (val
& HPD_STATUS
)
932 * support edp HPD function
933 * some hardware version do not support edp hdp,
934 * we use 360ms to try to get the hpd single now,
935 * if we can not get edp hpd single, it will delay 360ms,
936 * also meet the edp power timing request, to compatible
937 * all of the hardware version
939 static void rk_edp_wait_hpd(struct rk_edp
*edp
)
941 struct stopwatch hpd
;
943 stopwatch_init_msecs_expire(&hpd
, 360);
945 if (rockchip_edp_get_plug_in_status(edp
))
948 } while (!stopwatch_expired(&hpd
));
950 printk(BIOS_DEBUG
, "do not get hpd single, force hpd\n");
951 rockchip_edp_force_hpd(edp
);
954 int rk_edp_get_edid(struct edid
*edid
)
960 for (i
= 0; i
< 3; i
++) {
961 retval
= rk_edp_read_edid(&rk_edp
, edid
);
969 int rk_edp_prepare(void)
973 if (rk_edp_set_link_train(&rk_edp
)) {
974 printk(BIOS_ERR
, "link train failed!\n");
978 rk_edp_init_video(&rk_edp
);
979 ret
= rk_edp_config_video(&rk_edp
);
981 printk(BIOS_ERR
, "config video failed\n");
986 int rk_edp_enable(void)
988 /* Enable video at next frame */
989 setbits32(&rk_edp
.regs
->video_ctl_1
, VIDEO_EN
);
991 return rk_edp_is_video_stream_on(&rk_edp
);
994 void rk_edp_init(void)
996 rk_edp
.regs
= (struct rk_edp_regs
*)EDP_BASE
;
998 rk_edp_wait_hpd(&rk_edp
);
1000 rk_edp_init_refclk(&rk_edp
);
1001 rk_edp_init_interrupt(&rk_edp
);
1002 rk_edp_enable_sw_function(&rk_edp
);
1003 rk_edp_init_analog_func(&rk_edp
);
1004 rk_edp_init_aux(&rk_edp
);