jitao shi has uploaded this change for review. ( https://review.coreboot.org/c/coreboot/+/31591
Change subject: mediaek/mt8183: add dsi driver for mt8183 ......................................................................
mediaek/mt8183: add dsi driver for mt8183
BUG=b:80501386,b:117254947 BRANCH=none TEST=Boots correctly on Kukui
Change-Id: Ic413f524ca0b36f0b01f723a71fe9745e2710cd2 Signed-off-by: Jitao Shi jitao.shi@mediatek.com --- M src/soc/mediatek/mt8183/Makefile.inc A src/soc/mediatek/mt8183/dsi.c M src/soc/mediatek/mt8183/include/soc/addressmap.h A src/soc/mediatek/mt8183/include/soc/dsi.h 4 files changed, 957 insertions(+), 0 deletions(-)
git pull ssh://review.coreboot.org:29418/coreboot refs/changes/91/31591/1
diff --git a/src/soc/mediatek/mt8183/Makefile.inc b/src/soc/mediatek/mt8183/Makefile.inc index b7e2ca4..02eaf6b 100644 --- a/src/soc/mediatek/mt8183/Makefile.inc +++ b/src/soc/mediatek/mt8183/Makefile.inc @@ -41,6 +41,7 @@ ramstage-y += auxadc.c ramstage-y += ../common/cbmem.c emi.c ramstage-y += ddp.c +ramstage-y += dsi.c ramstage-y += ../common/gpio.c gpio.c ramstage-y += ../common/mmu_operations.c mmu_operations.c ramstage-y += ../common/mtcmos.c mtcmos.c diff --git a/src/soc/mediatek/mt8183/dsi.c b/src/soc/mediatek/mt8183/dsi.c new file mode 100644 index 0000000..f96d847 --- /dev/null +++ b/src/soc/mediatek/mt8183/dsi.c @@ -0,0 +1,470 @@ +/* + * This file is part of the coreboot project. + * + * Copyright 2015 MediaTek Inc. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +#include <arch/io.h> +#include <console/console.h> +#include <delay.h> +#include <soc/addressmap.h> +#include <soc/dsi.h> +#include <timer.h> + +static void mipi_write32(void *a, uint32_t offset, uint32_t v) +{ + write32(a + offset, v); +} + +static void mipi_clrsetbits_le32(void *a, uint32_t offset, uint32_t m, uint32_t v) +{ + clrsetbits_le32(a + offset, m, v); +} + +static void mipi_clrbits_le32(void *a, uint32_t offset, uint32_t m) +{ + clrbits_le32(a + offset, m); +} + +static void mipi_setbits_le32(void *a, uint32_t offset, uint32_t m) +{ + setbits_le32(a + offset, m); +} + +static void dsi_write32(void *a, uint32_t v) +{ + write32(a, v); +} + +static void dsi_clrsetbits_le32(void *a, uint32_t m, uint32_t v) +{ + clrsetbits_le32(a, m, v); +} + +static void dsi_clrbits_le32(void *a, uint32_t m) +{ + clrbits_le32(a, m); +} + +static void dsi_setbits_le32(void *a, uint32_t m) +{ + setbits_le32(a, m); +} + +static int mtk_dsi_phy_clk_setting(u32 format, u32 lanes, + const struct edid *edid, struct mtk_phy_timing *phy_timing) +{ + unsigned int txdiv, txdiv0, txdiv1; + u64 pcw; + int data_rate; + u32 htotal, htotal_bits, bit_per_pixel, overhead_cycles, overhead_bits; + u64 total_bits; + + switch (format) { + case MIPI_DSI_FMT_RGB565: + bit_per_pixel = 16; + break; + case MIPI_DSI_FMT_RGB666: + case MIPI_DSI_FMT_RGB666_PACKED: + bit_per_pixel = 18; + break; + case MIPI_DSI_FMT_RGB888: + default: + bit_per_pixel = 24; + break; + } + + htotal = edid->mode.hbl + edid->mode.ha; + htotal_bits = htotal * bit_per_pixel; + + overhead_cycles = 2 * phy_timing->lpx + phy_timing->da_hs_prepare + + phy_timing->da_hs_zero + phy_timing->da_hs_trail + + phy_timing->da_hs_exit + 1; + + overhead_bits = overhead_cycles * 8U; + total_bits = htotal_bits + overhead_bits; + + data_rate = (u64)(edid->mode.pixel_clock * 1000 * total_bits) / (htotal * lanes); + + printk(BIOS_ERR, "data_rate: %u bps\n", data_rate); + + if (data_rate >= 2000000000) { + txdiv = 1; + txdiv0 = 0; + txdiv1 = 0; + } else if (data_rate >= 1000000000) { + txdiv = 2; + txdiv0 = 1; + txdiv1 = 0; + } else if (data_rate >= 500000000) { + txdiv = 4; + txdiv0 = 2; + txdiv1 = 0; + } else if (data_rate > 250000000) { + txdiv = 8; + txdiv0 = 3; + txdiv1 = 0; + } else if (data_rate >= 125000000) { + txdiv = 16; + txdiv0 = 4; + txdiv1 = 0; + } else { + printk(BIOS_ERR, "data rate (%u) must be >=50. Please check " + "pixel clock (%u), bpp (%u), and number of lanes (%u)\n", + data_rate, edid->mode.pixel_clock, bit_per_pixel, lanes); + return -1; + } + + mipi_clrbits_le32(mipi_tx, MIPITX_PLL_CON4, BIT(11) | BIT(10)); + + mipi_setbits_le32(mipi_tx, MIPITX_PLL_PWR, AD_DSI_PLL_SDM_PWR_ON); + udelay(30); + mipi_clrbits_le32(mipi_tx, MIPITX_PLL_PWR, AD_DSI_PLL_SDM_ISO_EN); + + pcw = (u64)((data_rate / 1000000) * (1 << txdiv0) * (1 << txdiv1)) << 24; + pcw /= 26; + + mipi_write32(mipi_tx, MIPITX_PLL_CON0, pcw); + mipi_clrsetbits_le32(mipi_tx, MIPITX_PLL_CON1, RG_DSI_PLL_POSDIV, + txdiv0 << 8); + udelay(30); + mipi_setbits_le32(mipi_tx, MIPITX_PLL_CON1, RG_DSI_PLL_EN); + + /* BG_LPF_EN / BG_CORE_EN */ + mipi_write32(mipi_tx, MIPITX_LANE_CON, 0x3FFF0180); + udelay(40); + mipi_write32(mipi_tx, MIPITX_LANE_CON, 0x3FFF00c0); + + /* Switch OFF each Lane */ + mipi_clrbits_le32(mipi_tx, MIPITX_D0_SW_CTL_EN, DSI_SW_CTL_EN); + mipi_clrbits_le32(mipi_tx, MIPITX_D1_SW_CTL_EN, DSI_SW_CTL_EN); + mipi_clrbits_le32(mipi_tx, MIPITX_D2_SW_CTL_EN, DSI_SW_CTL_EN); + mipi_clrbits_le32(mipi_tx, MIPITX_D3_SW_CTL_EN, DSI_SW_CTL_EN); + mipi_clrbits_le32(mipi_tx, MIPITX_CK_SW_CTL_EN, DSI_SW_CTL_EN); + + mipi_setbits_le32(mipi_tx, MIPITX_CK_CKMODE_EN, DSI_CK_CKMODE_EN); + + return data_rate; +} + +static void mtk_dsi_phy_timconfig(u32 data_rate, struct mtk_phy_timing *phy_timing) +{ + u32 timcon0, timcon1, timcon2, timcon3; + + timcon0 = phy_timing->lpx | phy_timing->da_hs_prepare << 8 | + phy_timing->da_hs_zero << 16 | phy_timing->da_hs_trail << 24; + timcon1 = phy_timing->ta_go | phy_timing->ta_sure << 8 | + phy_timing->ta_get << 16 | phy_timing->da_hs_exit << 24; + timcon2 = 1 << 8 | phy_timing->clk_hs_zero << 16 | + phy_timing->clk_hs_trail << 24; + timcon3 = phy_timing->clk_hs_prepare | phy_timing->clk_hs_post << 8 | + phy_timing->clk_hs_exit << 16; + + dsi_write32(&dsi->dsi_phy_timecon0, timcon0); + dsi_write32(&dsi->dsi_phy_timecon1, timcon1); + dsi_write32(&dsi->dsi_phy_timecon2, timcon2); + dsi_write32(&dsi->dsi_phy_timecon3, timcon3); +} + +static void mtk_dsi_reset(void) +{ + dsi_setbits_le32(&dsi->dsi_con_ctrl, 3); + dsi_clrbits_le32(&dsi->dsi_con_ctrl, 1); +} + +static void mtk_dsi_clk_hs_mode_enable(void) +{ + dsi_setbits_le32(&dsi->dsi_phy_lccon, LC_HS_TX_EN); +} + +static void mtk_dsi_clk_hs_mode_disable(void) +{ + dsi_clrbits_le32(&dsi->dsi_phy_lccon, LC_HS_TX_EN); +} + +static void mtk_dsi_set_mode(u32 mode_flags) +{ + u32 tmp_reg1 = 0; + + if (mode_flags & MIPI_DSI_MODE_VIDEO) { + tmp_reg1 = SYNC_PULSE_MODE; + + if (mode_flags & MIPI_DSI_MODE_VIDEO_BURST) + tmp_reg1 = BURST_MODE; + + if (mode_flags & MIPI_DSI_MODE_VIDEO_SYNC_PULSE) + tmp_reg1 = SYNC_PULSE_MODE; + } + + dsi_write32(&dsi->dsi_mode_ctrl, tmp_reg1); +} + +static void mtk_dsi_phy_timing_calc(u32 format, u32 lanes, + const struct edid *edid, struct mtk_phy_timing *phy_timing) +{ + u32 ui, cycle_time, data_rate; + u32 bit_per_pixel; + + switch (format) { + case MIPI_DSI_FMT_RGB565: + bit_per_pixel = 16; + break; + case MIPI_DSI_FMT_RGB666: + case MIPI_DSI_FMT_RGB666_PACKED: + bit_per_pixel = 18; + break; + case MIPI_DSI_FMT_RGB888: + default: + bit_per_pixel = 24; + break; + } + + data_rate = edid->mode.pixel_clock * bit_per_pixel / lanes; + + ui = 1000 / (data_rate / 1000) + 1U; + cycle_time = 8000 / (data_rate / 1000) + 1U; + + phy_timing->lpx = DIV_ROUND_UP(0x50, cycle_time); + phy_timing->da_hs_prepare = DIV_ROUND_UP((0x40 + 0x5 * ui), cycle_time); + phy_timing->da_hs_zero = DIV_ROUND_UP((0xc8 + 0x0a * ui), cycle_time); + phy_timing->da_hs_trail = DIV_ROUND_UP(((0x4 * ui) + 0x50), cycle_time); + + if (phy_timing->da_hs_zero > phy_timing->da_hs_prepare) + phy_timing->da_hs_zero -= phy_timing->da_hs_prepare; + + phy_timing->ta_go = 4U * phy_timing->lpx; + phy_timing->ta_sure = 3U * phy_timing->lpx / 2U; + phy_timing->ta_get = 5U * phy_timing->lpx; + phy_timing->da_hs_exit = 2U * phy_timing->lpx; + + phy_timing->clk_hs_zero = DIV_ROUND_UP(0x150U, cycle_time); + phy_timing->clk_hs_trail = DIV_ROUND_UP(0x64U, cycle_time) + 0xaU; + + phy_timing->clk_hs_prepare = DIV_ROUND_UP(0x40U, cycle_time); + phy_timing->clk_hs_post = DIV_ROUND_UP(80U + 52U * ui, cycle_time); + phy_timing->clk_hs_exit = 2U * phy_timing->lpx; +} + +static void mtk_dsi_rxtx_control(u32 mode_flags, u32 lanes) +{ + u32 tmp_reg = 0; + + switch (lanes) { + case 1: + tmp_reg = 1 << 2; + break; + case 2: + tmp_reg = 3 << 2; + break; + case 3: + tmp_reg = 7 << 2; + break; + case 4: + default: + tmp_reg = 0xf << 2; + break; + } + + tmp_reg |= (mode_flags & MIPI_DSI_CLOCK_NON_CONTINUOUS) << 6; + tmp_reg |= (mode_flags & MIPI_DSI_MODE_EOT_PACKET) >> 3; + + dsi_write32(&dsi->dsi_txrx_ctrl, tmp_reg); +} + +static void mtk_dsi_config_vdo_timing(u32 mode_flags, u32 format, + const struct edid *edid) +{ + u32 hsync_active_byte; + u32 hbp_byte; + u32 hfp_byte; + u32 vbp_byte; + u32 vfp_byte; + u32 bpp; + u32 packet_fmt; + u32 hactive; + + if (format == MIPI_DSI_FMT_RGB565) + bpp = 2; + else + bpp = 3; + + vbp_byte = edid->mode.vbl - edid->mode.vso - edid->mode.vspw - + edid->mode.vborder; + vfp_byte = edid->mode.vso - edid->mode.vborder; + + + dsi_write32(&dsi->dsi_vsa_nl, edid->mode.vspw); + dsi_write32(&dsi->dsi_vbp_nl, vbp_byte); + dsi_write32(&dsi->dsi_vfp_nl, vfp_byte); + dsi_write32(&dsi->dsi_vact_nl, edid->mode.va); + + if (mode_flags & MIPI_DSI_MODE_VIDEO_SYNC_PULSE) + hbp_byte = (edid->mode.hbl - edid->mode.hso - edid->mode.hspw - + edid->mode.hborder) * bpp - 10; + else + hbp_byte = (edid->mode.hbl - edid->mode.hso - + edid->mode.hborder) * bpp - 10; + + hsync_active_byte = edid->mode.hspw * bpp - 10; + hfp_byte = (edid->mode.hso - edid->mode.hborder) * bpp - 12; + + dsi_write32(&dsi->dsi_hsa_wc, hsync_active_byte); + dsi_write32(&dsi->dsi_hbp_wc, hbp_byte); + dsi_write32(&dsi->dsi_hfp_wc, hfp_byte); + + switch (format) { + case MIPI_DSI_FMT_RGB888: + packet_fmt = PACKED_PS_24BIT_RGB888; + break; + case MIPI_DSI_FMT_RGB666: + packet_fmt = LOOSELY_PS_18BIT_RGB666; + break; + case MIPI_DSI_FMT_RGB666_PACKED: + packet_fmt = PACKED_PS_18BIT_RGB666; + break; + case MIPI_DSI_FMT_RGB565: + packet_fmt = PACKED_PS_16BIT_RGB565; + break; + default: + packet_fmt = PACKED_PS_24BIT_RGB888; + break; + } + + hactive = edid->mode.ha; + packet_fmt |= (hactive * bpp) & DSI_PS_WC; + + dsi_write32(&dsi->dsi_psctrl, 0x2c << 24 | packet_fmt); + dsi_write32(&dsi->dsi_size_con, edid->mode.va << 16 | hactive); +} + +static void mtk_dsi_start(void) +{ + dsi_write32(&dsi->dsi_start, 0); + dsi_write32(&dsi->dsi_start, 1); +} + +static void mtk_dsi_cmdq(u8 *data, u8 len) +{ + struct stopwatch sw; + u8 *tx_buf = data; + u8 cmdq_size; + u32 reg_val, cmdq_mask, i, config, cmdq_off, type, intsta_0; + + switch (len) { + case 0: + return; + + case 1: + type = MIPI_DSI_DCS_SHORT_WRITE; + break; + + case 2: + type = MIPI_DSI_DCS_SHORT_WRITE_PARAM; + break; + + default: + type = MIPI_DSI_DCS_LONG_WRITE; + break; + } + + if (MTK_DSI_HOST_IS_READ(type)) + config = BTA; + else + config = (len > 2) ? LONG_PACKET : SHORT_PACKET; + + if (len > 2) { + cmdq_size = 1 + (len + 3) / 4; + cmdq_off = 4; + cmdq_mask = CONFIG | DATA_ID | DATA_0 | DATA_1; + reg_val = (len << 16) | (type << 8) | config; + } else { + cmdq_size = 1; + cmdq_off = 2; + cmdq_mask = CONFIG | DATA_ID; + reg_val = (type << 8) | config; + } + + for (i = 0; i < len; i++) + dsi_clrsetbits_le32(&dsi->dsi_cmdq0 + ((cmdq_off + i) & (~0x3)), + (0xff << (((i + cmdq_off) & 3) * 8)), + tx_buf[i] << (((i + cmdq_off) & 3) * 8)); + + dsi_clrsetbits_le32(&dsi->dsi_cmdq0, cmdq_mask, reg_val); + dsi_clrsetbits_le32(&dsi->dsi_cmdq_size, CMDQ_SIZE, cmdq_size); + dsi_write32(&dsi->dsi_intsta, 0); + mtk_dsi_start(); + + stopwatch_init_usecs_expire(&sw, 400); + do { + intsta_0 = read32(&dsi->dsi_intsta); + if (intsta_0 & CMD_DONE_INT_FLAG) + break; + udelay(4); + } while (!stopwatch_expired(&sw)); + + if (!(intsta_0 & CMD_DONE_INT_FLAG)) + printk(BIOS_ERR, "dsi DONE INT Timeout\n"); + + dsi_write32(&dsi->dsi_start, 0); +} + +static void push_table(struct lcm_init_table *init_cmd, u32 count) +{ + u32 cmd, i; + + for (i = 0; i < count; i++) { + cmd = init_cmd[i].cmd; + + switch (cmd) { + case DELAY_CMD: + mdelay(init_cmd[i].cmd); + break; + + case END_OF_TABLE: + break; + + case INIT_CMD: + default: + mtk_dsi_cmdq(init_cmd[i].data, init_cmd[i].len); + break; + } + } +} + +int mtk_dsi_init(u32 mode_flags, u32 format, u32 lanes, bool dual, + const struct edid *edid, struct lcm_init_table *init_cmd, u32 count) +{ + int data_rate; + struct mtk_phy_timing phy_timing; + + mtk_dsi_phy_timing_calc(format, lanes, edid, &phy_timing); + + data_rate = mtk_dsi_phy_clk_setting(format, lanes, edid, &phy_timing); + + if (data_rate < 0) + return -1; + + mtk_dsi_reset(); + dsi_write32(&dsi->dsi_force_commit, 3); + mtk_dsi_phy_timconfig(data_rate, &phy_timing); + mtk_dsi_rxtx_control(mode_flags, lanes); + mtk_dsi_clk_hs_mode_disable(); + mtk_dsi_config_vdo_timing(mode_flags, format, edid); + mtk_dsi_clk_hs_mode_enable(); + mtk_dsi_set_mode(0); + push_table(init_cmd, count); + mtk_dsi_set_mode(mode_flags); + mtk_dsi_start(); + + return 0; +} + diff --git a/src/soc/mediatek/mt8183/include/soc/addressmap.h b/src/soc/mediatek/mt8183/include/soc/addressmap.h index 88653eb..75202dd 100644 --- a/src/soc/mediatek/mt8183/include/soc/addressmap.h +++ b/src/soc/mediatek/mt8183/include/soc/addressmap.h @@ -47,6 +47,7 @@ IOCFG_RT_BASE = IO_PHYS + 0x01C50000, IOCFG_RM_BASE = IO_PHYS + 0x01D20000, IOCFG_RB_BASE = IO_PHYS + 0x01D30000, + MIPITX_BASE = IO_PHYS + 0x01E50000, IOCFG_LB_BASE = IO_PHYS + 0x01E70000, IOCFG_LM_BASE = IO_PHYS + 0x01E80000, IOCFG_BL_BASE = IO_PHYS + 0x01E90000, @@ -64,6 +65,7 @@ DISP_AAL0_BASE = IO_PHYS + 0x04010000, DISP_GAMMA0_BASE = IO_PHYS + 0x04011000, DISP_DITHER0_BASE = IO_PHYS + 0x04012000, + DSI_BASE = IO_PHYS + 0x04014000, DISP_MUTEX_BASE = IO_PHYS + 0x04016000, SMI_LARB0 = IO_PHYS + 0x04017000, SMI_BASE = IO_PHYS + 0x04019000, diff --git a/src/soc/mediatek/mt8183/include/soc/dsi.h b/src/soc/mediatek/mt8183/include/soc/dsi.h new file mode 100644 index 0000000..7b74478 --- /dev/null +++ b/src/soc/mediatek/mt8183/include/soc/dsi.h @@ -0,0 +1,484 @@ +/* + * This file is part of the coreboot project. + * + * Copyright 2015 MediaTek Inc. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +#ifndef _DSI_REG_H_ +#define _DSI_REG_H_ + +#include <edid.h> +#include <types.h> + +enum mipi_dsi_pixel_format { + MIPI_DSI_FMT_RGB888, + MIPI_DSI_FMT_RGB666, + MIPI_DSI_FMT_RGB666_PACKED, + MIPI_DSI_FMT_RGB565 +}; + +/* video mode */ +enum { + MIPI_DSI_MODE_VIDEO = BIT(0), + /* video burst mode */ + MIPI_DSI_MODE_VIDEO_BURST = BIT(1), + /* video pulse mode */ + MIPI_DSI_MODE_VIDEO_SYNC_PULSE = BIT(2), + /* enable auto vertical count mode */ + MIPI_DSI_MODE_VIDEO_AUTO_VERT = BIT(3), + /* enable hsync-end packets in vsync-pulse and v-porch area */ + MIPI_DSI_MODE_VIDEO_HSE = BIT(4), + /* disable hfront-porch area */ + MIPI_DSI_MODE_VIDEO_HFP = BIT(5), + /* disable hback-porch area */ + MIPI_DSI_MODE_VIDEO_HBP = BIT(6), + /* disable hsync-active area */ + MIPI_DSI_MODE_VIDEO_HSA = BIT(7), + /* flush display FIFO on vsync pulse */ + MIPI_DSI_MODE_VSYNC_FLUSH = BIT(8), + /* disable EoT packets in HS mode */ + MIPI_DSI_MODE_EOT_PACKET = BIT(9), + /* device supports non-continuous clock behavior (DSI spec 5.6.1) */ + MIPI_DSI_CLOCK_NON_CONTINUOUS = BIT(10), + /* transmit data in low power */ + MIPI_DSI_MODE_LPM = BIT(11) +}; + +struct dsi_regs { + u32 dsi_start; + u8 reserved0[4]; + u32 dsi_inten; + u32 dsi_intsta; + u32 dsi_con_ctrl; + u32 dsi_mode_ctrl; + u32 dsi_txrx_ctrl; + u32 dsi_psctrl; + u32 dsi_vsa_nl; + u32 dsi_vbp_nl; + u32 dsi_vfp_nl; + u32 dsi_vact_nl; + u32 dsi_lfr_con; + u32 dsi_lfr_sta; + u32 dsi_size_con; + u32 dsi_vfp_early_stop; + u32 reserved1[4]; + u32 dsi_hsa_wc; + u32 dsi_hbp_wc; + u32 dsi_hfp_wc; + u32 dsi_bllp_wc; + u32 dsi_cmdq_size; + u32 dsi_hstx_cklp_wc; + u8 reserved2[156]; + u32 dsi_phy_lccon; + u32 dsi_phy_ld0con; + u8 reserved3[4]; + u32 dsi_phy_timecon0; + u32 dsi_phy_timecon1; + u32 dsi_phy_timecon2; + u32 dsi_phy_timecon3; + u8 reserved4[16]; + u32 dsi_vm_cmd_con; + u8 reserved5[92]; + u32 dsi_force_commit; + u8 reserved6[108]; + u32 dsi_cmdq0; +}; + +check_member(dsi_regs, dsi_phy_lccon, 0x104); +check_member(dsi_regs, dsi_phy_timecon3, 0x11c); +check_member(dsi_regs, dsi_vm_cmd_con, 0x130); +check_member(dsi_regs, dsi_force_commit, 0x190); +check_member(dsi_regs, dsi_cmdq0, 0x200); +static struct dsi_regs *const dsi = (void *)DSI_BASE; + +#define DELAY_CMD 0 +#define END_OF_TABLE 1 +#define INIT_CMD 2 + +struct lcm_init_table { + u32 cmd; + u32 len; + u8 data[64]; +}; + +struct mtk_phy_timing { + u8 lpx; + u8 da_hs_prepare; + u8 da_hs_zero; + u8 da_hs_trail; + + u8 ta_go; + u8 ta_sure; + u8 ta_get; + u8 da_hs_exit; + + u8 clk_hs_zero; + u8 clk_hs_trail; + + u8 clk_hs_prepare; + u8 clk_hs_post; + u8 clk_hs_exit; +}; + +/* DSI_INTSTA */ +enum { + LPRX_RD_RDY_INT_FLAG = BIT(0), + CMD_DONE_INT_FLAG = BIT(1), + TE_RDY_INT_FLAG = BIT(2), + VM_DONE_INT_FLAG = BIT(3), + EXT_TE_RDY_INT_FLAG = BIT(4), + DSI_BUSY = BIT(31), +}; + +/* DSI_CON_CTRL */ +enum { + DSI_RESET = BIT(0), + DSI_EN = BIT(1), + DSI_DUAL = BIT(4), +}; + +/* DSI_MODE_CTRL */ +enum { + MODE = 3, + CMD_MODE = 0, + SYNC_PULSE_MODE = 1, + SYNC_EVENT_MODE = 2, + BURST_MODE = 3, + FRM_MODE = BIT(16), + MIX_MODE = BIT(17) +}; + +/* DSI_PSCTRL */ +enum { + DSI_PS_WC = 0x3fff, + DSI_PS_SEL = (3 << 16), + PACKED_PS_16BIT_RGB565 = (0 << 16), + LOOSELY_PS_18BIT_RGB666 = (1 << 16), + PACKED_PS_18BIT_RGB666 = (2 << 16), + PACKED_PS_24BIT_RGB888 = (3 << 16) +}; + +/* DSI_CMDQ_SIZE */ +enum { + CMDQ_SIZE = 0x3f, +}; + +/* DSI_PHY_LCCON */ +enum { + LC_HS_TX_EN = BIT(0), + LC_ULPM_EN = BIT(1), + LC_WAKEUP_EN = BIT(2) +}; + +/*DSI_PHY_LD0CON */ +enum { + LD0_RM_TRIG_EN = BIT(0), + LD0_ULPM_EN = BIT(1), + LD0_WAKEUP_EN = BIT(2) +}; + +enum { + LPX = (0xff << 0), + HS_PRPR = (0xff << 8), + HS_ZERO = (0xff << 16), + HS_TRAIL = (0xff << 24) +}; + +enum { + TA_GO = (0xff << 0), + TA_SURE = (0xff << 8), + TA_GET = (0xff << 16), + DA_HS_EXIT = (0xff << 24) +}; + +enum { + CONT_DET = (0xff << 0), + CLK_ZERO = (0xf << 16), + CLK_TRAIL = (0xff << 24) +}; + +enum { + CLK_HS_PRPR = (0xff << 0), + CLK_HS_POST = (0xff << 8), + CLK_HS_EXIT = (0xf << 16) +}; + +/* DSI_VM_CMD_CON */ +enum { + VM_CMD_EN = BIT(0), + TS_VFP_EN = BIT(5), +}; + +/* DSI_CMDQ0 */ +enum { + CONFIG = (0xff << 0), + SHORT_PACKET = 0, + LONG_PACKET = 2, + BTA = BIT(2), + DATA_ID = (0xff << 8), + DATA_0 = (0xff << 16), + DATA_1 = (0xff << 24), +}; + +#define MIPITX_LANE_CON 0x000c +#define MIPITX_PLL_PWR 0x0028 +#define MIPITX_PLL_CON0 0x002c +#define MIPITX_PLL_CON1 0x0030 +#define MIPITX_PLL_CON2 0x0034 +#define MIPITX_PLL_CON3 0x0038 +#define MIPITX_PLL_CON4 0x003c +#define MIPITX_D2_SW_CTL_EN 0x0144 +#define MIPITX_D0_SW_CTL_EN 0x0244 +#define MIPITX_CK_CKMODE_EN 0x0328 +#define DSI_CK_CKMODE_EN BIT(0) +#define MIPITX_CK_SW_CTL_EN 0x0344 +#define MIPITX_D1_SW_CTL_EN 0x0444 +#define MIPITX_D3_SW_CTL_EN 0x0544 +#define DSI_SW_CTL_EN BIT(0) +#define AD_DSI_PLL_SDM_PWR_ON BIT(0) +#define AD_DSI_PLL_SDM_ISO_EN BIT(1) + +#define RG_DSI_PLL_EN BIT(4) +#define RG_DSI_PLL_POSDIV (0x7 << 8) + + +/* MIPITX_REG */ +struct mipi_tx_regs { + u32 dsi_con; + u32 dsi_clock_lane; + u32 dsi_data_lane[4]; + u8 reserved0[40]; + u32 dsi_top_con; + u32 dsi_bg_con; + u8 reserved1[8]; + u32 dsi_pll_con0; + u32 dsi_pll_con1; + u32 dsi_pll_con2; + u32 dsi_pll_con3; + u32 dsi_pll_chg; + u32 dsi_pll_top; + u32 dsi_pll_pwr; + u8 reserved2[4]; + u32 dsi_rgs; + u32 dsi_gpi_en; + u32 dsi_gpi_pull; + u32 dsi_phy_sel; + u32 dsi_sw_ctrl_en; + u32 dsi_sw_ctrl_con0; + u32 dsi_sw_ctrl_con1; + u32 dsi_sw_ctrl_con2; + u32 dsi_dbg_con; + u32 dsi_dbg_out; + u32 dsi_apb_async_sta; +}; + +check_member(mipi_tx_regs, dsi_top_con, 0x40); +check_member(mipi_tx_regs, dsi_pll_pwr, 0x68); + +static struct mipi_tx_regs *const mipi_tx = (void *)MIPITX_BASE; + +/* MIPITX_DSI_CON */ +enum { + RG_DSI_LDOCORE_EN = BIT(0), + RG_DSI_CKG_LDOOUT_EN = BIT(1), + RG_DSI_BCLK_SEL = (3 << 2), + RG_DSI_LD_IDX_SEL = (7 << 4), + RG_DSI_PHYCLK_SEL = (2 << 8), + RG_DSI_DSICLK_FREQ_SEL = BIT(10), + RG_DSI_LPTX_CLMP_EN = BIT(11) +}; + +/* MIPITX_DSI_CLOCK_LANE */ +enum { + LDOOUT_EN = BIT(0), + CKLANE_EN = BIT(1), + IPLUS1 = BIT(2), + LPTX_IPLUS2 = BIT(3), + LPTX_IMINUS = BIT(4), + LPCD_IPLUS = BIT(5), + LPCD_IMLUS = BIT(6), + RT_CODE = (0xf << 8) +}; + +/* MIPITX_DSI_TOP_CON */ +enum { + RG_DSI_LNT_INTR_EN = BIT(0), + RG_DSI_LNT_HS_BIAS_EN = BIT(1), + RG_DSI_LNT_IMP_CAL_EN = BIT(2), + RG_DSI_LNT_TESTMODE_EN = BIT(3), + RG_DSI_LNT_IMP_CAL_CODE = (0xf << 4), + RG_DSI_LNT_AIO_SEL = (7 << 8), + RG_DSI_PAD_TIE_LOW_EN = BIT(11), + RG_DSI_DEBUG_INPUT_EN = BIT(12), + RG_DSI_PRESERVE = (7 << 13) +}; + +/* MIPITX_DSI_BG_CON */ +enum { + RG_DSI_BG_CORE_EN = BIT(0), + RG_DSI_BG_CKEN = BIT(1), + RG_DSI_BG_DIV = (0x3 << 2), + RG_DSI_BG_FAST_CHARGE = BIT(4), + RG_DSI_V12_SEL = (7 << 5), + RG_DSI_V10_SEL = (7 << 8), + RG_DSI_V072_SEL = (7 << 11), + RG_DSI_V04_SEL = (7 << 14), + RG_DSI_V032_SEL = (7 << 17), + RG_DSI_V02_SEL = (7 << 20), + rsv_23 = BIT(23), + RG_DSI_BG_R1_TRIM = (0xf << 24), + RG_DSI_BG_R2_TRIM = (0xf << 28) +}; + +/* MIPITX_DSI_PLL_CON0 */ +enum { + RG_DSI_MPPLL_PLL_EN = BIT(0), + RG_DSI_MPPLL_PREDIV = (3 << 1), + RG_DSI_MPPLL_TXDIV0 = (3 << 3), + RG_DSI_MPPLL_TXDIV1 = (3 << 5), + RG_DSI_MPPLL_POSDIV = (7 << 7), + RG_DSI_MPPLL_MONVC_EN = BIT(10), + RG_DSI_MPPLL_MONREF_EN = BIT(11), + RG_DSI_MPPLL_VOD_EN = BIT(12) +}; + +/* MIPITX_DSI_PLL_CON1 */ +enum { + RG_DSI_MPPLL_SDM_FRA_EN = BIT(0), + RG_DSI_MPPLL_SDM_SSC_PH_INIT = BIT(1), + RG_DSI_MPPLL_SDM_SSC_EN = BIT(2), + RG_DSI_MPPLL_SDM_SSC_PRD = (0xffff << 16) +}; + +/* MIPITX_DSI_PLL_PWR */ +enum { + RG_DSI_MPPLL_SDM_PWR_ON = BIT(0), + RG_DSI_MPPLL_SDM_ISO_EN = BIT(1), + RG_DSI_MPPLL_SDM_PWR_ACK = BIT(8) +}; + +/* MIPI DSI Processor-to-Peripheral transaction types */ +enum { + MIPI_DSI_V_SYNC_START = 0x01, + MIPI_DSI_V_SYNC_END = 0x11, + MIPI_DSI_H_SYNC_START = 0x21, + MIPI_DSI_H_SYNC_END = 0x31, + + MIPI_DSI_COLOR_MODE_OFF = 0x02, + MIPI_DSI_COLOR_MODE_ON = 0x12, + MIPI_DSI_SHUTDOWN_PERIPHERAL = 0x22, + MIPI_DSI_TURN_ON_PERIPHERAL = 0x32, + + MIPI_DSI_GENERIC_SHORT_WRITE_0_PARAM = 0x03, + MIPI_DSI_GENERIC_SHORT_WRITE_1_PARAM = 0x13, + MIPI_DSI_GENERIC_SHORT_WRITE_2_PARAM = 0x23, + + MIPI_DSI_GENERIC_READ_REQUEST_0_PARAM = 0x04, + MIPI_DSI_GENERIC_READ_REQUEST_1_PARAM = 0x14, + MIPI_DSI_GENERIC_READ_REQUEST_2_PARAM = 0x24, + + MIPI_DSI_DCS_SHORT_WRITE = 0x05, + MIPI_DSI_DCS_SHORT_WRITE_PARAM = 0x15, + + MIPI_DSI_DCS_READ = 0x06, + + MIPI_DSI_SET_MAXIMUM_RETURN_PACKET_SIZE = 0x37, + + MIPI_DSI_END_OF_TRANSMISSION = 0x08, + + MIPI_DSI_NULL_PACKET = 0x09, + MIPI_DSI_BLANKING_PACKET = 0x19, + MIPI_DSI_GENERIC_LONG_WRITE = 0x29, + MIPI_DSI_DCS_LONG_WRITE = 0x39, + + MIPI_DSI_LOOSELY_PACKED_PIXEL_STREAM_YCBCR20 = 0x0c, + MIPI_DSI_PACKED_PIXEL_STREAM_YCBCR24 = 0x1c, + MIPI_DSI_PACKED_PIXEL_STREAM_YCBCR16 = 0x2c, + + MIPI_DSI_PACKED_PIXEL_STREAM_30 = 0x0d, + MIPI_DSI_PACKED_PIXEL_STREAM_36 = 0x1d, + MIPI_DSI_PACKED_PIXEL_STREAM_YCBCR12 = 0x3d, + + MIPI_DSI_PACKED_PIXEL_STREAM_16 = 0x0e, + MIPI_DSI_PACKED_PIXEL_STREAM_18 = 0x1e, + MIPI_DSI_PIXEL_STREAM_3BYTE_18 = 0x2e, + MIPI_DSI_PACKED_PIXEL_STREAM_24 = 0x3e, +}; + +/* MIPI DSI Peripheral-to-Processor transaction types */ +enum { + MIPI_DSI_RX_ACKNOWLEDGE_AND_ERROR_REPORT = 0x02, + MIPI_DSI_RX_END_OF_TRANSMISSION = 0x08, + MIPI_DSI_RX_GENERIC_SHORT_READ_RESPONSE_1BYTE = 0x11, + MIPI_DSI_RX_GENERIC_SHORT_READ_RESPONSE_2BYTE = 0x12, + MIPI_DSI_RX_GENERIC_LONG_READ_RESPONSE = 0x1a, + MIPI_DSI_RX_DCS_LONG_READ_RESPONSE = 0x1c, + MIPI_DSI_RX_DCS_SHORT_READ_RESPONSE_1BYTE = 0x21, + MIPI_DSI_RX_DCS_SHORT_READ_RESPONSE_2BYTE = 0x22, +}; + +/* MIPI DCS commands */ +enum { + MIPI_DCS_NOP = 0x00, + MIPI_DCS_SOFT_RESET = 0x01, + MIPI_DCS_GET_DISPLAY_ID = 0x04, + MIPI_DCS_GET_RED_CHANNEL = 0x06, + MIPI_DCS_GET_GREEN_CHANNEL = 0x07, + MIPI_DCS_GET_BLUE_CHANNEL = 0x08, + MIPI_DCS_GET_DISPLAY_STATUS = 0x09, + MIPI_DCS_GET_POWER_MODE = 0x0A, + MIPI_DCS_GET_ADDRESS_MODE = 0x0B, + MIPI_DCS_GET_PIXEL_FORMAT = 0x0C, + MIPI_DCS_GET_DISPLAY_MODE = 0x0D, + MIPI_DCS_GET_SIGNAL_MODE = 0x0E, + MIPI_DCS_GET_DIAGNOSTIC_RESULT = 0x0F, + MIPI_DCS_ENTER_SLEEP_MODE = 0x10, + MIPI_DCS_EXIT_SLEEP_MODE = 0x11, + MIPI_DCS_ENTER_PARTIAL_MODE = 0x12, + MIPI_DCS_ENTER_NORMAL_MODE = 0x13, + MIPI_DCS_EXIT_INVERT_MODE = 0x20, + MIPI_DCS_ENTER_INVERT_MODE = 0x21, + MIPI_DCS_SET_GAMMA_CURVE = 0x26, + MIPI_DCS_SET_DISPLAY_OFF = 0x28, + MIPI_DCS_SET_DISPLAY_ON = 0x29, + MIPI_DCS_SET_COLUMN_ADDRESS = 0x2A, + MIPI_DCS_SET_PAGE_ADDRESS = 0x2B, + MIPI_DCS_WRITE_MEMORY_START = 0x2C, + MIPI_DCS_WRITE_LUT = 0x2D, + MIPI_DCS_READ_MEMORY_START = 0x2E, + MIPI_DCS_SET_PARTIAL_AREA = 0x30, + MIPI_DCS_SET_SCROLL_AREA = 0x33, + MIPI_DCS_SET_TEAR_OFF = 0x34, + MIPI_DCS_SET_TEAR_ON = 0x35, + MIPI_DCS_SET_ADDRESS_MODE = 0x36, + MIPI_DCS_SET_SCROLL_START = 0x37, + MIPI_DCS_EXIT_IDLE_MODE = 0x38, + MIPI_DCS_ENTER_IDLE_MODE = 0x39, + MIPI_DCS_SET_PIXEL_FORMAT = 0x3A, + MIPI_DCS_WRITE_MEMORY_CONTINUE = 0x3C, + MIPI_DCS_READ_MEMORY_CONTINUE = 0x3E, + MIPI_DCS_SET_TEAR_SCANLINE = 0x44, + MIPI_DCS_GET_SCANLINE = 0x45, + MIPI_DCS_READ_DDB_START = 0xA1, + MIPI_DCS_READ_DDB_CONTINUE = 0xA8, +}; + +#define MTK_DSI_HOST_IS_READ(type) \ + ((type == MIPI_DSI_GENERIC_READ_REQUEST_0_PARAM) || \ + (type == MIPI_DSI_GENERIC_READ_REQUEST_1_PARAM) || \ + (type == MIPI_DSI_GENERIC_READ_REQUEST_2_PARAM) || \ + (type == MIPI_DSI_DCS_READ)) + +extern int mtk_dsi_init(u32 mode_flags, u32 format, u32 lanes, bool dual, + const struct edid *edid, struct lcm_init_table *init_cmd, u32 count); + +#endif
build bot (Jenkins) has posted comments on this change. ( https://review.coreboot.org/c/coreboot/+/31591 )
Change subject: mediaek/mt8183: add dsi driver for mt8183 ......................................................................
Patch Set 1:
(8 comments)
https://review.coreboot.org/#/c/31591/1/src/soc/mediatek/mt8183/dsi.c File src/soc/mediatek/mt8183/dsi.c:
https://review.coreboot.org/#/c/31591/1/src/soc/mediatek/mt8183/dsi.c@28 PS1, Line 28: static void mipi_clrsetbits_le32(void *a, uint32_t offset, uint32_t m, uint32_t v) line over 80 characters
https://review.coreboot.org/#/c/31591/1/src/soc/mediatek/mt8183/dsi.c@64 PS1, Line 64: const struct edid *edid, struct mtk_phy_timing *phy_timing) line over 80 characters
https://review.coreboot.org/#/c/31591/1/src/soc/mediatek/mt8183/dsi.c@96 PS1, Line 96: data_rate = (u64)(edid->mode.pixel_clock * 1000 * total_bits) / (htotal * lanes); line over 80 characters
https://review.coreboot.org/#/c/31591/1/src/soc/mediatek/mt8183/dsi.c@133 PS1, Line 133: pcw = (u64)((data_rate / 1000000) * (1 << txdiv0) * (1 << txdiv1)) << 24; line over 80 characters
https://review.coreboot.org/#/c/31591/1/src/soc/mediatek/mt8183/dsi.c@159 PS1, Line 159: static void mtk_dsi_phy_timconfig(u32 data_rate, struct mtk_phy_timing *phy_timing) line over 80 characters
https://review.coreboot.org/#/c/31591/1/src/soc/mediatek/mt8183/dsi.c@212 PS1, Line 212: const struct edid *edid, struct mtk_phy_timing *phy_timing) line over 80 characters
https://review.coreboot.org/#/c/31591/1/src/soc/mediatek/mt8183/dsi.c@444 PS1, Line 444: const struct edid *edid, struct lcm_init_table *init_cmd, u32 count) line over 80 characters
https://review.coreboot.org/#/c/31591/1/src/soc/mediatek/mt8183/include/soc/... File src/soc/mediatek/mt8183/include/soc/dsi.h:
https://review.coreboot.org/#/c/31591/1/src/soc/mediatek/mt8183/include/soc/... PS1, Line 482: const struct edid *edid, struct lcm_init_table *init_cmd, u32 count); line over 80 characters
Paul Menzel has posted comments on this change. ( https://review.coreboot.org/c/coreboot/+/31591 )
Change subject: mediaek/mt8183: add dsi driver for mt8183 ......................................................................
Patch Set 1:
(8 comments)
You could try to run all the new files through clang-format.
https://review.coreboot.org/#/c/31591/1//COMMIT_MSG Commit Message:
https://review.coreboot.org/#/c/31591/1//COMMIT_MSG@7 PS1, Line 7: mediaek mediatek
https://review.coreboot.org/#/c/31591/1//COMMIT_MSG@8 PS1, Line 8: Where is the data sheet (or the name, revision), and is that driver written from scratch or taken from, for example, U-Boot?
https://review.coreboot.org/#/c/31591/1/src/soc/mediatek/mt8183/dsi.c File src/soc/mediatek/mt8183/dsi.c:
https://review.coreboot.org/#/c/31591/1/src/soc/mediatek/mt8183/dsi.c@23 PS1, Line 23: static void mipi_write32(void *a, uint32_t offset, uint32_t v) Are these all common functions, which can be shared?
https://review.coreboot.org/#/c/31591/1/src/soc/mediatek/mt8183/dsi.c@98 PS1, Line 98: BIOS_ERR Why is this an error? BIOS_INFO or NOTICE?
https://review.coreboot.org/#/c/31591/1/src/soc/mediatek/mt8183/dsi.c@139 PS1, Line 139: udelay(30); Is that delay mentioned in the data sheet?
https://review.coreboot.org/#/c/31591/1/src/soc/mediatek/mt8183/dsi.c@415 PS1, Line 415: Timeout time-out
https://review.coreboot.org/#/c/31591/1/src/soc/mediatek/mt8183/dsi.c@415 PS1, Line 415: dsi DONE INT Timeout Please rephrase to be better understandable, and also add the stop watch time.
https://review.coreboot.org/#/c/31591/1/src/soc/mediatek/mt8183/dsi.c@416 PS1, Line 416: Please add a debug message, detailing how long it took by printing the stopwatch value.
build bot (Jenkins) has posted comments on this change. ( https://review.coreboot.org/c/coreboot/+/31591 )
Change subject: mediaek/mt8183: add dsi driver for mt8183 ......................................................................
Patch Set 2:
(8 comments)
https://review.coreboot.org/#/c/31591/2/src/soc/mediatek/mt8183/dsi.c File src/soc/mediatek/mt8183/dsi.c:
https://review.coreboot.org/#/c/31591/2/src/soc/mediatek/mt8183/dsi.c@28 PS2, Line 28: static void mipi_clrsetbits_le32(void *a, uint32_t offset, uint32_t m, uint32_t v) line over 80 characters
https://review.coreboot.org/#/c/31591/2/src/soc/mediatek/mt8183/dsi.c@64 PS2, Line 64: const struct edid *edid, struct mtk_phy_timing *phy_timing) line over 80 characters
https://review.coreboot.org/#/c/31591/2/src/soc/mediatek/mt8183/dsi.c@96 PS2, Line 96: data_rate = (u64)(edid->mode.pixel_clock * 1000 * total_bits) / (htotal * lanes); line over 80 characters
https://review.coreboot.org/#/c/31591/2/src/soc/mediatek/mt8183/dsi.c@133 PS2, Line 133: pcw = (u64)((data_rate / 1000000) * (1 << txdiv0) * (1 << txdiv1)) << 24; line over 80 characters
https://review.coreboot.org/#/c/31591/2/src/soc/mediatek/mt8183/dsi.c@159 PS2, Line 159: static void mtk_dsi_phy_timconfig(u32 data_rate, struct mtk_phy_timing *phy_timing) line over 80 characters
https://review.coreboot.org/#/c/31591/2/src/soc/mediatek/mt8183/dsi.c@212 PS2, Line 212: const struct edid *edid, struct mtk_phy_timing *phy_timing) line over 80 characters
https://review.coreboot.org/#/c/31591/2/src/soc/mediatek/mt8183/dsi.c@444 PS2, Line 444: const struct edid *edid, struct lcm_init_table *init_cmd, u32 count) line over 80 characters
https://review.coreboot.org/#/c/31591/2/src/soc/mediatek/mt8183/include/soc/... File src/soc/mediatek/mt8183/include/soc/dsi.h:
https://review.coreboot.org/#/c/31591/2/src/soc/mediatek/mt8183/include/soc/... PS2, Line 482: const struct edid *edid, struct lcm_init_table *init_cmd, u32 count); line over 80 characters
build bot (Jenkins) has posted comments on this change. ( https://review.coreboot.org/c/coreboot/+/31591 )
Change subject: mediaek/mt8183: add dsi driver for mt8183 ......................................................................
Patch Set 3:
(8 comments)
https://review.coreboot.org/#/c/31591/3/src/soc/mediatek/mt8183/dsi.c File src/soc/mediatek/mt8183/dsi.c:
https://review.coreboot.org/#/c/31591/3/src/soc/mediatek/mt8183/dsi.c@28 PS3, Line 28: static void mipi_clrsetbits_le32(void *a, uint32_t offset, uint32_t m, uint32_t v) line over 80 characters
https://review.coreboot.org/#/c/31591/3/src/soc/mediatek/mt8183/dsi.c@64 PS3, Line 64: const struct edid *edid, struct mtk_phy_timing *phy_timing) line over 80 characters
https://review.coreboot.org/#/c/31591/3/src/soc/mediatek/mt8183/dsi.c@96 PS3, Line 96: data_rate = (u64)(edid->mode.pixel_clock * 1000 * total_bits) / (htotal * lanes); line over 80 characters
https://review.coreboot.org/#/c/31591/3/src/soc/mediatek/mt8183/dsi.c@133 PS3, Line 133: pcw = (u64)((data_rate / 1000000) * (1 << txdiv0) * (1 << txdiv1)) << 24; line over 80 characters
https://review.coreboot.org/#/c/31591/3/src/soc/mediatek/mt8183/dsi.c@159 PS3, Line 159: static void mtk_dsi_phy_timconfig(u32 data_rate, struct mtk_phy_timing *phy_timing) line over 80 characters
https://review.coreboot.org/#/c/31591/3/src/soc/mediatek/mt8183/dsi.c@212 PS3, Line 212: const struct edid *edid, struct mtk_phy_timing *phy_timing) line over 80 characters
https://review.coreboot.org/#/c/31591/3/src/soc/mediatek/mt8183/dsi.c@444 PS3, Line 444: const struct edid *edid, struct lcm_init_table *init_cmd, u32 count) line over 80 characters
https://review.coreboot.org/#/c/31591/3/src/soc/mediatek/mt8183/include/soc/... File src/soc/mediatek/mt8183/include/soc/dsi.h:
https://review.coreboot.org/#/c/31591/3/src/soc/mediatek/mt8183/include/soc/... PS3, Line 482: const struct edid *edid, struct lcm_init_table *init_cmd, u32 count); line over 80 characters
build bot (Jenkins) has posted comments on this change. ( https://review.coreboot.org/c/coreboot/+/31591 )
Change subject: mediaek/mt8183: add dsi driver for mt8183 ......................................................................
Patch Set 4:
(8 comments)
https://review.coreboot.org/#/c/31591/4/src/soc/mediatek/mt8183/dsi.c File src/soc/mediatek/mt8183/dsi.c:
https://review.coreboot.org/#/c/31591/4/src/soc/mediatek/mt8183/dsi.c@28 PS4, Line 28: static void mipi_clrsetbits_le32(void *a, uint32_t offset, uint32_t m, uint32_t v) line over 80 characters
https://review.coreboot.org/#/c/31591/4/src/soc/mediatek/mt8183/dsi.c@64 PS4, Line 64: const struct edid *edid, struct mtk_phy_timing *phy_timing) line over 80 characters
https://review.coreboot.org/#/c/31591/4/src/soc/mediatek/mt8183/dsi.c@96 PS4, Line 96: data_rate = (u64)(edid->mode.pixel_clock * 1000 * total_bits) / (htotal * lanes); line over 80 characters
https://review.coreboot.org/#/c/31591/4/src/soc/mediatek/mt8183/dsi.c@133 PS4, Line 133: pcw = (u64)((data_rate / 1000000) * (1 << txdiv0) * (1 << txdiv1)) << 24; line over 80 characters
https://review.coreboot.org/#/c/31591/4/src/soc/mediatek/mt8183/dsi.c@159 PS4, Line 159: static void mtk_dsi_phy_timconfig(u32 data_rate, struct mtk_phy_timing *phy_timing) line over 80 characters
https://review.coreboot.org/#/c/31591/4/src/soc/mediatek/mt8183/dsi.c@212 PS4, Line 212: const struct edid *edid, struct mtk_phy_timing *phy_timing) line over 80 characters
https://review.coreboot.org/#/c/31591/4/src/soc/mediatek/mt8183/dsi.c@444 PS4, Line 444: const struct edid *edid, struct lcm_init_table *init_cmd, u32 count) line over 80 characters
https://review.coreboot.org/#/c/31591/4/src/soc/mediatek/mt8183/include/soc/... File src/soc/mediatek/mt8183/include/soc/dsi.h:
https://review.coreboot.org/#/c/31591/4/src/soc/mediatek/mt8183/include/soc/... PS4, Line 482: const struct edid *edid, struct lcm_init_table *init_cmd, u32 count); line over 80 characters
Hello yongqiang niu, Julius Werner, You-Cheng Syu, Hung-Te Lin, build bot (Jenkins), Patrick Georgi, Martin Roth,
I'd like you to reexamine a change. Please visit
https://review.coreboot.org/c/coreboot/+/31591
to look at the new patch set (#6).
Change subject: mediatek/mt8183: add dsi driver for mt8183 ......................................................................
mediatek/mt8183: add dsi driver for mt8183
BUG=b:80501386,b:117254947 BRANCH=none TEST=Boots correctly on Kukui
Change-Id: Ic413f524ca0b36f0b01f723a71fe9745e2710cd2 Signed-off-by: Jitao Shi jitao.shi@mediatek.com --- M src/soc/mediatek/mt8183/Makefile.inc A src/soc/mediatek/mt8183/dsi.c M src/soc/mediatek/mt8183/include/soc/addressmap.h A src/soc/mediatek/mt8183/include/soc/dsi.h 4 files changed, 964 insertions(+), 0 deletions(-)
git pull ssh://review.coreboot.org:29418/coreboot refs/changes/91/31591/6
Hello yongqiang niu, Julius Werner, You-Cheng Syu, Hung-Te Lin, build bot (Jenkins), Patrick Georgi, Martin Roth,
I'd like you to reexamine a change. Please visit
https://review.coreboot.org/c/coreboot/+/31591
to look at the new patch set (#8).
Change subject: mediatek/mt8183: add dsi driver for mt8183 ......................................................................
mediatek/mt8183: add dsi driver for mt8183
BUG=b:80501386,b:117254947 BRANCH=none TEST=Boots correctly on Kukui
Change-Id: Ic413f524ca0b36f0b01f723a71fe9745e2710cd2 Signed-off-by: Jitao Shi jitao.shi@mediatek.com --- M src/soc/mediatek/mt8183/Makefile.inc A src/soc/mediatek/mt8183/dsi.c M src/soc/mediatek/mt8183/include/soc/addressmap.h A src/soc/mediatek/mt8183/include/soc/dsi.h 4 files changed, 964 insertions(+), 0 deletions(-)
git pull ssh://review.coreboot.org:29418/coreboot refs/changes/91/31591/8
Hello yongqiang niu, Julius Werner, You-Cheng Syu, Hung-Te Lin, build bot (Jenkins), Patrick Georgi, Martin Roth,
I'd like you to reexamine a change. Please visit
https://review.coreboot.org/c/coreboot/+/31591
to look at the new patch set (#11).
Change subject: mediatek/mt8183: add dsi driver for mt8183 ......................................................................
mediatek/mt8183: add dsi driver for mt8183
BUG=b:80501386,b:117254947 BRANCH=none TEST=Boots correctly on Kukui
Change-Id: Ic413f524ca0b36f0b01f723a71fe9745e2710cd2 Signed-off-by: Jitao Shi jitao.shi@mediatek.com --- M src/soc/mediatek/mt8183/Makefile.inc A src/soc/mediatek/mt8183/dsi.c M src/soc/mediatek/mt8183/include/soc/addressmap.h A src/soc/mediatek/mt8183/include/soc/dsi.h 4 files changed, 973 insertions(+), 0 deletions(-)
git pull ssh://review.coreboot.org:29418/coreboot refs/changes/91/31591/11
build bot (Jenkins) has posted comments on this change. ( https://review.coreboot.org/c/coreboot/+/31591 )
Change subject: mediatek/mt8183: add dsi driver for mt8183 ......................................................................
Patch Set 11:
(3 comments)
https://review.coreboot.org/#/c/31591/11/src/soc/mediatek/mt8183/dsi.c File src/soc/mediatek/mt8183/dsi.c:
https://review.coreboot.org/#/c/31591/11/src/soc/mediatek/mt8183/dsi.c@65 PS11, Line 65: data_rate = (u64)(edid->mode.pixel_clock * 1000 * bit_per_pixel) / lanes; line over 80 characters
https://review.coreboot.org/#/c/31591/11/src/soc/mediatek/mt8183/dsi.c@253 PS11, Line 253: struct mtk_phy_timing *phy_timing, u32 lanes) line over 80 characters
https://review.coreboot.org/#/c/31591/11/src/soc/mediatek/mt8183/dsi.c@477 PS11, Line 477: mtk_dsi_config_vdo_timing(mode_flags, format, edid, &phy_timing, lanes); line over 80 characters
Hello yongqiang niu, Julius Werner, You-Cheng Syu, Hung-Te Lin, build bot (Jenkins), Patrick Georgi, Martin Roth,
I'd like you to reexamine a change. Please visit
https://review.coreboot.org/c/coreboot/+/31591
to look at the new patch set (#12).
Change subject: mediatek/mt8183: add dsi driver for mt8183 ......................................................................
mediatek/mt8183: add dsi driver for mt8183
BUG=b:80501386,b:117254947 BRANCH=none TEST=Boots correctly on Kukui
Change-Id: Ic413f524ca0b36f0b01f723a71fe9745e2710cd2 Signed-off-by: Jitao Shi jitao.shi@mediatek.com --- D 3rdparty/blobs M src/soc/mediatek/mt8183/Makefile.inc A src/soc/mediatek/mt8183/dsi.c M src/soc/mediatek/mt8183/include/soc/addressmap.h A src/soc/mediatek/mt8183/include/soc/dsi.h 5 files changed, 974 insertions(+), 1 deletion(-)
git pull ssh://review.coreboot.org:29418/coreboot refs/changes/91/31591/12
Hello yongqiang niu, Julius Werner, You-Cheng Syu, Hung-Te Lin, build bot (Jenkins), Patrick Georgi, Martin Roth,
I'd like you to reexamine a change. Please visit
https://review.coreboot.org/c/coreboot/+/31591
to look at the new patch set (#13).
Change subject: mediatek/mt8183: add dsi driver for mt8183 ......................................................................
mediatek/mt8183: add dsi driver for mt8183
BUG=b:80501386,b:117254947 BRANCH=none TEST=Boots correctly on Kukui
Change-Id: Ic413f524ca0b36f0b01f723a71fe9745e2710cd2 Signed-off-by: Jitao Shi jitao.shi@mediatek.com --- D 3rdparty/blobs M src/soc/mediatek/mt8183/Makefile.inc A src/soc/mediatek/mt8183/dsi.c M src/soc/mediatek/mt8183/include/soc/addressmap.h A src/soc/mediatek/mt8183/include/soc/dsi.h 5 files changed, 975 insertions(+), 1 deletion(-)
git pull ssh://review.coreboot.org:29418/coreboot refs/changes/91/31591/13
Hello yongqiang niu, Julius Werner, You-Cheng Syu, Hung-Te Lin, build bot (Jenkins), Patrick Georgi, Martin Roth,
I'd like you to reexamine a change. Please visit
https://review.coreboot.org/c/coreboot/+/31591
to look at the new patch set (#14).
Change subject: mediatek/mt8183: add dsi driver for mt8183 ......................................................................
mediatek/mt8183: add dsi driver for mt8183
BUG=b:80501386,b:117254947 BRANCH=none TEST=Boots correctly on Kukui
Change-Id: Ic413f524ca0b36f0b01f723a71fe9745e2710cd2 Signed-off-by: Jitao Shi jitao.shi@mediatek.com --- D 3rdparty/blobs M src/soc/mediatek/mt8183/Makefile.inc A src/soc/mediatek/mt8183/dsi.c M src/soc/mediatek/mt8183/include/soc/addressmap.h A src/soc/mediatek/mt8183/include/soc/dsi.h 5 files changed, 975 insertions(+), 1 deletion(-)
git pull ssh://review.coreboot.org:29418/coreboot refs/changes/91/31591/14
Hung-Te Lin has posted comments on this change. ( https://review.coreboot.org/c/coreboot/+/31591 )
Change subject: mediatek/mt8183: add dsi driver for mt8183 ......................................................................
Patch Set 14:
(12 comments)
https://review.coreboot.org/#/c/31591/14/3rdparty/blobs File 3rdparty/blobs:
https://review.coreboot.org/#/c/31591/14/3rdparty/blobs@a1 PS14, Line 1: we should not delete 3rdparty/blob library. please revert this.
https://review.coreboot.org/#/c/31591/14/src/soc/mediatek/mt8183/dsi.c File src/soc/mediatek/mt8183/dsi.c:
https://review.coreboot.org/#/c/31591/14/src/soc/mediatek/mt8183/dsi.c@23 PS14, Line 23: static any reason to declare dsi_write32 here, instead of simply using write32?
if really needed, I think this can be 'static inline'.
https://review.coreboot.org/#/c/31591/14/src/soc/mediatek/mt8183/dsi.c@48 PS14, Line 48: int the printf said data_rate is unsigned int.
https://review.coreboot.org/#/c/31591/14/src/soc/mediatek/mt8183/dsi.c@65 PS14, Line 65: (u64)(edid->mode.pixel_clock * 1000 * bpp) / lanes; we should cast to larger types in the beginning, i.e:
(u64)edid->mode.pixel_clock * 1000 * bpp / lanes;
https://review.coreboot.org/#/c/31591/14/src/soc/mediatek/mt8183/dsi.c@103 PS14, Line 103: (u64) u64 should be converted earlier, whenever the value will exceed 32 bits.
https://review.coreboot.org/#/c/31591/14/src/soc/mediatek/mt8183/dsi.c@110 PS14, Line 110: 30 Add a comment for what we're waiting for?
https://review.coreboot.org/#/c/31591/14/src/soc/mediatek/mt8183/dsi.c@115 PS14, Line 115: 40 any comment for why 40?
https://review.coreboot.org/#/c/31591/14/src/soc/mediatek/mt8183/dsi.c@298 PS14, Line 298: "HFP less than d-phy, FPS will under 60Hz\n"); exceed col 80
https://review.coreboot.org/#/c/31591/14/src/soc/mediatek/mt8183/dsi.c@305 PS14, Line 305: "HFP less than d-phy, FPS will under 60Hz\n"); exceed col 80
https://review.coreboot.org/#/c/31591/14/src/soc/mediatek/mt8183/dsi.c@377 PS14, Line 377: (void *)DSI_BASE + 0x200 + i (void *)(DSI_BASE + 0x200 + i)
In fact you should make it clear what's that 200 for. maybe something like
uintptr_t dsi_something = DSI_BASE + 0x200;
https://review.coreboot.org/#/c/31591/14/src/soc/mediatek/mt8183/dsi.c@395 PS14, Line 395: 4 add a comment for why 4
https://review.coreboot.org/#/c/31591/14/src/soc/mediatek/mt8183/include/soc... File src/soc/mediatek/mt8183/include/soc/dsi.h:
https://review.coreboot.org/#/c/31591/14/src/soc/mediatek/mt8183/include/soc... PS14, Line 476: MTK_DSI_HOST_IS_READ I'm not seeing a strong reason to put this as macro here, bcz it's only called one time.
Maybe move this back into c source, or change to an inline function.
Julius Werner has posted comments on this change. ( https://review.coreboot.org/c/coreboot/+/31591 )
Change subject: mediatek/mt8183: add dsi driver for mt8183 ......................................................................
Patch Set 14:
This also seems to copy a lot from MT8173. Please unify.
Hello Julius Werner, yongqiang niu, You-Cheng Syu, Hung-Te Lin, build bot (Jenkins), Patrick Georgi, Martin Roth,
I'd like you to reexamine a change. Please visit
https://review.coreboot.org/c/coreboot/+/31591
to look at the new patch set (#15).
Change subject: mediatek/mt8183: add dsi driver for mt8183 ......................................................................
mediatek/mt8183: add dsi driver for mt8183
BUG=b:80501386,b:117254947 BRANCH=none TEST=Boots correctly on Kukui
Change-Id: Ic413f524ca0b36f0b01f723a71fe9745e2710cd2 Signed-off-by: Jitao Shi jitao.shi@mediatek.com --- D 3rdparty/blobs M src/soc/mediatek/mt8183/Makefile.inc A src/soc/mediatek/mt8183/dsi.c M src/soc/mediatek/mt8183/include/soc/addressmap.h A src/soc/mediatek/mt8183/include/soc/dsi.h 5 files changed, 972 insertions(+), 1 deletion(-)
git pull ssh://review.coreboot.org:29418/coreboot refs/changes/91/31591/15
Hung-Te Lin has posted comments on this change. ( https://review.coreboot.org/c/coreboot/+/31591 )
Change subject: mediatek/mt8183: add dsi driver for mt8183 ......................................................................
Patch Set 16:
(1 comment)
https://review.coreboot.org/c/coreboot/+/31591/16/src/soc/mediatek/mt8183/ds... File src/soc/mediatek/mt8183/dsi.c:
https://review.coreboot.org/c/coreboot/+/31591/16/src/soc/mediatek/mt8183/ds... PS16, Line 459: u32 count 8173 init uses the END_OF_TABLE so there's need to count. Why not follow what?
Hung-Te Lin has posted comments on this change. ( https://review.coreboot.org/c/coreboot/+/31591 )
Change subject: mediatek/mt8183: add dsi driver for mt8183 ......................................................................
Patch Set 16:
(3 comments)
https://review.coreboot.org/c/coreboot/+/31591/16/src/soc/mediatek/mt8183/ds... File src/soc/mediatek/mt8183/dsi.c:
https://review.coreboot.org/c/coreboot/+/31591/16/src/soc/mediatek/mt8183/ds... PS16, Line 399: count we may remove count?
https://review.coreboot.org/c/coreboot/+/31591/16/src/soc/mediatek/mt8183/ds... PS16, Line 413: break return;
https://review.coreboot.org/c/coreboot/+/31591/16/src/soc/mediatek/mt8183/ds... PS16, Line 459: u32 count
8173 init uses the END_OF_TABLE so there's need to count. […]
oh, sorry, 8173 didn't really do table init. but since you've declared END_OF_TABLE, why not use it?
Hung-Te Lin has uploaded a new patch set (#17) to the change originally created by jitao shi. ( https://review.coreboot.org/c/coreboot/+/31591 )
Change subject: mediatek/mt8183: Add MTK8183 DSI driver ......................................................................
mediatek/mt8183: Add MTK8183 DSI driver
BUG=b:80501386,b:117254947 BRANCH=none TEST=Boots correctly on Kukui
Change-Id: Ic413f524ca0b36f0b01f723a71fe9745e2710cd2 Signed-off-by: Jitao Shi jitao.shi@mediatek.com --- M src/soc/mediatek/mt8183/Makefile.inc A src/soc/mediatek/mt8183/dsi.c M src/soc/mediatek/mt8183/include/soc/addressmap.h A src/soc/mediatek/mt8183/include/soc/dsi.h 4 files changed, 970 insertions(+), 0 deletions(-)
git pull ssh://review.coreboot.org:29418/coreboot refs/changes/91/31591/17
Hung-Te Lin has uploaded a new patch set (#18) to the change originally created by jitao shi. ( https://review.coreboot.org/c/coreboot/+/31591 )
Change subject: mediatek/mt8183: Add DSI driver ......................................................................
mediatek/mt8183: Add DSI driver
BUG=b:80501386,b:117254947 BRANCH=none TEST=Boots correctly on Kukui
Change-Id: Ic413f524ca0b36f0b01f723a71fe9745e2710cd2 Signed-off-by: Jitao Shi jitao.shi@mediatek.com --- M src/soc/mediatek/mt8183/Makefile.inc A src/soc/mediatek/mt8183/dsi.c M src/soc/mediatek/mt8183/include/soc/addressmap.h A src/soc/mediatek/mt8183/include/soc/dsi.h 4 files changed, 970 insertions(+), 0 deletions(-)
git pull ssh://review.coreboot.org:29418/coreboot refs/changes/91/31591/18
Hung-Te Lin has uploaded a new patch set (#20) to the change originally created by jitao shi. ( https://review.coreboot.org/c/coreboot/+/31591 )
Change subject: mediatek/mt8183: Add DSI driver ......................................................................
mediatek/mt8183: Add DSI driver
BUG=b:80501386,b:117254947 BRANCH=none TEST=Boots correctly on Kukui
Change-Id: Ic413f524ca0b36f0b01f723a71fe9745e2710cd2 Signed-off-by: Jitao Shi jitao.shi@mediatek.com --- M src/soc/mediatek/mt8183/Makefile.inc A src/soc/mediatek/mt8183/dsi.c M src/soc/mediatek/mt8183/include/soc/addressmap.h A src/soc/mediatek/mt8183/include/soc/dsi.h 4 files changed, 970 insertions(+), 0 deletions(-)
git pull ssh://review.coreboot.org:29418/coreboot refs/changes/91/31591/20
Paul Menzel has posted comments on this change. ( https://review.coreboot.org/c/coreboot/+/31591 )
Change subject: mediatek/mt8183: Add DSI driver ......................................................................
Patch Set 20:
(1 comment)
https://review.coreboot.org/c/coreboot/+/31591/20//COMMIT_MSG Commit Message:
https://review.coreboot.org/c/coreboot/+/31591/20//COMMIT_MSG@8 PS20, Line 8: Can you please add a datasheet name/revision.
yongqiang niu has uploaded a new patch set (#22) to the change originally created by jitao shi. ( https://review.coreboot.org/c/coreboot/+/31591 )
Change subject: mediatek/mt8183: Add DSI driver ......................................................................
mediatek/mt8183: Add DSI driver
BUG=b:80501386,b:117254947 BRANCH=none TEST=Boots correctly on Kukui
Change-Id: Ic413f524ca0b36f0b01f723a71fe9745e2710cd2 Signed-off-by: Jitao Shi jitao.shi@mediatek.com --- M src/soc/mediatek/mt8183/Makefile.inc A src/soc/mediatek/mt8183/dsi.c M src/soc/mediatek/mt8183/include/soc/addressmap.h A src/soc/mediatek/mt8183/include/soc/dsi.h 4 files changed, 970 insertions(+), 0 deletions(-)
git pull ssh://review.coreboot.org:29418/coreboot refs/changes/91/31591/22
Hung-Te Lin has uploaded a new patch set (#25) to the change originally created by jitao shi. ( https://review.coreboot.org/c/coreboot/+/31591 )
Change subject: mediatek/mt8183: Add DSI driver ......................................................................
mediatek/mt8183: Add DSI driver
The MT8183 display serial interface (DSI) is based on MIPI Alliance Specification, supporting high-speed serial data transfer between host processor and peripheral devices such as display modules.
DSI supports both video mode and command mode data transfer defined in MIPI spec, and it also provides bidirectional transimission with low-power mode to receive mesaages from the peripheral.
Reference: MT8183 Application Processor Functional Spec, 6.7 Display Serial Interface (DSI)
BUG=b:80501386,b:117254947 BRANCH=none TEST=Boots correctly on Kukui
Change-Id: Ic413f524ca0b36f0b01f723a71fe9745e2710cd2 Signed-off-by: Jitao Shi jitao.shi@mediatek.com --- M src/soc/mediatek/mt8183/Makefile.inc A src/soc/mediatek/mt8183/dsi.c M src/soc/mediatek/mt8183/include/soc/addressmap.h A src/soc/mediatek/mt8183/include/soc/dsi.h 4 files changed, 970 insertions(+), 0 deletions(-)
git pull ssh://review.coreboot.org:29418/coreboot refs/changes/91/31591/25
Julius Werner has posted comments on this change. ( https://review.coreboot.org/c/coreboot/+/31591 )
Change subject: mediatek/mt8183: Add DSI driver ......................................................................
Patch Set 25:
(4 comments)
https://review.coreboot.org/c/coreboot/+/31591/25/src/soc/mediatek/mt8183/ds... File src/soc/mediatek/mt8183/dsi.c:
PS25: Is all this still gonna get deduplicated with MT8173 code?
https://review.coreboot.org/c/coreboot/+/31591/24/src/soc/mediatek/mt8183/in... File src/soc/mediatek/mt8183/include/soc/dsi.h:
https://review.coreboot.org/c/coreboot/+/31591/24/src/soc/mediatek/mt8183/in... PS24, Line 105: #define END_OF_TABLE 1 We should make this one 0, so that if someone accidentally just uses an empty struct initializer to end the list (as is common with many other self-terminated arrays), it will still work.
https://review.coreboot.org/c/coreboot/+/31591/24/src/soc/mediatek/mt8183/in... PS24, Line 106: #define INIT_GENENIC_CMD 2 typo
https://review.coreboot.org/c/coreboot/+/31591/24/src/soc/mediatek/mt8183/in... PS24, Line 112: u8 data[64]; Considering how many of these you throw in for some of those panels, we should really try to optimize structure size as much as possible. You're blowing (4 + 4 + 64) * 292 == 21KB on the BOE panel alone! (Granted, it's compressed, but still...)
Are you really ever anticipating that you'll need 64? Looks like the most you need for now is 6 on the Krane panel. I'd suggest for now you restrict this to
u8 cmd : 5; u8 len : 3; u8 data[7];
and see how far you get with that. (Alternatively, you could leave out the len and just have different cmd values for all different data packet lengths, like I suggested in https://review.coreboot.org/c/coreboot/+/33413/15/src/mainboard/google/kukui... .)
Yu-Ping Wu has posted comments on this change. ( https://review.coreboot.org/c/coreboot/+/31591 )
Change subject: mediatek/mt8183: Add DSI driver ......................................................................
Patch Set 25:
(5 comments)
https://review.coreboot.org/c/coreboot/+/31591/25//COMMIT_MSG Commit Message:
https://review.coreboot.org/c/coreboot/+/31591/25//COMMIT_MSG@16 PS25, Line 16: mesaages messages
https://review.coreboot.org/c/coreboot/+/31591/25/src/soc/mediatek/mt8183/ds... File src/soc/mediatek/mt8183/dsi.c:
https://review.coreboot.org/c/coreboot/+/31591/25/src/soc/mediatek/mt8183/ds... PS25, Line 81: > Consider changing to ">=" for consistency
https://review.coreboot.org/c/coreboot/+/31591/25/src/soc/mediatek/mt8183/ds... PS25, Line 93: lanes); Can be moved to the previous line
https://review.coreboot.org/c/coreboot/+/31591/25/src/soc/mediatek/mt8183/ds... PS25, Line 295: printk(BIOS_ERR, "HFP less than d-phy, FPS will under 60Hz\n"); Exceeds 80 columns
https://review.coreboot.org/c/coreboot/+/31591/25/src/soc/mediatek/mt8183/ds... PS25, Line 302: printk(BIOS_ERR, "HFP less than d-phy, FPS will under 60Hz\n"); Exceeds 80 columns
Hung-Te Lin has posted comments on this change. ( https://review.coreboot.org/c/coreboot/+/31591 )
Change subject: mediatek/mt8183: Add DSI driver ......................................................................
Patch Set 25:
(12 comments)
https://review.coreboot.org/c/coreboot/+/31591/1//COMMIT_MSG Commit Message:
https://review.coreboot.org/c/coreboot/+/31591/1//COMMIT_MSG@7 PS1, Line 7: mediaek
mediatek
Ack
https://review.coreboot.org/c/coreboot/+/31591/1//COMMIT_MSG@8 PS1, Line 8:
Where is the data sheet (or the name, revision), and is that driver written from scratch or taken fr […]
Ack
https://review.coreboot.org/c/coreboot/+/31591/20//COMMIT_MSG Commit Message:
https://review.coreboot.org/c/coreboot/+/31591/20//COMMIT_MSG@8 PS20, Line 8:
Can you please add a datasheet name/revision.
Ack
https://review.coreboot.org/c/coreboot/+/31591/25//COMMIT_MSG Commit Message:
https://review.coreboot.org/c/coreboot/+/31591/25//COMMIT_MSG@16 PS25, Line 16: mesaages
messages
Ack
https://review.coreboot.org/c/coreboot/+/31591/25/src/soc/mediatek/mt8183/ds... File src/soc/mediatek/mt8183/dsi.c:
PS25:
Is all this still gonna get deduplicated with MT8173 code?
yes and the work to refactor is in https://review.coreboot.org/c/coreboot/+/34562
https://review.coreboot.org/c/coreboot/+/31591/25/src/soc/mediatek/mt8183/ds... PS25, Line 81: >
Consider changing to ">=" for consistency
This needs MTK to confirm.
@jitao/yungnian?
https://review.coreboot.org/c/coreboot/+/31591/25/src/soc/mediatek/mt8183/ds... PS25, Line 93: lanes);
Can be moved to the previous line
Done
https://review.coreboot.org/c/coreboot/+/31591/25/src/soc/mediatek/mt8183/ds... PS25, Line 295: printk(BIOS_ERR, "HFP less than d-phy, FPS will under 60Hz\n");
Exceeds 80 columns
Done
https://review.coreboot.org/c/coreboot/+/31591/25/src/soc/mediatek/mt8183/ds... PS25, Line 302: printk(BIOS_ERR, "HFP less than d-phy, FPS will under 60Hz\n");
Exceeds 80 columns
Done
https://review.coreboot.org/c/coreboot/+/31591/24/src/soc/mediatek/mt8183/in... File src/soc/mediatek/mt8183/include/soc/dsi.h:
https://review.coreboot.org/c/coreboot/+/31591/24/src/soc/mediatek/mt8183/in... PS24, Line 105: #define END_OF_TABLE 1
We should make this one 0, so that if someone accidentally just uses an empty struct initializer to […]
Done
https://review.coreboot.org/c/coreboot/+/31591/24/src/soc/mediatek/mt8183/in... PS24, Line 106: #define INIT_GENENIC_CMD 2
typo
Done
https://review.coreboot.org/c/coreboot/+/31591/24/src/soc/mediatek/mt8183/in... PS24, Line 112: u8 data[64];
Considering how many of these you throw in for some of those panels, we should really try to optimiz […]
Let us change that to 7 first.
Hung-Te Lin has uploaded a new patch set (#31) to the change originally created by jitao shi. ( https://review.coreboot.org/c/coreboot/+/31591 )
Change subject: soc/mediatek/mt8183: Add DSI driver ......................................................................
soc/mediatek/mt8183: Add DSI driver
The MT8183 display serial interface (DSI) is based on MIPI Alliance Specification, supporting high-speed serial data transfer between host processor and peripheral devices such as display modules.
DSI supports both video mode and command mode data transfer defined in MIPI spec, and it also provides bidirectional transmission with low-power mode to receive messages from the peripheral.
Reference: MT8183 Application Processor Functional Spec, 6.7 Display Serial Interface (DSI)
BUG=b:80501386,b:117254947 BRANCH=none TEST=Boots correctly on Kukui
Change-Id: Ic413f524ca0b36f0b01f723a71fe9745e2710cd2 Signed-off-by: Jitao Shi jitao.shi@mediatek.com --- M src/soc/mediatek/mt8183/Makefile.inc A src/soc/mediatek/mt8183/dsi.c M src/soc/mediatek/mt8183/include/soc/addressmap.h A src/soc/mediatek/mt8183/include/soc/dsi.h 4 files changed, 973 insertions(+), 0 deletions(-)
git pull ssh://review.coreboot.org:29418/coreboot refs/changes/91/31591/31
Yu-Ping Wu has posted comments on this change. ( https://review.coreboot.org/c/coreboot/+/31591 )
Change subject: soc/mediatek/mt8183: Add DSI driver ......................................................................
Patch Set 33: Code-Review+1
Julius Werner has posted comments on this change. ( https://review.coreboot.org/c/coreboot/+/31591 )
Change subject: soc/mediatek/mt8183: Add DSI driver ......................................................................
Patch Set 33:
(2 comments)
https://review.coreboot.org/c/coreboot/+/31591/33/src/soc/mediatek/mt8183/in... File src/soc/mediatek/mt8183/include/soc/dsi.h:
https://review.coreboot.org/c/coreboot/+/31591/33/src/soc/mediatek/mt8183/in... PS33, Line 111: u32 len; Note the bitfield notation I had in my comment... the goal was to fit it in 8 bytes (and this would still make 16). If you don't like bitfields, you can also make them u8 each and only have 6 bytes of data, which should still be enough for the panels you have right now. (Technically, if they're all u8 it doesn't have to be divisible by 8 either... but it looks nicer.)
https://review.coreboot.org/c/coreboot/+/31591/33/src/soc/mediatek/mt8183/in... PS33, Line 482: extern We don't use explicit extern qualifiers for function prototypes.
Hung-Te Lin has posted comments on this change. ( https://review.coreboot.org/c/coreboot/+/31591 )
Change subject: soc/mediatek/mt8183: Add DSI driver ......................................................................
Patch Set 34:
(16 comments)
https://review.coreboot.org/c/coreboot/+/31591/14/src/soc/mediatek/mt8183/ds... File src/soc/mediatek/mt8183/dsi.c:
https://review.coreboot.org/c/coreboot/+/31591/14/src/soc/mediatek/mt8183/ds... PS14, Line 23: static
any reason to declare dsi_write32 here, instead of simply using write32? […]
Ack
https://review.coreboot.org/c/coreboot/+/31591/14/src/soc/mediatek/mt8183/ds... PS14, Line 48: int
the printf said data_rate is unsigned int.
Ack
https://review.coreboot.org/c/coreboot/+/31591/14/src/soc/mediatek/mt8183/ds... PS14, Line 65: (u64)(edid->mode.pixel_clock * 1000 * bpp) / lanes;
we should cast to larger types in the beginning, i.e: […]
Ack
https://review.coreboot.org/c/coreboot/+/31591/14/src/soc/mediatek/mt8183/ds... PS14, Line 103: (u64)
u64 should be converted earlier, whenever the value will exceed 32 bits.
Ack
https://review.coreboot.org/c/coreboot/+/31591/14/src/soc/mediatek/mt8183/ds... PS14, Line 110: 30
Add a comment for what we're waiting for?
Ack
https://review.coreboot.org/c/coreboot/+/31591/14/src/soc/mediatek/mt8183/ds... PS14, Line 115: 40
any comment for why 40?
Ack
https://review.coreboot.org/c/coreboot/+/31591/14/src/soc/mediatek/mt8183/ds... PS14, Line 298: "HFP less than d-phy, FPS will under 60Hz\n");
exceed col 80
Ack
https://review.coreboot.org/c/coreboot/+/31591/14/src/soc/mediatek/mt8183/ds... PS14, Line 305: "HFP less than d-phy, FPS will under 60Hz\n");
exceed col 80
Ack
https://review.coreboot.org/c/coreboot/+/31591/14/src/soc/mediatek/mt8183/ds... PS14, Line 377: (void *)DSI_BASE + 0x200 + i
(void *)(DSI_BASE + 0x200 + i) […]
Ack
https://review.coreboot.org/c/coreboot/+/31591/14/src/soc/mediatek/mt8183/ds... PS14, Line 395: 4
add a comment for why 4
Ack
https://review.coreboot.org/c/coreboot/+/31591/16/src/soc/mediatek/mt8183/ds... File src/soc/mediatek/mt8183/dsi.c:
https://review.coreboot.org/c/coreboot/+/31591/16/src/soc/mediatek/mt8183/ds... PS16, Line 399: count
we may remove count?
Ack
https://review.coreboot.org/c/coreboot/+/31591/16/src/soc/mediatek/mt8183/ds... PS16, Line 413: break
return;
Ack
https://review.coreboot.org/c/coreboot/+/31591/16/src/soc/mediatek/mt8183/ds... PS16, Line 459: u32 count
oh, sorry, 8173 didn't really do table init. […]
Ack
https://review.coreboot.org/c/coreboot/+/31591/25/src/soc/mediatek/mt8183/ds... File src/soc/mediatek/mt8183/dsi.c:
PS25:
yes and the work to refactor is in https://review.coreboot. […]
Ack
https://review.coreboot.org/c/coreboot/+/31591/25/src/soc/mediatek/mt8183/ds... PS25, Line 81: >
This needs MTK to confirm. […]
jitao confirmed offline this cannot be >=.
https://review.coreboot.org/c/coreboot/+/31591/14/src/soc/mediatek/mt8183/in... File src/soc/mediatek/mt8183/include/soc/dsi.h:
https://review.coreboot.org/c/coreboot/+/31591/14/src/soc/mediatek/mt8183/in... PS14, Line 476: MTK_DSI_HOST_IS_READ
I'm not seeing a strong reason to put this as macro here, bcz it's only called one time. […]
Ack
Hung-Te Lin has uploaded a new patch set (#35) to the change originally created by jitao shi. ( https://review.coreboot.org/c/coreboot/+/31591 )
Change subject: soc/mediatek/mt8183: Add DSI driver ......................................................................
soc/mediatek/mt8183: Add DSI driver
The MT8183 display serial interface (DSI) is based on MIPI Alliance Specification, supporting high-speed serial data transfer between host processor and peripheral devices such as display modules.
DSI supports both video mode and command mode data transfer defined in MIPI spec, and it also provides bidirectional transmission with low-power mode to receive messages from the peripheral.
Reference: MT8183 Application Processor Functional Spec, 6.7 Display Serial Interface (DSI)
BUG=b:80501386,b:117254947 BRANCH=none TEST=Boots correctly on Kukui
Change-Id: Ic413f524ca0b36f0b01f723a71fe9745e2710cd2 Signed-off-by: Jitao Shi jitao.shi@mediatek.com --- M src/soc/mediatek/common/dsi.c M src/soc/mediatek/mt8183/Makefile.inc A src/soc/mediatek/mt8183/dsi.c M src/soc/mediatek/mt8183/include/soc/addressmap.h A src/soc/mediatek/mt8183/include/soc/dsi.h 5 files changed, 557 insertions(+), 0 deletions(-)
git pull ssh://review.coreboot.org:29418/coreboot refs/changes/91/31591/35
Hung-Te Lin has uploaded a new patch set (#36) to the change originally created by jitao shi. ( https://review.coreboot.org/c/coreboot/+/31591 )
Change subject: soc/mediatek/mt8183: Add DSI driver ......................................................................
soc/mediatek/mt8183: Add DSI driver
The MT8183 display serial interface (DSI) is based on MIPI Alliance Specification, supporting high-speed serial data transfer between host processor and peripheral devices such as display modules.
DSI supports both video mode and command mode data transfer defined in MIPI spec, and it also provides bidirectional transmission with low-power mode to receive messages from the peripheral.
Reference: MT8183 Application Processor Functional Spec, 6.7 Display Serial Interface (DSI)
BUG=b:80501386,b:117254947 BRANCH=none TEST=Boots correctly on Kukui
Change-Id: Ic413f524ca0b36f0b01f723a71fe9745e2710cd2 Signed-off-by: Jitao Shi jitao.shi@mediatek.com --- M src/soc/mediatek/common/dsi.c M src/soc/mediatek/mt8183/Makefile.inc A src/soc/mediatek/mt8183/dsi.c M src/soc/mediatek/mt8183/include/soc/addressmap.h A src/soc/mediatek/mt8183/include/soc/dsi.h 5 files changed, 556 insertions(+), 0 deletions(-)
git pull ssh://review.coreboot.org:29418/coreboot refs/changes/91/31591/36
Hung-Te Lin has posted comments on this change. ( https://review.coreboot.org/c/coreboot/+/31591 )
Change subject: soc/mediatek/mt8183: Add DSI driver ......................................................................
Patch Set 36:
(1 comment)
https://review.coreboot.org/c/coreboot/+/31591/36/src/soc/mediatek/common/ds... File src/soc/mediatek/common/dsi.c:
https://review.coreboot.org/c/coreboot/+/31591/36/src/soc/mediatek/common/ds... PS36, Line 219: ifdef Note: I know we don't prefer #ifdef, but there's probably no easier and cleaner way to do this.
Hung-Te Lin has uploaded a new patch set (#39) to the change originally created by jitao shi. ( https://review.coreboot.org/c/coreboot/+/31591 )
Change subject: soc/mediatek/mt8183: Add DSI driver ......................................................................
soc/mediatek/mt8183: Add DSI driver
The MT8183 display serial interface (DSI) is based on MIPI Alliance Specification, supporting high-speed serial data transfer between host processor and peripheral devices such as display modules.
DSI supports both video mode and command mode data transfer defined in MIPI spec, and it also provides bidirectional transmission with low-power mode to receive messages from the peripheral.
Reference: MT8183 Application Processor Functional Spec, 6.7 Display Serial Interface (DSI)
BUG=b:80501386,b:117254947 BRANCH=none TEST=Boots correctly on Kukui
Change-Id: Ic413f524ca0b36f0b01f723a71fe9745e2710cd2 Signed-off-by: Jitao Shi jitao.shi@mediatek.com --- M src/soc/mediatek/common/dsi.c M src/soc/mediatek/common/include/soc/dsi_common.h M src/soc/mediatek/mt8173/include/soc/dsi.h M src/soc/mediatek/mt8183/Makefile.inc A src/soc/mediatek/mt8183/dsi.c M src/soc/mediatek/mt8183/include/soc/addressmap.h A src/soc/mediatek/mt8183/include/soc/dsi.h 7 files changed, 265 insertions(+), 2 deletions(-)
git pull ssh://review.coreboot.org:29418/coreboot refs/changes/91/31591/39
Hung-Te Lin has uploaded a new patch set (#40) to the change originally created by jitao shi. ( https://review.coreboot.org/c/coreboot/+/31591 )
Change subject: soc/mediatek/mt8183: Add DSI driver ......................................................................
soc/mediatek/mt8183: Add DSI driver
The MT8183 display serial interface (DSI) is based on MIPI Alliance Specification, supporting high-speed serial data transfer between host processor and peripheral devices such as display modules.
DSI supports both video mode and command mode data transfer defined in MIPI spec, and it also provides bidirectional transmission with low-power mode to receive messages from the peripheral.
Reference: MT8183 Application Processor Functional Spec, 6.7 Display Serial Interface (DSI)
BUG=b:80501386,b:117254947 BRANCH=none TEST=Boots correctly on Kukui
Change-Id: Ic413f524ca0b36f0b01f723a71fe9745e2710cd2 Signed-off-by: Jitao Shi jitao.shi@mediatek.com --- M src/soc/mediatek/common/dsi.c M src/soc/mediatek/common/include/soc/dsi_common.h M src/soc/mediatek/mt8173/include/soc/dsi.h M src/soc/mediatek/mt8183/Makefile.inc A src/soc/mediatek/mt8183/dsi.c M src/soc/mediatek/mt8183/include/soc/addressmap.h A src/soc/mediatek/mt8183/include/soc/dsi.h 7 files changed, 179 insertions(+), 2 deletions(-)
git pull ssh://review.coreboot.org:29418/coreboot refs/changes/91/31591/40
Hung-Te Lin has uploaded a new patch set (#42) to the change originally created by jitao shi. ( https://review.coreboot.org/c/coreboot/+/31591 )
Change subject: soc/mediatek/mt8183: Add DSI driver ......................................................................
soc/mediatek/mt8183: Add DSI driver
The MT8183 display serial interface (DSI) is based on MIPI Alliance Specification, supporting high-speed serial data transfer between host processor and peripheral devices such as display modules.
DSI supports both video mode and command mode data transfer defined in MIPI spec, and it also provides bidirectional transmission with low-power mode to receive messages from the peripheral.
Reference: MT8183 Application Processor Functional Spec, 6.7 Display Serial Interface (DSI)
BUG=b:80501386,b:117254947 BRANCH=none TEST=Boots correctly on Kukui
Change-Id: Ic413f524ca0b36f0b01f723a71fe9745e2710cd2 Signed-off-by: Jitao Shi jitao.shi@mediatek.com --- M src/soc/mediatek/common/dsi.c M src/soc/mediatek/common/include/soc/dsi_common.h M src/soc/mediatek/mt8173/include/soc/dsi.h M src/soc/mediatek/mt8183/Makefile.inc A src/soc/mediatek/mt8183/dsi.c M src/soc/mediatek/mt8183/include/soc/addressmap.h A src/soc/mediatek/mt8183/include/soc/dsi.h 7 files changed, 179 insertions(+), 2 deletions(-)
git pull ssh://review.coreboot.org:29418/coreboot refs/changes/91/31591/42
Hung-Te Lin has uploaded a new patch set (#43) to the change originally created by jitao shi. ( https://review.coreboot.org/c/coreboot/+/31591 )
Change subject: soc/mediatek/mt8183: Add DSI driver ......................................................................
soc/mediatek/mt8183: Add DSI driver
The MT8183 display serial interface (DSI) is based on MIPI Alliance Specification, supporting high-speed serial data transfer between host processor and peripheral devices such as display modules.
DSI supports both video mode and command mode data transfer defined in MIPI spec, and it also provides bidirectional transmission with low-power mode to receive messages from the peripheral.
Reference: MT8183 Application Processor Functional Spec, 6.7 Display Serial Interface (DSI)
BUG=b:80501386,b:117254947 BRANCH=none TEST=Boots correctly on Kukui
Change-Id: Ic413f524ca0b36f0b01f723a71fe9745e2710cd2 Signed-off-by: Jitao Shi jitao.shi@mediatek.com --- M src/soc/mediatek/common/dsi.c M src/soc/mediatek/common/include/soc/dsi_common.h M src/soc/mediatek/mt8173/include/soc/dsi.h M src/soc/mediatek/mt8183/Makefile.inc A src/soc/mediatek/mt8183/dsi.c M src/soc/mediatek/mt8183/include/soc/addressmap.h A src/soc/mediatek/mt8183/include/soc/dsi.h 7 files changed, 187 insertions(+), 2 deletions(-)
git pull ssh://review.coreboot.org:29418/coreboot refs/changes/91/31591/43
Hung-Te Lin has posted comments on this change. ( https://review.coreboot.org/c/coreboot/+/31591 )
Change subject: soc/mediatek/mt8183: Add DSI driver ......................................................................
Patch Set 46:
(3 comments)
https://review.coreboot.org/c/coreboot/+/31591/14/3rdparty/blobs File 3rdparty/blobs:
https://review.coreboot.org/c/coreboot/+/31591/14/3rdparty/blobs@a1 PS14, Line 1:
we should not delete 3rdparty/blob library. please revert this.
Done
https://review.coreboot.org/c/coreboot/+/31591/33/src/soc/mediatek/mt8183/in... File src/soc/mediatek/mt8183/include/soc/dsi.h:
https://review.coreboot.org/c/coreboot/+/31591/33/src/soc/mediatek/mt8183/in... PS33, Line 111: u32 len;
Note the bitfield notation I had in my comment... […]
Ack
https://review.coreboot.org/c/coreboot/+/31591/33/src/soc/mediatek/mt8183/in... PS33, Line 482: extern
We don't use explicit extern qualifiers for function prototypes.
Ack
Hung-Te Lin has posted comments on this change. ( https://review.coreboot.org/c/coreboot/+/31591 )
Change subject: soc/mediatek/mt8183: Add DSI driver ......................................................................
Patch Set 46:
(13 comments)
https://review.coreboot.org/c/coreboot/+/31591/1/src/soc/mediatek/mt8183/dsi... File src/soc/mediatek/mt8183/dsi.c:
https://review.coreboot.org/c/coreboot/+/31591/1/src/soc/mediatek/mt8183/dsi... PS1, Line 23: static void mipi_write32(void *a, uint32_t offset, uint32_t v)
Are these all common functions, which can be shared?
Done
https://review.coreboot.org/c/coreboot/+/31591/1/src/soc/mediatek/mt8183/dsi... PS1, Line 28: static void mipi_clrsetbits_le32(void *a, uint32_t offset, uint32_t m, uint32_t v)
line over 80 characters
Ack
https://review.coreboot.org/c/coreboot/+/31591/1/src/soc/mediatek/mt8183/dsi... PS1, Line 64: const struct edid *edid, struct mtk_phy_timing *phy_timing)
line over 80 characters
Ack
https://review.coreboot.org/c/coreboot/+/31591/1/src/soc/mediatek/mt8183/dsi... PS1, Line 96: data_rate = (u64)(edid->mode.pixel_clock * 1000 * total_bits) / (htotal * lanes);
line over 80 characters
Ack
https://review.coreboot.org/c/coreboot/+/31591/1/src/soc/mediatek/mt8183/dsi... PS1, Line 98: BIOS_ERR
Why is this an error? BIOS_INFO or NOTICE?
Done
https://review.coreboot.org/c/coreboot/+/31591/1/src/soc/mediatek/mt8183/dsi... PS1, Line 133: pcw = (u64)((data_rate / 1000000) * (1 << txdiv0) * (1 << txdiv1)) << 24;
line over 80 characters
Ack
https://review.coreboot.org/c/coreboot/+/31591/1/src/soc/mediatek/mt8183/dsi... PS1, Line 139: udelay(30);
Is that delay mentioned in the data sheet?
Done
https://review.coreboot.org/c/coreboot/+/31591/1/src/soc/mediatek/mt8183/dsi... PS1, Line 159: static void mtk_dsi_phy_timconfig(u32 data_rate, struct mtk_phy_timing *phy_timing)
line over 80 characters
Ack
https://review.coreboot.org/c/coreboot/+/31591/1/src/soc/mediatek/mt8183/dsi... PS1, Line 212: const struct edid *edid, struct mtk_phy_timing *phy_timing)
line over 80 characters
Ack
https://review.coreboot.org/c/coreboot/+/31591/1/src/soc/mediatek/mt8183/dsi... PS1, Line 415: dsi DONE INT Timeout
Please rephrase to be better understandable, and also add the stop watch time.
Done
https://review.coreboot.org/c/coreboot/+/31591/1/src/soc/mediatek/mt8183/dsi... PS1, Line 415: Timeout
time-out
Ack
https://review.coreboot.org/c/coreboot/+/31591/1/src/soc/mediatek/mt8183/dsi... PS1, Line 416:
Please add a debug message, detailing how long it took by printing the stopwatch value.
Ack
https://review.coreboot.org/c/coreboot/+/31591/1/src/soc/mediatek/mt8183/dsi... PS1, Line 444: const struct edid *edid, struct lcm_init_table *init_cmd, u32 count)
line over 80 characters
Ack
Julius Werner has posted comments on this change. ( https://review.coreboot.org/c/coreboot/+/31591 )
Change subject: soc/mediatek/mt8183: Add DSI driver ......................................................................
Patch Set 47: Code-Review+2
(3 comments)
https://review.coreboot.org/c/coreboot/+/31591/47/src/soc/mediatek/common/in... File src/soc/mediatek/common/include/soc/dsi_common.h:
https://review.coreboot.org/c/coreboot/+/31591/47/src/soc/mediatek/common/in... PS47, Line 69: u32 dsi_lfr_con; nit: add comment which registers are only available since 8183?
https://review.coreboot.org/c/coreboot/+/31591/47/src/soc/mediatek/mt8183/ds... File src/soc/mediatek/mt8183/dsi.c:
https://review.coreboot.org/c/coreboot/+/31591/47/src/soc/mediatek/mt8183/ds... PS47, Line 45: // MIN = 125 C89 comments
https://review.coreboot.org/c/coreboot/+/31591/47/src/soc/mediatek/mt8183/ds... PS47, Line 59: 26 Is this related to CLK26M_HZ? If so, please use that constant for clarity.
Hung-Te Lin has uploaded a new patch set (#48) to the change originally created by jitao shi. ( https://review.coreboot.org/c/coreboot/+/31591 )
Change subject: soc/mediatek/mt8183: Add DSI driver ......................................................................
soc/mediatek/mt8183: Add DSI driver
The MT8183 display serial interface (DSI) is based on MIPI Alliance Specification, supporting high-speed serial data transfer between host processor and peripheral devices such as display modules.
DSI supports both video mode and command mode data transfer defined in MIPI spec, and it also provides bidirectional transmission with low-power mode to receive messages from the peripheral.
Reference: MT8183 Application Processor Functional Spec, 6.7 Display Serial Interface (DSI)
BUG=b:80501386,b:117254947 BRANCH=none TEST=Boots correctly on Kukui
Change-Id: Ic413f524ca0b36f0b01f723a71fe9745e2710cd2 Signed-off-by: Jitao Shi jitao.shi@mediatek.com --- M src/soc/mediatek/common/dsi.c M src/soc/mediatek/common/include/soc/dsi_common.h M src/soc/mediatek/mt8173/include/soc/dsi.h M src/soc/mediatek/mt8183/Makefile.inc A src/soc/mediatek/mt8183/dsi.c M src/soc/mediatek/mt8183/include/soc/addressmap.h A src/soc/mediatek/mt8183/include/soc/dsi.h 7 files changed, 186 insertions(+), 2 deletions(-)
git pull ssh://review.coreboot.org:29418/coreboot refs/changes/91/31591/48
Hung-Te Lin has posted comments on this change. ( https://review.coreboot.org/c/coreboot/+/31591 )
Change subject: soc/mediatek/mt8183: Add DSI driver ......................................................................
Patch Set 48:
(1 comment)
https://review.coreboot.org/c/coreboot/+/31591/47/src/soc/mediatek/mt8183/ds... File src/soc/mediatek/mt8183/dsi.c:
https://review.coreboot.org/c/coreboot/+/31591/47/src/soc/mediatek/mt8183/ds... PS47, Line 45: // MIN = 125
C89 comments
Done
Hung-Te Lin has posted comments on this change. ( https://review.coreboot.org/c/coreboot/+/31591 )
Change subject: soc/mediatek/mt8183: Add DSI driver ......................................................................
Patch Set 48:
(2 comments)
https://review.coreboot.org/c/coreboot/+/31591/47/src/soc/mediatek/common/in... File src/soc/mediatek/common/include/soc/dsi_common.h:
https://review.coreboot.org/c/coreboot/+/31591/47/src/soc/mediatek/common/in... PS47, Line 69: u32 dsi_lfr_con;
nit: add comment which registers are only available since 8183?
Done
https://review.coreboot.org/c/coreboot/+/31591/47/src/soc/mediatek/mt8183/ds... File src/soc/mediatek/mt8183/dsi.c:
https://review.coreboot.org/c/coreboot/+/31591/47/src/soc/mediatek/mt8183/ds... PS47, Line 59: 26
Is this related to CLK26M_HZ? If so, please use that constant for clarity.
Done
Hung-Te Lin has uploaded a new patch set (#50) to the change originally created by jitao shi. ( https://review.coreboot.org/c/coreboot/+/31591 )
Change subject: soc/mediatek/mt8183: Add DSI driver ......................................................................
soc/mediatek/mt8183: Add DSI driver
The MT8183 display serial interface (DSI) is based on MIPI Alliance Specification, supporting high-speed serial data transfer between host processor and peripheral devices such as display modules.
DSI supports both video mode and command mode data transfer defined in MIPI spec, and it also provides bidirectional transmission with low-power mode to receive messages from the peripheral.
Reference: MT8183 Application Processor Functional Spec, 6.7 Display Serial Interface (DSI)
BUG=b:80501386,b:117254947 BRANCH=none TEST=Boots correctly on Kukui
Change-Id: Ic413f524ca0b36f0b01f723a71fe9745e2710cd2 Signed-off-by: Jitao Shi jitao.shi@mediatek.com --- M src/soc/mediatek/common/dsi.c M src/soc/mediatek/common/include/soc/dsi_common.h M src/soc/mediatek/mt8173/include/soc/dsi.h M src/soc/mediatek/mt8183/Makefile.inc A src/soc/mediatek/mt8183/dsi.c M src/soc/mediatek/mt8183/include/soc/addressmap.h A src/soc/mediatek/mt8183/include/soc/dsi.h 7 files changed, 187 insertions(+), 2 deletions(-)
git pull ssh://review.coreboot.org:29418/coreboot refs/changes/91/31591/50
Julius Werner has posted comments on this change. ( https://review.coreboot.org/c/coreboot/+/31591 )
Change subject: soc/mediatek/mt8183: Add DSI driver ......................................................................
Patch Set 50: Code-Review+2
(1 comment)
https://review.coreboot.org/c/coreboot/+/31591/47/src/soc/mediatek/mt8183/ds... File src/soc/mediatek/mt8183/dsi.c:
https://review.coreboot.org/c/coreboot/+/31591/47/src/soc/mediatek/mt8183/ds... PS47, Line 59: 26
Done
Is it? I don't see any difference...
Julius Werner has posted comments on this change. ( https://review.coreboot.org/c/coreboot/+/31591 )
Change subject: soc/mediatek/mt8183: Add DSI driver ......................................................................
Patch Set 52: Code-Review+2
(1 comment)
https://review.coreboot.org/c/coreboot/+/31591/47/src/soc/mediatek/common/in... File src/soc/mediatek/common/include/soc/dsi_common.h:
https://review.coreboot.org/c/coreboot/+/31591/47/src/soc/mediatek/common/in... PS47, Line 69: u32 dsi_lfr_con;
Done
Same here, you said Done but I don't think you really did anything...
Hung-Te Lin has posted comments on this change. ( https://review.coreboot.org/c/coreboot/+/31591 )
Change subject: soc/mediatek/mt8183: Add DSI driver ......................................................................
Patch Set 52:
(2 comments)
https://review.coreboot.org/c/coreboot/+/31591/47/src/soc/mediatek/common/in... File src/soc/mediatek/common/include/soc/dsi_common.h:
https://review.coreboot.org/c/coreboot/+/31591/47/src/soc/mediatek/common/in... PS47, Line 69: u32 dsi_lfr_con;
Same here, you said Done but I don't think you really did anything...
again wrong meld :(
https://review.coreboot.org/c/coreboot/+/31591/47/src/soc/mediatek/mt8183/ds... File src/soc/mediatek/mt8183/dsi.c:
https://review.coreboot.org/c/coreboot/+/31591/47/src/soc/mediatek/mt8183/ds... PS47, Line 59: 26
Is it? I don't see any difference...
oh no, another case meld into wrong PS...
Hung-Te Lin has uploaded a new patch set (#53) to the change originally created by jitao shi. ( https://review.coreboot.org/c/coreboot/+/31591 )
Change subject: soc/mediatek/mt8183: Add DSI driver ......................................................................
soc/mediatek/mt8183: Add DSI driver
The MT8183 display serial interface (DSI) is based on MIPI Alliance Specification, supporting high-speed serial data transfer between host processor and peripheral devices such as display modules.
DSI supports both video mode and command mode data transfer defined in MIPI spec, and it also provides bidirectional transmission with low-power mode to receive messages from the peripheral.
Reference: MT8183 Application Processor Functional Spec, 6.7 Display Serial Interface (DSI)
BUG=b:80501386,b:117254947 BRANCH=none TEST=Boots correctly on Kukui
Change-Id: Ic413f524ca0b36f0b01f723a71fe9745e2710cd2 Signed-off-by: Jitao Shi jitao.shi@mediatek.com --- M src/soc/mediatek/common/dsi.c M src/soc/mediatek/common/include/soc/dsi_common.h M src/soc/mediatek/mt8173/include/soc/dsi.h M src/soc/mediatek/mt8183/Makefile.inc A src/soc/mediatek/mt8183/dsi.c M src/soc/mediatek/mt8183/include/soc/addressmap.h A src/soc/mediatek/mt8183/include/soc/dsi.h 7 files changed, 187 insertions(+), 2 deletions(-)
git pull ssh://review.coreboot.org:29418/coreboot refs/changes/91/31591/53
Julius Werner has posted comments on this change. ( https://review.coreboot.org/c/coreboot/+/31591 )
Change subject: soc/mediatek/mt8183: Add DSI driver ......................................................................
Patch Set 53: Code-Review+2
Julius Werner has submitted this change and it was merged. ( https://review.coreboot.org/c/coreboot/+/31591 )
Change subject: soc/mediatek/mt8183: Add DSI driver ......................................................................
soc/mediatek/mt8183: Add DSI driver
The MT8183 display serial interface (DSI) is based on MIPI Alliance Specification, supporting high-speed serial data transfer between host processor and peripheral devices such as display modules.
DSI supports both video mode and command mode data transfer defined in MIPI spec, and it also provides bidirectional transmission with low-power mode to receive messages from the peripheral.
Reference: MT8183 Application Processor Functional Spec, 6.7 Display Serial Interface (DSI)
BUG=b:80501386,b:117254947 BRANCH=none TEST=Boots correctly on Kukui
Change-Id: Ic413f524ca0b36f0b01f723a71fe9745e2710cd2 Signed-off-by: Jitao Shi jitao.shi@mediatek.com Reviewed-on: https://review.coreboot.org/c/coreboot/+/31591 Tested-by: build bot (Jenkins) no-reply@coreboot.org Reviewed-by: Julius Werner jwerner@chromium.org --- M src/soc/mediatek/common/dsi.c M src/soc/mediatek/common/include/soc/dsi_common.h M src/soc/mediatek/mt8173/include/soc/dsi.h M src/soc/mediatek/mt8183/Makefile.inc A src/soc/mediatek/mt8183/dsi.c M src/soc/mediatek/mt8183/include/soc/addressmap.h A src/soc/mediatek/mt8183/include/soc/dsi.h 7 files changed, 187 insertions(+), 2 deletions(-)
Approvals: build bot (Jenkins): Verified Julius Werner: Looks good to me, approved
diff --git a/src/soc/mediatek/common/dsi.c b/src/soc/mediatek/common/dsi.c index fffe51f..166bc17 100644 --- a/src/soc/mediatek/common/dsi.c +++ b/src/soc/mediatek/common/dsi.c @@ -248,6 +248,12 @@ write32(&dsi0->dsi_psctrl, PIXEL_STREAM_CUSTOM_HEADER << DSI_PSCON_CUSTOM_HEADER_SHIFT | packet_fmt); + + /* Older systems like MT8173 do not support size_con. */ + if (MTK_DSI_HAVE_SIZE_CON) + write32(&dsi0->dsi_size_con, + edid->mode.va << DSI_SIZE_CON_HEIGHT_SHIFT | + hactive << DSI_SIZE_CON_WIDTH_SHIFT); }
static void mtk_dsi_start(void) diff --git a/src/soc/mediatek/common/include/soc/dsi_common.h b/src/soc/mediatek/common/include/soc/dsi_common.h index 3f4a47d..c684aaf 100644 --- a/src/soc/mediatek/common/include/soc/dsi_common.h +++ b/src/soc/mediatek/common/include/soc/dsi_common.h @@ -67,7 +67,11 @@ u32 dsi_vbp_nl; u32 dsi_vfp_nl; u32 dsi_vact_nl; - u8 reserved1[32]; + u32 dsi_lfr_con; /* Available since MT8183 */ + u32 dsi_lfr_sta; /* Available since MT8183 */ + u32 dsi_size_con; /* Available since MT8183 */ + u32 dsi_vfp_early_stop; /* Available since MT8183 */ + u32 reserved1[4]; u32 dsi_hsa_wc; u32 dsi_hbp_wc; u32 dsi_hfp_wc; @@ -84,7 +88,9 @@ u32 dsi_phy_timecon3; u8 reserved4[16]; u32 dsi_vm_cmd_con; - u8 reserved5[204]; + u8 reserved5[92]; + u32 dsi_force_commit; /* Available since MT8183 */ + u8 reserved6[108]; u32 dsi_cmdq[128]; }; static struct dsi_regs *const dsi0 = (void *)DSI0_BASE; @@ -92,6 +98,7 @@ check_member(dsi_regs, dsi_phy_lccon, 0x104); check_member(dsi_regs, dsi_phy_timecon3, 0x11c); check_member(dsi_regs, dsi_vm_cmd_con, 0x130); +check_member(dsi_regs, dsi_force_commit, 0x190); check_member(dsi_regs, dsi_cmdq, 0x200);
/* DSI_INTSTA */ @@ -134,6 +141,12 @@ DSI_PSCON_CUSTOM_HEADER_SHIFT = 26, };
+/* DSI_SIZE_CON */ +enum { + DSI_SIZE_CON_HEIGHT_SHIFT = 16, + DSI_SIZE_CON_WIDTH_SHIFT = 0, +}; + /* DSI_CMDQ_SIZE */ enum { CMDQ_SIZE = 0x3f, @@ -196,6 +209,12 @@ DATA_1 = (0xff << 24), };
+/* DSI_FORCE_COMMIT */ +enum { + DSI_FORCE_COMMIT_USE_MMSYS = BIT(0), + DSI_FORCE_COMMIT_ALWAYS = BIT(1), +}; + /* MIPI DSI Processor-to-Peripheral transaction types */ enum { MIPI_DSI_V_SYNC_START = 0x01, diff --git a/src/soc/mediatek/mt8173/include/soc/dsi.h b/src/soc/mediatek/mt8173/include/soc/dsi.h index 43cbdcb..e7c1d28 100644 --- a/src/soc/mediatek/mt8173/include/soc/dsi.h +++ b/src/soc/mediatek/mt8173/include/soc/dsi.h @@ -22,6 +22,7 @@ #define MTK_DSI_MIPI_RATIO_NUMERATOR 102 #define MTK_DSI_MIPI_RATIO_DENOMINATOR 100 #define MTK_DSI_DATA_RATE_MIN_MHZ 50 +#define MTK_DSI_HAVE_SIZE_CON 0 #define PIXEL_STREAM_CUSTOM_HEADER 0
/* MIPITX is SOC specific and cannot live in common. */ diff --git a/src/soc/mediatek/mt8183/Makefile.inc b/src/soc/mediatek/mt8183/Makefile.inc index 4527683..cac793f 100644 --- a/src/soc/mediatek/mt8183/Makefile.inc +++ b/src/soc/mediatek/mt8183/Makefile.inc @@ -46,6 +46,7 @@ ramstage-y += auxadc.c ramstage-y += ../common/cbmem.c emi.c ramstage-y += ../common/ddp.c ddp.c +ramstage-y += ../common/dsi.c dsi.c ramstage-y += ../common/gpio.c gpio.c ramstage-y += ../common/i2c.c i2c.c ramstage-y += ../common/mmu_operations.c mmu_operations.c diff --git a/src/soc/mediatek/mt8183/dsi.c b/src/soc/mediatek/mt8183/dsi.c new file mode 100644 index 0000000..daa06ca --- /dev/null +++ b/src/soc/mediatek/mt8183/dsi.c @@ -0,0 +1,88 @@ +/* + * This file is part of the coreboot project. + * + * Copyright 2019 MediaTek Inc. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +#include <assert.h> +#include <device/mmio.h> +#include <console/console.h> +#include <delay.h> +#include <soc/dsi.h> +#include <soc/pll.h> + +void mtk_dsi_configure_mipi_tx(int data_rate, u32 lanes) +{ + unsigned int txdiv, txdiv0, txdiv1; + u64 pcw; + + if (data_rate >= 2000) { + txdiv = 1; + txdiv0 = 0; + txdiv1 = 0; + } else if (data_rate >= 1000) { + txdiv = 2; + txdiv0 = 1; + txdiv1 = 0; + } else if (data_rate >= 500) { + txdiv = 4; + txdiv0 = 2; + txdiv1 = 0; + } else if (data_rate > 250) { + /* Be aware that 250 is a special case that must use txdiv=4. */ + txdiv = 8; + txdiv0 = 3; + txdiv1 = 0; + } else { + /* MIN = 125 */ + assert(data_rate >= MTK_DSI_DATA_RATE_MIN_MHZ); + txdiv = 16; + txdiv0 = 4; + txdiv1 = 0; + } + + clrbits_le32(&mipi_tx->pll_con4, BIT(11) | BIT(10)); + setbits_le32(&mipi_tx->pll_pwr, AD_DSI_PLL_SDM_PWR_ON); + udelay(30); + clrbits_le32(&mipi_tx->pll_pwr, AD_DSI_PLL_SDM_ISO_EN); + + pcw = (u64)data_rate * (1 << txdiv0) * (1 << txdiv1); + pcw <<= 24; + pcw /= CLK26M_HZ / MHz; + + write32(&mipi_tx->pll_con0, pcw); + clrsetbits_le32(&mipi_tx->pll_con1, RG_DSI_PLL_POSDIV, txdiv0 << 8); + udelay(30); + setbits_le32(&mipi_tx->pll_con1, RG_DSI_PLL_EN); + + /* BG_LPF_EN / BG_CORE_EN */ + write32(&mipi_tx->lane_con, 0x3fff0180); + udelay(40); + write32(&mipi_tx->lane_con, 0x3fff00c0); + + /* Switch OFF each Lane */ + clrbits_le32(&mipi_tx->d0_sw_ctl_en, DSI_SW_CTL_EN); + clrbits_le32(&mipi_tx->d1_sw_ctl_en, DSI_SW_CTL_EN); + clrbits_le32(&mipi_tx->d2_sw_ctl_en, DSI_SW_CTL_EN); + clrbits_le32(&mipi_tx->d3_sw_ctl_en, DSI_SW_CTL_EN); + clrbits_le32(&mipi_tx->ck_sw_ctl_en, DSI_SW_CTL_EN); + + setbits_le32(&mipi_tx->ck_ckmode_en, DSI_CK_CKMODE_EN); +} + +void mtk_dsi_reset(void) +{ + write32(&dsi0->dsi_force_commit, + DSI_FORCE_COMMIT_USE_MMSYS | DSI_FORCE_COMMIT_ALWAYS); + write32(&dsi0->dsi_con_ctrl, 1); + write32(&dsi0->dsi_con_ctrl, 0); +} diff --git a/src/soc/mediatek/mt8183/include/soc/addressmap.h b/src/soc/mediatek/mt8183/include/soc/addressmap.h index bb44f9b..c267a14 100644 --- a/src/soc/mediatek/mt8183/include/soc/addressmap.h +++ b/src/soc/mediatek/mt8183/include/soc/addressmap.h @@ -51,6 +51,7 @@ IOCFG_RT_BASE = IO_PHYS + 0x01C50000, IOCFG_RM_BASE = IO_PHYS + 0x01D20000, IOCFG_RB_BASE = IO_PHYS + 0x01D30000, + MIPITX_BASE = IO_PHYS + 0x01E50000, IOCFG_LB_BASE = IO_PHYS + 0x01E70000, IOCFG_LM_BASE = IO_PHYS + 0x01E80000, IOCFG_BL_BASE = IO_PHYS + 0x01E90000, @@ -69,6 +70,7 @@ DISP_AAL0_BASE = IO_PHYS + 0x04010000, DISP_GAMMA0_BASE = IO_PHYS + 0x04011000, DISP_DITHER0_BASE = IO_PHYS + 0x04012000, + DSI0_BASE = IO_PHYS + 0x04014000, DISP_MUTEX_BASE = IO_PHYS + 0x04016000, SMI_LARB0 = IO_PHYS + 0x04017000, SMI_BASE = IO_PHYS + 0x04019000, diff --git a/src/soc/mediatek/mt8183/include/soc/dsi.h b/src/soc/mediatek/mt8183/include/soc/dsi.h new file mode 100644 index 0000000..8813f94 --- /dev/null +++ b/src/soc/mediatek/mt8183/include/soc/dsi.h @@ -0,0 +1,68 @@ +/* + * This file is part of the coreboot project. + * + * Copyright 2015 MediaTek Inc. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +#ifndef SOC_MEDIATEK_MT8183_DSI_H +#define SOC_MEDIATEK_MT8183_DSI_H + +#include <soc/dsi_common.h> + +/* DSI features */ +#define MTK_DSI_MIPI_RATIO_NUMERATOR 100 +#define MTK_DSI_MIPI_RATIO_DENOMINATOR 100 +#define MTK_DSI_DATA_RATE_MIN_MHZ 125 +#define MTK_DSI_HAVE_SIZE_CON 1 +#define PIXEL_STREAM_CUSTOM_HEADER 0xb + +/* MIPITX is SOC specific and cannot live in common. */ + +/* MIPITX_REG */ +struct mipi_tx_regs { + u32 reserved0[3]; + u32 lane_con; + u32 reserved1[6]; + u32 pll_pwr; + u32 pll_con0; + u32 pll_con1; + u32 pll_con2; + u32 pll_con3; + u32 pll_con4; + u32 reserved2[65]; + u32 d2_sw_ctl_en; + u32 reserved3[63]; + u32 d0_sw_ctl_en; + u32 reserved4[56]; + u32 ck_ckmode_en; + u32 reserved5[6]; + u32 ck_sw_ctl_en; + u32 reserved6[63]; + u32 d1_sw_ctl_en; + u32 reserved7[63]; + u32 d3_sw_ctl_en; +}; + +check_member(mipi_tx_regs, pll_con4, 0x3c); +check_member(mipi_tx_regs, d3_sw_ctl_en, 0x544); +static struct mipi_tx_regs *const mipi_tx = (void *)MIPITX_BASE; + +/* Register values */ +#define DSI_CK_CKMODE_EN BIT(0) +#define DSI_SW_CTL_EN BIT(0) +#define AD_DSI_PLL_SDM_PWR_ON BIT(0) +#define AD_DSI_PLL_SDM_ISO_EN BIT(1) + +#define RG_DSI_PLL_EN BIT(4) +#define RG_DSI_PLL_POSDIV (0x7 << 8) + +#endif