summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/gpu/drm/msm/sde/sde_hw_catalog.c46
1 files changed, 38 insertions, 8 deletions
diff --git a/drivers/gpu/drm/msm/sde/sde_hw_catalog.c b/drivers/gpu/drm/msm/sde/sde_hw_catalog.c
index 3ac161f86680..b252b5bd2bce 100644
--- a/drivers/gpu/drm/msm/sde/sde_hw_catalog.c
+++ b/drivers/gpu/drm/msm/sde/sde_hw_catalog.c
@@ -153,6 +153,7 @@ enum {
WB_LEN,
WB_ID,
WB_XIN_ID,
+ WB_CLK_CTRL,
};
enum {
@@ -278,6 +279,8 @@ static struct sde_prop_type wb_prop[] = {
{WB_LEN, "qcom,sde-wb-size", false, PROP_TYPE_U32},
{WB_ID, "qcom,sde-wb-id", true, PROP_TYPE_U32_ARRAY},
{WB_XIN_ID, "qcom,sde-wb-xin-id", false, PROP_TYPE_U32_ARRAY},
+ {WB_CLK_CTRL, "qcom,sde-wb-clk-ctrl", false,
+ PROP_TYPE_BIT_OFFSET_ARRAY},
};
static struct sde_prop_type vbif_prop[] = {
@@ -507,7 +510,8 @@ static void _sde_sspp_setup_vig(struct sde_mdss_cfg *sde_cfg,
sblk->maxupscale = MAX_SSPP_UPSCALE;
sblk->maxdwnscale = MAX_SSPP_DOWNSCALE;
sspp->id = SSPP_VIG0 + *vig_count;
- sspp->clk_ctrl = SDE_CLK_CTRL_NONE;
+ sspp->clk_ctrl = SDE_CLK_CTRL_VIG0 + *vig_count;
+
sblk->format_list = plane_formats_yuv;
set_bit(SDE_SSPP_QOS, &sspp->features);
(*vig_count)++;
@@ -530,7 +534,7 @@ static void _sde_sspp_setup_rgb(struct sde_mdss_cfg *sde_cfg,
sblk->maxupscale = MAX_SSPP_UPSCALE;
sblk->maxdwnscale = MAX_SSPP_DOWNSCALE;
sspp->id = SSPP_RGB0 + *rgb_count;
- sspp->clk_ctrl = SDE_CLK_CTRL_NONE;
+ sspp->clk_ctrl = SDE_CLK_CTRL_RGB0 + *rgb_count;
sblk->format_list = plane_formats;
set_bit(SDE_SSPP_QOS, &sspp->features);
(*rgb_count)++;
@@ -544,7 +548,7 @@ static void _sde_sspp_setup_cursor(struct sde_mdss_cfg *sde_cfg,
sblk->maxupscale = SSPP_UNITY_SCALE;
sblk->maxdwnscale = SSPP_UNITY_SCALE;
sspp->id = SSPP_CURSOR0 + *cursor_count;
- sspp->clk_ctrl = SDE_CLK_CTRL_NONE;
+ sspp->clk_ctrl = SDE_CLK_CTRL_CURSOR0 + *cursor_count;
sblk->format_list = plane_formats;
(*cursor_count)++;
}
@@ -556,7 +560,7 @@ static void _sde_sspp_setup_dma(struct sde_mdss_cfg *sde_cfg,
sblk->maxupscale = SSPP_UNITY_SCALE;
sblk->maxdwnscale = SSPP_UNITY_SCALE;
sspp->id = SSPP_DMA0 + *dma_count;
- sspp->clk_ctrl = SDE_CLK_CTRL_NONE;
+ sspp->clk_ctrl = SDE_CLK_CTRL_DMA0 + *dma_count;
sblk->format_list = plane_formats;
set_bit(SDE_SSPP_QOS, &sspp->features);
(*dma_count)++;
@@ -565,7 +569,7 @@ static void _sde_sspp_setup_dma(struct sde_mdss_cfg *sde_cfg,
static int sde_sspp_parse_dt(struct device_node *np,
struct sde_mdss_cfg *sde_cfg)
{
- int rc, prop_count[MAX_BLOCKS], off_count, i;
+ int rc, prop_count[MAX_BLOCKS], off_count, i, j;
u32 prop_value[MAX_BLOCKS][MAX_SDE_HW_BLK];
u32 bit_value[MAX_BLOCKS][MAX_SDE_HW_BLK][MAX_BIT_OFFSET];
const char *type;
@@ -646,8 +650,15 @@ static int sde_sspp_parse_dt(struct device_node *np,
sblk->pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE;
sblk->src_blk.len = prop_value[SSPP_SIZE][0];
+ for (j = 0; j < sde_cfg->mdp_count; j++) {
+ sde_cfg->mdp[j].clk_ctrls[sspp->clk_ctrl].reg_off =
+ bit_value[SSPP_CLK_CTRL][i][0];
+ sde_cfg->mdp[j].clk_ctrls[sspp->clk_ctrl].bit_off =
+ bit_value[SSPP_CLK_CTRL][i][1];
+ }
+
SDE_DEBUG(
- "xin:%d danger:%x/%x/%x safe:%x/%x/%x creq:%x ram:%d\n",
+ "xin:%d danger:%x/%x/%x safe:%x/%x/%x creq:%x ram:%d clk%d:%x/%d\n",
sspp->xin_id,
sblk->danger_lut_linear,
sblk->danger_lut_tile,
@@ -656,7 +667,10 @@ static int sde_sspp_parse_dt(struct device_node *np,
sblk->safe_lut_tile,
sblk->safe_lut_nrt,
sblk->creq_lut_nrt,
- sblk->pixel_ram_size);
+ sblk->pixel_ram_size,
+ sspp->clk_ctrl,
+ sde_cfg->mdp[0].clk_ctrls[sspp->clk_ctrl].reg_off,
+ sde_cfg->mdp[0].clk_ctrls[sspp->clk_ctrl].bit_off);
}
end:
@@ -860,7 +874,7 @@ end:
static int sde_wb_parse_dt(struct device_node *np, struct sde_mdss_cfg *sde_cfg)
{
- int rc, prop_count[MAX_BLOCKS], i;
+ int rc, prop_count[MAX_BLOCKS], i, j;
u32 prop_value[MAX_BLOCKS][MAX_SDE_HW_BLK] = { { 0 } };
u32 bit_value[MAX_BLOCKS][MAX_SDE_HW_BLK][MAX_BIT_OFFSET]
= { { { 0 } } };
@@ -913,6 +927,22 @@ static int sde_wb_parse_dt(struct device_node *np, struct sde_mdss_cfg *sde_cfg)
set_bit(SDE_WB_BLOCK_MODE, &wb->features);
set_bit(SDE_WB_TRAFFIC_SHAPER, &wb->features);
set_bit(SDE_WB_YUV_CONFIG, &wb->features);
+
+ for (j = 0; j < sde_cfg->mdp_count; j++) {
+ sde_cfg->mdp[j].clk_ctrls[wb->clk_ctrl].reg_off =
+ bit_value[WB_CLK_CTRL][i][0];
+ sde_cfg->mdp[j].clk_ctrls[wb->clk_ctrl].bit_off =
+ bit_value[WB_CLK_CTRL][i][1];
+ }
+
+ SDE_DEBUG(
+ "wb:%d xin:%d vbif:%d clk%d:%x/%d\n",
+ wb->id - WB_0,
+ wb->xin_id,
+ wb->vbif_idx,
+ wb->clk_ctrl,
+ sde_cfg->mdp[0].clk_ctrls[wb->clk_ctrl].reg_off,
+ sde_cfg->mdp[0].clk_ctrls[wb->clk_ctrl].bit_off);
}
end: