From 9eb1b4167195c95c321297a66af001b06412332f Mon Sep 17 00:00:00 2001 From: Ajay Singh Parmar Date: Thu, 1 Aug 2019 12:29:17 -0700 Subject: [PATCH] disp: msm: dp: fix register read/write delays Currently, for every DP hardware register read/write, there is a string comparison to determine the execution mode. This adds up an extra delay while powering up/down which does a large number of register reads and writes. During stress testing and automation, this can cause an issue resulting in failures. Remove the unnecessary delays by using common APIs for register reads and writes. Switch these APIs only in case of execution mode change. Change-Id: I9403873a29b3466c606297b2aa386d0885bb2dc7 Signed-off-by: Ajay Singh Parmar --- msm/dp/dp_catalog.c | 822 +++++++++++++++++++-------------------- msm/dp/dp_catalog.h | 62 ++- msm/dp/dp_catalog_v200.c | 127 +++--- msm/dp/dp_catalog_v420.c | 139 +++---- 4 files changed, 526 insertions(+), 624 deletions(-) diff --git a/msm/dp/dp_catalog.c b/msm/dp/dp_catalog.c index cf3f89005f9a..e3cda301dab8 100644 --- a/msm/dp/dp_catalog.c +++ b/msm/dp/dp_catalog.c @@ -51,6 +51,14 @@ parser->get_io_buf(parser, #x); \ } +#define dp_read(x) ({ \ + catalog->read(catalog, io_data, x); \ +}) + +#define dp_write(x, y) ({ \ + catalog->write(catalog, io_data, x, y); \ +}) + static u8 const vm_pre_emphasis[4][4] = { {0x00, 0x0B, 0x12, 0xFF}, /* pe0, 0 db */ {0x00, 0x0A, 0x12, 0xFF}, /* pe1, 3.5 db */ @@ -71,34 +79,93 @@ enum dp_flush_bit { DP_DHDR_FLUSH, }; -struct dp_catalog_io { - struct dp_io_data *dp_ahb; - struct dp_io_data *dp_aux; - struct dp_io_data *dp_link; - struct dp_io_data *dp_p0; - struct dp_io_data *dp_phy; - struct dp_io_data *dp_ln_tx0; - struct dp_io_data *dp_ln_tx1; - struct dp_io_data *dp_mmss_cc; - struct dp_io_data *dp_pll; - struct dp_io_data *usb3_dp_com; - struct dp_io_data *hdcp_physical; - struct dp_io_data *dp_p1; - struct dp_io_data *dp_tcsr; -}; - /* audio related catalog functions */ struct dp_catalog_private { struct device *dev; struct dp_catalog_io io; struct dp_parser *parser; + u32 (*read)(struct dp_catalog_private *catalog, + struct dp_io_data *io_data, u32 offset); + void (*write)(struct dp_catalog_private *catlog, + struct dp_io_data *io_data, u32 offset, u32 data); + u32 (*audio_map)[DP_AUDIO_SDP_HEADER_MAX]; struct dp_catalog dp_catalog; char exe_mode[SZ_4]; }; +static u32 dp_read_sw(struct dp_catalog_private *catalog, + struct dp_io_data *io_data, u32 offset) +{ + u32 data = 0; + + if (io_data->buf) + memcpy(&data, io_data->buf + offset, sizeof(offset)); + + return data; +} + +static void dp_write_sw(struct dp_catalog_private *catalog, + struct dp_io_data *io_data, u32 offset, u32 data) +{ + if (io_data->buf) + memcpy(io_data->buf + offset, &data, sizeof(data)); +} + +static u32 dp_read_hw(struct dp_catalog_private *catalog, + struct dp_io_data *io_data, u32 offset) +{ + u32 data = 0; + + data = readl_relaxed(io_data->io.base + offset); + + return data; +} + +static void dp_write_hw(struct dp_catalog_private *catalog, + struct dp_io_data *io_data, u32 offset, u32 data) +{ + writel_relaxed(data, io_data->io.base + offset); +} + +static u32 dp_read_sub_sw(struct dp_catalog *dp_catalog, + struct dp_io_data *io_data, u32 offset) +{ + struct dp_catalog_private *catalog = container_of(dp_catalog, + struct dp_catalog_private, dp_catalog); + + return dp_read_sw(catalog, io_data, offset); +} + +static void dp_write_sub_sw(struct dp_catalog *dp_catalog, + struct dp_io_data *io_data, u32 offset, u32 data) +{ + struct dp_catalog_private *catalog = container_of(dp_catalog, + struct dp_catalog_private, dp_catalog); + + dp_write_sw(catalog, io_data, offset, data); +} + +static u32 dp_read_sub_hw(struct dp_catalog *dp_catalog, + struct dp_io_data *io_data, u32 offset) +{ + struct dp_catalog_private *catalog = container_of(dp_catalog, + struct dp_catalog_private, dp_catalog); + + return dp_read_hw(catalog, io_data, offset); +} + +static void dp_write_sub_hw(struct dp_catalog *dp_catalog, + struct dp_io_data *io_data, u32 offset, u32 data) +{ + struct dp_catalog_private *catalog = container_of(dp_catalog, + struct dp_catalog_private, dp_catalog); + + dp_write_hw(catalog, io_data, offset, data); +} + /* aux related catalog functions */ static u32 dp_catalog_aux_read_data(struct dp_catalog_aux *aux) { @@ -113,7 +180,7 @@ static u32 dp_catalog_aux_read_data(struct dp_catalog_aux *aux) catalog = dp_catalog_get_priv(aux); io_data = catalog->io.dp_aux; - return dp_read(catalog->exe_mode, io_data, DP_AUX_DATA); + return dp_read(DP_AUX_DATA); end: return 0; } @@ -133,7 +200,7 @@ static int dp_catalog_aux_write_data(struct dp_catalog_aux *aux) catalog = dp_catalog_get_priv(aux); io_data = catalog->io.dp_aux; - dp_write(catalog->exe_mode, io_data, DP_AUX_DATA, aux->data); + dp_write(DP_AUX_DATA, aux->data); end: return rc; } @@ -153,7 +220,7 @@ static int dp_catalog_aux_write_trans(struct dp_catalog_aux *aux) catalog = dp_catalog_get_priv(aux); io_data = catalog->io.dp_aux; - dp_write(catalog->exe_mode, io_data, DP_AUX_TRANS_CTRL, aux->data); + dp_write(DP_AUX_TRANS_CTRL, aux->data); end: return rc; } @@ -175,11 +242,11 @@ static int dp_catalog_aux_clear_trans(struct dp_catalog_aux *aux, bool read) io_data = catalog->io.dp_aux; if (read) { - data = dp_read(catalog->exe_mode, io_data, DP_AUX_TRANS_CTRL); + data = dp_read(DP_AUX_TRANS_CTRL); data &= ~BIT(9); - dp_write(catalog->exe_mode, io_data, DP_AUX_TRANS_CTRL, data); + dp_write(DP_AUX_TRANS_CTRL, data); } else { - dp_write(catalog->exe_mode, io_data, DP_AUX_TRANS_CTRL, 0); + dp_write(DP_AUX_TRANS_CTRL, 0); } end: return rc; @@ -199,13 +266,13 @@ static void dp_catalog_aux_clear_hw_interrupts(struct dp_catalog_aux *aux) catalog = dp_catalog_get_priv(aux); io_data = catalog->io.dp_phy; - data = dp_read(catalog->exe_mode, io_data, DP_PHY_AUX_INTERRUPT_STATUS); + data = dp_read(DP_PHY_AUX_INTERRUPT_STATUS); - dp_write(catalog->exe_mode, io_data, DP_PHY_AUX_INTERRUPT_CLEAR, 0x1f); + dp_write(DP_PHY_AUX_INTERRUPT_CLEAR, 0x1f); wmb(); /* make sure 0x1f is written before next write */ - dp_write(catalog->exe_mode, io_data, DP_PHY_AUX_INTERRUPT_CLEAR, 0x9f); + dp_write(DP_PHY_AUX_INTERRUPT_CLEAR, 0x9f); wmb(); /* make sure 0x9f is written before next write */ - dp_write(catalog->exe_mode, io_data, DP_PHY_AUX_INTERRUPT_CLEAR, 0); + dp_write(DP_PHY_AUX_INTERRUPT_CLEAR, 0); wmb(); /* make sure register is cleared */ } @@ -223,15 +290,15 @@ static void dp_catalog_aux_reset(struct dp_catalog_aux *aux) catalog = dp_catalog_get_priv(aux); io_data = catalog->io.dp_aux; - aux_ctrl = dp_read(catalog->exe_mode, io_data, DP_AUX_CTRL); + aux_ctrl = dp_read(DP_AUX_CTRL); aux_ctrl |= BIT(1); - dp_write(catalog->exe_mode, io_data, DP_AUX_CTRL, aux_ctrl); + dp_write(DP_AUX_CTRL, aux_ctrl); usleep_range(1000, 1010); /* h/w recommended delay */ aux_ctrl &= ~BIT(1); - dp_write(catalog->exe_mode, io_data, DP_AUX_CTRL, aux_ctrl); + dp_write(DP_AUX_CTRL, aux_ctrl); wmb(); /* make sure AUX reset is done here */ } @@ -249,18 +316,18 @@ static void dp_catalog_aux_enable(struct dp_catalog_aux *aux, bool enable) catalog = dp_catalog_get_priv(aux); io_data = catalog->io.dp_aux; - aux_ctrl = dp_read(catalog->exe_mode, io_data, DP_AUX_CTRL); + aux_ctrl = dp_read(DP_AUX_CTRL); if (enable) { aux_ctrl |= BIT(0); - dp_write(catalog->exe_mode, io_data, DP_AUX_CTRL, aux_ctrl); + dp_write(DP_AUX_CTRL, aux_ctrl); wmb(); /* make sure AUX module is enabled */ - dp_write(catalog->exe_mode, io_data, DP_TIMEOUT_COUNT, 0xffff); - dp_write(catalog->exe_mode, io_data, DP_AUX_LIMITS, 0xffff); + dp_write(DP_TIMEOUT_COUNT, 0xffff); + dp_write(DP_AUX_LIMITS, 0xffff); } else { aux_ctrl &= ~BIT(0); - dp_write(catalog->exe_mode, io_data, DP_AUX_CTRL, aux_ctrl); + dp_write(DP_AUX_CTRL, aux_ctrl); } } @@ -286,8 +353,7 @@ static void dp_catalog_aux_update_cfg(struct dp_catalog_aux *aux, dp_phy_aux_config_type_to_string(type), cfg[type].lut[current_index], cfg[type].lut[new_index]); - dp_write(catalog->exe_mode, io_data, cfg[type].offset, - cfg[type].lut[new_index]); + dp_write(cfg[type].offset, cfg[type].lut[new_index]); cfg[type].current_index = new_index; } @@ -306,31 +372,28 @@ static void dp_catalog_aux_setup(struct dp_catalog_aux *aux, catalog = dp_catalog_get_priv(aux); io_data = catalog->io.dp_phy; - dp_write(catalog->exe_mode, io_data, DP_PHY_PD_CTL, 0x65); + dp_write(DP_PHY_PD_CTL, 0x65); wmb(); /* make sure PD programming happened */ /* Turn on BIAS current for PHY/PLL */ io_data = catalog->io.dp_pll; - dp_write(catalog->exe_mode, io_data, QSERDES_COM_BIAS_EN_CLKBUFLR_EN, - 0x1b); + dp_write(QSERDES_COM_BIAS_EN_CLKBUFLR_EN, 0x1b); io_data = catalog->io.dp_phy; - dp_write(catalog->exe_mode, io_data, DP_PHY_PD_CTL, 0x02); + dp_write(DP_PHY_PD_CTL, 0x02); wmb(); /* make sure PD programming happened */ - dp_write(catalog->exe_mode, io_data, DP_PHY_PD_CTL, 0x7d); + dp_write(DP_PHY_PD_CTL, 0x7d); /* Turn on BIAS current for PHY/PLL */ io_data = catalog->io.dp_pll; - dp_write(catalog->exe_mode, io_data, QSERDES_COM_BIAS_EN_CLKBUFLR_EN, - 0x3f); + dp_write(QSERDES_COM_BIAS_EN_CLKBUFLR_EN, 0x3f); /* DP AUX CFG register programming */ io_data = catalog->io.dp_phy; for (i = 0; i < PHY_AUX_CFG_MAX; i++) - dp_write(catalog->exe_mode, io_data, cfg[i].offset, - cfg[i].lut[cfg[i].current_index]); + dp_write(cfg[i].offset, cfg[i].lut[cfg[i].current_index]); - dp_write(catalog->exe_mode, io_data, DP_PHY_AUX_INTERRUPT_MASK, 0x1F); + dp_write(DP_PHY_AUX_INTERRUPT_MASK, 0x1F); wmb(); /* make sure AUX configuration is done before enabling it */ } @@ -348,12 +411,12 @@ static void dp_catalog_aux_get_irq(struct dp_catalog_aux *aux, bool cmd_busy) catalog = dp_catalog_get_priv(aux); io_data = catalog->io.dp_ahb; - aux->isr = dp_read(catalog->exe_mode, io_data, DP_INTR_STATUS); + aux->isr = dp_read(DP_INTR_STATUS); aux->isr &= ~DP_INTR_MASK1; ack = aux->isr & DP_INTERRUPT_STATUS1; ack <<= 1; ack |= DP_INTR_MASK1; - dp_write(catalog->exe_mode, io_data, DP_INTR_STATUS, ack); + dp_write(DP_INTR_STATUS, ack); } static bool dp_catalog_ctrl_wait_for_phy_ready( @@ -415,20 +478,18 @@ static int dp_catalog_ctrl_late_phy_init(struct dp_catalog_ctrl *ctrl, } io_data = catalog->io.dp_ln_tx0; - dp_write(catalog->exe_mode, io_data, TXn_HIGHZ_DRVR_EN_V420, drvr0_en); - dp_write(catalog->exe_mode, io_data, - TXn_TRANSCEIVER_BIAS_EN_V420, bias0_en); + dp_write(TXn_HIGHZ_DRVR_EN_V420, drvr0_en); + dp_write(TXn_TRANSCEIVER_BIAS_EN_V420, bias0_en); io_data = catalog->io.dp_ln_tx1; - dp_write(catalog->exe_mode, io_data, TXn_HIGHZ_DRVR_EN_V420, drvr1_en); - dp_write(catalog->exe_mode, io_data, - TXn_TRANSCEIVER_BIAS_EN_V420, bias1_en); + dp_write(TXn_HIGHZ_DRVR_EN_V420, drvr1_en); + dp_write(TXn_TRANSCEIVER_BIAS_EN_V420, bias1_en); io_data = catalog->io.dp_phy; - dp_write(catalog->exe_mode, io_data, DP_PHY_CFG, 0x18); + dp_write(DP_PHY_CFG, 0x18); /* add hardware recommended delay */ udelay(2000); - dp_write(catalog->exe_mode, io_data, DP_PHY_CFG, 0x19); + dp_write(DP_PHY_CFG, 0x19); /* * Make sure all the register writes are completed before @@ -442,19 +503,19 @@ static int dp_catalog_ctrl_late_phy_init(struct dp_catalog_ctrl *ctrl, } io_data = catalog->io.dp_ln_tx0; - dp_write(catalog->exe_mode, io_data, TXn_TX_POL_INV_V420, 0x0a); + dp_write(TXn_TX_POL_INV_V420, 0x0a); io_data = catalog->io.dp_ln_tx1; - dp_write(catalog->exe_mode, io_data, TXn_TX_POL_INV_V420, 0x0a); + dp_write(TXn_TX_POL_INV_V420, 0x0a); io_data = catalog->io.dp_ln_tx0; - dp_write(catalog->exe_mode, io_data, TXn_TX_DRV_LVL_V420, 0x27); + dp_write(TXn_TX_DRV_LVL_V420, 0x27); io_data = catalog->io.dp_ln_tx1; - dp_write(catalog->exe_mode, io_data, TXn_TX_DRV_LVL_V420, 0x27); + dp_write(TXn_TX_DRV_LVL_V420, 0x27); io_data = catalog->io.dp_ln_tx0; - dp_write(catalog->exe_mode, io_data, TXn_TX_EMP_POST1_LVL, 0x20); + dp_write(TXn_TX_EMP_POST1_LVL, 0x20); io_data = catalog->io.dp_ln_tx1; - dp_write(catalog->exe_mode, io_data, TXn_TX_EMP_POST1_LVL, 0x20); + dp_write(TXn_TX_EMP_POST1_LVL, 0x20); /* Make sure the PHY register writes are done */ wmb(); lock_err: @@ -474,7 +535,7 @@ static u32 dp_catalog_ctrl_read_hdcp_status(struct dp_catalog_ctrl *ctrl) catalog = dp_catalog_get_priv(ctrl); io_data = catalog->io.dp_ahb; - return dp_read(catalog->exe_mode, io_data, DP_HDCP_STATUS); + return dp_read(DP_HDCP_STATUS); } static void dp_catalog_panel_sdp_update(struct dp_catalog_panel *panel) @@ -484,7 +545,7 @@ static void dp_catalog_panel_sdp_update(struct dp_catalog_panel *panel) u32 sdp_cfg3_off = 0; if (panel->stream_id >= DP_STREAM_MAX) { - pr_err("invalid stream_id:%d\n", panel->stream_id); + DP_ERR("invalid stream_id:%d\n", panel->stream_id); return; } @@ -494,10 +555,8 @@ static void dp_catalog_panel_sdp_update(struct dp_catalog_panel *panel) catalog = dp_catalog_get_priv(panel); io_data = catalog->io.dp_link; - dp_write(catalog->exe_mode, io_data, MMSS_DP_SDP_CFG3 + sdp_cfg3_off, - 0x01); - dp_write(catalog->exe_mode, io_data, MMSS_DP_SDP_CFG3 + sdp_cfg3_off, - 0x00); + dp_write(MMSS_DP_SDP_CFG3 + sdp_cfg3_off, 0x01); + dp_write(MMSS_DP_SDP_CFG3 + sdp_cfg3_off, 0x00); } static void dp_catalog_panel_setup_vsif_infoframe_sdp( @@ -526,8 +585,7 @@ static void dp_catalog_panel_setup_vsif_infoframe_sdp( parity = dp_header_get_parity(header); data = ((header << HEADER_BYTE_1_BIT) | (parity << PARITY_BYTE_1_BIT)); - dp_write(catalog->exe_mode, io_data, MMSS_DP_VSCEXT_0 + mst_offset, - data); + dp_write(MMSS_DP_VSCEXT_0 + mst_offset, data); memcpy(buf + off, &data, sizeof(data)); off += sizeof(data); @@ -536,18 +594,15 @@ static void dp_catalog_panel_setup_vsif_infoframe_sdp( parity = dp_header_get_parity(header); data = ((header << HEADER_BYTE_2_BIT) | (parity << PARITY_BYTE_2_BIT)); - dp_write(catalog->exe_mode, io_data, MMSS_DP_VSCEXT_1 + mst_offset, - data); + dp_write(MMSS_DP_VSCEXT_1 + mst_offset, data); /* HEADER BYTE 3 */ header = panel->dhdr_vsif_sdp.HB3; parity = dp_header_get_parity(header); data = ((header << HEADER_BYTE_3_BIT) | (parity << PARITY_BYTE_3_BIT)); - data |= dp_read(catalog->exe_mode, io_data, - MMSS_DP_VSCEXT_1 + mst_offset); - dp_write(catalog->exe_mode, io_data, MMSS_DP_VSCEXT_1 + mst_offset, - data); + data |= dp_read(MMSS_DP_VSCEXT_1 + mst_offset); + dp_write(MMSS_DP_VSCEXT_1 + mst_offset, data); memcpy(buf + off, &data, sizeof(data)); off += sizeof(data); @@ -583,7 +638,7 @@ static void dp_catalog_panel_setup_hdr_infoframe_sdp( parity = dp_header_get_parity(header); data = ((header << HEADER_BYTE_1_BIT) | (parity << PARITY_BYTE_1_BIT)); - dp_write(catalog->exe_mode, io_data, MMSS_DP_GENERIC2_0 + mst_offset, + dp_write(MMSS_DP_GENERIC2_0 + mst_offset, data); memcpy(buf + off, &data, sizeof(data)); off += sizeof(data); @@ -593,17 +648,15 @@ static void dp_catalog_panel_setup_hdr_infoframe_sdp( parity = dp_header_get_parity(header); data = ((header << HEADER_BYTE_2_BIT) | (parity << PARITY_BYTE_2_BIT)); - dp_write(catalog->exe_mode, io_data, MMSS_DP_GENERIC2_1 + mst_offset, - data); + dp_write(MMSS_DP_GENERIC2_1 + mst_offset, data); /* HEADER BYTE 3 */ header = panel->shdr_if_sdp.HB3; parity = dp_header_get_parity(header); data = ((header << HEADER_BYTE_3_BIT) | (parity << PARITY_BYTE_3_BIT)); - data |= dp_read(catalog->exe_mode, io_data, - MMSS_DP_VSCEXT_1 + mst_offset); - dp_write(catalog->exe_mode, io_data, MMSS_DP_GENERIC2_1 + mst_offset, + data |= dp_read(MMSS_DP_VSCEXT_1 + mst_offset); + dp_write(MMSS_DP_GENERIC2_1 + mst_offset, data); memcpy(buf + off, &data, sizeof(data)); off += sizeof(data); @@ -611,8 +664,7 @@ static void dp_catalog_panel_setup_hdr_infoframe_sdp( data = version; data |= length << 8; data |= hdr->eotf << 16; - dp_write(catalog->exe_mode, io_data, MMSS_DP_GENERIC2_2 + mst_offset, - data); + dp_write(MMSS_DP_GENERIC2_2 + mst_offset, data); memcpy(buf + off, &data, sizeof(data)); off += sizeof(data); @@ -620,8 +672,7 @@ static void dp_catalog_panel_setup_hdr_infoframe_sdp( (DP_GET_MSB(hdr->display_primaries_x[0]) << 8) | (DP_GET_LSB(hdr->display_primaries_y[0]) << 16) | (DP_GET_MSB(hdr->display_primaries_y[0]) << 24)); - dp_write(catalog->exe_mode, io_data, MMSS_DP_GENERIC2_3 + mst_offset, - data); + dp_write(MMSS_DP_GENERIC2_3 + mst_offset, data); memcpy(buf + off, &data, sizeof(data)); off += sizeof(data); @@ -629,8 +680,7 @@ static void dp_catalog_panel_setup_hdr_infoframe_sdp( (DP_GET_MSB(hdr->display_primaries_x[1]) << 8) | (DP_GET_LSB(hdr->display_primaries_y[1]) << 16) | (DP_GET_MSB(hdr->display_primaries_y[1]) << 24)); - dp_write(catalog->exe_mode, io_data, MMSS_DP_GENERIC2_4 + mst_offset, - data); + dp_write(MMSS_DP_GENERIC2_4 + mst_offset, data); memcpy(buf + off, &data, sizeof(data)); off += sizeof(data); @@ -638,8 +688,7 @@ static void dp_catalog_panel_setup_hdr_infoframe_sdp( (DP_GET_MSB(hdr->display_primaries_x[2]) << 8) | (DP_GET_LSB(hdr->display_primaries_y[2]) << 16) | (DP_GET_MSB(hdr->display_primaries_y[2]) << 24)); - dp_write(catalog->exe_mode, io_data, MMSS_DP_GENERIC2_5 + mst_offset, - data); + dp_write(MMSS_DP_GENERIC2_5 + mst_offset, data); memcpy(buf + off, &data, sizeof(data)); off += sizeof(data); @@ -647,8 +696,7 @@ static void dp_catalog_panel_setup_hdr_infoframe_sdp( (DP_GET_MSB(hdr->white_point_x) << 8) | (DP_GET_LSB(hdr->white_point_y) << 16) | (DP_GET_MSB(hdr->white_point_y) << 24)); - dp_write(catalog->exe_mode, io_data, MMSS_DP_GENERIC2_6 + mst_offset, - data); + dp_write(MMSS_DP_GENERIC2_6 + mst_offset, data); memcpy(buf + off, &data, sizeof(data)); off += sizeof(data); @@ -656,8 +704,7 @@ static void dp_catalog_panel_setup_hdr_infoframe_sdp( (DP_GET_MSB(hdr->max_luminance) << 8) | (DP_GET_LSB(hdr->min_luminance) << 16) | (DP_GET_MSB(hdr->min_luminance) << 24)); - dp_write(catalog->exe_mode, io_data, MMSS_DP_GENERIC2_7 + mst_offset, - data); + dp_write(MMSS_DP_GENERIC2_7 + mst_offset, data); memcpy(buf + off, &data, sizeof(data)); off += sizeof(data); @@ -665,14 +712,12 @@ static void dp_catalog_panel_setup_hdr_infoframe_sdp( (DP_GET_MSB(hdr->max_content_light_level) << 8) | (DP_GET_LSB(hdr->max_average_light_level) << 16) | (DP_GET_MSB(hdr->max_average_light_level) << 24)); - dp_write(catalog->exe_mode, io_data, MMSS_DP_GENERIC2_8 + mst_offset, - data); + dp_write(MMSS_DP_GENERIC2_8 + mst_offset, data); memcpy(buf + off, &data, sizeof(data)); off += sizeof(data); data = 0; - dp_write(catalog->exe_mode, io_data, MMSS_DP_GENERIC2_9 + mst_offset, - data); + dp_write(MMSS_DP_GENERIC2_9 + mst_offset, data); memcpy(buf + off, &data, sizeof(data)); off += sizeof(data); @@ -709,8 +754,7 @@ static void dp_catalog_panel_setup_vsc_sdp(struct dp_catalog_panel *panel) parity = dp_header_get_parity(header); data = ((header << HEADER_BYTE_1_BIT) | (parity << PARITY_BYTE_1_BIT)); - dp_write(catalog->exe_mode, io_data, MMSS_DP_GENERIC0_0 + mst_offset, - data); + dp_write(MMSS_DP_GENERIC0_0 + mst_offset, data); memcpy(buf + off, &data, sizeof(data)); off += sizeof(data); @@ -719,39 +763,32 @@ static void dp_catalog_panel_setup_vsc_sdp(struct dp_catalog_panel *panel) parity = dp_header_get_parity(header); data = ((header << HEADER_BYTE_2_BIT) | (parity << PARITY_BYTE_2_BIT)); - dp_write(catalog->exe_mode, io_data, MMSS_DP_GENERIC0_1 + mst_offset, - data); + dp_write(MMSS_DP_GENERIC0_1 + mst_offset, data); /* HEADER BYTE 3 */ header = panel->vsc_colorimetry.header.HB3; parity = dp_header_get_parity(header); data = ((header << HEADER_BYTE_3_BIT) | (parity << PARITY_BYTE_3_BIT)); - data |= dp_read(catalog->exe_mode, io_data, - MMSS_DP_GENERIC0_1 + mst_offset); - dp_write(catalog->exe_mode, io_data, MMSS_DP_GENERIC0_1 + mst_offset, - data); + data |= dp_read(MMSS_DP_GENERIC0_1 + mst_offset); + dp_write(MMSS_DP_GENERIC0_1 + mst_offset, data); memcpy(buf + off, &data, sizeof(data)); off += sizeof(data); data = 0; - dp_write(catalog->exe_mode, io_data, MMSS_DP_GENERIC0_2 + mst_offset, - data); + dp_write(MMSS_DP_GENERIC0_2 + mst_offset, data); memcpy(buf + off, &data, sizeof(data)); off += sizeof(data); - dp_write(catalog->exe_mode, io_data, MMSS_DP_GENERIC0_3 + mst_offset, - data); + dp_write(MMSS_DP_GENERIC0_3 + mst_offset, data); memcpy(buf + off, &data, sizeof(data)); off += sizeof(data); - dp_write(catalog->exe_mode, io_data, MMSS_DP_GENERIC0_4 + mst_offset, - data); + dp_write(MMSS_DP_GENERIC0_4 + mst_offset, data); memcpy(buf + off, &data, sizeof(data)); off += sizeof(data); - dp_write(catalog->exe_mode, io_data, MMSS_DP_GENERIC0_5 + mst_offset, - data); + dp_write(MMSS_DP_GENERIC0_5 + mst_offset, data); memcpy(buf + off, &data, sizeof(data)); off += sizeof(data); @@ -759,24 +796,20 @@ static void dp_catalog_panel_setup_vsc_sdp(struct dp_catalog_panel *panel) ((panel->vsc_colorimetry.data[17] & 0xFF) << 8) | ((panel->vsc_colorimetry.data[18] & 0x7) << 16); - dp_write(catalog->exe_mode, io_data, MMSS_DP_GENERIC0_6 + mst_offset, - data); + dp_write(MMSS_DP_GENERIC0_6 + mst_offset, data); memcpy(buf + off, &data, sizeof(data)); off += sizeof(data); data = 0; - dp_write(catalog->exe_mode, io_data, MMSS_DP_GENERIC0_7 + mst_offset, - data); + dp_write(MMSS_DP_GENERIC0_7 + mst_offset, data); memcpy(buf + off, &data, sizeof(data)); off += sizeof(data); - dp_write(catalog->exe_mode, io_data, MMSS_DP_GENERIC0_8 + mst_offset, - data); + dp_write(MMSS_DP_GENERIC0_8 + mst_offset, data); memcpy(buf + off, &data, sizeof(data)); off += sizeof(data); - dp_write(catalog->exe_mode, io_data, MMSS_DP_GENERIC0_9 + mst_offset, - data); + dp_write(MMSS_DP_GENERIC0_9 + mst_offset, data); memcpy(buf + off, &data, sizeof(data)); off += sizeof(data); @@ -806,21 +839,17 @@ static void dp_catalog_panel_config_sdp(struct dp_catalog_panel *panel, sdp_cfg2_off = MMSS_DP1_SDP_CFG2 - MMSS_DP_SDP_CFG2; } - cfg = dp_read(catalog->exe_mode, io_data, - MMSS_DP_SDP_CFG + sdp_cfg_off); - cfg2 = dp_read(catalog->exe_mode, io_data, - MMSS_DP_SDP_CFG2 + sdp_cfg2_off); + cfg = dp_read(MMSS_DP_SDP_CFG + sdp_cfg_off); + cfg2 = dp_read(MMSS_DP_SDP_CFG2 + sdp_cfg2_off); if (en) { /* GEN0_SDP_EN */ cfg |= BIT(17); - dp_write(catalog->exe_mode, io_data, - MMSS_DP_SDP_CFG + sdp_cfg_off, cfg); + dp_write(MMSS_DP_SDP_CFG + sdp_cfg_off, cfg); /* GENERIC0_SDPSIZE */ cfg2 |= BIT(16); - dp_write(catalog->exe_mode, io_data, - MMSS_DP_SDP_CFG2 + sdp_cfg2_off, cfg2); + dp_write(MMSS_DP_SDP_CFG2 + sdp_cfg2_off, cfg2); /* setup the GENERIC0 in case of en = true */ dp_catalog_panel_setup_vsc_sdp(panel); @@ -828,13 +857,11 @@ static void dp_catalog_panel_config_sdp(struct dp_catalog_panel *panel, } else { /* GEN0_SDP_EN */ cfg &= ~BIT(17); - dp_write(catalog->exe_mode, io_data, - MMSS_DP_SDP_CFG + sdp_cfg_off, cfg); + dp_write(MMSS_DP_SDP_CFG + sdp_cfg_off, cfg); /* GENERIC0_SDPSIZE */ cfg2 &= ~BIT(16); - dp_write(catalog->exe_mode, io_data, - MMSS_DP_SDP_CFG2 + sdp_cfg2_off, cfg2); + dp_write(MMSS_DP_SDP_CFG2 + sdp_cfg2_off, cfg2); } dp_catalog_panel_sdp_update(panel); @@ -847,12 +874,12 @@ static void dp_catalog_panel_config_misc(struct dp_catalog_panel *panel) u32 reg_offset = 0; if (!panel) { - pr_err("invalid input\n"); + DP_ERR("invalid input\n"); return; } if (panel->stream_id >= DP_STREAM_MAX) { - pr_err("invalid stream_id:%d\n", panel->stream_id); + DP_ERR("invalid stream_id:%d\n", panel->stream_id); return; } @@ -863,8 +890,7 @@ static void dp_catalog_panel_config_misc(struct dp_catalog_panel *panel) reg_offset = DP1_MISC1_MISC0 - DP_MISC1_MISC0; DP_DEBUG("misc settings = 0x%x\n", panel->misc_val); - dp_write(catalog->exe_mode, io_data, DP_MISC1_MISC0 + reg_offset, - panel->misc_val); + dp_write(DP_MISC1_MISC0 + reg_offset, panel->misc_val); } static int dp_catalog_panel_set_colorspace(struct dp_catalog_panel *panel, @@ -874,12 +900,12 @@ bool vsc_supported) struct dp_io_data *io_data; if (!panel) { - pr_err("invalid input\n"); + DP_ERR("invalid input\n"); return -EINVAL; } if (panel->stream_id >= DP_STREAM_MAX) { - pr_err("invalid stream_id:%d\n", panel->stream_id); + DP_ERR("invalid stream_id:%d\n", panel->stream_id); return -EINVAL; } @@ -926,12 +952,9 @@ static void dp_catalog_panel_config_hdr(struct dp_catalog_panel *panel, bool en, misc1_misc0_off = DP1_MISC1_MISC0 - DP_MISC1_MISC0; } - cfg = dp_read(catalog->exe_mode, io_data, - MMSS_DP_SDP_CFG + sdp_cfg_off); - cfg2 = dp_read(catalog->exe_mode, io_data, - MMSS_DP_SDP_CFG2 + sdp_cfg2_off); - misc = dp_read(catalog->exe_mode, io_data, - DP_MISC1_MISC0 + misc1_misc0_off); + cfg = dp_read(MMSS_DP_SDP_CFG + sdp_cfg_off); + cfg2 = dp_read(MMSS_DP_SDP_CFG2 + sdp_cfg2_off); + misc = dp_read(DP_MISC1_MISC0 + misc1_misc0_off); if (en) { if (dhdr_max_pkts) { @@ -939,20 +962,17 @@ static void dp_catalog_panel_config_hdr(struct dp_catalog_panel *panel, bool en, cfg |= BIT(16); /* DHDR_EN, DHDR_PACKET_LIMIT */ cfg4 = (dhdr_max_pkts << 1) | BIT(0); - dp_write(catalog->exe_mode, io_data, MMSS_DP_SDP_CFG4 - + sdp_cfg4_off, cfg4); + dp_write(MMSS_DP_SDP_CFG4 + sdp_cfg4_off, cfg4); dp_catalog_panel_setup_vsif_infoframe_sdp(panel); } /* GEN2_SDP_EN */ cfg |= BIT(19); - dp_write(catalog->exe_mode, io_data, - MMSS_DP_SDP_CFG + sdp_cfg_off, cfg); + dp_write(MMSS_DP_SDP_CFG + sdp_cfg_off, cfg); /* GENERIC2_SDPSIZE */ cfg2 |= BIT(20); - dp_write(catalog->exe_mode, io_data, - MMSS_DP_SDP_CFG2 + sdp_cfg2_off, cfg2); + dp_write(MMSS_DP_SDP_CFG2 + sdp_cfg2_off, cfg2); dp_catalog_panel_setup_hdr_infoframe_sdp(panel); @@ -963,18 +983,15 @@ static void dp_catalog_panel_config_hdr(struct dp_catalog_panel *panel, bool en, } else { /* VSCEXT_SDP_ENG */ cfg &= ~BIT(16) & ~BIT(19); - dp_write(catalog->exe_mode, io_data, - MMSS_DP_SDP_CFG + sdp_cfg_off, cfg); + dp_write(MMSS_DP_SDP_CFG + sdp_cfg_off, cfg); /* GENERIC0_SDPSIZE GENERIC2_SDPSIZE */ cfg2 &= ~BIT(20); - dp_write(catalog->exe_mode, io_data, - MMSS_DP_SDP_CFG2 + sdp_cfg2_off, cfg2); + dp_write(MMSS_DP_SDP_CFG2 + sdp_cfg2_off, cfg2); /* DHDR_EN, DHDR_PACKET_LIMIT */ cfg4 = 0; - dp_write(catalog->exe_mode, io_data, MMSS_DP_SDP_CFG4 - + sdp_cfg4_off, cfg4); + dp_write(MMSS_DP_SDP_CFG4 + sdp_cfg4_off, cfg4); DP_DEBUG("Disabled\n"); } @@ -999,11 +1016,9 @@ static void dp_catalog_panel_update_transfer_unit( catalog = dp_catalog_get_priv(panel); io_data = catalog->io.dp_link; - dp_write(catalog->exe_mode, io_data, DP_VALID_BOUNDARY, - panel->valid_boundary); - dp_write(catalog->exe_mode, io_data, DP_TU, panel->dp_tu); - dp_write(catalog->exe_mode, io_data, DP_VALID_BOUNDARY_2, - panel->valid_boundary2); + dp_write(DP_VALID_BOUNDARY, panel->valid_boundary); + dp_write(DP_TU, panel->dp_tu); + dp_write(DP_VALID_BOUNDARY_2, panel->valid_boundary2); } static void dp_catalog_ctrl_state_ctrl(struct dp_catalog_ctrl *ctrl, u32 state) @@ -1019,7 +1034,7 @@ static void dp_catalog_ctrl_state_ctrl(struct dp_catalog_ctrl *ctrl, u32 state) catalog = dp_catalog_get_priv(ctrl); io_data = catalog->io.dp_link; - dp_write(catalog->exe_mode, io_data, DP_STATE_CTRL, state); + dp_write(DP_STATE_CTRL, state); /* make sure to change the hw state */ wmb(); } @@ -1038,14 +1053,14 @@ static void dp_catalog_ctrl_config_ctrl(struct dp_catalog_ctrl *ctrl, u8 ln_cnt) catalog = dp_catalog_get_priv(ctrl); io_data = catalog->io.dp_link; - cfg = dp_read(catalog->exe_mode, io_data, DP_CONFIGURATION_CTRL); + cfg = dp_read(DP_CONFIGURATION_CTRL); cfg &= ~(BIT(4) | BIT(5)); cfg |= (ln_cnt - 1) << 4; - dp_write(catalog->exe_mode, io_data, DP_CONFIGURATION_CTRL, cfg); + dp_write(DP_CONFIGURATION_CTRL, cfg); - cfg = dp_read(catalog->exe_mode, io_data, DP_MAINLINK_CTRL); + cfg = dp_read(DP_MAINLINK_CTRL); cfg |= 0x02000000; - dp_write(catalog->exe_mode, io_data, DP_MAINLINK_CTRL, cfg); + dp_write(DP_MAINLINK_CTRL, cfg); DP_DEBUG("DP_MAINLINK_CTRL=0x%x\n", cfg); } @@ -1075,10 +1090,9 @@ static void dp_catalog_panel_config_ctrl(struct dp_catalog_panel *panel, DP_DEBUG("DP_CONFIGURATION_CTRL=0x%x\n", cfg); - dp_write(catalog->exe_mode, io_data, - DP_CONFIGURATION_CTRL + strm_reg_off, cfg); + dp_write(DP_CONFIGURATION_CTRL + strm_reg_off, cfg); - mainlink_ctrl = dp_read(catalog->exe_mode, io_data, DP_MAINLINK_CTRL); + mainlink_ctrl = dp_read(DP_MAINLINK_CTRL); if (panel->stream_id == DP_STREAM_0) io_data = catalog->io.dp_p0; @@ -1086,11 +1100,9 @@ static void dp_catalog_panel_config_ctrl(struct dp_catalog_panel *panel, io_data = catalog->io.dp_p1; if (mainlink_ctrl & BIT(8)) - dp_write(catalog->exe_mode, io_data, MMSS_DP_ASYNC_FIFO_CONFIG, - 0x01); + dp_write(MMSS_DP_ASYNC_FIFO_CONFIG, 0x01); else - dp_write(catalog->exe_mode, io_data, MMSS_DP_ASYNC_FIFO_CONFIG, - 0x00); + dp_write(MMSS_DP_ASYNC_FIFO_CONFIG, 0x00); } static void dp_catalog_panel_config_dto(struct dp_catalog_panel *panel, @@ -1125,12 +1137,12 @@ static void dp_catalog_panel_config_dto(struct dp_catalog_panel *panel, return; } - dsc_dto = dp_read(catalog->exe_mode, io_data, MMSS_DP_DSC_DTO); + dsc_dto = dp_read(MMSS_DP_DSC_DTO); if (ack) dsc_dto = BIT(1); else dsc_dto &= ~BIT(1); - dp_write(catalog->exe_mode, io_data, MMSS_DP_DSC_DTO, dsc_dto); + dp_write(MMSS_DP_DSC_DTO, dsc_dto); } static void dp_catalog_ctrl_lane_mapping(struct dp_catalog_ctrl *ctrl, @@ -1147,8 +1159,7 @@ static void dp_catalog_ctrl_lane_mapping(struct dp_catalog_ctrl *ctrl, catalog = dp_catalog_get_priv(ctrl); io_data = catalog->io.dp_link; - dp_write(catalog->exe_mode, io_data, DP_LOGICAL2PHYSICAL_LANE_MAPPING, - 0xe4); + dp_write(DP_LOGICAL2PHYSICAL_LANE_MAPPING, 0xe4); } static void dp_catalog_ctrl_lane_pnswap(struct dp_catalog_ctrl *ctrl, @@ -1169,10 +1180,10 @@ static void dp_catalog_ctrl_lane_pnswap(struct dp_catalog_ctrl *ctrl, cfg1 |= ((ln_pnswap >> 3) & 0x1) << 2; io_data = catalog->io.dp_ln_tx0; - dp_write(catalog->exe_mode, io_data, TXn_TX_POL_INV, cfg0); + dp_write(TXn_TX_POL_INV, cfg0); io_data = catalog->io.dp_ln_tx1; - dp_write(catalog->exe_mode, io_data, TXn_TX_POL_INV, cfg1); + dp_write(TXn_TX_POL_INV, cfg1); } static void dp_catalog_ctrl_mainlink_ctrl(struct dp_catalog_ctrl *ctrl, @@ -1191,29 +1202,23 @@ static void dp_catalog_ctrl_mainlink_ctrl(struct dp_catalog_ctrl *ctrl, io_data = catalog->io.dp_link; if (enable) { - reg = dp_read(catalog->exe_mode, io_data, DP_MAINLINK_CTRL); + reg = dp_read(DP_MAINLINK_CTRL); mainlink_ctrl = reg & ~(0x03); - dp_write(catalog->exe_mode, io_data, DP_MAINLINK_CTRL, - mainlink_ctrl); + dp_write(DP_MAINLINK_CTRL, mainlink_ctrl); wmb(); /* make sure mainlink is turned off before reset */ mainlink_ctrl = reg | 0x02; - dp_write(catalog->exe_mode, io_data, DP_MAINLINK_CTRL, - mainlink_ctrl); + dp_write(DP_MAINLINK_CTRL, mainlink_ctrl); wmb(); /* make sure mainlink entered reset */ mainlink_ctrl = reg & ~(0x03); - dp_write(catalog->exe_mode, io_data, DP_MAINLINK_CTRL, - mainlink_ctrl); + dp_write(DP_MAINLINK_CTRL, mainlink_ctrl); wmb(); /* make sure mainlink reset done */ mainlink_ctrl = reg | 0x01; - dp_write(catalog->exe_mode, io_data, DP_MAINLINK_CTRL, - mainlink_ctrl); + dp_write(DP_MAINLINK_CTRL, mainlink_ctrl); wmb(); /* make sure mainlink turned on */ } else { - mainlink_ctrl = dp_read(catalog->exe_mode, io_data, - DP_MAINLINK_CTRL); + mainlink_ctrl = dp_read(DP_MAINLINK_CTRL); mainlink_ctrl &= ~BIT(0); - dp_write(catalog->exe_mode, io_data, DP_MAINLINK_CTRL, - mainlink_ctrl); + dp_write(DP_MAINLINK_CTRL, mainlink_ctrl); } } @@ -1246,10 +1251,8 @@ static void dp_catalog_panel_config_msa(struct dp_catalog_panel *panel, if (panel->stream_id == DP_STREAM_1) strm_reg_off = MMSS_DP_PIXEL1_M - MMSS_DP_PIXEL_M; - pixel_m = dp_read(catalog->exe_mode, io_data, - MMSS_DP_PIXEL_M + strm_reg_off); - pixel_n = dp_read(catalog->exe_mode, io_data, - MMSS_DP_PIXEL_N + strm_reg_off); + pixel_m = dp_read(MMSS_DP_PIXEL_M + strm_reg_off); + pixel_n = dp_read(MMSS_DP_PIXEL_N + strm_reg_off); DP_DEBUG("pixel_m=0x%x, pixel_n=0x%x\n", pixel_m, pixel_n); mvid = (pixel_m & 0xFFFF) * 5; @@ -1282,10 +1285,8 @@ static void dp_catalog_panel_config_msa(struct dp_catalog_panel *panel, } DP_DEBUG("mvid=0x%x, nvid=0x%x\n", mvid, nvid); - dp_write(catalog->exe_mode, io_data, DP_SOFTWARE_MVID + mvid_reg_off, - mvid); - dp_write(catalog->exe_mode, io_data, DP_SOFTWARE_NVID + nvid_reg_off, - nvid); + dp_write(DP_SOFTWARE_MVID + mvid_reg_off, mvid); + dp_write(DP_SOFTWARE_NVID + nvid_reg_off, nvid); } static void dp_catalog_ctrl_set_pattern(struct dp_catalog_ctrl *ctrl, @@ -1320,12 +1321,12 @@ static void dp_catalog_ctrl_set_pattern(struct dp_catalog_ctrl *ctrl, } DP_DEBUG("hw: bit=%d train=%d\n", bit, pattern); - dp_write(catalog->exe_mode, io_data, DP_STATE_CTRL, BIT(bit)); + dp_write(DP_STATE_CTRL, BIT(bit)); bit += link_training_offset; while (cnt--) { - data = dp_read(catalog->exe_mode, io_data, DP_MAINLINK_READY); + data = dp_read(DP_MAINLINK_READY); if (data & BIT(bit)) break; } @@ -1348,27 +1349,24 @@ static void dp_catalog_ctrl_usb_reset(struct dp_catalog_ctrl *ctrl, bool flip) io_data = catalog->io.usb3_dp_com; - dp_write(catalog->exe_mode, io_data, USB3_DP_COM_RESET_OVRD_CTRL, 0x0a); - dp_write(catalog->exe_mode, io_data, USB3_DP_COM_PHY_MODE_CTRL, 0x02); - dp_write(catalog->exe_mode, io_data, USB3_DP_COM_SW_RESET, 0x01); + dp_write(USB3_DP_COM_RESET_OVRD_CTRL, 0x0a); + dp_write(USB3_DP_COM_PHY_MODE_CTRL, 0x02); + dp_write(USB3_DP_COM_SW_RESET, 0x01); /* make sure usb3 com phy software reset is done */ wmb(); - if (!flip) { /* CC1 */ - dp_write(catalog->exe_mode, io_data, USB3_DP_COM_TYPEC_CTRL, - 0x02); - } else { /* CC2 */ - dp_write(catalog->exe_mode, io_data, USB3_DP_COM_TYPEC_CTRL, - 0x03); - } + if (!flip) /* CC1 */ + dp_write(USB3_DP_COM_TYPEC_CTRL, 0x02); + else /* CC2 */ + dp_write(USB3_DP_COM_TYPEC_CTRL, 0x03); - dp_write(catalog->exe_mode, io_data, USB3_DP_COM_SWI_CTRL, 0x00); - dp_write(catalog->exe_mode, io_data, USB3_DP_COM_SW_RESET, 0x00); + dp_write(USB3_DP_COM_SWI_CTRL, 0x00); + dp_write(USB3_DP_COM_SW_RESET, 0x00); /* make sure the software reset is done */ wmb(); - dp_write(catalog->exe_mode, io_data, USB3_DP_COM_POWER_DOWN_CTRL, 0x01); - dp_write(catalog->exe_mode, io_data, USB3_DP_COM_RESET_OVRD_CTRL, 0x00); + dp_write(USB3_DP_COM_POWER_DOWN_CTRL, 0x01); + dp_write(USB3_DP_COM_RESET_OVRD_CTRL, 0x00); /* make sure phy is brought out of reset */ wmb(); } @@ -1397,46 +1395,40 @@ static void dp_catalog_panel_tpg_cfg(struct dp_catalog_panel *panel, io_data = catalog->io.dp_p1; if (!enable) { - dp_write(catalog->exe_mode, io_data, MMSS_DP_TPG_MAIN_CONTROL, - 0x0); - dp_write(catalog->exe_mode, io_data, MMSS_DP_BIST_ENABLE, 0x0); - dp_write(catalog->exe_mode, io_data, MMSS_DP_TIMING_ENGINE_EN, - 0x0); + dp_write(MMSS_DP_TPG_MAIN_CONTROL, 0x0); + dp_write(MMSS_DP_BIST_ENABLE, 0x0); + dp_write(MMSS_DP_TIMING_ENGINE_EN, 0x0); wmb(); /* ensure Timing generator is turned off */ return; } - dp_write(catalog->exe_mode, io_data, MMSS_DP_INTF_CONFIG, 0x0); - dp_write(catalog->exe_mode, io_data, MMSS_DP_INTF_HSYNC_CTL, + dp_write(MMSS_DP_INTF_CONFIG, 0x0); + dp_write(MMSS_DP_INTF_HSYNC_CTL, panel->hsync_ctl); - dp_write(catalog->exe_mode, io_data, MMSS_DP_INTF_VSYNC_PERIOD_F0, + dp_write(MMSS_DP_INTF_VSYNC_PERIOD_F0, panel->vsync_period * panel->hsync_period); - dp_write(catalog->exe_mode, io_data, MMSS_DP_INTF_VSYNC_PULSE_WIDTH_F0, + dp_write(MMSS_DP_INTF_VSYNC_PULSE_WIDTH_F0, panel->v_sync_width * panel->hsync_period); - dp_write(catalog->exe_mode, io_data, MMSS_DP_INTF_VSYNC_PERIOD_F1, 0); - dp_write(catalog->exe_mode, io_data, MMSS_DP_INTF_VSYNC_PULSE_WIDTH_F1, - 0); - dp_write(catalog->exe_mode, io_data, MMSS_DP_INTF_DISPLAY_HCTL, - panel->display_hctl); - dp_write(catalog->exe_mode, io_data, MMSS_DP_INTF_ACTIVE_HCTL, 0); - dp_write(catalog->exe_mode, io_data, MMSS_INTF_DISPLAY_V_START_F0, - panel->display_v_start); - dp_write(catalog->exe_mode, io_data, MMSS_DP_INTF_DISPLAY_V_END_F0, - panel->display_v_end); - dp_write(catalog->exe_mode, io_data, MMSS_INTF_DISPLAY_V_START_F1, 0); - dp_write(catalog->exe_mode, io_data, MMSS_DP_INTF_DISPLAY_V_END_F1, 0); - dp_write(catalog->exe_mode, io_data, MMSS_DP_INTF_ACTIVE_V_START_F0, 0); - dp_write(catalog->exe_mode, io_data, MMSS_DP_INTF_ACTIVE_V_END_F0, 0); - dp_write(catalog->exe_mode, io_data, MMSS_DP_INTF_ACTIVE_V_START_F1, 0); - dp_write(catalog->exe_mode, io_data, MMSS_DP_INTF_ACTIVE_V_END_F1, 0); - dp_write(catalog->exe_mode, io_data, MMSS_DP_INTF_POLARITY_CTL, 0); + dp_write(MMSS_DP_INTF_VSYNC_PERIOD_F1, 0); + dp_write(MMSS_DP_INTF_VSYNC_PULSE_WIDTH_F1, 0); + dp_write(MMSS_DP_INTF_DISPLAY_HCTL, panel->display_hctl); + dp_write(MMSS_DP_INTF_ACTIVE_HCTL, 0); + dp_write(MMSS_INTF_DISPLAY_V_START_F0, panel->display_v_start); + dp_write(MMSS_DP_INTF_DISPLAY_V_END_F0, panel->display_v_end); + dp_write(MMSS_INTF_DISPLAY_V_START_F1, 0); + dp_write(MMSS_DP_INTF_DISPLAY_V_END_F1, 0); + dp_write(MMSS_DP_INTF_ACTIVE_V_START_F0, 0); + dp_write(MMSS_DP_INTF_ACTIVE_V_END_F0, 0); + dp_write(MMSS_DP_INTF_ACTIVE_V_START_F1, 0); + dp_write(MMSS_DP_INTF_ACTIVE_V_END_F1, 0); + dp_write(MMSS_DP_INTF_POLARITY_CTL, 0); wmb(); /* ensure TPG registers are programmed */ - dp_write(catalog->exe_mode, io_data, MMSS_DP_TPG_MAIN_CONTROL, 0x100); - dp_write(catalog->exe_mode, io_data, MMSS_DP_TPG_VIDEO_CONFIG, 0x5); + dp_write(MMSS_DP_TPG_MAIN_CONTROL, 0x100); + dp_write(MMSS_DP_TPG_VIDEO_CONFIG, 0x5); wmb(); /* ensure TPG config is programmed */ - dp_write(catalog->exe_mode, io_data, MMSS_DP_BIST_ENABLE, 0x1); - dp_write(catalog->exe_mode, io_data, MMSS_DP_TIMING_ENGINE_EN, 0x1); + dp_write(MMSS_DP_BIST_ENABLE, 0x1); + dp_write(MMSS_DP_TIMING_ENGINE_EN, 0x1); wmb(); /* ensure Timing generator is turned on */ } @@ -1464,16 +1456,15 @@ static void dp_catalog_panel_dsc_cfg(struct dp_catalog_panel *panel) else io_data = catalog->io.dp_p1; - dp_write(catalog->exe_mode, io_data, MMSS_DP_DSC_DTO_COUNT, - panel->dsc.dto_count); + dp_write(MMSS_DP_DSC_DTO_COUNT, panel->dsc.dto_count); - reg = dp_read(catalog->exe_mode, io_data, MMSS_DP_DSC_DTO); + reg = dp_read(MMSS_DP_DSC_DTO); if (panel->dsc.dto_en) { reg |= BIT(0); reg |= (panel->dsc.dto_n << 8); reg |= (panel->dsc.dto_d << 16); } - dp_write(catalog->exe_mode, io_data, MMSS_DP_DSC_DTO, reg); + dp_write(MMSS_DP_DSC_DTO, reg); io_data = catalog->io.dp_link; @@ -1482,17 +1473,15 @@ static void dp_catalog_panel_dsc_cfg(struct dp_catalog_panel *panel) else offset = DP1_COMPRESSION_MODE_CTRL - DP_COMPRESSION_MODE_CTRL; - dp_write(catalog->exe_mode, io_data, DP_PPS_HB_0_3 + offset, 0x7F1000); - dp_write(catalog->exe_mode, io_data, DP_PPS_PB_0_3 + offset, 0xA22300); + dp_write(DP_PPS_HB_0_3 + offset, 0x7F1000); + dp_write(DP_PPS_PB_0_3 + offset, 0xA22300); for (i = 0; i < panel->dsc.parity_word_len; i++) - dp_write(catalog->exe_mode, io_data, - DP_PPS_PB_4_7 + (i << 2) + offset, + dp_write(DP_PPS_PB_4_7 + (i << 2) + offset, panel->dsc.parity_word[i]); for (i = 0; i < panel->dsc.pps_word_len; i++) - dp_write(catalog->exe_mode, io_data, - DP_PPS_PPS_0_3 + (i << 2) + offset, + dp_write(DP_PPS_PPS_0_3 + (i << 2) + offset, panel->dsc.pps_word[i]); reg = 0; @@ -1503,8 +1492,7 @@ static void dp_catalog_panel_dsc_cfg(struct dp_catalog_panel *panel) reg |= (panel->dsc.bytes_per_pkt << 16); reg |= (panel->dsc.be_in_lane << 10); } - dp_write(catalog->exe_mode, io_data, - DP_COMPRESSION_MODE_CTRL + offset, reg); + dp_write(DP_COMPRESSION_MODE_CTRL + offset, reg); DP_DEBUG("compression:0x%x for stream:%d\n", reg, panel->stream_id); @@ -1535,9 +1523,9 @@ static void dp_catalog_panel_dp_flush(struct dp_catalog_panel *panel, else offset = MMSS_DP1_FLUSH - MMSS_DP_FLUSH; - dp_flush = dp_read(catalog->exe_mode, io_data, MMSS_DP_FLUSH + offset); + dp_flush = dp_read(MMSS_DP_FLUSH + offset); dp_flush |= BIT(flush_bit); - dp_write(catalog->exe_mode, io_data, MMSS_DP_FLUSH + offset, dp_flush); + dp_write(MMSS_DP_FLUSH + offset, dp_flush); } static void dp_catalog_panel_pps_flush(struct dp_catalog_panel *panel) @@ -1572,7 +1560,7 @@ static bool dp_catalog_panel_dhdr_busy(struct dp_catalog_panel *panel) else offset = MMSS_DP1_FLUSH - MMSS_DP_FLUSH; - dp_flush = dp_read(catalog->exe_mode, io_data, MMSS_DP_FLUSH + offset); + dp_flush = dp_read(MMSS_DP_FLUSH + offset); return dp_flush & BIT(DP_DHDR_FLUSH) ? true : false; } @@ -1591,14 +1579,14 @@ static void dp_catalog_ctrl_reset(struct dp_catalog_ctrl *ctrl) catalog = dp_catalog_get_priv(ctrl); io_data = catalog->io.dp_ahb; - sw_reset = dp_read(catalog->exe_mode, io_data, DP_SW_RESET); + sw_reset = dp_read(DP_SW_RESET); sw_reset |= BIT(0); - dp_write(catalog->exe_mode, io_data, DP_SW_RESET, sw_reset); + dp_write(DP_SW_RESET, sw_reset); usleep_range(1000, 1010); /* h/w recommended delay */ sw_reset &= ~BIT(0); - dp_write(catalog->exe_mode, io_data, DP_SW_RESET, sw_reset); + dp_write(DP_SW_RESET, sw_reset); } static bool dp_catalog_ctrl_mainlink_ready(struct dp_catalog_ctrl *ctrl) @@ -1618,7 +1606,7 @@ static bool dp_catalog_ctrl_mainlink_ready(struct dp_catalog_ctrl *ctrl) while (--cnt) { /* DP_MAINLINK_READY */ - data = dp_read(catalog->exe_mode, io_data, DP_MAINLINK_READY); + data = dp_read(DP_MAINLINK_READY); if (data & BIT(0)) return true; @@ -1644,16 +1632,13 @@ static void dp_catalog_ctrl_enable_irq(struct dp_catalog_ctrl *ctrl, io_data = catalog->io.dp_ahb; if (enable) { - dp_write(catalog->exe_mode, io_data, DP_INTR_STATUS, - DP_INTR_MASK1); - dp_write(catalog->exe_mode, io_data, DP_INTR_STATUS2, - DP_INTR_MASK2); - dp_write(catalog->exe_mode, io_data, DP_INTR_STATUS5, - DP_INTR_MASK5); + dp_write(DP_INTR_STATUS, DP_INTR_MASK1); + dp_write(DP_INTR_STATUS2, DP_INTR_MASK2); + dp_write(DP_INTR_STATUS5, DP_INTR_MASK5); } else { - dp_write(catalog->exe_mode, io_data, DP_INTR_STATUS, 0x00); - dp_write(catalog->exe_mode, io_data, DP_INTR_STATUS2, 0x00); - dp_write(catalog->exe_mode, io_data, DP_INTR_STATUS5, 0x00); + dp_write(DP_INTR_STATUS, 0x00); + dp_write(DP_INTR_STATUS2, 0x00); + dp_write(DP_INTR_STATUS5, 0x00); } } @@ -1671,19 +1656,19 @@ static void dp_catalog_ctrl_get_interrupt(struct dp_catalog_ctrl *ctrl) catalog = dp_catalog_get_priv(ctrl); io_data = catalog->io.dp_ahb; - ctrl->isr = dp_read(catalog->exe_mode, io_data, DP_INTR_STATUS2); + ctrl->isr = dp_read(DP_INTR_STATUS2); ctrl->isr &= ~DP_INTR_MASK2; ack = ctrl->isr & DP_INTERRUPT_STATUS2; ack <<= 1; ack |= DP_INTR_MASK2; - dp_write(catalog->exe_mode, io_data, DP_INTR_STATUS2, ack); + dp_write(DP_INTR_STATUS2, ack); - ctrl->isr5 = dp_read(catalog->exe_mode, io_data, DP_INTR_STATUS5); + ctrl->isr5 = dp_read(DP_INTR_STATUS5); ctrl->isr5 &= ~DP_INTR_MASK5; ack = ctrl->isr5 & DP_INTERRUPT_STATUS5; ack <<= 1; ack |= DP_INTR_MASK5; - dp_write(catalog->exe_mode, io_data, DP_INTR_STATUS5, ack); + dp_write(DP_INTR_STATUS5, ack); } static void dp_catalog_ctrl_phy_reset(struct dp_catalog_ctrl *ctrl) @@ -1699,9 +1684,9 @@ static void dp_catalog_ctrl_phy_reset(struct dp_catalog_ctrl *ctrl) catalog = dp_catalog_get_priv(ctrl); io_data = catalog->io.dp_ahb; - dp_write(catalog->exe_mode, io_data, DP_PHY_CTRL, 0x5); /* bit 0 & 2 */ + dp_write(DP_PHY_CTRL, 0x5); /* bit 0 & 2 */ usleep_range(1000, 1010); /* h/w recommended delay */ - dp_write(catalog->exe_mode, io_data, DP_PHY_CTRL, 0x0); + dp_write(DP_PHY_CTRL, 0x0); wmb(); /* make sure PHY reset done */ } @@ -1726,7 +1711,7 @@ static void dp_catalog_ctrl_phy_lane_cfg(struct dp_catalog_ctrl *ctrl, info |= ((orientation & 0x0F) << 4); DP_DEBUG("Shared Info = 0x%x\n", info); - dp_write(catalog->exe_mode, io_data, DP_PHY_SPARE0, info); + dp_write(DP_PHY_SPARE0, info); } static void dp_catalog_ctrl_update_vx_px(struct dp_catalog_ctrl *ctrl, @@ -1751,12 +1736,12 @@ static void dp_catalog_ctrl_update_vx_px(struct dp_catalog_ctrl *ctrl, /* program default setting first */ io_data = catalog->io.dp_ln_tx0; - dp_write(catalog->exe_mode, io_data, TXn_TX_DRV_LVL, 0x2A); - dp_write(catalog->exe_mode, io_data, TXn_TX_EMP_POST1_LVL, 0x20); + dp_write(TXn_TX_DRV_LVL, 0x2A); + dp_write(TXn_TX_EMP_POST1_LVL, 0x20); io_data = catalog->io.dp_ln_tx1; - dp_write(catalog->exe_mode, io_data, TXn_TX_DRV_LVL, 0x2A); - dp_write(catalog->exe_mode, io_data, TXn_TX_EMP_POST1_LVL, 0x20); + dp_write(TXn_TX_DRV_LVL, 0x2A); + dp_write(TXn_TX_EMP_POST1_LVL, 0x20); /* Enable MUX to use Cursor values from these registers */ value0 |= BIT(5); @@ -1765,14 +1750,12 @@ static void dp_catalog_ctrl_update_vx_px(struct dp_catalog_ctrl *ctrl, /* Configure host and panel only if both values are allowed */ if (value0 != 0xFF && value1 != 0xFF) { io_data = catalog->io.dp_ln_tx0; - dp_write(catalog->exe_mode, io_data, TXn_TX_DRV_LVL, value0); - dp_write(catalog->exe_mode, io_data, TXn_TX_EMP_POST1_LVL, - value1); + dp_write(TXn_TX_DRV_LVL, value0); + dp_write(TXn_TX_EMP_POST1_LVL, value1); io_data = catalog->io.dp_ln_tx1; - dp_write(catalog->exe_mode, io_data, TXn_TX_DRV_LVL, value0); - dp_write(catalog->exe_mode, io_data, TXn_TX_EMP_POST1_LVL, - value1); + dp_write(TXn_TX_DRV_LVL, value0); + dp_write(TXn_TX_EMP_POST1_LVL, value1); DP_DEBUG("hw: vx_value=0x%x px_value=0x%x\n", value0, value1); @@ -1798,58 +1781,51 @@ static void dp_catalog_ctrl_send_phy_pattern(struct dp_catalog_ctrl *ctrl, io_data = catalog->io.dp_link; - dp_write(catalog->exe_mode, io_data, DP_STATE_CTRL, 0x0); + dp_write(DP_STATE_CTRL, 0x0); switch (pattern) { case DP_TEST_PHY_PATTERN_D10_2_NO_SCRAMBLING: - dp_write(catalog->exe_mode, io_data, DP_STATE_CTRL, 0x1); + dp_write(DP_STATE_CTRL, 0x1); break; case DP_TEST_PHY_PATTERN_SYMBOL_ERR_MEASUREMENT_CNT: value &= ~(1 << 16); - dp_write(catalog->exe_mode, io_data, - DP_HBR2_COMPLIANCE_SCRAMBLER_RESET, value); + dp_write(DP_HBR2_COMPLIANCE_SCRAMBLER_RESET, value); value |= 0xFC; - dp_write(catalog->exe_mode, io_data, - DP_HBR2_COMPLIANCE_SCRAMBLER_RESET, value); - dp_write(catalog->exe_mode, io_data, DP_MAINLINK_LEVELS, 0x2); - dp_write(catalog->exe_mode, io_data, DP_STATE_CTRL, 0x10); + dp_write(DP_HBR2_COMPLIANCE_SCRAMBLER_RESET, value); + dp_write(DP_MAINLINK_LEVELS, 0x2); + dp_write(DP_STATE_CTRL, 0x10); break; case DP_TEST_PHY_PATTERN_PRBS7: - dp_write(catalog->exe_mode, io_data, DP_STATE_CTRL, 0x20); + dp_write(DP_STATE_CTRL, 0x20); break; case DP_TEST_PHY_PATTERN_80_BIT_CUSTOM_PATTERN: - dp_write(catalog->exe_mode, io_data, DP_STATE_CTRL, 0x40); + dp_write(DP_STATE_CTRL, 0x40); /* 00111110000011111000001111100000 */ - dp_write(catalog->exe_mode, io_data, - DP_TEST_80BIT_CUSTOM_PATTERN_REG0, 0x3E0F83E0); + dp_write(DP_TEST_80BIT_CUSTOM_PATTERN_REG0, 0x3E0F83E0); /* 00001111100000111110000011111000 */ - dp_write(catalog->exe_mode, io_data, - DP_TEST_80BIT_CUSTOM_PATTERN_REG1, 0x0F83E0F8); + dp_write(DP_TEST_80BIT_CUSTOM_PATTERN_REG1, 0x0F83E0F8); /* 1111100000111110 */ - dp_write(catalog->exe_mode, io_data, - DP_TEST_80BIT_CUSTOM_PATTERN_REG2, 0x0000F83E); + dp_write(DP_TEST_80BIT_CUSTOM_PATTERN_REG2, 0x0000F83E); break; case DP_TEST_PHY_PATTERN_CP2520_PATTERN_1: - value = dp_read(catalog->exe_mode, io_data, DP_MAINLINK_CTRL); + value = dp_read(DP_MAINLINK_CTRL); value &= ~BIT(4); - dp_write(catalog->exe_mode, io_data, DP_MAINLINK_CTRL, value); + dp_write(DP_MAINLINK_CTRL, value); value = BIT(16); - dp_write(catalog->exe_mode, io_data, - DP_HBR2_COMPLIANCE_SCRAMBLER_RESET, value); + dp_write(DP_HBR2_COMPLIANCE_SCRAMBLER_RESET, value); value |= 0xFC; - dp_write(catalog->exe_mode, io_data, - DP_HBR2_COMPLIANCE_SCRAMBLER_RESET, value); - dp_write(catalog->exe_mode, io_data, DP_MAINLINK_LEVELS, 0x2); - dp_write(catalog->exe_mode, io_data, DP_STATE_CTRL, 0x10); + dp_write(DP_HBR2_COMPLIANCE_SCRAMBLER_RESET, value); + dp_write(DP_MAINLINK_LEVELS, 0x2); + dp_write(DP_STATE_CTRL, 0x10); - value = dp_read(catalog->exe_mode, io_data, DP_MAINLINK_CTRL); + value = dp_read(DP_MAINLINK_CTRL); value |= BIT(0); - dp_write(catalog->exe_mode, io_data, DP_MAINLINK_CTRL, value); + dp_write(DP_MAINLINK_CTRL, value); break; case DP_TEST_PHY_PATTERN_CP2520_PATTERN_3: - dp_write(catalog->exe_mode, io_data, DP_MAINLINK_CTRL, 0x11); - dp_write(catalog->exe_mode, io_data, DP_STATE_CTRL, 0x8); + dp_write(DP_MAINLINK_CTRL, 0x11); + dp_write(DP_STATE_CTRL, 0x8); break; default: DP_DEBUG("No valid test pattern requested: 0x%x\n", pattern); @@ -1874,7 +1850,7 @@ static u32 dp_catalog_ctrl_read_phy_pattern(struct dp_catalog_ctrl *ctrl) io_data = catalog->io.dp_link; - return dp_read(catalog->exe_mode, io_data, DP_MAINLINK_READY); + return dp_read(DP_MAINLINK_READY); } static void dp_catalog_ctrl_fec_config(struct dp_catalog_ctrl *ctrl, @@ -1892,7 +1868,7 @@ static void dp_catalog_ctrl_fec_config(struct dp_catalog_ctrl *ctrl, catalog = dp_catalog_get_priv(ctrl); io_data = catalog->io.dp_link; - reg = dp_read(catalog->exe_mode, io_data, DP_MAINLINK_CTRL); + reg = dp_read(DP_MAINLINK_CTRL); /* * fec_en = BIT(12) @@ -1905,7 +1881,7 @@ static void dp_catalog_ctrl_fec_config(struct dp_catalog_ctrl *ctrl, else reg &= ~BIT(12); - dp_write(catalog->exe_mode, io_data, DP_MAINLINK_CTRL, reg); + dp_write(DP_MAINLINK_CTRL, reg); /* make sure mainlink configuration is updated with fec sequence */ wmb(); } @@ -1987,13 +1963,13 @@ static void dp_catalog_ctrl_mst_config(struct dp_catalog_ctrl *ctrl, io_data = catalog->io.dp_link; - reg = dp_read(catalog->exe_mode, io_data, DP_MAINLINK_CTRL); + reg = dp_read(DP_MAINLINK_CTRL); if (enable) reg |= (0x04000100); else reg &= ~(0x04000100); - dp_write(catalog->exe_mode, io_data, DP_MAINLINK_CTRL, reg); + dp_write(DP_MAINLINK_CTRL, reg); /* make sure mainlink MST configuration is updated */ wmb(); } @@ -2012,7 +1988,7 @@ static void dp_catalog_ctrl_trigger_act(struct dp_catalog_ctrl *ctrl) io_data = catalog->io.dp_link; - dp_write(catalog->exe_mode, io_data, DP_MST_ACT, 0x1); + dp_write(DP_MST_ACT, 0x1); /* make sure ACT signal is performed */ wmb(); } @@ -2035,7 +2011,7 @@ static void dp_catalog_ctrl_read_act_complete_sts(struct dp_catalog_ctrl *ctrl, io_data = catalog->io.dp_link; - reg = dp_read(catalog->exe_mode, io_data, DP_MST_ACT); + reg = dp_read(DP_MST_ACT); if (!reg) *sts = true; @@ -2091,10 +2067,8 @@ static void dp_catalog_ctrl_channel_alloc(struct dp_catalog_ctrl *ctrl, DP_DEBUG("ch:%d slot_reg_1:%d, slot_reg_2:%d\n", ch, slot_reg_1, slot_reg_2); - dp_write(catalog->exe_mode, io_data, DP_DP0_TIMESLOT_1_32 + reg_off, - slot_reg_1); - dp_write(catalog->exe_mode, io_data, DP_DP0_TIMESLOT_33_63 + reg_off, - slot_reg_2); + dp_write(DP_DP0_TIMESLOT_1_32 + reg_off, slot_reg_1); + dp_write(DP_DP0_TIMESLOT_33_63 + reg_off, slot_reg_2); } static void dp_catalog_ctrl_channel_dealloc(struct dp_catalog_ctrl *ctrl, @@ -2127,10 +2101,8 @@ static void dp_catalog_ctrl_channel_dealloc(struct dp_catalog_ctrl *ctrl, if (ch == DP_STREAM_1) reg_off = DP_DP1_TIMESLOT_1_32 - DP_DP0_TIMESLOT_1_32; - slot_reg_1 = dp_read(catalog->exe_mode, io_data, - DP_DP0_TIMESLOT_1_32 + reg_off); - slot_reg_2 = dp_read(catalog->exe_mode, io_data, - DP_DP0_TIMESLOT_33_63 + reg_off); + slot_reg_1 = dp_read(DP_DP0_TIMESLOT_1_32 + reg_off); + slot_reg_2 = dp_read(DP_DP0_TIMESLOT_33_63 + reg_off); ch_start_slot = ch_start_slot - 1; for (i = 0; i < tot_slot_cnt; i++) { @@ -2146,10 +2118,8 @@ static void dp_catalog_ctrl_channel_dealloc(struct dp_catalog_ctrl *ctrl, DP_DEBUG("dealloc ch:%d slot_reg_1:%d, slot_reg_2:%d\n", ch, slot_reg_1, slot_reg_2); - dp_write(catalog->exe_mode, io_data, DP_DP0_TIMESLOT_1_32 + reg_off, - slot_reg_1); - dp_write(catalog->exe_mode, io_data, DP_DP0_TIMESLOT_33_63 + reg_off, - slot_reg_2); + dp_write(DP_DP0_TIMESLOT_1_32 + reg_off, slot_reg_1); + dp_write(DP_DP0_TIMESLOT_33_63 + reg_off, slot_reg_2); } static void dp_catalog_ctrl_update_rg(struct dp_catalog_ctrl *ctrl, u32 ch, @@ -2177,7 +2147,7 @@ static void dp_catalog_ctrl_update_rg(struct dp_catalog_ctrl *ctrl, u32 ch, if (ch == DP_STREAM_1) reg_off = DP_DP1_RG - DP_DP0_RG; - dp_write(catalog->exe_mode, io_data, DP_DP0_RG + reg_off, rg); + dp_write(DP_DP0_RG + reg_off, rg); } static void dp_catalog_ctrl_mainlink_levels(struct dp_catalog_ctrl *ctrl, @@ -2207,16 +2177,14 @@ static void dp_catalog_ctrl_mainlink_levels(struct dp_catalog_ctrl *ctrl, break; } - mainlink_levels = dp_read(catalog->exe_mode, io_data, - DP_MAINLINK_LEVELS); + mainlink_levels = dp_read(DP_MAINLINK_LEVELS); mainlink_levels &= 0xFE0; mainlink_levels |= safe_to_exit_level; DP_DEBUG("mainlink_level = 0x%x, safe_to_exit_level = 0x%x\n", mainlink_levels, safe_to_exit_level); - dp_write(catalog->exe_mode, io_data, DP_MAINLINK_LEVELS, - mainlink_levels); + dp_write(DP_MAINLINK_LEVELS, mainlink_levels); } @@ -2243,28 +2211,24 @@ static int dp_catalog_panel_timing_cfg(struct dp_catalog_panel *panel) if (panel->stream_id == DP_STREAM_1) offset = DP1_TOTAL_HOR_VER - DP_TOTAL_HOR_VER; - dp_write(catalog->exe_mode, io_data, DP_TOTAL_HOR_VER + offset, - panel->total); - dp_write(catalog->exe_mode, io_data, - DP_START_HOR_VER_FROM_SYNC + offset, panel->sync_start); - dp_write(catalog->exe_mode, io_data, - DP_HSYNC_VSYNC_WIDTH_POLARITY + offset, panel->width_blanking); - dp_write(catalog->exe_mode, io_data, DP_ACTIVE_HOR_VER + offset, - panel->dp_active); + dp_write(DP_TOTAL_HOR_VER + offset, panel->total); + dp_write(DP_START_HOR_VER_FROM_SYNC + offset, panel->sync_start); + dp_write(DP_HSYNC_VSYNC_WIDTH_POLARITY + offset, panel->width_blanking); + dp_write(DP_ACTIVE_HOR_VER + offset, panel->dp_active); if (panel->stream_id == DP_STREAM_0) io_data = catalog->io.dp_p0; else io_data = catalog->io.dp_p1; - reg = dp_read(catalog->exe_mode, io_data, MMSS_DP_INTF_CONFIG); + reg = dp_read(MMSS_DP_INTF_CONFIG); if (panel->widebus_en) reg |= BIT(4); else reg &= ~BIT(4); - dp_write(catalog->exe_mode, io_data, MMSS_DP_INTF_CONFIG, reg); + dp_write(MMSS_DP_INTF_CONFIG, reg); end: return 0; } @@ -2283,30 +2247,26 @@ static void dp_catalog_hpd_config_hpd(struct dp_catalog_hpd *hpd, bool en) io_data = catalog->io.dp_aux; if (en) { - u32 reftimer = dp_read(catalog->exe_mode, io_data, - DP_DP_HPD_REFTIMER); + u32 reftimer = dp_read(DP_DP_HPD_REFTIMER); /* Arm only the UNPLUG and HPD_IRQ interrupts */ - dp_write(catalog->exe_mode, io_data, DP_DP_HPD_INT_ACK, 0xF); - dp_write(catalog->exe_mode, io_data, DP_DP_HPD_INT_MASK, 0xA); + dp_write(DP_DP_HPD_INT_ACK, 0xF); + dp_write(DP_DP_HPD_INT_MASK, 0xA); /* Enable REFTIMER to count 1ms */ reftimer |= BIT(16); - dp_write(catalog->exe_mode, io_data, DP_DP_HPD_REFTIMER, - reftimer); + dp_write(DP_DP_HPD_REFTIMER, reftimer); /* Connect_time is 250us & disconnect_time is 2ms */ - dp_write(catalog->exe_mode, io_data, DP_DP_HPD_EVENT_TIME_0, - 0x3E800FA); - dp_write(catalog->exe_mode, io_data, DP_DP_HPD_EVENT_TIME_1, - 0x1F407D0); + dp_write(DP_DP_HPD_EVENT_TIME_0, 0x3E800FA); + dp_write(DP_DP_HPD_EVENT_TIME_1, 0x1F407D0); /* Enable HPD */ - dp_write(catalog->exe_mode, io_data, DP_DP_HPD_CTRL, 0x1); + dp_write(DP_DP_HPD_CTRL, 0x1); } else { /* Disable HPD */ - dp_write(catalog->exe_mode, io_data, DP_DP_HPD_CTRL, 0x0); + dp_write(DP_DP_HPD_CTRL, 0x0); } } @@ -2324,8 +2284,8 @@ static u32 dp_catalog_hpd_get_interrupt(struct dp_catalog_hpd *hpd) catalog = dp_catalog_get_priv(hpd); io_data = catalog->io.dp_aux; - isr = dp_read(catalog->exe_mode, io_data, DP_DP_HPD_INT_STATUS); - dp_write(catalog->exe_mode, io_data, DP_DP_HPD_INT_ACK, (isr & 0xf)); + isr = dp_read(DP_DP_HPD_INT_STATUS); + dp_write(DP_DP_HPD_INT_ACK, (isr & 0xf)); return isr; } @@ -2392,8 +2352,7 @@ static void dp_catalog_audio_config_sdp(struct dp_catalog_audio *audio) catalog = dp_catalog_get_priv(audio); io_data = catalog->io.dp_link; - sdp_cfg = dp_read(catalog->exe_mode, io_data, - MMSS_DP_SDP_CFG + sdp_cfg_off); + sdp_cfg = dp_read(MMSS_DP_SDP_CFG + sdp_cfg_off); /* AUDIO_TIMESTAMP_SDP_EN */ sdp_cfg |= BIT(1); @@ -2407,19 +2366,16 @@ static void dp_catalog_audio_config_sdp(struct dp_catalog_audio *audio) sdp_cfg |= BIT(20); DP_DEBUG("sdp_cfg = 0x%x\n", sdp_cfg); - dp_write(catalog->exe_mode, io_data, MMSS_DP_SDP_CFG + sdp_cfg_off, - sdp_cfg); + dp_write(MMSS_DP_SDP_CFG + sdp_cfg_off, sdp_cfg); - sdp_cfg2 = dp_read(catalog->exe_mode, io_data, - MMSS_DP_SDP_CFG2 + sdp_cfg_off); + sdp_cfg2 = dp_read(MMSS_DP_SDP_CFG2 + sdp_cfg_off); /* IFRM_REGSRC -> Do not use reg values */ sdp_cfg2 &= ~BIT(0); /* AUDIO_STREAM_HB3_REGSRC-> Do not use reg values */ sdp_cfg2 &= ~BIT(1); DP_DEBUG("sdp_cfg2 = 0x%x\n", sdp_cfg2); - dp_write(catalog->exe_mode, io_data, MMSS_DP_SDP_CFG2 + sdp_cfg_off, - sdp_cfg2); + dp_write(MMSS_DP_SDP_CFG2 + sdp_cfg_off, sdp_cfg2); } static void dp_catalog_audio_get_header(struct dp_catalog_audio *audio) @@ -2440,7 +2396,7 @@ static void dp_catalog_audio_get_header(struct dp_catalog_audio *audio) sdp = audio->sdp_type; header = audio->sdp_header; - audio->data = dp_read(catalog->exe_mode, io_data, sdp_map[sdp][header]); + audio->data = dp_read(sdp_map[sdp][header]); } static void dp_catalog_audio_set_header(struct dp_catalog_audio *audio) @@ -2463,7 +2419,7 @@ static void dp_catalog_audio_set_header(struct dp_catalog_audio *audio) header = audio->sdp_header; data = audio->data; - dp_write(catalog->exe_mode, io_data, sdp_map[sdp][header], data); + dp_write(sdp_map[sdp][header], data); } static void dp_catalog_audio_config_acr(struct dp_catalog_audio *audio) @@ -2481,7 +2437,7 @@ static void dp_catalog_audio_config_acr(struct dp_catalog_audio *audio) DP_DEBUG("select = 0x%x, acr_ctrl = 0x%x\n", select, acr_ctrl); - dp_write(catalog->exe_mode, io_data, MMSS_DP_AUDIO_ACR_CTRL, acr_ctrl); + dp_write(MMSS_DP_AUDIO_ACR_CTRL, acr_ctrl); } static void dp_catalog_audio_enable(struct dp_catalog_audio *audio) @@ -2496,7 +2452,7 @@ static void dp_catalog_audio_enable(struct dp_catalog_audio *audio) io_data = catalog->io.dp_link; enable = !!audio->data; - audio_ctrl = dp_read(catalog->exe_mode, io_data, MMSS_DP_AUDIO_CFG); + audio_ctrl = dp_read(MMSS_DP_AUDIO_CFG); if (enable) audio_ctrl |= BIT(0); @@ -2504,7 +2460,7 @@ static void dp_catalog_audio_enable(struct dp_catalog_audio *audio) audio_ctrl &= ~BIT(0); DP_DEBUG("dp_audio_cfg = 0x%x\n", audio_ctrl); - dp_write(catalog->exe_mode, io_data, MMSS_DP_AUDIO_CFG, audio_ctrl); + dp_write(MMSS_DP_AUDIO_CFG, audio_ctrl); /* make sure audio engine is disabled */ wmb(); @@ -2527,8 +2483,7 @@ static void dp_catalog_config_spd_header(struct dp_catalog_panel *panel) offset = MMSS_DP1_GENERIC0_0 - MMSS_DP_GENERIC0_0; /* Config header and parity byte 1 */ - value = dp_read(catalog->exe_mode, io_data, - MMSS_DP_GENERIC1_0 + offset); + value = dp_read(MMSS_DP_GENERIC1_0 + offset); new_value = 0x83; parity_byte = dp_header_get_parity(new_value); @@ -2536,12 +2491,10 @@ static void dp_catalog_config_spd_header(struct dp_catalog_panel *panel) | (parity_byte << PARITY_BYTE_1_BIT)); DP_DEBUG("Header Byte 1: value = 0x%x, parity_byte = 0x%x\n", value, parity_byte); - dp_write(catalog->exe_mode, io_data, MMSS_DP_GENERIC1_0 + offset, - value); + dp_write(MMSS_DP_GENERIC1_0 + offset, value); /* Config header and parity byte 2 */ - value = dp_read(catalog->exe_mode, io_data, - MMSS_DP_GENERIC1_1 + offset); + value = dp_read(MMSS_DP_GENERIC1_1 + offset); new_value = 0x1b; parity_byte = dp_header_get_parity(new_value); @@ -2549,12 +2502,10 @@ static void dp_catalog_config_spd_header(struct dp_catalog_panel *panel) | (parity_byte << PARITY_BYTE_2_BIT)); DP_DEBUG("Header Byte 2: value = 0x%x, parity_byte = 0x%x\n", value, parity_byte); - dp_write(catalog->exe_mode, io_data, MMSS_DP_GENERIC1_1 + offset, - value); + dp_write(MMSS_DP_GENERIC1_1 + offset, value); /* Config header and parity byte 3 */ - value = dp_read(catalog->exe_mode, io_data, - MMSS_DP_GENERIC1_1 + offset); + value = dp_read(MMSS_DP_GENERIC1_1 + offset); new_value = (0x0 | (0x12 << 2)); parity_byte = dp_header_get_parity(new_value); @@ -2562,8 +2513,7 @@ static void dp_catalog_config_spd_header(struct dp_catalog_panel *panel) | (parity_byte << PARITY_BYTE_3_BIT)); DP_DEBUG("Header Byte 3: value = 0x%x, parity_byte = 0x%x\n", new_value, parity_byte); - dp_write(catalog->exe_mode, io_data, MMSS_DP_GENERIC1_1 + offset, - value); + dp_write(MMSS_DP_GENERIC1_1 + offset, value); } static void dp_catalog_panel_config_spd(struct dp_catalog_panel *panel) @@ -2610,58 +2560,53 @@ static void dp_catalog_panel_config_spd(struct dp_catalog_panel *panel) vendor = panel->spd_vendor_name; product = panel->spd_product_description; - dp_write(catalog->exe_mode, io_data, MMSS_DP_GENERIC1_2 + offset, + dp_write(MMSS_DP_GENERIC1_2 + offset, ((vendor[0] & 0x7f) | ((vendor[1] & 0x7f) << 8) | ((vendor[2] & 0x7f) << 16) | ((vendor[3] & 0x7f) << 24))); - dp_write(catalog->exe_mode, io_data, MMSS_DP_GENERIC1_3 + offset, + dp_write(MMSS_DP_GENERIC1_3 + offset, ((vendor[4] & 0x7f) | ((vendor[5] & 0x7f) << 8) | ((vendor[6] & 0x7f) << 16) | ((vendor[7] & 0x7f) << 24))); - dp_write(catalog->exe_mode, io_data, MMSS_DP_GENERIC1_4 + offset, + dp_write(MMSS_DP_GENERIC1_4 + offset, ((product[0] & 0x7f) | ((product[1] & 0x7f) << 8) | ((product[2] & 0x7f) << 16) | ((product[3] & 0x7f) << 24))); - dp_write(catalog->exe_mode, io_data, MMSS_DP_GENERIC1_5 + offset, + dp_write(MMSS_DP_GENERIC1_5 + offset, ((product[4] & 0x7f) | ((product[5] & 0x7f) << 8) | ((product[6] & 0x7f) << 16) | ((product[7] & 0x7f) << 24))); - dp_write(catalog->exe_mode, io_data, MMSS_DP_GENERIC1_6 + offset, + dp_write(MMSS_DP_GENERIC1_6 + offset, ((product[8] & 0x7f) | ((product[9] & 0x7f) << 8) | ((product[10] & 0x7f) << 16) | ((product[11] & 0x7f) << 24))); - dp_write(catalog->exe_mode, io_data, MMSS_DP_GENERIC1_7 + offset, + dp_write(MMSS_DP_GENERIC1_7 + offset, ((product[12] & 0x7f) | ((product[13] & 0x7f) << 8) | ((product[14] & 0x7f) << 16) | ((product[15] & 0x7f) << 24))); - dp_write(catalog->exe_mode, io_data, MMSS_DP_GENERIC1_8 + offset, - device_type); - dp_write(catalog->exe_mode, io_data, MMSS_DP_GENERIC1_9 + offset, 0x00); + dp_write(MMSS_DP_GENERIC1_8 + offset, device_type); + dp_write(MMSS_DP_GENERIC1_9 + offset, 0x00); if (panel->stream_id == DP_STREAM_1) { sdp_cfg_off = MMSS_DP1_SDP_CFG - MMSS_DP_SDP_CFG; sdp_cfg2_off = MMSS_DP1_SDP_CFG2 - MMSS_DP_SDP_CFG2; } - spd_cfg = dp_read(catalog->exe_mode, io_data, - MMSS_DP_SDP_CFG + sdp_cfg_off); + spd_cfg = dp_read(MMSS_DP_SDP_CFG + sdp_cfg_off); /* GENERIC1_SDP for SPD Infoframe */ spd_cfg |= BIT(18); - dp_write(catalog->exe_mode, io_data, MMSS_DP_SDP_CFG + sdp_cfg_off, - spd_cfg); + dp_write(MMSS_DP_SDP_CFG + sdp_cfg_off, spd_cfg); - spd_cfg2 = dp_read(catalog->exe_mode, io_data, - MMSS_DP_SDP_CFG2 + sdp_cfg2_off); + spd_cfg2 = dp_read(MMSS_DP_SDP_CFG2 + sdp_cfg2_off); /* 28 data bytes for SPD Infoframe with GENERIC1 set */ spd_cfg2 |= BIT(17); - dp_write(catalog->exe_mode, io_data, MMSS_DP_SDP_CFG2 + sdp_cfg2_off, - spd_cfg2); + dp_write(MMSS_DP_SDP_CFG2 + sdp_cfg2_off, spd_cfg2); dp_catalog_panel_sdp_update(panel); } @@ -2723,24 +2668,50 @@ static void dp_catalog_set_exe_mode(struct dp_catalog *dp_catalog, char *mode) else dp_catalog_get_io_buf(catalog); - if (dp_catalog->priv.data && dp_catalog->priv.put) - dp_catalog->priv.set_exe_mode(dp_catalog, mode); + if (!strcmp(catalog->exe_mode, "hw") || + !strcmp(catalog->exe_mode, "all")) { + catalog->read = dp_read_hw; + catalog->write = dp_write_hw; + + dp_catalog->sub->read = dp_read_sub_hw; + dp_catalog->sub->write = dp_write_sub_hw; + } else { + catalog->read = dp_read_sw; + catalog->write = dp_write_sw; + + dp_catalog->sub->read = dp_read_sub_sw; + dp_catalog->sub->write = dp_write_sub_sw; + } } -static int dp_catalog_init(struct device *dev, struct dp_catalog *catalog, +static int dp_catalog_init(struct device *dev, struct dp_catalog *dp_catalog, struct dp_parser *parser) { int rc = 0; - struct dp_catalog_private *catalog_priv; + struct dp_catalog_private *catalog = container_of(dp_catalog, + struct dp_catalog_private, dp_catalog); - catalog_priv = container_of(catalog, struct dp_catalog_private, - dp_catalog); - - if (parser->hw_cfg.phy_version == DP_PHY_VERSION_4_2_0) - rc = dp_catalog_get_v420(dev, catalog, &catalog_priv->io); - else if (parser->hw_cfg.phy_version == DP_PHY_VERSION_2_0_0) - rc = dp_catalog_get_v200(dev, catalog, &catalog_priv->io); + switch (parser->hw_cfg.phy_version) { + case DP_PHY_VERSION_4_2_0: + dp_catalog->sub = dp_catalog_get_v420(dev, dp_catalog, + &catalog->io); + break; + case DP_PHY_VERSION_2_0_0: + dp_catalog->sub = dp_catalog_get_v200(dev, dp_catalog, + &catalog->io); + break; + default: + goto end; + } + if (IS_ERR(dp_catalog->sub)) { + rc = PTR_ERR(dp_catalog->sub); + dp_catalog->sub = NULL; + } else { + dp_catalog->sub->read = dp_read_sub_hw; + dp_catalog->sub->write = dp_write_sub_hw; + } +end: return rc; } @@ -2754,8 +2725,8 @@ void dp_catalog_put(struct dp_catalog *dp_catalog) catalog = container_of(dp_catalog, struct dp_catalog_private, dp_catalog); - if (dp_catalog->priv.data && dp_catalog->priv.put) - dp_catalog->priv.put(dp_catalog); + if (dp_catalog->sub && dp_catalog->sub->put) + dp_catalog->sub->put(dp_catalog); catalog->parser->clear_io_buf(catalog->parser); devm_kfree(catalog->dev, catalog); @@ -2851,6 +2822,9 @@ struct dp_catalog *dp_catalog_get(struct device *dev, struct dp_parser *parser) catalog->dev = dev; catalog->parser = parser; + catalog->read = dp_read_hw; + catalog->write = dp_write_hw; + dp_catalog_get_io(catalog); strlcpy(catalog->exe_mode, "hw", sizeof(catalog->exe_mode)); diff --git a/msm/dp/dp_catalog.h b/msm/dp/dp_catalog.h index a1235b529463..0b1f00408e43 100644 --- a/msm/dp/dp_catalog.h +++ b/msm/dp/dp_catalog.h @@ -222,11 +222,29 @@ struct dp_catalog_panel { }; struct dp_catalog; -struct dp_catalog_priv { - void *data; +struct dp_catalog_sub { + u32 (*read)(struct dp_catalog *dp_catalog, + struct dp_io_data *io_data, u32 offset); + void (*write)(struct dp_catalog *dp_catalog, + struct dp_io_data *io_data, u32 offset, u32 data); void (*put)(struct dp_catalog *catalog); - void (*set_exe_mode)(struct dp_catalog *dp_catalog, char *mode); +}; + +struct dp_catalog_io { + struct dp_io_data *dp_ahb; + struct dp_io_data *dp_aux; + struct dp_io_data *dp_link; + struct dp_io_data *dp_p0; + struct dp_io_data *dp_phy; + struct dp_io_data *dp_ln_tx0; + struct dp_io_data *dp_ln_tx1; + struct dp_io_data *dp_mmss_cc; + struct dp_io_data *dp_pll; + struct dp_io_data *usb3_dp_com; + struct dp_io_data *hdcp_physical; + struct dp_io_data *dp_p1; + struct dp_io_data *dp_tcsr; }; struct dp_catalog { @@ -234,9 +252,10 @@ struct dp_catalog { struct dp_catalog_ctrl ctrl; struct dp_catalog_audio audio; struct dp_catalog_panel panel; - struct dp_catalog_priv priv; struct dp_catalog_hpd hpd; + struct dp_catalog_sub *sub; + void (*set_exe_mode)(struct dp_catalog *dp_catalog, char *mode); int (*get_reg_dump)(struct dp_catalog *dp_catalog, char *mode, u8 **out_buf, u32 *out_buf_len); @@ -307,40 +326,13 @@ static inline u8 dp_header_get_parity(u32 data) return parity_byte; } -static inline u32 dp_read(char *exe_mode, struct dp_io_data *io_data, - u32 offset) -{ - u32 data = 0; - - if (!strcmp(exe_mode, "hw") || !strcmp(exe_mode, "all")) { - data = readl_relaxed(io_data->io.base + offset); - } else if (!strcmp(exe_mode, "sw")) { - if (io_data->buf) - memcpy(&data, io_data->buf + offset, sizeof(offset)); - } - - return data; -} - -static inline void dp_write(char *exe_mode, struct dp_io_data *io_data, - u32 offset, u32 data) -{ - if (!strcmp(exe_mode, "hw") || !strcmp(exe_mode, "all")) - writel_relaxed(data, io_data->io.base + offset); - - if (!strcmp(exe_mode, "sw") || !strcmp(exe_mode, "all")) { - if (io_data->buf) - memcpy(io_data->buf + offset, &data, sizeof(data)); - } -} - struct dp_catalog *dp_catalog_get(struct device *dev, struct dp_parser *parser); void dp_catalog_put(struct dp_catalog *catalog); -int dp_catalog_get_v420(struct device *dev, struct dp_catalog *catalog, - void *io); +struct dp_catalog_sub *dp_catalog_get_v420(struct device *dev, + struct dp_catalog *catalog, struct dp_catalog_io *io); -int dp_catalog_get_v200(struct device *dev, struct dp_catalog *catalog, - void *io); +struct dp_catalog_sub *dp_catalog_get_v200(struct device *dev, + struct dp_catalog *catalog, struct dp_catalog_io *io); #endif /* _DP_CATALOG_H_ */ diff --git a/msm/dp/dp_catalog_v200.c b/msm/dp/dp_catalog_v200.c index 74ef135c9ad7..97d78a120bc4 100644 --- a/msm/dp/dp_catalog_v200.c +++ b/msm/dp/dp_catalog_v200.c @@ -10,35 +10,28 @@ #include "dp_debug.h" #define dp_catalog_get_priv_v200(x) ({ \ - struct dp_catalog *dp_catalog; \ - dp_catalog = container_of(x, struct dp_catalog, x); \ - dp_catalog->priv.data; \ + struct dp_catalog *catalog; \ + catalog = container_of(x, struct dp_catalog, x); \ + container_of(catalog->sub, \ + struct dp_catalog_private_v200, sub); \ }) -struct dp_catalog_io { - struct dp_io_data *dp_ahb; - struct dp_io_data *dp_aux; - struct dp_io_data *dp_link; - struct dp_io_data *dp_p0; - struct dp_io_data *dp_phy; - struct dp_io_data *dp_ln_tx0; - struct dp_io_data *dp_ln_tx1; - struct dp_io_data *dp_mmss_cc; - struct dp_io_data *dp_pll; - struct dp_io_data *usb3_dp_com; - struct dp_io_data *hdcp_physical; - struct dp_io_data *dp_p1; - struct dp_io_data *dp_tcsr; -}; +#define dp_read(x) ({ \ + catalog->sub.read(catalog->dpc, io_data, x); \ +}) + +#define dp_write(x, y) ({ \ + catalog->sub.write(catalog->dpc, io_data, x, y); \ +}) struct dp_catalog_private_v200 { struct device *dev; struct dp_catalog_io *io; - - char exe_mode[SZ_4]; + struct dp_catalog *dpc; + struct dp_catalog_sub sub; }; -static void dp_catalog_aux_clear_hw_interrupts_v200(struct dp_catalog_aux *aux) +static void dp_catalog_aux_clear_hw_int_v200(struct dp_catalog_aux *aux) { struct dp_catalog_private_v200 *catalog; struct dp_io_data *io_data; @@ -52,17 +45,15 @@ static void dp_catalog_aux_clear_hw_interrupts_v200(struct dp_catalog_aux *aux) catalog = dp_catalog_get_priv_v200(aux); io_data = catalog->io->dp_phy; - data = dp_read(catalog->exe_mode, io_data, - DP_PHY_AUX_INTERRUPT_STATUS_V200); + data = dp_read(DP_PHY_AUX_INTERRUPT_STATUS_V200); - dp_write(catalog->exe_mode, io_data, DP_PHY_AUX_INTERRUPT_CLEAR_V200, - 0x1f); + dp_write(DP_PHY_AUX_INTERRUPT_CLEAR_V200, 0x1f); wmb(); /* make sure 0x1f is written before next write */ - dp_write(catalog->exe_mode, io_data, DP_PHY_AUX_INTERRUPT_CLEAR_V200, - 0x9f); + + dp_write(DP_PHY_AUX_INTERRUPT_CLEAR_V200, 0x9f); wmb(); /* make sure 0x9f is written before next write */ - dp_write(catalog->exe_mode, io_data, DP_PHY_AUX_INTERRUPT_CLEAR_V200, - 0); + + dp_write(DP_PHY_AUX_INTERRUPT_CLEAR_V200, 0); wmb(); /* make sure register is cleared */ } @@ -79,40 +70,38 @@ static void dp_catalog_aux_setup_v200(struct dp_catalog_aux *aux, } catalog = dp_catalog_get_priv_v200(aux); - io_data = catalog->io->dp_ahb; - sw_reset = dp_read(catalog->exe_mode, io_data, DP_SW_RESET); + + sw_reset = dp_read(DP_SW_RESET); sw_reset |= BIT(0); - dp_write(catalog->exe_mode, io_data, DP_SW_RESET, sw_reset); + dp_write(DP_SW_RESET, sw_reset); usleep_range(1000, 1010); /* h/w recommended delay */ sw_reset &= ~BIT(0); - dp_write(catalog->exe_mode, io_data, DP_SW_RESET, sw_reset); + dp_write(DP_SW_RESET, sw_reset); - dp_write(catalog->exe_mode, io_data, DP_PHY_CTRL, 0x4); /* bit 2 */ + dp_write(DP_PHY_CTRL, 0x4); /* bit 2 */ udelay(1000); - dp_write(catalog->exe_mode, io_data, DP_PHY_CTRL, 0x0); /* bit 2 */ + dp_write(DP_PHY_CTRL, 0x0); /* bit 2 */ wmb(); /* make sure programming happened */ io_data = catalog->io->dp_tcsr; - dp_write(catalog->exe_mode, io_data, 0x4c, 0x1); /* bit 0 & 2 */ + dp_write(0x4c, 0x1); /* bit 0 & 2 */ wmb(); /* make sure programming happened */ io_data = catalog->io->dp_phy; - dp_write(catalog->exe_mode, io_data, DP_PHY_PD_CTL, 0x3c); + dp_write(DP_PHY_PD_CTL, 0x3c); wmb(); /* make sure PD programming happened */ - dp_write(catalog->exe_mode, io_data, DP_PHY_PD_CTL, 0x3d); + dp_write(DP_PHY_PD_CTL, 0x3d); wmb(); /* make sure PD programming happened */ /* DP AUX CFG register programming */ io_data = catalog->io->dp_phy; for (i = 0; i < PHY_AUX_CFG_MAX; i++) - dp_write(catalog->exe_mode, io_data, cfg[i].offset, - cfg[i].lut[cfg[i].current_index]); + dp_write(cfg[i].offset, cfg[i].lut[cfg[i].current_index]); - dp_write(catalog->exe_mode, io_data, DP_PHY_AUX_INTERRUPT_MASK_V200, - 0x1F); + dp_write(DP_PHY_AUX_INTERRUPT_MASK_V200, 0x1F); wmb(); /* make sure AUX configuration is done before enabling it */ } @@ -146,10 +135,8 @@ static void dp_catalog_panel_config_msa_v200(struct dp_catalog_panel *panel, strm_reg_off = MMSS_DP_PIXEL1_M_V200 - MMSS_DP_PIXEL_M_V200; - pixel_m = dp_read(catalog->exe_mode, io_data, - MMSS_DP_PIXEL_M_V200 + strm_reg_off); - pixel_n = dp_read(catalog->exe_mode, io_data, - MMSS_DP_PIXEL_N_V200 + strm_reg_off); + pixel_m = dp_read(MMSS_DP_PIXEL_M_V200 + strm_reg_off); + pixel_n = dp_read(MMSS_DP_PIXEL_N_V200 + strm_reg_off); DP_DEBUG("pixel_m=0x%x, pixel_n=0x%x\n", pixel_m, pixel_n); mvid = (pixel_m & 0xFFFF) * 5; @@ -182,10 +169,8 @@ static void dp_catalog_panel_config_msa_v200(struct dp_catalog_panel *panel, } DP_DEBUG("mvid=0x%x, nvid=0x%x\n", mvid, nvid); - dp_write(catalog->exe_mode, io_data, DP_SOFTWARE_MVID + mvid_reg_off, - mvid); - dp_write(catalog->exe_mode, io_data, DP_SOFTWARE_NVID + nvid_reg_off, - nvid); + dp_write(DP_SOFTWARE_MVID + mvid_reg_off, mvid); + dp_write(DP_SOFTWARE_NVID + nvid_reg_off, nvid); } static void dp_catalog_ctrl_lane_mapping_v200(struct dp_catalog_ctrl *ctrl, @@ -234,8 +219,7 @@ static void dp_catalog_ctrl_lane_mapping_v200(struct dp_catalog_ctrl *ctrl, lane_map_reg = ((l_map[3]&3)<<6)|((l_map[2]&3)<<4)|((l_map[1]&3)<<2) |(l_map[0]&3); - dp_write(catalog->exe_mode, io_data, DP_LOGICAL2PHYSICAL_LANE_MAPPING, - lane_map_reg); + dp_write(DP_LOGICAL2PHYSICAL_LANE_MAPPING, lane_map_reg); } static void dp_catalog_ctrl_usb_reset_v200(struct dp_catalog_ctrl *ctrl, @@ -247,48 +231,36 @@ static void dp_catalog_put_v200(struct dp_catalog *catalog) { struct dp_catalog_private_v200 *catalog_priv; - if (!catalog || !catalog->priv.data) + if (!catalog) return; - catalog_priv = catalog->priv.data; + catalog_priv = container_of(catalog->sub, + struct dp_catalog_private_v200, sub); + devm_kfree(catalog_priv->dev, catalog_priv); } -static void dp_catalog_set_exe_mode_v200(struct dp_catalog *catalog, char *mode) -{ - struct dp_catalog_private_v200 *catalog_priv; - - if (!catalog || !catalog->priv.data) - return; - - catalog_priv = catalog->priv.data; - - strlcpy(catalog_priv->exe_mode, mode, sizeof(catalog_priv->exe_mode)); -} - -int dp_catalog_get_v200(struct device *dev, struct dp_catalog *catalog, - void *io) +struct dp_catalog_sub *dp_catalog_get_v200(struct device *dev, + struct dp_catalog *catalog, struct dp_catalog_io *io) { struct dp_catalog_private_v200 *catalog_priv; if (!dev || !catalog) { DP_ERR("invalid input\n"); - return -EINVAL; + return ERR_PTR(-EINVAL); } catalog_priv = devm_kzalloc(dev, sizeof(*catalog_priv), GFP_KERNEL); if (!catalog_priv) - return -ENOMEM; + return ERR_PTR(-ENOMEM); catalog_priv->dev = dev; catalog_priv->io = io; - catalog->priv.data = catalog_priv; + catalog_priv->dpc = catalog; - catalog->priv.put = dp_catalog_put_v200; - catalog->priv.set_exe_mode = dp_catalog_set_exe_mode_v200; + catalog_priv->sub.put = dp_catalog_put_v200; - catalog->aux.clear_hw_interrupts = - dp_catalog_aux_clear_hw_interrupts_v200; + catalog->aux.clear_hw_interrupts = dp_catalog_aux_clear_hw_int_v200; catalog->aux.setup = dp_catalog_aux_setup_v200; catalog->panel.config_msa = dp_catalog_panel_config_msa_v200; @@ -296,8 +268,5 @@ int dp_catalog_get_v200(struct device *dev, struct dp_catalog *catalog, catalog->ctrl.lane_mapping = dp_catalog_ctrl_lane_mapping_v200; catalog->ctrl.usb_reset = dp_catalog_ctrl_usb_reset_v200; - /* Set the default execution mode to hardware mode */ - dp_catalog_set_exe_mode_v200(catalog, "hw"); - - return 0; + return &catalog_priv->sub; } diff --git a/msm/dp/dp_catalog_v420.c b/msm/dp/dp_catalog_v420.c index 266f0f5c5916..ea4325726479 100644 --- a/msm/dp/dp_catalog_v420.c +++ b/msm/dp/dp_catalog_v420.c @@ -9,9 +9,18 @@ #include "dp_debug.h" #define dp_catalog_get_priv_v420(x) ({ \ - struct dp_catalog *dp_catalog; \ - dp_catalog = container_of(x, struct dp_catalog, x); \ - dp_catalog->priv.data; \ + struct dp_catalog *catalog; \ + catalog = container_of(x, struct dp_catalog, x); \ + container_of(catalog->sub, \ + struct dp_catalog_private_v420, sub); \ +}) + +#define dp_read(x) ({ \ + catalog->sub.read(catalog->dpc, io_data, x); \ +}) + +#define dp_write(x, y) ({ \ + catalog->sub.write(catalog->dpc, io_data, x, y); \ }) #define MAX_VOLTAGE_LEVELS 4 @@ -60,26 +69,11 @@ static u8 const dp_swing_hbr_rbr[MAX_VOLTAGE_LEVELS][MAX_PRE_EMP_LEVELS] = { {0x1F, 0xFF, 0xFF, 0xFF} /* sw1, 1.2v */ }; -struct dp_catalog_io { - struct dp_io_data *dp_ahb; - struct dp_io_data *dp_aux; - struct dp_io_data *dp_link; - struct dp_io_data *dp_p0; - struct dp_io_data *dp_phy; - struct dp_io_data *dp_ln_tx0; - struct dp_io_data *dp_ln_tx1; - struct dp_io_data *dp_mmss_cc; - struct dp_io_data *dp_pll; - struct dp_io_data *usb3_dp_com; - struct dp_io_data *hdcp_physical; - struct dp_io_data *dp_p1; -}; - struct dp_catalog_private_v420 { struct device *dev; + struct dp_catalog_sub sub; struct dp_catalog_io *io; - - char exe_mode[SZ_4]; + struct dp_catalog *dpc; }; static void dp_catalog_aux_setup_v420(struct dp_catalog_aux *aux, @@ -97,13 +91,12 @@ static void dp_catalog_aux_setup_v420(struct dp_catalog_aux *aux, catalog = dp_catalog_get_priv_v420(aux); io_data = catalog->io->dp_phy; - dp_write(catalog->exe_mode, io_data, DP_PHY_PD_CTL, 0x67); + dp_write(DP_PHY_PD_CTL, 0x67); wmb(); /* make sure PD programming happened */ /* Turn on BIAS current for PHY/PLL */ io_data = catalog->io->dp_pll; - dp_write(catalog->exe_mode, io_data, QSERDES_COM_BIAS_EN_CLKBUFLR_EN, - 0x17); + dp_write(QSERDES_COM_BIAS_EN_CLKBUFLR_EN, 0x17); wmb(); /* make sure BIAS programming happened */ io_data = catalog->io->dp_phy; @@ -112,16 +105,14 @@ static void dp_catalog_aux_setup_v420(struct dp_catalog_aux *aux, DP_DEBUG("%s: offset=0x%08x, value=0x%08x\n", dp_phy_aux_config_type_to_string(i), cfg[i].offset, cfg[i].lut[cfg[i].current_index]); - dp_write(catalog->exe_mode, io_data, cfg[i].offset, - cfg[i].lut[cfg[i].current_index]); + dp_write(cfg[i].offset, cfg[i].lut[cfg[i].current_index]); } wmb(); /* make sure DP AUX CFG programming happened */ - dp_write(catalog->exe_mode, io_data, DP_PHY_AUX_INTERRUPT_MASK_V420, - 0x1F); + dp_write(DP_PHY_AUX_INTERRUPT_MASK_V420, 0x1F); } -static void dp_catalog_aux_clear_hw_interrupts_v420(struct dp_catalog_aux *aux) +static void dp_catalog_aux_clear_hw_int_v420(struct dp_catalog_aux *aux) { struct dp_catalog_private_v420 *catalog; struct dp_io_data *io_data; @@ -135,17 +126,15 @@ static void dp_catalog_aux_clear_hw_interrupts_v420(struct dp_catalog_aux *aux) catalog = dp_catalog_get_priv_v420(aux); io_data = catalog->io->dp_phy; - data = dp_read(catalog->exe_mode, io_data, - DP_PHY_AUX_INTERRUPT_STATUS_V420); + data = dp_read(DP_PHY_AUX_INTERRUPT_STATUS_V420); - dp_write(catalog->exe_mode, io_data, - DP_PHY_AUX_INTERRUPT_CLEAR_V420, 0x1f); + dp_write(DP_PHY_AUX_INTERRUPT_CLEAR_V420, 0x1f); wmb(); /* make sure 0x1f is written before next write */ - dp_write(catalog->exe_mode, io_data, - DP_PHY_AUX_INTERRUPT_CLEAR_V420, 0x9f); + + dp_write(DP_PHY_AUX_INTERRUPT_CLEAR_V420, 0x9f); wmb(); /* make sure 0x9f is written before next write */ - dp_write(catalog->exe_mode, io_data, - DP_PHY_AUX_INTERRUPT_CLEAR_V420, 0); + + dp_write(DP_PHY_AUX_INTERRUPT_CLEAR_V420, 0); wmb(); /* make sure register is cleared */ } @@ -176,10 +165,8 @@ static void dp_catalog_panel_config_msa_v420(struct dp_catalog_panel *panel, if (panel->stream_id == DP_STREAM_1) reg_off = MMSS_DP_PIXEL1_M_V420 - MMSS_DP_PIXEL_M_V420; - pixel_m = dp_read(catalog->exe_mode, io_data, - MMSS_DP_PIXEL_M_V420 + reg_off); - pixel_n = dp_read(catalog->exe_mode, io_data, - MMSS_DP_PIXEL_N_V420 + reg_off); + pixel_m = dp_read(MMSS_DP_PIXEL_M_V420 + reg_off); + pixel_n = dp_read(MMSS_DP_PIXEL_N_V420 + reg_off); DP_DEBUG("pixel_m=0x%x, pixel_n=0x%x\n", pixel_m, pixel_n); mvid = (pixel_m & 0xFFFF) * 5; @@ -212,8 +199,8 @@ static void dp_catalog_panel_config_msa_v420(struct dp_catalog_panel *panel, } DP_DEBUG("mvid=0x%x, nvid=0x%x\n", mvid, nvid); - dp_write(catalog->exe_mode, io_data, DP_SOFTWARE_MVID + mvid_off, mvid); - dp_write(catalog->exe_mode, io_data, DP_SOFTWARE_NVID + nvid_off, nvid); + dp_write(DP_SOFTWARE_MVID + mvid_off, mvid); + dp_write(DP_SOFTWARE_NVID + nvid_off, nvid); } static void dp_catalog_ctrl_phy_lane_cfg_v420(struct dp_catalog_ctrl *ctrl, @@ -221,8 +208,8 @@ static void dp_catalog_ctrl_phy_lane_cfg_v420(struct dp_catalog_ctrl *ctrl, { u32 info = 0x0; struct dp_catalog_private_v420 *catalog; - u8 orientation = BIT(!!flipped); struct dp_io_data *io_data; + u8 orientation = BIT(!!flipped); if (!ctrl) { DP_ERR("invalid input\n"); @@ -236,7 +223,7 @@ static void dp_catalog_ctrl_phy_lane_cfg_v420(struct dp_catalog_ctrl *ctrl, info |= ((orientation & 0x0F) << 4); DP_DEBUG("Shared Info = 0x%x\n", info); - dp_write(catalog->exe_mode, io_data, DP_PHY_SPARE0_V420, info); + dp_write(DP_PHY_SPARE0_V420, info); } static void dp_catalog_ctrl_update_vx_px_v420(struct dp_catalog_ctrl *ctrl, @@ -258,7 +245,7 @@ static void dp_catalog_ctrl_update_vx_px_v420(struct dp_catalog_ctrl *ctrl, catalog = dp_catalog_get_priv_v420(ctrl); io_data = catalog->io->dp_ahb; - version = dp_read(catalog->exe_mode, io_data, DP_HW_VERSION); + version = dp_read(DP_HW_VERSION); if (version == 0x10020003) { if (high) { @@ -275,12 +262,12 @@ static void dp_catalog_ctrl_update_vx_px_v420(struct dp_catalog_ctrl *ctrl, /* program default setting first */ io_data = catalog->io->dp_ln_tx0; - dp_write(catalog->exe_mode, io_data, TXn_TX_DRV_LVL_V420, 0x2A); - dp_write(catalog->exe_mode, io_data, TXn_TX_EMP_POST1_LVL, 0x20); + dp_write(TXn_TX_DRV_LVL_V420, 0x2A); + dp_write(TXn_TX_EMP_POST1_LVL, 0x20); io_data = catalog->io->dp_ln_tx1; - dp_write(catalog->exe_mode, io_data, TXn_TX_DRV_LVL_V420, 0x2A); - dp_write(catalog->exe_mode, io_data, TXn_TX_EMP_POST1_LVL, 0x20); + dp_write(TXn_TX_DRV_LVL_V420, 0x2A); + dp_write(TXn_TX_EMP_POST1_LVL, 0x20); /* Enable MUX to use Cursor values from these registers */ value0 |= BIT(5); @@ -289,16 +276,12 @@ static void dp_catalog_ctrl_update_vx_px_v420(struct dp_catalog_ctrl *ctrl, /* Configure host and panel only if both values are allowed */ if (value0 != 0xFF && value1 != 0xFF) { io_data = catalog->io->dp_ln_tx0; - dp_write(catalog->exe_mode, io_data, TXn_TX_DRV_LVL_V420, - value0); - dp_write(catalog->exe_mode, io_data, TXn_TX_EMP_POST1_LVL, - value1); + dp_write(TXn_TX_DRV_LVL_V420, value0); + dp_write(TXn_TX_EMP_POST1_LVL, value1); io_data = catalog->io->dp_ln_tx1; - dp_write(catalog->exe_mode, io_data, TXn_TX_DRV_LVL_V420, - value0); - dp_write(catalog->exe_mode, io_data, TXn_TX_EMP_POST1_LVL, - value1); + dp_write(TXn_TX_DRV_LVL_V420, value0); + dp_write(TXn_TX_EMP_POST1_LVL, value1); DP_DEBUG("hw: vx_value=0x%x px_value=0x%x\n", value0, value1); @@ -326,66 +309,50 @@ static void dp_catalog_ctrl_lane_pnswap_v420(struct dp_catalog_ctrl *ctrl, cfg1 |= ((ln_pnswap >> 3) & 0x1) << 2; io_data = catalog->io->dp_ln_tx0; - dp_write(catalog->exe_mode, io_data, TXn_TX_POL_INV_V420, cfg0); + dp_write(TXn_TX_POL_INV_V420, cfg0); io_data = catalog->io->dp_ln_tx1; - dp_write(catalog->exe_mode, io_data, TXn_TX_POL_INV_V420, cfg1); + dp_write(TXn_TX_POL_INV_V420, cfg1); } static void dp_catalog_put_v420(struct dp_catalog *catalog) { struct dp_catalog_private_v420 *catalog_priv; - if (!catalog || !catalog->priv.data) + if (!catalog) return; - catalog_priv = catalog->priv.data; + catalog_priv = container_of(catalog->sub, + struct dp_catalog_private_v420, sub); devm_kfree(catalog_priv->dev, catalog_priv); } -static void dp_catalog_set_exe_mode_v420(struct dp_catalog *catalog, char *mode) -{ - struct dp_catalog_private_v420 *catalog_priv; - - if (!catalog || !catalog->priv.data) - return; - - catalog_priv = catalog->priv.data; - - strlcpy(catalog_priv->exe_mode, mode, sizeof(catalog_priv->exe_mode)); -} - -int dp_catalog_get_v420(struct device *dev, struct dp_catalog *catalog, - void *io) +struct dp_catalog_sub *dp_catalog_get_v420(struct device *dev, + struct dp_catalog *catalog, struct dp_catalog_io *io) { struct dp_catalog_private_v420 *catalog_priv; if (!dev || !catalog) { DP_ERR("invalid input\n"); - return -EINVAL; + return ERR_PTR(-EINVAL); } catalog_priv = devm_kzalloc(dev, sizeof(*catalog_priv), GFP_KERNEL); if (!catalog_priv) - return -ENOMEM; + return ERR_PTR(-ENOMEM); catalog_priv->dev = dev; catalog_priv->io = io; - catalog->priv.data = catalog_priv; + catalog_priv->dpc = catalog; - catalog->priv.put = dp_catalog_put_v420; - catalog->priv.set_exe_mode = dp_catalog_set_exe_mode_v420; + catalog_priv->sub.put = dp_catalog_put_v420; catalog->aux.setup = dp_catalog_aux_setup_v420; - catalog->aux.clear_hw_interrupts = - dp_catalog_aux_clear_hw_interrupts_v420; + catalog->aux.clear_hw_interrupts = dp_catalog_aux_clear_hw_int_v420; catalog->panel.config_msa = dp_catalog_panel_config_msa_v420; catalog->ctrl.phy_lane_cfg = dp_catalog_ctrl_phy_lane_cfg_v420; catalog->ctrl.update_vx_px = dp_catalog_ctrl_update_vx_px_v420; catalog->ctrl.lane_pnswap = dp_catalog_ctrl_lane_pnswap_v420; - /* Set the default execution mode to hardware mode */ - dp_catalog_set_exe_mode_v420(catalog, "hw"); - - return 0; + return &catalog_priv->sub; }