coreboot
coreboot is an Open Source project aimed at replacing the proprietary BIOS found in most computers.
dptx_hal.c
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 
3 #include <console/console.h>
4 #include <device/mmio.h>
5 #include <delay.h>
6 #include <edid.h>
7 #include <soc/dptx.h>
8 #include <soc/dptx_hal.h>
9 #include <soc/dptx_reg.h>
10 #include <types.h>
11 
12 #define REG_OFFSET_LIMIT 0x8000
13 
14 struct shift_mask {
17 };
18 static const struct shift_mask volt_swing[DPTX_LANE_MAX] = {
23 };
24 static const struct shift_mask volt_preemphasis[DPTX_LANE_MAX] = {
29 };
30 
32 {
33  void *addr = mtk_dp->regs + offset;
34 
35  if (offset % 4 != 0 || offset > REG_OFFSET_LIMIT) {
36  printk(BIOS_ERR, "[%s] invalid offset %#x for reg %p\n",
37  __func__, offset, mtk_dp->regs);
38  return 0;
39  }
40 
41  return read32(addr);
42 }
43 
45 {
46  void *addr = mtk_dp->regs + offset;
47 
48  if (offset % 4 != 0 || offset > REG_OFFSET_LIMIT) {
49  printk(BIOS_ERR, "[%s] invalid offset %#x for reg %p\n",
50  __func__, offset, mtk_dp->regs);
51  return;
52  }
53 
54  write32(addr, val);
55 }
56 
58 {
59  void *addr = mtk_dp->regs + offset;
60 
61  if (offset % 4 != 0 || offset > REG_OFFSET_LIMIT) {
62  printk(BIOS_ERR, "[%s] invalid offset %#x for reg %p\n",
63  __func__, offset, mtk_dp->regs);
64  return;
65  }
66 
67  /*
68  * TODO: modify to clrsetbits32(addr, mask, val);
69  * There is asserion error when testing assert((val & mask) == val).
70  */
72 }
73 
75 {
76  if (addr % 2) {
78  mtk_dp_mask(mtk_dp, addr - 1, val << 8, mask << 8);
79  } else {
82  }
83 
85 }
86 
88 {
89  u32 m, n, ls_clk, pix_clk;
90 
92  n = 0x8000;
93  ls_clk = mtk_dp->train_info.linkrate;
94  ls_clk *= 27;
95 
96  pix_clk = m * ls_clk / n;
97  printk(BIOS_DEBUG, "DPTX calc pixel clock = %d MHz, dp_intf clock = %dMHz\n",
98  pix_clk, pix_clk / 4);
99 }
100 
102 {
108 }
109 
110 void dptx_hal_bypassmsa_en(struct mtk_dp *mtk_dp, bool enable)
111 {
113  enable ? 0 : 0x3ff, 0x3ff);
114 }
115 
117 {
118  u32 va, vsync, vbp, vfp, vtotal, ha, hsync, hbp, hfp, htotal;
119  struct edid *edid = mtk_dp->edid;
120 
121  va = edid->mode.va;
122  vsync = edid->mode.vspw;
123  vbp = edid->mode.vbl - edid->mode.vso -
125  vfp = edid->mode.vso - edid->mode.vborder;
126 
127  ha = edid->mode.ha;
128  hsync = edid->mode.hspw;
129  hbp = edid->mode.hbl - edid->mode.hso -
131  hfp = edid->mode.hso - edid->mode.hborder;
132 
133  htotal = ha + hsync + hbp + hfp;
134  vtotal = va + vsync + vbp + vfp;
135 
165 
166  printk(BIOS_INFO, "MSA:Htt(%d), Vtt(%d), Hact(%d), Vact(%d), FPS(%d)\n",
167  htotal, vtotal, ha, va,
168  edid->mode.pixel_clock * 1000 / htotal / vtotal);
169 }
170 
171 void dptx_hal_set_color_format(struct mtk_dp *mtk_dp, u8 out_format)
172 {
173  /* MISC0 */
175  out_format << 0x1, GENMASK(2, 1));
176 
177  switch (out_format) {
181  0, GENMASK(6, 4));
182  break;
185  BIT(4), GENMASK(6, 4));
186  break;
189  GENMASK(6, 4));
190  break;
191  default:
192  break;
193  }
194 }
195 
197 {
198  u8 val;
199 
201  color_depth << 0x5, 0xe0);
202 
203  switch (color_depth) {
204  case DP_COLOR_DEPTH_6BIT:
205  val = 4;
206  break;
207  case DP_COLOR_DEPTH_8BIT:
208  val = 3;
209  break;
211  val = 2;
212  break;
214  val = 1;
215  break;
217  val = 0;
218  break;
219  default:
220  return;
221  }
223 }
224 
225 void dptx_hal_setmisc(struct mtk_dp *mtk_dp, u8 cmisc[2])
226 {
228  mtk_dp_write_byte(mtk_dp, REG_3034_DP_ENCODER0_P0 + 1, cmisc[1], 0xff);
229 }
230 
232  bool enable, u32 video_m, u32 video_n)
233 {
234  if (enable) {
235  /* Turn on overwrite MN */
237  video_m & 0xffff);
239  (video_m >> 16) & 0xff);
241  video_n & 0xffff);
243  (video_n >> 16) & 0xff);
245  video_n & 0xffff);
246 
247  /* Add legerII. */
249  (video_n >> 16) & 0xff);
251  BIT(0), BIT(0));
252  } else {
253  /* Turn off overwrite MN */
255  0, BIT(0));
256  }
257 }
258 
260 {
261  u8 color_bpp;
263  u8 color_format = mtk_dp->info.format;
264 
265  switch (color_depth) {
266  case DP_COLOR_DEPTH_6BIT:
267  if (color_format == DP_COLOR_FORMAT_YUV_422)
268  color_bpp = 16;
269  else if (color_format == DP_COLOR_FORMAT_YUV_420)
270  color_bpp = 12;
271  else
272  color_bpp = 18;
273  break;
274  case DP_COLOR_DEPTH_8BIT:
275  if (color_format == DP_COLOR_FORMAT_YUV_422)
276  color_bpp = 16;
277  else if (color_format == DP_COLOR_FORMAT_YUV_420)
278  color_bpp = 12;
279  else
280  color_bpp = 24;
281  break;
283  if (color_format == DP_COLOR_FORMAT_YUV_422)
284  color_bpp = 20;
285  else if (color_format == DP_COLOR_FORMAT_YUV_420)
286  color_bpp = 15;
287  else
288  color_bpp = 30;
289  break;
291  if (color_format == DP_COLOR_FORMAT_YUV_422)
292  color_bpp = 24;
293  else if (color_format == DP_COLOR_FORMAT_YUV_420)
294  color_bpp = 18;
295  else
296  color_bpp = 36;
297  break;
299  if (color_format == DP_COLOR_FORMAT_YUV_422)
300  color_bpp = 32;
301  else if (color_format == DP_COLOR_FORMAT_YUV_420)
302  color_bpp = 24;
303  else
304  color_bpp = 48;
305  break;
306  default:
307  color_bpp = 24;
308  printk(BIOS_ERR, "Set wrong bpp = %d\n", color_bpp);
309  break;
310  }
311 
312  return color_bpp;
313 }
314 
316 {
317  /*
318  * [5:0] video sram start address
319  * modify in 480P case only, default=0x1f
320  */
322 }
323 
325 {
327 
328 }
329 
331 {
333 }
334 
336 {
338  BIT(7), BIT(7));
340  mtk_dp_mask(mtk_dp, REG_3364_DP_ENCODER1_P0, 0x2020, 0xfff);
342  0x2, BIT(1) | BIT(0));
344  0x40, 0x70);
346 }
347 
349 {
351 }
352 
354  u32 dpcd_addr, size_t length, u8 *rx_buf)
355 {
356  bool valid_cmd = false;
357  u8 reply_cmd, aux_irq_status;
358  int rd_count;
359  u32 wait_reply_count = AUX_WAITREPLY_LPNUM;
360 
362  mdelay(1);
363 
364  if (length > 16 || (cmd == AUX_CMD_NATIVE_R && length == 0x0))
365  return false;
366 
369  DP_WRITE2BYTE(mtk_dp, REG_3648_AUX_TX_P0, dpcd_addr & 0xffff);
370  DP_WRITE1BYTE(mtk_dp, REG_364C_AUX_TX_P0, (dpcd_addr >> 16) & 0xf);
371 
372  if (length > 0) {
377  }
378 
379  if (cmd == AUX_CMD_I2C_R || cmd == AUX_CMD_I2C_R_MOT0)
380  if (length == 0x0)
384 
388 
389  while (--wait_reply_count) {
392  valid_cmd = true;
393  break;
394  }
395 
398  valid_cmd = true;
399  break;
400  }
401 
402  aux_irq_status = mtk_dp_read(mtk_dp, REG_3640_AUX_TX_P0) & 0xff;
403 
404  if (aux_irq_status & AUX_RX_RECV_COMPLETE_IRQ_TX_P0_FLDMASK) {
405  valid_cmd = true;
406  break;
407  }
408 
409  if (aux_irq_status & AUX_400US_TIMEOUT_IRQ_AUX_TX_P0_FLDMASK) {
410  printk(BIOS_ERR, "(AUX Read)HW Timeout 400us irq\n");
411  break;
412  }
413  }
414 
415  reply_cmd = mtk_dp_read(mtk_dp, REG_3624_AUX_TX_P0) & 0xf;
416  if (reply_cmd)
417  printk(BIOS_ERR, "reply_cmd(%#x), NACK or Defer\n", reply_cmd);
418 
419  if (wait_reply_count == 0x0 || reply_cmd) {
420  u8 phy_status = 0x0;
421 
422  phy_status = mtk_dp_read(mtk_dp, REG_3628_AUX_TX_P0);
423  if (phy_status != 0x1)
424  printk(BIOS_ERR, "Aux read: aux hang, need sw reset\n");
425 
430 
431  mdelay(1);
432  printk(BIOS_ERR, "wait_reply_count(%#x), TimeOut\n",
433  wait_reply_count);
434  return false;
435  }
436 
437  if (length == 0) {
439  } else {
440  if (valid_cmd) {
444 
445  for (rd_count = 0; rd_count < length; rd_count++) {
449  mdelay(1);
450  *(rx_buf + rd_count) = mtk_dp_read(mtk_dp,
452  }
453  } else {
454  printk(BIOS_INFO, "Read TimeOut %#x\n", dpcd_addr);
455  }
456  }
457 
462 
463  mdelay(1);
464  return valid_cmd;
465 }
466 
468  u32 dpcd_addr, size_t length, u8 *data)
469 {
470  bool valid_cmd = false;
471  u8 reply_cmd;
472  int i;
473  u16 wait_reply_count = AUX_WAITREPLY_LPNUM;
474  int reg_idx;
475 
481  mdelay(1);
482 
485  DP_WRITE1BYTE(mtk_dp, REG_3648_AUX_TX_P0, dpcd_addr & 0xff);
487  (dpcd_addr >> 8) & 0xff);
489  (dpcd_addr >> 16) & 0xf);
490 
491  if (length > 0) {
493  for (i = 0; i < (length + 1) / 2; i++)
494  for (reg_idx = 0; reg_idx < 2; reg_idx++)
495  if ((i * 2 + reg_idx) < length)
497  REG_3708_AUX_TX_P0 + i * 4 + reg_idx,
498  data[i * 2 + reg_idx]);
500  ((length - 1) & 0xf) << 4);
501  } else {
503  }
504 
509 
510  while (--wait_reply_count) {
511  u8 aux_irq_status;
512 
513  aux_irq_status = mtk_dp_read(mtk_dp, REG_3640_AUX_TX_P0) & 0xff;
514  mdelay(1);
515  if (aux_irq_status & AUX_RX_RECV_COMPLETE_IRQ_TX_P0_FLDMASK) {
516  valid_cmd = true;
517  break;
518  }
519 
520  if (aux_irq_status & AUX_400US_TIMEOUT_IRQ_AUX_TX_P0_FLDMASK)
521  break;
522  }
523 
524  reply_cmd = mtk_dp_read(mtk_dp, REG_3624_AUX_TX_P0) & 0xf;
525  if (reply_cmd)
526  printk(BIOS_ERR, "reply_cmd(%#x), NACK or Defer\n", reply_cmd);
527 
528  if (wait_reply_count == 0x0 || reply_cmd) {
529  u8 phy_status = 0x0;
530 
531  phy_status = mtk_dp_read(mtk_dp, REG_3628_AUX_TX_P0);
532  if (phy_status != 0x1)
534  "Aux write: aux hang, need SW reset!\n");
535 
538 
539  mdelay(1);
540 
541  printk(BIOS_INFO, "reply_cmd(%#x), wait_reply_count(%d)\n",
542  reply_cmd, wait_reply_count);
543  return false;
544  }
545 
547 
548  if (length == 0)
550 
552 
553  mdelay(1);
554 
555  return valid_cmd;
556 }
557 
558 bool dptx_hal_setswing_preemphasis(struct mtk_dp *mtk_dp, int lane_num,
559  int swing_value, int preemphasis)
560 {
561  printk(BIOS_DEBUG, "lane(%d), set swing(%#x), emp(%#x)\n",
562  lane_num, swing_value, preemphasis);
563 
564  if (lane_num >= DPTX_LANE_MAX) {
565  printk(BIOS_ERR, "invalid lane number: %d\n", lane_num);
566  return false;
567  }
568 
570  swing_value << volt_swing[lane_num].shift,
571  volt_swing[lane_num].mask);
573  preemphasis << volt_preemphasis[lane_num].shift,
574  volt_preemphasis[lane_num].mask);
575  return true;
576 }
577 
579 {
580  int lane;
581 
582  for (lane = 0; lane < DPTX_LANE_MAX; lane++)
584  0, volt_swing[lane].mask);
585  for (lane = 0; lane < DPTX_LANE_MAX; lane++)
587  0, volt_preemphasis[lane].mask);
588 }
589 
590 void dptx_hal_hpd_int_en(struct mtk_dp *mtk_dp, bool enable)
591 {
592  /* [7]:int, [6]:Con, [5]DisCon, [4]No-Use: UnMASK HPD Port */
594  enable ? 0 : GENMASK(7, 5), GENMASK(7, 5));
595 }
596 
598 {
600  0x8, GENMASK(3, 0));
602  0xa << 4, GENMASK(7, 4));
603 
606 }
607 
609 {
612 
613  mtk_dp_write(mtk_dp, 0x2000, 0x00000001);
614  mtk_dp_write(mtk_dp, 0x103c, 0x00000000);
615  mtk_dp_write(mtk_dp, 0x2000, 0x00000003);
616  mtk_dp_write(mtk_dp, 0x1138, 0x20181410);
617  mtk_dp_write(mtk_dp, 0x1238, 0x20181410);
618  mtk_dp_write(mtk_dp, 0x1338, 0x20181410);
619  mtk_dp_write(mtk_dp, 0x1438, 0x20181410);
620  mtk_dp_write(mtk_dp, 0x113C, 0x20241e18);
621  mtk_dp_write(mtk_dp, 0x123C, 0x20241e18);
622  mtk_dp_write(mtk_dp, 0x133C, 0x20241e18);
623  mtk_dp_write(mtk_dp, 0x143C, 0x20241e18);
624  mtk_dp_write(mtk_dp, 0x1140, 0x00003028);
625  mtk_dp_write(mtk_dp, 0x1240, 0x00003028);
626  mtk_dp_write(mtk_dp, 0x1340, 0x00003028);
627  mtk_dp_write(mtk_dp, 0x1440, 0x00003028);
628  mtk_dp_write(mtk_dp, 0x1144, 0x10080400);
629  mtk_dp_write(mtk_dp, 0x1244, 0x10080400);
630  mtk_dp_write(mtk_dp, 0x1344, 0x10080400);
631  mtk_dp_write(mtk_dp, 0x1444, 0x10080400);
632  mtk_dp_write(mtk_dp, 0x1148, 0x000c0600);
633  mtk_dp_write(mtk_dp, 0x1248, 0x000c0600);
634  mtk_dp_write(mtk_dp, 0x1348, 0x000c0600);
635  mtk_dp_write(mtk_dp, 0x1448, 0x000c0600);
636  mtk_dp_write(mtk_dp, 0x114C, 0x00000008);
637  mtk_dp_write(mtk_dp, 0x124C, 0x00000008);
638  mtk_dp_write(mtk_dp, 0x134C, 0x00000008);
639  mtk_dp_write(mtk_dp, 0x144C, 0x00000008);
640  mtk_dp_mask(mtk_dp, 0x3690, BIT(8), BIT(8));
641 }
642 
643 void dptx_hal_ssc_en(struct mtk_dp *mtk_dp, bool enable)
644 {
645  mtk_dp_mask(mtk_dp, 0x2000, BIT(0), GENMASK(1, 0));
646 
647  if (enable)
648  mtk_dp_mask(mtk_dp, 0x1014, BIT(3), BIT(3));
649  else
650  mtk_dp_mask(mtk_dp, 0x1014, 0x0, BIT(3));
651 
652  mtk_dp_mask(mtk_dp, 0x2000, GENMASK(1, 0), GENMASK(1, 0));
653 
654  mdelay(1);
655 }
656 
658 {
659  /* [12 : 8]: modify timeout threshold = 1595 */
663 
664  /* 0x19 for 26M */
666  /* 0xd for 26M */
668  0xd, GENMASK(6, 0));
672 }
673 
675 {
678  /* MISC0 */
680 
683  BIT(4), GENMASK(5, 4));
684  /* DPtx encoder reset all sw. */
686 
687  mdelay(1);
688 
689  /* DPtx encoder reset all sw. */
691 }
692 
694 {
696  mdelay(1);
698 }
699 
701 {
702  mtk_dp_write_byte(mtk_dp, 0x1038, 0, BIT(0));
703  mdelay(1);
704  mtk_dp_write_byte(mtk_dp, 0x1038, BIT(0), BIT(0));
705 }
706 
708 {
709  if (value == 0)
711  0, BIT(3) | BIT(2));
712  else
714  BIT(3), BIT(3) | BIT(2));
715 
716  if ((value << 2) <= UINT8_MAX) {
718  value, BIT(1) | BIT(0));
720  value << 2, BIT(3) | BIT(2));
721  } else {
722  printk(BIOS_ERR, "[%s]value << 2 > 0xff\n", __func__);
723  }
724 }
725 
727 {
728  /* Power off TPLL and lane */
729  mtk_dp_write(mtk_dp, 0x2000, 0x00000001);
730  /* Set gear : 0x0 : RBR, 0x1 : HBR, 0x2 : HBR2, 0x3 : HBR3 */
731  switch (value) {
732  case DP_LINKRATE_RBR:
733  mtk_dp_write(mtk_dp, 0x103C, 0x0);
734  break;
735  case DP_LINKRATE_HBR:
736  mtk_dp_write(mtk_dp, 0x103C, 0x1);
737  break;
738  case DP_LINKRATE_HBR2:
739  mtk_dp_write(mtk_dp, 0x103C, 0x2);
740  break;
741  case DP_LINKRATE_HBR3:
742  mtk_dp_write(mtk_dp, 0x103C, 0x3);
743  break;
744  default:
745  printk(BIOS_ERR, "Link rate not support(%d)\n", value);
746  break;
747  }
748 
749  /* Power on BandGap, TPLL and Lane */
750  mtk_dp_write(mtk_dp, 0x2000, 0x3);
751 }
752 
754 {
755  /* if Set TPS1. */
756  if (value == BIT(4))
758 
760  value, GENMASK(7, 4));
761 }
762 
763 void dptx_hal_phy_setidlepattern(struct mtk_dp *mtk_dp, bool enable)
764 {
766  enable ? 0xf : 0x0, 0xf);
767 }
768 
769 void dptx_hal_set_ef_mode(struct mtk_dp *mtk_dp, bool enable)
770 {
771  /*
772  * [4]: REG_enhanced_frame_mode
773  * [1 : 0]: REG_lane_num
774  */
775  if (enable)
777  BIT(4), BIT(4));
778  else
780  0, BIT(4));
781 }
782 
783 void dptx_hal_setscramble(struct mtk_dp *mtk_dp, bool enable)
784 {
785  /* [0]: dp tx transmitter scramble enable. */
786  if (enable)
788  BIT(0), BIT(0));
789  else
791  0, BIT(0));
792 }
793 
794 void dptx_hal_videomute(struct mtk_dp *mtk_dp, bool enable)
795 {
796  if (enable) {
798  BIT(3) | BIT(2), BIT(3) | BIT(2));
800  BIT(3) | BIT(4), BIT(3) | BIT(4));
801  } else {
803  BIT(3), BIT(3) | BIT(2));
805  BIT(4), BIT(3) | BIT(4));
806  }
807  printk(BIOS_DEBUG, "mute = %#x\n", read32(mtk_dp->regs + 0x402c));
808 }
809 
810 void dptx_hal_analog_power_en(struct mtk_dp *mtk_dp, bool enable)
811 {
812  if (enable) {
814  0, BIT(4));
815  mdelay(1);
817  BIT(4), BIT(4));
818  } else {
820  mdelay(1);
821  DP_WRITE2BYTE(mtk_dp, 0x0034, 0x4aa);
822  DP_WRITE2BYTE(mtk_dp, 0x1040, 0x0);
823  DP_WRITE2BYTE(mtk_dp, 0x0038, 0x555);
824  }
825 }
pte_t value
Definition: mmu.c:91
static void write32(void *addr, uint32_t val)
Definition: mmio.h:40
static uint32_t read32(const void *addr)
Definition: mmio.h:22
#define GENMASK(high, low)
Definition: helpers.h:58
static u32 addr
Definition: cirrus.c:14
#define printk(level,...)
Definition: stdlib.h:16
void mdelay(unsigned int msecs)
Definition: delay.c:2
void mtk_dp_write(struct mtk_dp *mtk_dp, u32 offset, u32 val)
Definition: dptx_hal.c:44
void dptx_hal_reset_swing_preemphasis(struct mtk_dp *mtk_dp)
Definition: dptx_hal.c:578
void dptx_hal_set_txrate(struct mtk_dp *mtk_dp, int value)
Definition: dptx_hal.c:726
void dptx_hal_bypassmsa_en(struct mtk_dp *mtk_dp, bool enable)
Definition: dptx_hal.c:110
void dptx_hal_phy_setting(struct mtk_dp *mtk_dp)
Definition: dptx_hal.c:608
bool dptx_hal_auxread_bytes(struct mtk_dp *mtk_dp, u8 cmd, u32 dpcd_addr, size_t length, u8 *rx_buf)
Definition: dptx_hal.c:353
void dptx_hal_set_color_format(struct mtk_dp *mtk_dp, u8 out_format)
Definition: dptx_hal.c:171
void dptx_hal_set_txtrainingpattern(struct mtk_dp *mtk_dp, int value)
Definition: dptx_hal.c:753
void dptx_hal_set_txlane(struct mtk_dp *mtk_dp, int value)
Definition: dptx_hal.c:707
void dptx_hal_analog_power_en(struct mtk_dp *mtk_dp, bool enable)
Definition: dptx_hal.c:810
void dptx_hal_overwrite_mn(struct mtk_dp *mtk_dp, bool enable, u32 video_m, u32 video_n)
Definition: dptx_hal.c:231
void mtk_dp_write_byte(struct mtk_dp *mtk_dp, u32 addr, u8 val, u32 mask)
Definition: dptx_hal.c:74
void dptx_hal_digital_swreset(struct mtk_dp *mtk_dp)
Definition: dptx_hal.c:693
void dptx_hal_init_setting(struct mtk_dp *mtk_dp)
Definition: dptx_hal.c:101
u8 dptx_hal_get_colorbpp(struct mtk_dp *mtk_dp)
Definition: dptx_hal.c:259
bool dptx_hal_auxwrite_bytes(struct mtk_dp *mtk_dp, u8 cmd, u32 dpcd_addr, size_t length, u8 *data)
Definition: dptx_hal.c:467
void dptx_hal_verify_clock(struct mtk_dp *mtk_dp)
Definition: dptx_hal.c:87
static const struct shift_mask volt_swing[DPTX_LANE_MAX]
Definition: dptx_hal.c:18
bool dptx_hal_hpd_high(struct mtk_dp *mtk_dp)
Definition: dptx_hal.c:348
void dptx_hal_setmisc(struct mtk_dp *mtk_dp, u8 cmisc[2])
Definition: dptx_hal.c:225
void dptx_hal_ssc_en(struct mtk_dp *mtk_dp, bool enable)
Definition: dptx_hal.c:643
void dptx_hal_set_msa(struct mtk_dp *mtk_dp)
Definition: dptx_hal.c:116
void dptx_hal_phy_setidlepattern(struct mtk_dp *mtk_dp, bool enable)
Definition: dptx_hal.c:763
void dptx_hal_digital_setting(struct mtk_dp *mtk_dp)
Definition: dptx_hal.c:674
void dptx_hal_set_ef_mode(struct mtk_dp *mtk_dp, bool enable)
Definition: dptx_hal.c:769
void dptx_hal_aux_setting(struct mtk_dp *mtk_dp)
Definition: dptx_hal.c:657
void dptx_hal_settu_sramrd_start(struct mtk_dp *mtk_dp, u16 value)
Definition: dptx_hal.c:315
bool dptx_hal_setswing_preemphasis(struct mtk_dp *mtk_dp, int lane_num, int swing_value, int preemphasis)
Definition: dptx_hal.c:558
void dptx_hal_setscramble(struct mtk_dp *mtk_dp, bool enable)
Definition: dptx_hal.c:783
#define REG_OFFSET_LIMIT
Definition: dptx_hal.c:12
void dptx_hal_videomute(struct mtk_dp *mtk_dp, bool enable)
Definition: dptx_hal.c:794
void dptx_hal_hpd_int_en(struct mtk_dp *mtk_dp, bool enable)
Definition: dptx_hal.c:590
void dptx_hal_phyd_reset(struct mtk_dp *mtk_dp)
Definition: dptx_hal.c:700
void mtk_dp_mask(struct mtk_dp *mtk_dp, u32 offset, u32 val, u32 mask)
Definition: dptx_hal.c:57
static const struct shift_mask volt_preemphasis[DPTX_LANE_MAX]
Definition: dptx_hal.c:24
void dptx_hal_hpd_detect_setting(struct mtk_dp *mtk_dp)
Definition: dptx_hal.c:597
void dptx_hal_settu_setencoder(struct mtk_dp *mtk_dp)
Definition: dptx_hal.c:335
void dptx_hal_set_color_depth(struct mtk_dp *mtk_dp, u8 color_depth)
Definition: dptx_hal.c:196
void dptx_hal_setsdp_downcnt_init_inhblanking(struct mtk_dp *mtk_dp, u16 value)
Definition: dptx_hal.c:324
u32 mtk_dp_read(struct mtk_dp *mtk_dp, u32 offset)
Definition: dptx_hal.c:31
void dptx_hal_setsdp_downcnt_init(struct mtk_dp *mtk_dp, u16 value)
Definition: dptx_hal.c:330
@ DP_COLOR_DEPTH_6BIT
Definition: dptx_hal.h:52
@ DP_COLOR_DEPTH_8BIT
Definition: dptx_hal.h:53
@ DP_COLOR_DEPTH_12BIT
Definition: dptx_hal.h:55
@ DP_COLOR_DEPTH_16BIT
Definition: dptx_hal.h:56
@ DP_COLOR_DEPTH_10BIT
Definition: dptx_hal.h:54
#define AUX_CMD_I2C_R
Definition: dptx_hal.h:7
#define AUX_WAITREPLY_LPNUM
Definition: dptx_hal.h:9
#define DP_WRITE1BYTE(mtk_dp, reg, u8_val)
Definition: dptx_hal.h:18
@ DPTX_LANE1
Definition: dptx_hal.h:25
@ DPTX_LANE0
Definition: dptx_hal.h:24
@ DPTX_LANE3
Definition: dptx_hal.h:27
@ DPTX_LANE2
Definition: dptx_hal.h:26
@ DPTX_LANE_MAX
Definition: dptx_hal.h:28
@ DP_LINKRATE_HBR3
Definition: dptx_hal.h:36
@ DP_LINKRATE_HBR2
Definition: dptx_hal.h:34
@ DP_LINKRATE_RBR
Definition: dptx_hal.h:32
@ DP_LINKRATE_HBR
Definition: dptx_hal.h:33
#define DP_WRITE2BYTE(mtk_dp, reg, u16_val)
Definition: dptx_hal.h:20
#define AUX_CMD_I2C_R_MOT0
Definition: dptx_hal.h:6
#define AUX_CMD_NATIVE_R
Definition: dptx_hal.h:8
@ DP_COLOR_FORMAT_RGB_444
Definition: dptx_hal.h:40
@ DP_COLOR_FORMAT_YUV_420
Definition: dptx_hal.h:43
@ DP_COLOR_FORMAT_YUV_444
Definition: dptx_hal.h:42
@ DP_COLOR_FORMAT_YUV_422
Definition: dptx_hal.h:41
#define AUX_TX_REQUEST_READY_AUX_TX_P0_FLDMASK_POS
Definition: dptx_reg.h:3406
#define REG_364C_AUX_TX_P0
Definition: dptx_reg.h:3487
#define DP_TX0_VOLT_SWING_FLDMASK
Definition: dptx_reg.h:4170
#define AUX_RD_MODE_AUX_TX_P0_FLDMASK_POS
Definition: dptx_reg.h:3362
#define REG_3054_DP_ENCODER0_P0
Definition: dptx_reg.h:346
#define HSW_SW_DP_ENCODER0_P0_FLDMASK_POS
Definition: dptx_reg.h:149
#define DP_TX2_PRE_EMPH_FLDMASK_POS
Definition: dptx_reg.h:4199
#define AUX_RX_FIFO_READ_PULSE_TX_P0_FLDMASK
Definition: dptx_reg.h:3365
#define AUX_NO_LENGTH_AUX_TX_P0_FLDMASK_POS
Definition: dptx_reg.h:3393
#define DP_TX1_VOLT_SWING_FLDMASK
Definition: dptx_reg.h:4182
#define REG_3368_DP_ENCODER1_P0
Definition: dptx_reg.h:2016
#define REG_37C8_AUX_TX_P0
Definition: dptx_reg.h:4150
#define REG_3044_DP_ENCODER0_P0
Definition: dptx_reg.h:306
#define REG_3010_DP_ENCODER0_P0
Definition: dptx_reg.h:117
#define DP_TX1_VOLT_SWING_FLDMASK_POS
Definition: dptx_reg.h:4183
#define DP_TX3_PRE_EMPH_FLDMASK_POS
Definition: dptx_reg.h:4211
#define MCU_ACK_TRAN_COMPLETE_AUX_TX_P0_FLDMASK_POS
Definition: dptx_reg.h:3502
#define REG_3164_DP_ENCODER0_P0
Definition: dptx_reg.h:878
#define MCU_REQUEST_DATA_NUM_AUX_TX_P0_FLDMASK
Definition: dptx_reg.h:3493
#define AUX_TX_REQUEST_READY_AUX_TX_P0_FLDMASK
Definition: dptx_reg.h:3405
#define REG_3620_AUX_TX_P0
Definition: dptx_reg.h:3360
#define MTK_ATOP_EN_AUX_TX_P0_FLDMASK_POS
Definition: dptx_reg.h:4152
#define REG_3050_DP_ENCODER0_P0
Definition: dptx_reg.h:341
#define REG_3040_DP_ENCODER0_P0
Definition: dptx_reg.h:285
#define DP_TX_SECURE_REG11
Definition: dptx_reg.h:4476
#define DP_TX_TOP_APB_WSTRB
Definition: dptx_reg.h:4218
#define REG_3154_DP_ENCODER0_P0
Definition: dptx_reg.h:858
#define REG_3064_DP_ENCODER0_P0
Definition: dptx_reg.h:378
#define DP_TX_TOP_IRQ_MASK
Definition: dptx_reg.h:4259
#define AUX_RX_FIFO_WRITE_POINTER_AUX_TX_P0_FLDMASK
Definition: dptx_reg.h:3347
#define REG_3300_DP_ENCODER1_P0
Definition: dptx_reg.h:1789
#define REG_362C_AUX_TX_P0
Definition: dptx_reg.h:3391
#define DP_PWR_STATE_FLDMASK
Definition: dptx_reg.h:4157
#define REG_3430_DP_TRANS_P0
Definition: dptx_reg.h:2543
#define REG_316C_DP_ENCODER0_P0
Definition: dptx_reg.h:888
#define REG_302C_DP_ENCODER0_P0
Definition: dptx_reg.h:156
#define REG_3020_DP_ENCODER0_P0
Definition: dptx_reg.h:137
#define REG_3024_DP_ENCODER0_P0
Definition: dptx_reg.h:142
#define AUX_RX_FIFO_FULL_AUX_TX_P0_FLDMASK
Definition: dptx_reg.h:3335
#define AUX_NO_LENGTH_AUX_TX_P0_FLDMASK
Definition: dptx_reg.h:3392
#define REG_3048_DP_ENCODER0_P0
Definition: dptx_reg.h:311
#define REG_3004_DP_ENCODER0_P0
Definition: dptx_reg.h:46
#define REG_35F0_DP_TRANS_P0
Definition: dptx_reg.h:3204
#define REG_34A4_DP_TRANS_P0
Definition: dptx_reg.h:2777
#define REG_3650_AUX_TX_P0
Definition: dptx_reg.h:3492
#define DP_TX0_VOLT_SWING_FLDMASK_POS
Definition: dptx_reg.h:4171
#define AUX_TX_FIFO_WRITE_DATA_NEW_MODE_TOGGLE_AUX_TX_P0_FLDMASK
Definition: dptx_reg.h:3892
#define REG_3540_DP_TRANS_P0
Definition: dptx_reg.h:2936
#define DP_TX_TOP_PWR_STATE
Definition: dptx_reg.h:4156
#define REG_3628_AUX_TX_P0
Definition: dptx_reg.h:3382
#define REG_360C_AUX_TX_P0
Definition: dptx_reg.h:3275
#define AUX_RX_RECV_COMPLETE_IRQ_TX_P0_FLDMASK
Definition: dptx_reg.h:3445
#define REG_3034_DP_ENCODER0_P0
Definition: dptx_reg.h:230
#define REG_3018_DP_ENCODER0_P0
Definition: dptx_reg.h:127
#define REG_3404_DP_TRANS_P0
Definition: dptx_reg.h:2325
#define DP_TX2_VOLT_SWING_FLDMASK_POS
Definition: dptx_reg.h:4195
#define REG_3174_DP_ENCODER0_P0
Definition: dptx_reg.h:898
#define REG_3418_DP_TRANS_P0
Definition: dptx_reg.h:2450
#define REG_3168_DP_ENCODER0_P0
Definition: dptx_reg.h:883
#define REG_3704_AUX_TX_P0
Definition: dptx_reg.h:3887
#define VSP_SW_DP_ENCODER0_P0_FLDMASK_POS
Definition: dptx_reg.h:162
#define VSW_SW_DP_ENCODER0_P0_FLDMASK
Definition: dptx_reg.h:157
#define AUX_TX_FIFO_NEW_MODE_EN_AUX_TX_P0_FLDMASK
Definition: dptx_reg.h:3896
#define MCU_ACK_TRANSACTION_COMPLETE_AUX_TX_P0_FLDMASK
Definition: dptx_reg.h:3501
#define AUX_400US_TIMEOUT_IRQ_AUX_TX_P0_FLDMASK
Definition: dptx_reg.h:3469
#define DP_TX_TOP_RESET_AND_PROBE
Definition: dptx_reg.h:4232
#define DP_TX2_PRE_EMPH_FLDMASK
Definition: dptx_reg.h:4198
#define HSP_SW_DP_ENCODER0_P0_FLDMASK_POS
Definition: dptx_reg.h:153
#define DP_TX3_PRE_EMPH_FLDMASK
Definition: dptx_reg.h:4210
#define VBID_VIDEO_MUTE_DP_ENCODER0_P0_FLDMASK
Definition: dptx_reg.h:321
#define REG_3028_DP_ENCODER0_P0
Definition: dptx_reg.h:147
#define DP_TX1_PRE_EMPH_FLDMASK
Definition: dptx_reg.h:4186
#define HSP_SW_DP_ENCODER0_P0_FLDMASK
Definition: dptx_reg.h:152
#define REG_3658_AUX_TX_P0
Definition: dptx_reg.h:3514
#define REG_3624_AUX_TX_P0
Definition: dptx_reg.h:3373
#define MCU_REQ_DATA_NUM_AUX_TX_P0_FLDMASK_POS
Definition: dptx_reg.h:3494
#define REG_3414_DP_TRANS_P0
Definition: dptx_reg.h:2437
#define REG_3630_AUX_TX_P0
Definition: dptx_reg.h:3404
#define REG_304C_DP_ENCODER0_P0
Definition: dptx_reg.h:316
#define REG_33C8_DP_ENCODER1_P0
Definition: dptx_reg.h:2118
#define AUX_TIMEOUT_THR_AUX_TX_P0_FLDMASK
Definition: dptx_reg.h:3288
#define TOP_OFFSET
Definition: dptx_reg.h:6
#define REG_3644_AUX_TX_P0
Definition: dptx_reg.h:3473
#define REG_3170_DP_ENCODER0_P0
Definition: dptx_reg.h:893
#define REG_3160_DP_ENCODER0_P0
Definition: dptx_reg.h:873
#define VSW_SW_DP_ENCODER0_P0_FLDMASK_POS
Definition: dptx_reg.h:158
#define DP_TX_TOP_SWING_EMP
Definition: dptx_reg.h:4169
#define MTK_ATOP_EN_AUX_TX_P0_FLDMASK
Definition: dptx_reg.h:4151
#define REG_3014_DP_ENCODER0_P0
Definition: dptx_reg.h:122
#define REG_3640_AUX_TX_P0
Definition: dptx_reg.h:3444
#define REG_315C_DP_ENCODER0_P0
Definition: dptx_reg.h:868
#define REG_3400_DP_TRANS_P0
Definition: dptx_reg.h:2284
#define REG_3410_DP_TRANS_P0
Definition: dptx_reg.h:2420
#define AUX_RD_MODE_AUX_TX_P0_FLDMASK
Definition: dptx_reg.h:3361
#define REG_3634_AUX_TX_P0
Definition: dptx_reg.h:3413
#define DP_PWR_STATE_FLDMASK_POS
Definition: dptx_reg.h:4158
#define DP_TX0_PRE_EMPH_FLDMASK
Definition: dptx_reg.h:4174
#define REG_342C_DP_TRANS_P0
Definition: dptx_reg.h:2538
#define REG_3618_AUX_TX_P0
Definition: dptx_reg.h:3330
#define REG_3364_DP_ENCODER1_P0
Definition: dptx_reg.h:2007
#define REG_3158_DP_ENCODER0_P0
Definition: dptx_reg.h:863
#define REG_3030_DP_ENCODER0_P0
Definition: dptx_reg.h:165
#define AUX_RX_FIFO_R_PULSE_TX_P0_FLDMASK_POS
Definition: dptx_reg.h:3366
#define REG_340C_DP_TRANS_P0
Definition: dptx_reg.h:2387
#define REG_3648_AUX_TX_P0
Definition: dptx_reg.h:3482
#define REG_300C_DP_ENCODER0_P0
Definition: dptx_reg.h:88
#define REG_31EC_DP_ENCODER0_P0
Definition: dptx_reg.h:1146
#define REG_303C_DP_ENCODER0_P0
Definition: dptx_reg.h:268
#define REG_3580_DP_TRANS_P0
Definition: dptx_reg.h:3088
#define VSP_SW_DP_ENCODER0_P0_FLDMASK
Definition: dptx_reg.h:161
#define REG_301C_DP_ENCODER0_P0
Definition: dptx_reg.h:132
#define REG_3614_AUX_TX_P0
Definition: dptx_reg.h:3309
#define DP_TX3_VOLT_SWING_FLDMASK_POS
Definition: dptx_reg.h:4207
#define REG_3008_DP_ENCODER0_P0
Definition: dptx_reg.h:83
#define REG_3178_DP_ENCODER0_P0
Definition: dptx_reg.h:903
#define HSW_SW_DP_ENCODER0_P0_FLDMASK
Definition: dptx_reg.h:148
#define DP_TX1_PRE_EMPH_FLDMASK_POS
Definition: dptx_reg.h:4187
#define DP_TX0_PRE_EMPH_FLDMASK_POS
Definition: dptx_reg.h:4175
#define DP_TX2_VOLT_SWING_FLDMASK
Definition: dptx_reg.h:4194
#define DP_TX3_VOLT_SWING_FLDMASK
Definition: dptx_reg.h:4206
#define REG_3708_AUX_TX_P0
Definition: dptx_reg.h:3900
#define AUX_TX_FIFO_NEW_MODE_EN_AUX_TX_P0_FLDMASK_POS
Definition: dptx_reg.h:3897
#define REG_3000_DP_ENCODER0_P0
Definition: dptx_reg.h:13
#define BIT(nr)
Definition: ec_commands.h:45
color_depth
Definition: edp.h:577
static size_t offset
Definition: flashconsole.c:16
uint64_t length
Definition: fw_cfg_if.h:1
#define clrsetbits32(addr, clear, set)
Definition: mmio.h:16
#define BIOS_INFO
BIOS_INFO - Expected events.
Definition: loglevel.h:113
#define BIOS_DEBUG
BIOS_DEBUG - Verbose output.
Definition: loglevel.h:128
#define BIOS_ERR
BIOS_ERR - System in incomplete state.
Definition: loglevel.h:72
static const int mask[4]
Definition: gpio.c:308
#define vtotal(mode)
Definition: display.h:19
#define htotal(mode)
Definition: display.h:15
uint32_t u32
Definition: stdint.h:51
uint16_t u16
Definition: stdint.h:48
uint8_t u8
Definition: stdint.h:45
#define UINT8_MAX
Definition: stdint.h:59
uint8_t depth
Definition: dptx.h:43
uint8_t format
Definition: dptx.h:44
unsigned int hbl
Definition: edid.h:26
unsigned int va
Definition: edid.h:30
unsigned int vspw
Definition: edid.h:33
unsigned int ha
Definition: edid.h:25
unsigned int hborder
Definition: edid.h:29
unsigned int vso
Definition: edid.h:32
unsigned int hso
Definition: edid.h:27
unsigned int pixel_clock
Definition: edid.h:22
unsigned int hspw
Definition: edid.h:28
unsigned int vbl
Definition: edid.h:31
unsigned int vborder
Definition: edid.h:34
Definition: edid.h:49
struct edid_mode mode
Definition: edid.h:72
Definition: dptx.h:48
struct dptx_training_info train_info
Definition: dptx.h:55
void * regs
Definition: dptx.h:62
struct edid * edid
Definition: dptx.h:50
struct dptx_info info
Definition: dptx.h:52
u32 shift
Definition: dptx_hal.c:15
u32 mask
Definition: dptx_hal.c:16
u8 val
Definition: sys.c:300
#define m(clkreg, src_bits, pmcreg, dst_bits)