12 #define REG_OFFSET_LIMIT 0x8000
89 u32 m, n, ls_clk, pix_clk;
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);
113 enable ? 0 : 0x3ff, 0x3ff);
133 htotal = ha + hsync + hbp + hfp;
134 vtotal = va + vsync + vbp + vfp;
166 printk(
BIOS_INFO,
"MSA:Htt(%d), Vtt(%d), Hact(%d), Vact(%d), FPS(%d)\n",
175 out_format << 0x1,
GENMASK(2, 1));
177 switch (out_format) {
232 bool enable,
u32 video_m,
u32 video_n)
239 (video_m >> 16) & 0xff);
243 (video_n >> 16) & 0xff);
249 (video_n >> 16) & 0xff);
356 bool valid_cmd =
false;
357 u8 reply_cmd, aux_irq_status;
389 while (--wait_reply_count) {
419 if (wait_reply_count == 0x0 || reply_cmd) {
423 if (phy_status != 0x1)
445 for (rd_count = 0; rd_count <
length; rd_count++) {
470 bool valid_cmd =
false;
487 (dpcd_addr >> 8) & 0xff);
489 (dpcd_addr >> 16) & 0xf);
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)
498 data[i * 2 + reg_idx]);
500 ((
length - 1) & 0xf) << 4);
510 while (--wait_reply_count) {
528 if (wait_reply_count == 0x0 || reply_cmd) {
532 if (phy_status != 0x1)
534 "Aux write: aux hang, need SW reset!\n");
542 reply_cmd, wait_reply_count);
559 int swing_value,
int preemphasis)
562 lane_num, swing_value, preemphasis);
766 enable ? 0xf : 0x0, 0xf);
static void write32(void *addr, uint32_t val)
static uint32_t read32(const void *addr)
#define GENMASK(high, low)
#define printk(level,...)
void mdelay(unsigned int msecs)
void mtk_dp_write(struct mtk_dp *mtk_dp, u32 offset, u32 val)
void dptx_hal_reset_swing_preemphasis(struct mtk_dp *mtk_dp)
void dptx_hal_set_txrate(struct mtk_dp *mtk_dp, int value)
void dptx_hal_bypassmsa_en(struct mtk_dp *mtk_dp, bool enable)
void dptx_hal_phy_setting(struct mtk_dp *mtk_dp)
bool dptx_hal_auxread_bytes(struct mtk_dp *mtk_dp, u8 cmd, u32 dpcd_addr, size_t length, u8 *rx_buf)
void dptx_hal_set_color_format(struct mtk_dp *mtk_dp, u8 out_format)
void dptx_hal_set_txtrainingpattern(struct mtk_dp *mtk_dp, int value)
void dptx_hal_set_txlane(struct mtk_dp *mtk_dp, int value)
void dptx_hal_analog_power_en(struct mtk_dp *mtk_dp, bool enable)
void dptx_hal_overwrite_mn(struct mtk_dp *mtk_dp, bool enable, u32 video_m, u32 video_n)
void mtk_dp_write_byte(struct mtk_dp *mtk_dp, u32 addr, u8 val, u32 mask)
void dptx_hal_digital_swreset(struct mtk_dp *mtk_dp)
void dptx_hal_init_setting(struct mtk_dp *mtk_dp)
u8 dptx_hal_get_colorbpp(struct mtk_dp *mtk_dp)
bool dptx_hal_auxwrite_bytes(struct mtk_dp *mtk_dp, u8 cmd, u32 dpcd_addr, size_t length, u8 *data)
void dptx_hal_verify_clock(struct mtk_dp *mtk_dp)
static const struct shift_mask volt_swing[DPTX_LANE_MAX]
bool dptx_hal_hpd_high(struct mtk_dp *mtk_dp)
void dptx_hal_setmisc(struct mtk_dp *mtk_dp, u8 cmisc[2])
void dptx_hal_ssc_en(struct mtk_dp *mtk_dp, bool enable)
void dptx_hal_set_msa(struct mtk_dp *mtk_dp)
void dptx_hal_phy_setidlepattern(struct mtk_dp *mtk_dp, bool enable)
void dptx_hal_digital_setting(struct mtk_dp *mtk_dp)
void dptx_hal_set_ef_mode(struct mtk_dp *mtk_dp, bool enable)
void dptx_hal_aux_setting(struct mtk_dp *mtk_dp)
void dptx_hal_settu_sramrd_start(struct mtk_dp *mtk_dp, u16 value)
bool dptx_hal_setswing_preemphasis(struct mtk_dp *mtk_dp, int lane_num, int swing_value, int preemphasis)
void dptx_hal_setscramble(struct mtk_dp *mtk_dp, bool enable)
void dptx_hal_videomute(struct mtk_dp *mtk_dp, bool enable)
void dptx_hal_hpd_int_en(struct mtk_dp *mtk_dp, bool enable)
void dptx_hal_phyd_reset(struct mtk_dp *mtk_dp)
void mtk_dp_mask(struct mtk_dp *mtk_dp, u32 offset, u32 val, u32 mask)
static const struct shift_mask volt_preemphasis[DPTX_LANE_MAX]
void dptx_hal_hpd_detect_setting(struct mtk_dp *mtk_dp)
void dptx_hal_settu_setencoder(struct mtk_dp *mtk_dp)
void dptx_hal_set_color_depth(struct mtk_dp *mtk_dp, u8 color_depth)
void dptx_hal_setsdp_downcnt_init_inhblanking(struct mtk_dp *mtk_dp, u16 value)
u32 mtk_dp_read(struct mtk_dp *mtk_dp, u32 offset)
void dptx_hal_setsdp_downcnt_init(struct mtk_dp *mtk_dp, u16 value)
#define AUX_WAITREPLY_LPNUM
#define DP_WRITE1BYTE(mtk_dp, reg, u8_val)
#define DP_WRITE2BYTE(mtk_dp, reg, u16_val)
#define AUX_CMD_I2C_R_MOT0
@ DP_COLOR_FORMAT_RGB_444
@ DP_COLOR_FORMAT_YUV_420
@ DP_COLOR_FORMAT_YUV_444
@ DP_COLOR_FORMAT_YUV_422
#define AUX_TX_REQUEST_READY_AUX_TX_P0_FLDMASK_POS
#define REG_364C_AUX_TX_P0
#define DP_TX0_VOLT_SWING_FLDMASK
#define AUX_RD_MODE_AUX_TX_P0_FLDMASK_POS
#define REG_3054_DP_ENCODER0_P0
#define HSW_SW_DP_ENCODER0_P0_FLDMASK_POS
#define DP_TX2_PRE_EMPH_FLDMASK_POS
#define AUX_RX_FIFO_READ_PULSE_TX_P0_FLDMASK
#define AUX_NO_LENGTH_AUX_TX_P0_FLDMASK_POS
#define DP_TX1_VOLT_SWING_FLDMASK
#define REG_3368_DP_ENCODER1_P0
#define REG_37C8_AUX_TX_P0
#define REG_3044_DP_ENCODER0_P0
#define REG_3010_DP_ENCODER0_P0
#define DP_TX1_VOLT_SWING_FLDMASK_POS
#define DP_TX3_PRE_EMPH_FLDMASK_POS
#define MCU_ACK_TRAN_COMPLETE_AUX_TX_P0_FLDMASK_POS
#define REG_3164_DP_ENCODER0_P0
#define MCU_REQUEST_DATA_NUM_AUX_TX_P0_FLDMASK
#define AUX_TX_REQUEST_READY_AUX_TX_P0_FLDMASK
#define REG_3620_AUX_TX_P0
#define MTK_ATOP_EN_AUX_TX_P0_FLDMASK_POS
#define REG_3050_DP_ENCODER0_P0
#define REG_3040_DP_ENCODER0_P0
#define DP_TX_SECURE_REG11
#define DP_TX_TOP_APB_WSTRB
#define REG_3154_DP_ENCODER0_P0
#define REG_3064_DP_ENCODER0_P0
#define DP_TX_TOP_IRQ_MASK
#define AUX_RX_FIFO_WRITE_POINTER_AUX_TX_P0_FLDMASK
#define REG_3300_DP_ENCODER1_P0
#define REG_362C_AUX_TX_P0
#define DP_PWR_STATE_FLDMASK
#define REG_3430_DP_TRANS_P0
#define REG_316C_DP_ENCODER0_P0
#define REG_302C_DP_ENCODER0_P0
#define REG_3020_DP_ENCODER0_P0
#define REG_3024_DP_ENCODER0_P0
#define AUX_RX_FIFO_FULL_AUX_TX_P0_FLDMASK
#define AUX_NO_LENGTH_AUX_TX_P0_FLDMASK
#define REG_3048_DP_ENCODER0_P0
#define REG_3004_DP_ENCODER0_P0
#define REG_35F0_DP_TRANS_P0
#define REG_34A4_DP_TRANS_P0
#define REG_3650_AUX_TX_P0
#define DP_TX0_VOLT_SWING_FLDMASK_POS
#define AUX_TX_FIFO_WRITE_DATA_NEW_MODE_TOGGLE_AUX_TX_P0_FLDMASK
#define REG_3540_DP_TRANS_P0
#define DP_TX_TOP_PWR_STATE
#define REG_3628_AUX_TX_P0
#define REG_360C_AUX_TX_P0
#define AUX_RX_RECV_COMPLETE_IRQ_TX_P0_FLDMASK
#define REG_3034_DP_ENCODER0_P0
#define REG_3018_DP_ENCODER0_P0
#define REG_3404_DP_TRANS_P0
#define DP_TX2_VOLT_SWING_FLDMASK_POS
#define REG_3174_DP_ENCODER0_P0
#define REG_3418_DP_TRANS_P0
#define REG_3168_DP_ENCODER0_P0
#define REG_3704_AUX_TX_P0
#define VSP_SW_DP_ENCODER0_P0_FLDMASK_POS
#define VSW_SW_DP_ENCODER0_P0_FLDMASK
#define AUX_TX_FIFO_NEW_MODE_EN_AUX_TX_P0_FLDMASK
#define MCU_ACK_TRANSACTION_COMPLETE_AUX_TX_P0_FLDMASK
#define AUX_400US_TIMEOUT_IRQ_AUX_TX_P0_FLDMASK
#define DP_TX_TOP_RESET_AND_PROBE
#define DP_TX2_PRE_EMPH_FLDMASK
#define HSP_SW_DP_ENCODER0_P0_FLDMASK_POS
#define DP_TX3_PRE_EMPH_FLDMASK
#define VBID_VIDEO_MUTE_DP_ENCODER0_P0_FLDMASK
#define REG_3028_DP_ENCODER0_P0
#define DP_TX1_PRE_EMPH_FLDMASK
#define HSP_SW_DP_ENCODER0_P0_FLDMASK
#define REG_3658_AUX_TX_P0
#define REG_3624_AUX_TX_P0
#define MCU_REQ_DATA_NUM_AUX_TX_P0_FLDMASK_POS
#define REG_3414_DP_TRANS_P0
#define REG_3630_AUX_TX_P0
#define REG_304C_DP_ENCODER0_P0
#define REG_33C8_DP_ENCODER1_P0
#define AUX_TIMEOUT_THR_AUX_TX_P0_FLDMASK
#define REG_3644_AUX_TX_P0
#define REG_3170_DP_ENCODER0_P0
#define REG_3160_DP_ENCODER0_P0
#define VSW_SW_DP_ENCODER0_P0_FLDMASK_POS
#define DP_TX_TOP_SWING_EMP
#define MTK_ATOP_EN_AUX_TX_P0_FLDMASK
#define REG_3014_DP_ENCODER0_P0
#define REG_3640_AUX_TX_P0
#define REG_315C_DP_ENCODER0_P0
#define REG_3400_DP_TRANS_P0
#define REG_3410_DP_TRANS_P0
#define AUX_RD_MODE_AUX_TX_P0_FLDMASK
#define REG_3634_AUX_TX_P0
#define DP_PWR_STATE_FLDMASK_POS
#define DP_TX0_PRE_EMPH_FLDMASK
#define REG_342C_DP_TRANS_P0
#define REG_3618_AUX_TX_P0
#define REG_3364_DP_ENCODER1_P0
#define REG_3158_DP_ENCODER0_P0
#define REG_3030_DP_ENCODER0_P0
#define AUX_RX_FIFO_R_PULSE_TX_P0_FLDMASK_POS
#define REG_340C_DP_TRANS_P0
#define REG_3648_AUX_TX_P0
#define REG_300C_DP_ENCODER0_P0
#define REG_31EC_DP_ENCODER0_P0
#define REG_303C_DP_ENCODER0_P0
#define REG_3580_DP_TRANS_P0
#define VSP_SW_DP_ENCODER0_P0_FLDMASK
#define REG_301C_DP_ENCODER0_P0
#define REG_3614_AUX_TX_P0
#define DP_TX3_VOLT_SWING_FLDMASK_POS
#define REG_3008_DP_ENCODER0_P0
#define REG_3178_DP_ENCODER0_P0
#define HSW_SW_DP_ENCODER0_P0_FLDMASK
#define DP_TX1_PRE_EMPH_FLDMASK_POS
#define DP_TX0_PRE_EMPH_FLDMASK_POS
#define DP_TX2_VOLT_SWING_FLDMASK
#define DP_TX3_VOLT_SWING_FLDMASK
#define REG_3708_AUX_TX_P0
#define AUX_TX_FIFO_NEW_MODE_EN_AUX_TX_P0_FLDMASK_POS
#define REG_3000_DP_ENCODER0_P0
#define clrsetbits32(addr, clear, set)
#define BIOS_INFO
BIOS_INFO - Expected events.
#define BIOS_DEBUG
BIOS_DEBUG - Verbose output.
#define BIOS_ERR
BIOS_ERR - System in incomplete state.
struct dptx_training_info train_info
#define m(clkreg, src_bits, pmcreg, dst_bits)