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:
parent
4bc07bbb40
commit
1c28ca1e8b
14 changed files with 96 additions and 23 deletions
|
@ -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>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -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])
|
||||||
|
|
|
@ -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;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -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];
|
||||||
|
|
|
@ -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];
|
||||||
|
|
|
@ -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];
|
||||||
|
|
|
@ -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];
|
||||||
|
|
|
@ -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];
|
||||||
|
|
|
@ -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];
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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];
|
||||||
|
|
|
@ -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;
|
||||||
};
|
};
|
||||||
|
|
|
@ -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];
|
||||||
|
|
|
@ -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];
|
||||||
|
|
Loading…
Add table
Reference in a new issue