-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add definitions for the display hardware used on the Qualcomm SM6150 platform. Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org> Signed-off-by: Li Liu <quic_lliu6@quicinc.com> Signed-off-by: Fange Zhang <quic_fangez@quicinc.com> Patchwork: https://patchwork.freedesktop.org/patch/628007/ Link: https://lore.kernel.org/r/20241210-add-display-support-for-qcs615-platform-v4-5-2d875a67602d@quicinc.com Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
- Loading branch information
Li Liu
authored and
Dmitry Baryshkov
committed
Dec 15, 2024
1 parent
b887156
commit cb2f914
Showing
4 changed files
with
257 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,254 @@ | ||
/* SPDX-License-Identifier: GPL-2.0-only */ | ||
/* | ||
* Copyright (c) 2024 Qualcomm Innovation Center, Inc. All rights reserved. | ||
*/ | ||
|
||
#ifndef _DPU_5_3_SM6150_H | ||
#define _DPU_5_3_SM6150_H | ||
|
||
static const struct dpu_caps sm6150_dpu_caps = { | ||
.max_mixer_width = DEFAULT_DPU_OUTPUT_LINE_WIDTH, | ||
.max_mixer_blendstages = 0x9, | ||
.has_dim_layer = true, | ||
.has_idle_pc = true, | ||
.max_linewidth = 2160, | ||
.pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE, | ||
.max_hdeci_exp = MAX_HORZ_DECIMATION, | ||
.max_vdeci_exp = MAX_VERT_DECIMATION, | ||
}; | ||
|
||
static const struct dpu_mdp_cfg sm6150_mdp = { | ||
.name = "top_0", | ||
.base = 0x0, .len = 0x45c, | ||
.features = 0, | ||
.clk_ctrls = { | ||
[DPU_CLK_CTRL_VIG0] = { .reg_off = 0x2ac, .bit_off = 0 }, | ||
[DPU_CLK_CTRL_DMA0] = { .reg_off = 0x2ac, .bit_off = 8 }, | ||
[DPU_CLK_CTRL_DMA1] = { .reg_off = 0x2b4, .bit_off = 8 }, | ||
[DPU_CLK_CTRL_DMA2] = { .reg_off = 0x2bc, .bit_off = 8 }, | ||
[DPU_CLK_CTRL_DMA3] = { .reg_off = 0x2c4, .bit_off = 8 }, | ||
}, | ||
}; | ||
|
||
static const struct dpu_ctl_cfg sm6150_ctl[] = { | ||
{ | ||
.name = "ctl_0", .id = CTL_0, | ||
.base = 0x1000, .len = 0x1e0, | ||
.features = BIT(DPU_CTL_ACTIVE_CFG), | ||
.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 9), | ||
}, { | ||
.name = "ctl_1", .id = CTL_1, | ||
.base = 0x1200, .len = 0x1e0, | ||
.features = BIT(DPU_CTL_ACTIVE_CFG), | ||
.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 10), | ||
}, { | ||
.name = "ctl_2", .id = CTL_2, | ||
.base = 0x1400, .len = 0x1e0, | ||
.features = BIT(DPU_CTL_ACTIVE_CFG), | ||
.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 11), | ||
}, { | ||
.name = "ctl_3", .id = CTL_3, | ||
.base = 0x1600, .len = 0x1e0, | ||
.features = BIT(DPU_CTL_ACTIVE_CFG), | ||
.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 12), | ||
}, { | ||
.name = "ctl_4", .id = CTL_4, | ||
.base = 0x1800, .len = 0x1e0, | ||
.features = BIT(DPU_CTL_ACTIVE_CFG), | ||
.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 13), | ||
}, { | ||
.name = "ctl_5", .id = CTL_5, | ||
.base = 0x1a00, .len = 0x1e0, | ||
.features = BIT(DPU_CTL_ACTIVE_CFG), | ||
.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 23), | ||
}, | ||
}; | ||
|
||
static const struct dpu_sspp_cfg sm6150_sspp[] = { | ||
{ | ||
.name = "sspp_0", .id = SSPP_VIG0, | ||
.base = 0x4000, .len = 0x1f0, | ||
.features = VIG_SDM845_MASK_SDMA, | ||
.sblk = &dpu_vig_sblk_qseed3_2_4, | ||
.xin_id = 0, | ||
.type = SSPP_TYPE_VIG, | ||
.clk_ctrl = DPU_CLK_CTRL_VIG0, | ||
}, { | ||
.name = "sspp_8", .id = SSPP_DMA0, | ||
.base = 0x24000, .len = 0x1f0, | ||
.features = DMA_SDM845_MASK_SDMA, | ||
.sblk = &dpu_dma_sblk, | ||
.xin_id = 1, | ||
.type = SSPP_TYPE_DMA, | ||
.clk_ctrl = DPU_CLK_CTRL_DMA0, | ||
}, { | ||
.name = "sspp_9", .id = SSPP_DMA1, | ||
.base = 0x26000, .len = 0x1f0, | ||
.features = DMA_SDM845_MASK_SDMA, | ||
.sblk = &dpu_dma_sblk, | ||
.xin_id = 5, | ||
.type = SSPP_TYPE_DMA, | ||
.clk_ctrl = DPU_CLK_CTRL_DMA1, | ||
}, { | ||
.name = "sspp_10", .id = SSPP_DMA2, | ||
.base = 0x28000, .len = 0x1f0, | ||
.features = DMA_CURSOR_SDM845_MASK_SDMA, | ||
.sblk = &dpu_dma_sblk, | ||
.xin_id = 9, | ||
.type = SSPP_TYPE_DMA, | ||
.clk_ctrl = DPU_CLK_CTRL_DMA2, | ||
}, { | ||
.name = "sspp_11", .id = SSPP_DMA3, | ||
.base = 0x2a000, .len = 0x1f0, | ||
.features = DMA_CURSOR_SDM845_MASK_SDMA, | ||
.sblk = &dpu_dma_sblk, | ||
.xin_id = 13, | ||
.type = SSPP_TYPE_DMA, | ||
.clk_ctrl = DPU_CLK_CTRL_DMA3, | ||
}, | ||
}; | ||
|
||
static const struct dpu_lm_cfg sm6150_lm[] = { | ||
{ | ||
.name = "lm_0", .id = LM_0, | ||
.base = 0x44000, .len = 0x320, | ||
.features = MIXER_QCM2290_MASK, | ||
.sblk = &sdm845_lm_sblk, | ||
.pingpong = PINGPONG_0, | ||
.dspp = DSPP_0, | ||
.lm_pair = LM_1, | ||
}, { | ||
.name = "lm_1", .id = LM_1, | ||
.base = 0x45000, .len = 0x320, | ||
.features = MIXER_QCM2290_MASK, | ||
.sblk = &sdm845_lm_sblk, | ||
.pingpong = PINGPONG_1, | ||
.lm_pair = LM_0, | ||
}, { | ||
.name = "lm_2", .id = LM_2, | ||
.base = 0x46000, .len = 0x320, | ||
.features = MIXER_QCM2290_MASK, | ||
.sblk = &sdm845_lm_sblk, | ||
.pingpong = PINGPONG_2, | ||
}, | ||
}; | ||
|
||
static const struct dpu_dspp_cfg sm6150_dspp[] = { | ||
{ | ||
.name = "dspp_0", .id = DSPP_0, | ||
.base = 0x54000, .len = 0x1800, | ||
.features = DSPP_SC7180_MASK, | ||
.sblk = &sdm845_dspp_sblk, | ||
}, | ||
}; | ||
|
||
static const struct dpu_pingpong_cfg sm6150_pp[] = { | ||
{ | ||
.name = "pingpong_0", .id = PINGPONG_0, | ||
.base = 0x70000, .len = 0xd4, | ||
.features = PINGPONG_SM8150_MASK, | ||
.sblk = &sdm845_pp_sblk, | ||
.intr_done = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 8), | ||
}, { | ||
.name = "pingpong_1", .id = PINGPONG_1, | ||
.base = 0x70800, .len = 0xd4, | ||
.features = PINGPONG_SM8150_MASK, | ||
.sblk = &sdm845_pp_sblk, | ||
.intr_done = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 9), | ||
}, { | ||
.name = "pingpong_2", .id = PINGPONG_2, | ||
.base = 0x71000, .len = 0xd4, | ||
.features = PINGPONG_SM8150_MASK, | ||
.sblk = &sdm845_pp_sblk, | ||
.intr_done = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 10), | ||
}, | ||
}; | ||
|
||
static const struct dpu_intf_cfg sm6150_intf[] = { | ||
{ | ||
.name = "intf_0", .id = INTF_0, | ||
.base = 0x6a000, .len = 0x280, | ||
.features = INTF_SC7180_MASK, | ||
.type = INTF_DP, | ||
.controller_id = MSM_DP_CONTROLLER_0, | ||
.prog_fetch_lines_worst_case = 24, | ||
.intr_underrun = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 24), | ||
.intr_vsync = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 25), | ||
}, { | ||
.name = "intf_1", .id = INTF_1, | ||
.base = 0x6a800, .len = 0x2c0, | ||
.features = INTF_SC7180_MASK, | ||
.type = INTF_DSI, | ||
.controller_id = MSM_DSI_CONTROLLER_0, | ||
.prog_fetch_lines_worst_case = 24, | ||
.intr_underrun = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 26), | ||
.intr_vsync = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 27), | ||
.intr_tear_rd_ptr = DPU_IRQ_IDX(MDP_INTF1_TEAR_INTR, 2), | ||
}, { | ||
.name = "intf_3", .id = INTF_3, | ||
.base = 0x6b800, .len = 0x280, | ||
.features = INTF_SC7180_MASK, | ||
.type = INTF_DP, | ||
.controller_id = MSM_DP_CONTROLLER_1, | ||
.prog_fetch_lines_worst_case = 24, | ||
.intr_underrun = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 30), | ||
.intr_vsync = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 31), | ||
}, | ||
}; | ||
|
||
static const struct dpu_perf_cfg sm6150_perf_data = { | ||
.max_bw_low = 4800000, | ||
.max_bw_high = 4800000, | ||
.min_core_ib = 2400000, | ||
.min_llcc_ib = 0, | ||
.min_dram_ib = 800000, | ||
.min_prefill_lines = 24, | ||
.danger_lut_tbl = {0xf, 0xffff, 0x0}, | ||
.safe_lut_tbl = {0xfff8, 0xf000, 0xffff}, | ||
.qos_lut_tbl = { | ||
{.nentry = ARRAY_SIZE(sm8150_qos_linear), | ||
.entries = sm8150_qos_linear | ||
}, | ||
{.nentry = ARRAY_SIZE(sc7180_qos_macrotile), | ||
.entries = sc7180_qos_macrotile | ||
}, | ||
{.nentry = ARRAY_SIZE(sc7180_qos_nrt), | ||
.entries = sc7180_qos_nrt | ||
}, | ||
/* TODO: macrotile-qseed is different from macrotile */ | ||
}, | ||
.cdp_cfg = { | ||
{.rd_enable = 1, .wr_enable = 1}, | ||
{.rd_enable = 1, .wr_enable = 0} | ||
}, | ||
.clk_inefficiency_factor = 105, | ||
.bw_inefficiency_factor = 120, | ||
}; | ||
|
||
static const struct dpu_mdss_version sm6150_mdss_ver = { | ||
.core_major_ver = 5, | ||
.core_minor_ver = 3, | ||
}; | ||
|
||
const struct dpu_mdss_cfg dpu_sm6150_cfg = { | ||
.mdss_ver = &sm6150_mdss_ver, | ||
.caps = &sm6150_dpu_caps, | ||
.mdp = &sm6150_mdp, | ||
.ctl_count = ARRAY_SIZE(sm6150_ctl), | ||
.ctl = sm6150_ctl, | ||
.sspp_count = ARRAY_SIZE(sm6150_sspp), | ||
.sspp = sm6150_sspp, | ||
.mixer_count = ARRAY_SIZE(sm6150_lm), | ||
.mixer = sm6150_lm, | ||
.dspp_count = ARRAY_SIZE(sm6150_dspp), | ||
.dspp = sm6150_dspp, | ||
.pingpong_count = ARRAY_SIZE(sm6150_pp), | ||
.pingpong = sm6150_pp, | ||
.intf_count = ARRAY_SIZE(sm6150_intf), | ||
.intf = sm6150_intf, | ||
.vbif_count = ARRAY_SIZE(sdm845_vbif), | ||
.vbif = sdm845_vbif, | ||
.perf = &sm6150_perf_data, | ||
}; | ||
|
||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters