drm/msm/sde: populate block names and lengths in catalog

Need to read register block length from the DTSI and populate
into the catalog to support register debug dumping. Also add a
name string to each of the blocks for debug purposes.

CRs-Fixed: 2005394
Change-Id: Ia2299a51d649942b9335bc023d098d9c4882f1de
Signed-off-by: Lloyd Atkinson <latkinso@codeaurora.org>
Signed-off-by: Abhinav Kumar <abhinavk@codeaurora.org>
This commit is contained in:
Lloyd Atkinson 2016-10-23 13:02:00 -04:00 committed by Abhinav Kumar
parent 4bc07bbb40
commit 1c28ca1e8b
14 changed files with 96 additions and 23 deletions

View file

@ -169,6 +169,7 @@ Optional properties:
e.g. qcom,sde-sspp-vig-blocks e.g. qcom,sde-sspp-vig-blocks
-- qcom,sde-vig-csc-off: offset of CSC hardware -- qcom,sde-vig-csc-off: offset of CSC hardware
-- qcom,sde-vig-qseed-off: offset of QSEED hardware -- qcom,sde-vig-qseed-off: offset of QSEED hardware
-- qcom,sde-vig-qseed-size: A u32 address range for qseed scaler.
-- qcom,sde-vig-pcc: offset and version of PCC hardware -- qcom,sde-vig-pcc: offset and version of PCC hardware
-- qcom,sde-vig-hsic: offset and version of global PA adjustment -- qcom,sde-vig-hsic: offset and version of global PA adjustment
-- qcom,sde-vig-memcolor: offset and version of PA memcolor hardware -- qcom,sde-vig-memcolor: offset and version of PA memcolor hardware
@ -178,6 +179,7 @@ Optional properties:
indicates that the SSPP RGB contains that feature hardware. indicates that the SSPP RGB contains that feature hardware.
e.g. qcom,sde-sspp-vig-blocks e.g. qcom,sde-sspp-vig-blocks
-- qcom,sde-rgb-scaler-off: offset of RGB scaler hardware -- qcom,sde-rgb-scaler-off: offset of RGB scaler hardware
-- qcom,sde-rgb-scaler-size: A u32 address range for scaler.
-- qcom,sde-rgb-pcc: offset and version of PCC hardware -- qcom,sde-rgb-pcc: offset and version of PCC hardware
- qcom,sde-dspp-blocks: A node that lists the blocks inside the DSPP hardware. The - qcom,sde-dspp-blocks: A node that lists the blocks inside the DSPP hardware. The
block entries will contain the offset and version of each block entries will contain the offset and version of each
@ -417,6 +419,7 @@ Example:
qcom,sde-sspp-vig-blocks { qcom,sde-sspp-vig-blocks {
qcom,sde-vig-csc-off = <0x320>; qcom,sde-vig-csc-off = <0x320>;
qcom,sde-vig-qseed-off = <0x200>; qcom,sde-vig-qseed-off = <0x200>;
qcom,sde-vig-qseed-size = <0x74>;
/* Offset from vig top, version of HSIC */ /* Offset from vig top, version of HSIC */
qcom,sde-vig-hsic = <0x200 0x00010000>; qcom,sde-vig-hsic = <0x200 0x00010000>;
qcom,sde-vig-memcolor = <0x200 0x00010000>; qcom,sde-vig-memcolor = <0x200 0x00010000>;
@ -425,6 +428,7 @@ Example:
qcom,sde-sspp-rgb-blocks { qcom,sde-sspp-rgb-blocks {
qcom,sde-rgb-scaler-off = <0x200>; qcom,sde-rgb-scaler-off = <0x200>;
qcom,sde-rgb-scaler-size = <0x74>;
qcom,sde-rgb-pcc = <0x380 0x00010000>; qcom,sde-rgb-pcc = <0x380 0x00010000>;
}; };

View file

@ -134,6 +134,7 @@ enum {
enum { enum {
VIG_QSEED_OFF, VIG_QSEED_OFF,
VIG_QSEED_LEN,
VIG_CSC_OFF, VIG_CSC_OFF,
VIG_HSIC_PROP, VIG_HSIC_PROP,
VIG_MEMCOLOR_PROP, VIG_MEMCOLOR_PROP,
@ -143,6 +144,7 @@ enum {
enum { enum {
RGB_SCALER_OFF, RGB_SCALER_OFF,
RGB_SCALER_LEN,
RGB_PCC_PROP, RGB_PCC_PROP,
RGB_PROP_MAX, RGB_PROP_MAX,
}; };
@ -301,6 +303,7 @@ static struct sde_prop_type sspp_prop[] = {
static struct sde_prop_type vig_prop[] = { static struct sde_prop_type vig_prop[] = {
{VIG_QSEED_OFF, "qcom,sde-vig-qseed-off", false, PROP_TYPE_U32}, {VIG_QSEED_OFF, "qcom,sde-vig-qseed-off", false, PROP_TYPE_U32},
{VIG_QSEED_LEN, "qcom,sde-vig-qseed-size", false, PROP_TYPE_U32},
{VIG_CSC_OFF, "qcom,sde-vig-csc-off", false, PROP_TYPE_U32}, {VIG_CSC_OFF, "qcom,sde-vig-csc-off", false, PROP_TYPE_U32},
{VIG_HSIC_PROP, "qcom,sde-vig-hsic", false, PROP_TYPE_U32_ARRAY}, {VIG_HSIC_PROP, "qcom,sde-vig-hsic", false, PROP_TYPE_U32_ARRAY},
{VIG_MEMCOLOR_PROP, "qcom,sde-vig-memcolor", false, {VIG_MEMCOLOR_PROP, "qcom,sde-vig-memcolor", false,
@ -310,6 +313,7 @@ static struct sde_prop_type vig_prop[] = {
static struct sde_prop_type rgb_prop[] = { static struct sde_prop_type rgb_prop[] = {
{RGB_SCALER_OFF, "qcom,sde-rgb-scaler-off", false, PROP_TYPE_U32}, {RGB_SCALER_OFF, "qcom,sde-rgb-scaler-off", false, PROP_TYPE_U32},
{RGB_SCALER_LEN, "qcom,sde-rgb-scaler-size", false, PROP_TYPE_U32},
{RGB_PCC_PROP, "qcom,sde-rgb-pcc", false, PROP_TYPE_U32_ARRAY}, {RGB_PCC_PROP, "qcom,sde-rgb-pcc", false, PROP_TYPE_U32_ARRAY},
}; };
@ -691,6 +695,7 @@ static void _sde_sspp_setup_vig(struct sde_mdss_cfg *sde_cfg,
sblk->maxdwnscale = MAX_SSPP_DOWNSCALE; sblk->maxdwnscale = MAX_SSPP_DOWNSCALE;
sblk->format_list = plane_formats_yuv; sblk->format_list = plane_formats_yuv;
sspp->id = SSPP_VIG0 + *vig_count; sspp->id = SSPP_VIG0 + *vig_count;
snprintf(sspp->name, SDE_HW_BLK_NAME_LEN, "sspp_%u", sspp->id);
sspp->clk_ctrl = SDE_CLK_CTRL_VIG0 + *vig_count; sspp->clk_ctrl = SDE_CLK_CTRL_VIG0 + *vig_count;
sspp->type = SSPP_TYPE_VIG; sspp->type = SSPP_TYPE_VIG;
set_bit(SDE_SSPP_QOS, &sspp->features); set_bit(SDE_SSPP_QOS, &sspp->features);
@ -704,14 +709,24 @@ static void _sde_sspp_setup_vig(struct sde_mdss_cfg *sde_cfg,
sblk->scaler_blk.id = SDE_SSPP_SCALER_QSEED2; sblk->scaler_blk.id = SDE_SSPP_SCALER_QSEED2;
sblk->scaler_blk.base = PROP_VALUE_ACCESS(prop_value, sblk->scaler_blk.base = PROP_VALUE_ACCESS(prop_value,
VIG_QSEED_OFF, 0); VIG_QSEED_OFF, 0);
} else if (sde_cfg->qseed_type == SDE_SSPP_SCALER_QSEED3) { sblk->scaler_blk.len = PROP_VALUE_ACCESS(prop_value,
VIG_QSEED_LEN, 0);
snprintf(sblk->scaler_blk.name, SDE_HW_BLK_NAME_LEN,
"sspp_scaler%u", sspp->id);
} else if (sde_cfg->qseed_type == SDE_SSPP_SCALER_QSEED3) {
set_bit(SDE_SSPP_SCALER_QSEED3, &sspp->features); set_bit(SDE_SSPP_SCALER_QSEED3, &sspp->features);
sblk->scaler_blk.id = SDE_SSPP_SCALER_QSEED3; sblk->scaler_blk.id = SDE_SSPP_SCALER_QSEED3;
sblk->scaler_blk.base = PROP_VALUE_ACCESS(prop_value, sblk->scaler_blk.base = PROP_VALUE_ACCESS(prop_value,
VIG_QSEED_OFF, 0); VIG_QSEED_OFF, 0);
sblk->scaler_blk.len = PROP_VALUE_ACCESS(prop_value,
VIG_QSEED_LEN, 0);
snprintf(sblk->scaler_blk.name, SDE_HW_BLK_NAME_LEN,
"sspp_scaler%u", sspp->id);
} }
sblk->csc_blk.id = SDE_SSPP_CSC; sblk->csc_blk.id = SDE_SSPP_CSC;
snprintf(sblk->csc_blk.name, SDE_HW_BLK_NAME_LEN,
"sspp_csc%u", sspp->id);
if (sde_cfg->csc_type == SDE_SSPP_CSC) { if (sde_cfg->csc_type == SDE_SSPP_CSC) {
set_bit(SDE_SSPP_CSC, &sspp->features); set_bit(SDE_SSPP_CSC, &sspp->features);
sblk->csc_blk.base = PROP_VALUE_ACCESS(prop_value, sblk->csc_blk.base = PROP_VALUE_ACCESS(prop_value,
@ -723,6 +738,8 @@ static void _sde_sspp_setup_vig(struct sde_mdss_cfg *sde_cfg,
} }
sblk->hsic_blk.id = SDE_SSPP_HSIC; sblk->hsic_blk.id = SDE_SSPP_HSIC;
snprintf(sblk->hsic_blk.name, SDE_HW_BLK_NAME_LEN,
"sspp_hsic%u", sspp->id);
if (prop_exists[VIG_HSIC_PROP]) { if (prop_exists[VIG_HSIC_PROP]) {
sblk->hsic_blk.base = PROP_VALUE_ACCESS(prop_value, sblk->hsic_blk.base = PROP_VALUE_ACCESS(prop_value,
VIG_HSIC_PROP, 0); VIG_HSIC_PROP, 0);
@ -733,6 +750,8 @@ static void _sde_sspp_setup_vig(struct sde_mdss_cfg *sde_cfg,
} }
sblk->memcolor_blk.id = SDE_SSPP_MEMCOLOR; sblk->memcolor_blk.id = SDE_SSPP_MEMCOLOR;
snprintf(sblk->memcolor_blk.name, SDE_HW_BLK_NAME_LEN,
"sspp_memcolor%u", sspp->id);
if (prop_exists[VIG_MEMCOLOR_PROP]) { if (prop_exists[VIG_MEMCOLOR_PROP]) {
sblk->memcolor_blk.base = PROP_VALUE_ACCESS(prop_value, sblk->memcolor_blk.base = PROP_VALUE_ACCESS(prop_value,
VIG_MEMCOLOR_PROP, 0); VIG_MEMCOLOR_PROP, 0);
@ -743,6 +762,8 @@ static void _sde_sspp_setup_vig(struct sde_mdss_cfg *sde_cfg,
} }
sblk->pcc_blk.id = SDE_SSPP_PCC; sblk->pcc_blk.id = SDE_SSPP_PCC;
snprintf(sblk->pcc_blk.name, SDE_HW_BLK_NAME_LEN,
"sspp_pcc%u", sspp->id);
if (prop_exists[VIG_PCC_PROP]) { if (prop_exists[VIG_PCC_PROP]) {
sblk->pcc_blk.base = PROP_VALUE_ACCESS(prop_value, sblk->pcc_blk.base = PROP_VALUE_ACCESS(prop_value,
VIG_PCC_PROP, 0); VIG_PCC_PROP, 0);
@ -762,6 +783,7 @@ static void _sde_sspp_setup_rgb(struct sde_mdss_cfg *sde_cfg,
sblk->maxdwnscale = MAX_SSPP_DOWNSCALE; sblk->maxdwnscale = MAX_SSPP_DOWNSCALE;
sblk->format_list = plane_formats; sblk->format_list = plane_formats;
sspp->id = SSPP_RGB0 + *rgb_count; sspp->id = SSPP_RGB0 + *rgb_count;
snprintf(sspp->name, SDE_HW_BLK_NAME_LEN, "sspp_%u", sspp->id);
sspp->clk_ctrl = SDE_CLK_CTRL_RGB0 + *rgb_count; sspp->clk_ctrl = SDE_CLK_CTRL_RGB0 + *rgb_count;
sspp->type = SSPP_TYPE_RGB; sspp->type = SSPP_TYPE_RGB;
set_bit(SDE_SSPP_QOS, &sspp->features); set_bit(SDE_SSPP_QOS, &sspp->features);
@ -775,11 +797,19 @@ static void _sde_sspp_setup_rgb(struct sde_mdss_cfg *sde_cfg,
sblk->scaler_blk.id = SDE_SSPP_SCALER_QSEED2; sblk->scaler_blk.id = SDE_SSPP_SCALER_QSEED2;
sblk->scaler_blk.base = PROP_VALUE_ACCESS(prop_value, sblk->scaler_blk.base = PROP_VALUE_ACCESS(prop_value,
RGB_SCALER_OFF, 0); RGB_SCALER_OFF, 0);
sblk->scaler_blk.len = PROP_VALUE_ACCESS(prop_value,
RGB_SCALER_LEN, 0);
snprintf(sblk->scaler_blk.name, SDE_HW_BLK_NAME_LEN,
"sspp_scaler%u", sspp->id);
} else if (sde_cfg->qseed_type == SDE_SSPP_SCALER_QSEED3) { } else if (sde_cfg->qseed_type == SDE_SSPP_SCALER_QSEED3) {
set_bit(SDE_SSPP_SCALER_RGB, &sspp->features); set_bit(SDE_SSPP_SCALER_RGB, &sspp->features);
sblk->scaler_blk.id = SDE_SSPP_SCALER_QSEED3; sblk->scaler_blk.id = SDE_SSPP_SCALER_QSEED3;
sblk->scaler_blk.base = PROP_VALUE_ACCESS(prop_value, sblk->scaler_blk.base = PROP_VALUE_ACCESS(prop_value,
RGB_SCALER_OFF, 0); RGB_SCALER_LEN, 0);
sblk->scaler_blk.len = PROP_VALUE_ACCESS(prop_value,
SSPP_SCALE_SIZE, 0);
snprintf(sblk->scaler_blk.name, SDE_HW_BLK_NAME_LEN,
"sspp_scaler%u", sspp->id);
} }
sblk->pcc_blk.id = SDE_SSPP_PCC; sblk->pcc_blk.id = SDE_SSPP_PCC;
@ -803,6 +833,7 @@ static void _sde_sspp_setup_cursor(struct sde_mdss_cfg *sde_cfg,
sblk->maxdwnscale = SSPP_UNITY_SCALE; sblk->maxdwnscale = SSPP_UNITY_SCALE;
sblk->format_list = cursor_formats; sblk->format_list = cursor_formats;
sspp->id = SSPP_CURSOR0 + *cursor_count; sspp->id = SSPP_CURSOR0 + *cursor_count;
snprintf(sspp->name, SDE_HW_BLK_NAME_LEN, "sspp_%u", sspp->id);
sspp->clk_ctrl = SDE_CLK_CTRL_CURSOR0 + *cursor_count; sspp->clk_ctrl = SDE_CLK_CTRL_CURSOR0 + *cursor_count;
sspp->type = SSPP_TYPE_CURSOR; sspp->type = SSPP_TYPE_CURSOR;
(*cursor_count)++; (*cursor_count)++;
@ -819,6 +850,7 @@ static void _sde_sspp_setup_dma(struct sde_mdss_cfg *sde_cfg,
sspp->id = SSPP_DMA0 + *dma_count; sspp->id = SSPP_DMA0 + *dma_count;
sspp->clk_ctrl = SDE_CLK_CTRL_DMA0 + *dma_count; sspp->clk_ctrl = SDE_CLK_CTRL_DMA0 + *dma_count;
sspp->type = SSPP_TYPE_DMA; sspp->type = SSPP_TYPE_DMA;
snprintf(sspp->name, SDE_HW_BLK_NAME_LEN, "sspp_%u", sspp->id);
set_bit(SDE_SSPP_QOS, &sspp->features); set_bit(SDE_SSPP_QOS, &sspp->features);
(*dma_count)++; (*dma_count)++;
snprintf(sspp->name, sizeof(sspp->name), "dma%d", *dma_count-1); snprintf(sspp->name, sizeof(sspp->name), "dma%d", *dma_count-1);
@ -917,10 +949,13 @@ static int sde_sspp_parse_dt(struct device_node *np,
sspp->sblk = sblk; sspp->sblk = sblk;
sspp->base = PROP_VALUE_ACCESS(prop_value, SSPP_OFF, i); sspp->base = PROP_VALUE_ACCESS(prop_value, SSPP_OFF, i);
sspp->len = PROP_VALUE_ACCESS(prop_value, SSPP_SIZE, 0);
sblk->maxlinewidth = sde_cfg->max_sspp_linewidth; sblk->maxlinewidth = sde_cfg->max_sspp_linewidth;
set_bit(SDE_SSPP_SRC, &sspp->features); set_bit(SDE_SSPP_SRC, &sspp->features);
sblk->src_blk.id = SDE_SSPP_SRC; sblk->src_blk.id = SDE_SSPP_SRC;
snprintf(sblk->src_blk.name, SDE_HW_BLK_NAME_LEN, "sspp_src_%u",
sblk->src_blk.id);
of_property_read_string_index(np, of_property_read_string_index(np,
sspp_prop[SSPP_TYPE].prop_name, i, &type); sspp_prop[SSPP_TYPE].prop_name, i, &type);
@ -1033,7 +1068,9 @@ static int sde_ctl_parse_dt(struct device_node *np,
for (i = 0; i < off_count; i++) { for (i = 0; i < off_count; i++) {
ctl = sde_cfg->ctl + i; ctl = sde_cfg->ctl + i;
ctl->base = PROP_VALUE_ACCESS(prop_value, HW_OFF, i); ctl->base = PROP_VALUE_ACCESS(prop_value, HW_OFF, i);
ctl->len = PROP_VALUE_ACCESS(prop_value, HW_LEN, 0);
ctl->id = CTL_0 + i; ctl->id = CTL_0 + i;
snprintf(ctl->name, SDE_HW_BLK_NAME_LEN, "ctl_%u", ctl->id);
if (i < MAX_SPLIT_DISPLAY_CTL) if (i < MAX_SPLIT_DISPLAY_CTL)
set_bit(SDE_CTL_SPLIT_DISPLAY, &ctl->features); set_bit(SDE_CTL_SPLIT_DISPLAY, &ctl->features);
@ -1125,6 +1162,8 @@ static int sde_mixer_parse_dt(struct device_node *np,
mixer->base = PROP_VALUE_ACCESS(prop_value, MIXER_OFF, i); mixer->base = PROP_VALUE_ACCESS(prop_value, MIXER_OFF, i);
mixer->len = PROP_VALUE_ACCESS(prop_value, MIXER_LEN, 0); mixer->len = PROP_VALUE_ACCESS(prop_value, MIXER_LEN, 0);
mixer->id = LM_0 + i; mixer->id = LM_0 + i;
snprintf(mixer->name, SDE_HW_BLK_NAME_LEN, "lm_%u", mixer->id);
if (!prop_exists[MIXER_LEN]) if (!prop_exists[MIXER_LEN])
mixer->len = DEFAULT_SDE_HW_BLOCK_LEN; mixer->len = DEFAULT_SDE_HW_BLOCK_LEN;
@ -1211,6 +1250,8 @@ static int sde_intf_parse_dt(struct device_node *np,
intf->base = PROP_VALUE_ACCESS(prop_value, INTF_OFF, i); intf->base = PROP_VALUE_ACCESS(prop_value, INTF_OFF, i);
intf->len = PROP_VALUE_ACCESS(prop_value, INTF_LEN, 0); intf->len = PROP_VALUE_ACCESS(prop_value, INTF_LEN, 0);
intf->id = INTF_0 + i; intf->id = INTF_0 + i;
snprintf(intf->name, SDE_HW_BLK_NAME_LEN, "intf_%u", intf->id);
if (!prop_exists[INTF_LEN]) if (!prop_exists[INTF_LEN])
intf->len = DEFAULT_SDE_HW_BLOCK_LEN; intf->len = DEFAULT_SDE_HW_BLOCK_LEN;
@ -1290,6 +1331,7 @@ static int sde_wb_parse_dt(struct device_node *np,
wb->base = PROP_VALUE_ACCESS(prop_value, WB_OFF, i); wb->base = PROP_VALUE_ACCESS(prop_value, WB_OFF, i);
wb->id = WB_0 + PROP_VALUE_ACCESS(prop_value, WB_ID, i); wb->id = WB_0 + PROP_VALUE_ACCESS(prop_value, WB_ID, i);
snprintf(wb->name, SDE_HW_BLK_NAME_LEN, "wb_%u", wb->id);
wb->clk_ctrl = SDE_CLK_CTRL_WB0 + wb->clk_ctrl = SDE_CLK_CTRL_WB0 +
PROP_VALUE_ACCESS(prop_value, WB_ID, i); PROP_VALUE_ACCESS(prop_value, WB_ID, i);
wb->xin_id = PROP_VALUE_ACCESS(prop_value, WB_XIN_ID, i); wb->xin_id = PROP_VALUE_ACCESS(prop_value, WB_XIN_ID, i);
@ -1515,7 +1557,9 @@ static int sde_dspp_parse_dt(struct device_node *np,
for (i = 0; i < off_count; i++) { for (i = 0; i < off_count; i++) {
dspp = sde_cfg->dspp + i; dspp = sde_cfg->dspp + i;
dspp->base = PROP_VALUE_ACCESS(prop_value, DSPP_OFF, i); dspp->base = PROP_VALUE_ACCESS(prop_value, DSPP_OFF, i);
dspp->len = PROP_VALUE_ACCESS(prop_value, DSPP_SIZE, 0);
dspp->id = DSPP_0 + i; dspp->id = DSPP_0 + i;
snprintf(dspp->name, SDE_HW_BLK_NAME_LEN, "dspp_%u", dspp->id);
sblk = kzalloc(sizeof(*sblk), GFP_KERNEL); sblk = kzalloc(sizeof(*sblk), GFP_KERNEL);
if (!sblk) { if (!sblk) {
@ -1585,6 +1629,7 @@ static int sde_cdm_parse_dt(struct device_node *np,
cdm = sde_cfg->cdm + i; cdm = sde_cfg->cdm + i;
cdm->base = PROP_VALUE_ACCESS(prop_value, HW_OFF, i); cdm->base = PROP_VALUE_ACCESS(prop_value, HW_OFF, i);
cdm->id = CDM_0 + i; cdm->id = CDM_0 + i;
snprintf(cdm->name, SDE_HW_BLK_NAME_LEN, "cdm_%u", cdm->id);
cdm->len = PROP_VALUE_ACCESS(prop_value, HW_LEN, 0); cdm->len = PROP_VALUE_ACCESS(prop_value, HW_LEN, 0);
/* intf3 and wb2 for cdm block */ /* intf3 and wb2 for cdm block */
@ -1777,15 +1822,19 @@ static int sde_pp_parse_dt(struct device_node *np,
pp->base = PROP_VALUE_ACCESS(prop_value, PP_OFF, i); pp->base = PROP_VALUE_ACCESS(prop_value, PP_OFF, i);
pp->id = PINGPONG_0 + i; pp->id = PINGPONG_0 + i;
snprintf(pp->name, SDE_HW_BLK_NAME_LEN, "pingpong_%u", pp->id);
pp->len = PROP_VALUE_ACCESS(prop_value, PP_LEN, 0); pp->len = PROP_VALUE_ACCESS(prop_value, PP_LEN, 0);
sblk->te.base = PROP_VALUE_ACCESS(prop_value, TE_OFF, i); sblk->te.base = PROP_VALUE_ACCESS(prop_value, TE_OFF, i);
sblk->te.id = SDE_PINGPONG_TE; sblk->te.id = SDE_PINGPONG_TE;
snprintf(sblk->te.name, SDE_HW_BLK_NAME_LEN, "te_%u", pp->id);
set_bit(SDE_PINGPONG_TE, &pp->features); set_bit(SDE_PINGPONG_TE, &pp->features);
sblk->te2.base = PROP_VALUE_ACCESS(prop_value, TE2_OFF, i); sblk->te2.base = PROP_VALUE_ACCESS(prop_value, TE2_OFF, i);
if (sblk->te2.base) { if (sblk->te2.base) {
sblk->te2.id = SDE_PINGPONG_TE2; sblk->te2.id = SDE_PINGPONG_TE2;
snprintf(sblk->te2.name, SDE_HW_BLK_NAME_LEN, "te2_%u",
pp->id);
set_bit(SDE_PINGPONG_TE2, &pp->features); set_bit(SDE_PINGPONG_TE2, &pp->features);
set_bit(SDE_PINGPONG_SPLIT, &pp->features); set_bit(SDE_PINGPONG_SPLIT, &pp->features);
} }
@ -1796,6 +1845,8 @@ static int sde_pp_parse_dt(struct device_node *np,
sblk->dsc.base = PROP_VALUE_ACCESS(prop_value, DSC_OFF, i); sblk->dsc.base = PROP_VALUE_ACCESS(prop_value, DSC_OFF, i);
if (sblk->dsc.base) { if (sblk->dsc.base) {
sblk->dsc.id = SDE_PINGPONG_DSC; sblk->dsc.id = SDE_PINGPONG_DSC;
snprintf(sblk->dsc.name, SDE_HW_BLK_NAME_LEN, "dsc_%u",
pp->id);
set_bit(SDE_PINGPONG_DSC, &pp->features); set_bit(SDE_PINGPONG_DSC, &pp->features);
} }
} }
@ -1926,9 +1977,13 @@ static int sde_parse_dt(struct device_node *np, struct sde_mdss_cfg *cfg)
cfg->mdss_count = 1; cfg->mdss_count = 1;
cfg->mdss[0].base = MDSS_BASE_OFFSET; cfg->mdss[0].base = MDSS_BASE_OFFSET;
cfg->mdss[0].id = MDP_TOP; cfg->mdss[0].id = MDP_TOP;
snprintf(cfg->mdss[0].name, SDE_HW_BLK_NAME_LEN, "mdss_%u",
cfg->mdss[0].id);
cfg->mdp_count = 1; cfg->mdp_count = 1;
cfg->mdp[0].id = MDP_TOP; cfg->mdp[0].id = MDP_TOP;
snprintf(cfg->mdp[0].name, SDE_HW_BLK_NAME_LEN, "top_%u",
cfg->mdp[0].id);
cfg->mdp[0].base = PROP_VALUE_ACCESS(prop_value, SDE_OFF, 0); cfg->mdp[0].base = PROP_VALUE_ACCESS(prop_value, SDE_OFF, 0);
cfg->mdp[0].len = PROP_VALUE_ACCESS(prop_value, SDE_LEN, 0); cfg->mdp[0].len = PROP_VALUE_ACCESS(prop_value, SDE_LEN, 0);
if (!prop_exists[SDE_LEN]) if (!prop_exists[SDE_LEN])

View file

@ -48,6 +48,8 @@
#define IS_MSMSKUNK_TARGET(rev) IS_SDE_MAJOR_MINOR_SAME((rev), SDE_HW_VER_400) #define IS_MSMSKUNK_TARGET(rev) IS_SDE_MAJOR_MINOR_SAME((rev), SDE_HW_VER_400)
#define SDE_HW_BLK_NAME_LEN 16
#define MAX_IMG_WIDTH 0x3fff #define MAX_IMG_WIDTH 0x3fff
#define MAX_IMG_HEIGHT 0x3fff #define MAX_IMG_HEIGHT 0x3fff
@ -58,8 +60,6 @@
#define SDE_COLOR_PROCESS_MAJOR(version) (((version) & 0xFFFF0000) >> 16) #define SDE_COLOR_PROCESS_MAJOR(version) (((version) & 0xFFFF0000) >> 16)
#define SDE_COLOR_PROCESS_MINOR(version) ((version) & 0xFFFF) #define SDE_COLOR_PROCESS_MINOR(version) ((version) & 0xFFFF)
#define SSPP_NAME_SIZE 12
/** /**
* MDP TOP BLOCK features * MDP TOP BLOCK features
* @SDE_MDP_PANIC_PER_PIPE Panic configuration needs to be be done per pipe * @SDE_MDP_PANIC_PER_PIPE Panic configuration needs to be be done per pipe
@ -236,12 +236,14 @@ enum {
/** /**
* MACRO SDE_HW_BLK_INFO - information of HW blocks inside SDE * MACRO SDE_HW_BLK_INFO - information of HW blocks inside SDE
* @name: string name for debug purposes
* @id: enum identifying this block * @id: enum identifying this block
* @base: register base offset to mdss * @base: register base offset to mdss
* @len: length of hardware block * @len: length of hardware block
* @features bit mask identifying sub-blocks/features * @features bit mask identifying sub-blocks/features
*/ */
#define SDE_HW_BLK_INFO \ #define SDE_HW_BLK_INFO \
char name[SDE_HW_BLK_NAME_LEN]; \
u32 id; \ u32 id; \
u32 base; \ u32 base; \
u32 len; \ u32 len; \
@ -249,12 +251,14 @@ enum {
/** /**
* MACRO SDE_HW_SUBBLK_INFO - information of HW sub-block inside SDE * MACRO SDE_HW_SUBBLK_INFO - information of HW sub-block inside SDE
* @name: string name for debug purposes
* @id: enum identifying this sub-block * @id: enum identifying this sub-block
* @base: offset of this sub-block relative to the block * @base: offset of this sub-block relative to the block
* offset * offset
* @len register block length of this sub-block * @len register block length of this sub-block
*/ */
#define SDE_HW_SUBBLK_INFO \ #define SDE_HW_SUBBLK_INFO \
char name[SDE_HW_BLK_NAME_LEN]; \
u32 id; \ u32 id; \
u32 base; \ u32 base; \
u32 len u32 len
@ -458,7 +462,6 @@ struct sde_ctl_cfg {
* @sblk: SSPP sub-blocks information * @sblk: SSPP sub-blocks information
* @xin_id: bus client identifier * @xin_id: bus client identifier
* @clk_ctrl clock control identifier * @clk_ctrl clock control identifier
* @name source pipe name
* @type sspp type identifier * @type sspp type identifier
*/ */
struct sde_sspp_cfg { struct sde_sspp_cfg {
@ -466,7 +469,6 @@ struct sde_sspp_cfg {
const struct sde_sspp_sub_blks *sblk; const struct sde_sspp_sub_blks *sblk;
u32 xin_id; u32 xin_id;
enum sde_clk_ctrl_type clk_ctrl; enum sde_clk_ctrl_type clk_ctrl;
char name[SSPP_NAME_SIZE];
u32 type; u32 type;
}; };

View file

@ -79,6 +79,7 @@ static struct sde_cdm_cfg *_cdm_offset(enum sde_cdm cdm,
if (cdm == m->cdm[i].id) { if (cdm == m->cdm[i].id) {
b->base_off = addr; b->base_off = addr;
b->blk_off = m->cdm[i].base; b->blk_off = m->cdm[i].base;
b->length = m->cdm[i].len;
b->hwversion = m->hwversion; b->hwversion = m->hwversion;
b->log_mask = SDE_DBG_MASK_CDM; b->log_mask = SDE_DBG_MASK_CDM;
return &m->cdm[i]; return &m->cdm[i];

View file

@ -39,6 +39,7 @@ static struct sde_ctl_cfg *_ctl_offset(enum sde_ctl ctl,
if (ctl == m->ctl[i].id) { if (ctl == m->ctl[i].id) {
b->base_off = addr; b->base_off = addr;
b->blk_off = m->ctl[i].base; b->blk_off = m->ctl[i].base;
b->length = m->ctl[i].len;
b->hwversion = m->hwversion; b->hwversion = m->hwversion;
b->log_mask = SDE_DBG_MASK_CTL; b->log_mask = SDE_DBG_MASK_CTL;
return &m->ctl[i]; return &m->ctl[i];

View file

@ -1,4 +1,4 @@
/* Copyright (c) 2015-2016, The Linux Foundation. All rights reserved. /* Copyright (c) 2015-2017, The Linux Foundation. All rights reserved.
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and * it under the terms of the GNU General Public License version 2 and
@ -27,6 +27,7 @@ static struct sde_dspp_cfg *_dspp_offset(enum sde_dspp dspp,
if (dspp == m->dspp[i].id) { if (dspp == m->dspp[i].id) {
b->base_off = addr; b->base_off = addr;
b->blk_off = m->dspp[i].base; b->blk_off = m->dspp[i].base;
b->length = m->dspp[i].len;
b->hwversion = m->hwversion; b->hwversion = m->hwversion;
b->log_mask = SDE_DBG_MASK_DSPP; b->log_mask = SDE_DBG_MASK_DSPP;
return &m->dspp[i]; return &m->dspp[i];

View file

@ -1,4 +1,4 @@
/* Copyright (c) 2015-2016, The Linux Foundation. All rights reserved. /* Copyright (c) 2015-2017, The Linux Foundation. All rights reserved.
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and * it under the terms of the GNU General Public License version 2 and
@ -83,6 +83,7 @@ static struct sde_intf_cfg *_intf_offset(enum sde_intf intf,
(m->intf[i].type != INTF_NONE)) { (m->intf[i].type != INTF_NONE)) {
b->base_off = addr; b->base_off = addr;
b->blk_off = m->intf[i].base; b->blk_off = m->intf[i].base;
b->length = m->intf[i].len;
b->hwversion = m->hwversion; b->hwversion = m->hwversion;
b->log_mask = SDE_DBG_MASK_INTF; b->log_mask = SDE_DBG_MASK_INTF;
return &m->intf[i]; return &m->intf[i];

View file

@ -1,4 +1,4 @@
/* Copyright (c) 2015-2016, The Linux Foundation. All rights reserved. /* Copyright (c) 2015-2017, The Linux Foundation. All rights reserved.
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and * it under the terms of the GNU General Public License version 2 and
@ -37,6 +37,7 @@ static struct sde_lm_cfg *_lm_offset(enum sde_lm mixer,
if (mixer == m->mixer[i].id) { if (mixer == m->mixer[i].id) {
b->base_off = addr; b->base_off = addr;
b->blk_off = m->mixer[i].base; b->blk_off = m->mixer[i].base;
b->length = m->mixer[i].len;
b->hwversion = m->hwversion; b->hwversion = m->hwversion;
b->log_mask = SDE_DBG_MASK_LM; b->log_mask = SDE_DBG_MASK_LM;
return &m->mixer[i]; return &m->mixer[i];

View file

@ -1,4 +1,4 @@
/* Copyright (c) 2015-2016, The Linux Foundation. All rights reserved. /* Copyright (c) 2015-2017, The Linux Foundation. All rights reserved.
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and * it under the terms of the GNU General Public License version 2 and
@ -47,6 +47,7 @@ static struct sde_pingpong_cfg *_pingpong_offset(enum sde_pingpong pp,
if (pp == m->pingpong[i].id) { if (pp == m->pingpong[i].id) {
b->base_off = addr; b->base_off = addr;
b->blk_off = m->pingpong[i].base; b->blk_off = m->pingpong[i].base;
b->length = m->pingpong[i].len;
b->hwversion = m->hwversion; b->hwversion = m->hwversion;
b->log_mask = SDE_DBG_MASK_PINGPONG; b->log_mask = SDE_DBG_MASK_PINGPONG;
return &m->pingpong[i]; return &m->pingpong[i];

View file

@ -903,6 +903,7 @@ static struct sde_sspp_cfg *_sspp_offset(enum sde_sspp sspp,
if (sspp == catalog->sspp[i].id) { if (sspp == catalog->sspp[i].id) {
b->base_off = addr; b->base_off = addr;
b->blk_off = catalog->sspp[i].base; b->blk_off = catalog->sspp[i].base;
b->length = catalog->sspp[i].len;
b->hwversion = catalog->hwversion; b->hwversion = catalog->hwversion;
b->log_mask = SDE_DBG_MASK_SSPP; b->log_mask = SDE_DBG_MASK_SSPP;
return &catalog->sspp[i]; return &catalog->sspp[i];
@ -917,26 +918,26 @@ struct sde_hw_pipe *sde_hw_sspp_init(enum sde_sspp idx,
void __iomem *addr, void __iomem *addr,
struct sde_mdss_cfg *catalog) struct sde_mdss_cfg *catalog)
{ {
struct sde_hw_pipe *ctx; struct sde_hw_pipe *hw_pipe;
struct sde_sspp_cfg *cfg; struct sde_sspp_cfg *cfg;
ctx = kzalloc(sizeof(*ctx), GFP_KERNEL); hw_pipe = kzalloc(sizeof(*hw_pipe), GFP_KERNEL);
if (!ctx) if (!hw_pipe)
return ERR_PTR(-ENOMEM); return ERR_PTR(-ENOMEM);
cfg = _sspp_offset(idx, addr, catalog, &ctx->hw); cfg = _sspp_offset(idx, addr, catalog, &hw_pipe->hw);
if (IS_ERR_OR_NULL(cfg)) { if (IS_ERR_OR_NULL(cfg)) {
kfree(ctx); kfree(hw_pipe);
return ERR_PTR(-EINVAL); return ERR_PTR(-EINVAL);
} }
/* Assign ops */ /* Assign ops */
ctx->idx = idx; hw_pipe->idx = idx;
ctx->cap = cfg; hw_pipe->cap = cfg;
_setup_layer_ops(ctx, ctx->cap->features); _setup_layer_ops(hw_pipe, hw_pipe->cap->features);
ctx->highest_bank_bit = catalog->mdp[0].highest_bank_bit; hw_pipe->highest_bank_bit = catalog->mdp[0].highest_bank_bit;
return ctx; return hw_pipe;
} }
void sde_hw_sspp_destroy(struct sde_hw_pipe *ctx) void sde_hw_sspp_destroy(struct sde_hw_pipe *ctx)

View file

@ -1,4 +1,4 @@
/* Copyright (c) 2015-2016, The Linux Foundation. All rights reserved. /* Copyright (c) 2015-2017, The Linux Foundation. All rights reserved.
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and * it under the terms of the GNU General Public License version 2 and
@ -225,6 +225,7 @@ static const struct sde_mdp_cfg *_top_offset(enum sde_mdp mdp,
if (mdp == m->mdp[i].id) { if (mdp == m->mdp[i].id) {
b->base_off = addr; b->base_off = addr;
b->blk_off = m->mdp[i].base; b->blk_off = m->mdp[i].base;
b->length = m->mdp[i].len;
b->hwversion = m->hwversion; b->hwversion = m->hwversion;
b->log_mask = SDE_DBG_MASK_TOP; b->log_mask = SDE_DBG_MASK_TOP;
return &m->mdp[i]; return &m->mdp[i];

View file

@ -24,12 +24,14 @@
* @base_off: mdp register mapped offset * @base_off: mdp register mapped offset
* @blk_off: pipe offset relative to mdss offset * @blk_off: pipe offset relative to mdss offset
* @length length of register block offset * @length length of register block offset
* @xin_id xin id
* @hwversion mdss hw version number * @hwversion mdss hw version number
*/ */
struct sde_hw_blk_reg_map { struct sde_hw_blk_reg_map {
void __iomem *base_off; void __iomem *base_off;
u32 blk_off; u32 blk_off;
u32 length; u32 length;
u32 xin_id;
u32 hwversion; u32 hwversion;
u32 log_mask; u32 log_mask;
}; };

View file

@ -1,4 +1,4 @@
/* Copyright (c) 2015-2016, The Linux Foundation. All rights reserved. /* Copyright (c) 2015-2017, The Linux Foundation. All rights reserved.
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and * it under the terms of the GNU General Public License version 2 and
@ -123,6 +123,7 @@ static const struct sde_vbif_cfg *_top_offset(enum sde_vbif vbif,
if (vbif == m->vbif[i].id) { if (vbif == m->vbif[i].id) {
b->base_off = addr; b->base_off = addr;
b->blk_off = m->vbif[i].base; b->blk_off = m->vbif[i].base;
b->length = m->vbif[i].len;
b->hwversion = m->hwversion; b->hwversion = m->hwversion;
b->log_mask = SDE_DBG_MASK_VBIF; b->log_mask = SDE_DBG_MASK_VBIF;
return &m->vbif[i]; return &m->vbif[i];

View file

@ -1,4 +1,4 @@
/* Copyright (c) 2015-2016, The Linux Foundation. All rights reserved. /* Copyright (c) 2015-2017, The Linux Foundation. All rights reserved.
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and * it under the terms of the GNU General Public License version 2 and
@ -57,6 +57,7 @@ static struct sde_wb_cfg *_wb_offset(enum sde_wb wb,
if (wb == m->wb[i].id) { if (wb == m->wb[i].id) {
b->base_off = addr; b->base_off = addr;
b->blk_off = m->wb[i].base; b->blk_off = m->wb[i].base;
b->length = m->wb[i].len;
b->hwversion = m->hwversion; b->hwversion = m->hwversion;
b->log_mask = SDE_DBG_MASK_WB; b->log_mask = SDE_DBG_MASK_WB;
return &m->wb[i]; return &m->wb[i];