summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorZohaib Alam <zalam@codeaurora.org>2014-01-13 18:17:16 -0500
committerDavid Keitel <dkeitel@codeaurora.org>2016-03-23 20:25:17 -0700
commit8037fdb52c8554524baeae9f8d7cbcbcffdc764a (patch)
tree3b9b995bc840192aedb3551fc406c8f4cb68a425 /drivers
parent9e393a96a02cda710423d73f9fd7c1b39a9dce34 (diff)
mdss: calculating length based on offsets from dts
If the len values are not mentioned in the device tree, then calculate the length based on the corresponding offsets Plus split mdss_sspp into: sspp_vig, sspp_rgb and sspp_dma. Because in 8092, the lengths are different. Therefore, they should be separate lengths in the generic implementation. Change-Id: I0f83ffae15d1ae3e92a01f7f23215c94b23065c7 Signed-off-by: Zohaib Alam <zalam@codeaurora.org>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/video/fbdev/msm/mdss.h3
-rw-r--r--drivers/video/fbdev/msm/mdss_mdp.c63
-rw-r--r--drivers/video/fbdev/msm/mdss_mdp_pp.c6
3 files changed, 58 insertions, 14 deletions
diff --git a/drivers/video/fbdev/msm/mdss.h b/drivers/video/fbdev/msm/mdss.h
index 6f1d46753ef0..c51ef7bca9ee 100644
--- a/drivers/video/fbdev/msm/mdss.h
+++ b/drivers/video/fbdev/msm/mdss.h
@@ -148,6 +148,9 @@ struct mdss_data_type {
u32 nrgb_pipes;
u32 ndma_pipes;
u32 size_sspp;
+ u32 size_sspp_vig;
+ u32 size_sspp_rgb;
+ u32 size_sspp_dma;
DECLARE_BITMAP(mmb_alloc_map, MAX_DRV_SUP_MMB_BLKS);
diff --git a/drivers/video/fbdev/msm/mdss_mdp.c b/drivers/video/fbdev/msm/mdss_mdp.c
index 0710601336d0..ea0ac74091eb 100644
--- a/drivers/video/fbdev/msm/mdss_mdp.c
+++ b/drivers/video/fbdev/msm/mdss_mdp.c
@@ -1682,11 +1682,6 @@ static int mdss_mdp_parse_dt_pipe(struct platform_device *pdev)
goto dma_alloc_fail;
}
- rc = mdss_mdp_parse_dt_handler(pdev, "qcom,mdss-sspp-len",
- &mdata->size_sspp, 1);
- if (rc)
- goto parse_fail;
-
rc = mdss_mdp_parse_dt_handler(pdev, "qcom,mdss-pipe-vig-fetch-id",
ftch_id, mdata->nvig_pipes);
if (rc)
@@ -1760,6 +1755,39 @@ static int mdss_mdp_parse_dt_pipe(struct platform_device *pdev)
setup_cnt += len;
+ rc = mdss_mdp_parse_dt_handler(pdev, "qcom,mdss-sspp-len",
+ &mdata->size_sspp, 1);
+ if (rc) {
+ if (mdata->nvig_pipes == 1 || mdata->nrgb_pipes == 1 ||
+ mdata->ndma_pipes == 1) {
+ pr_err("Cannot calculate length w/ only one offset\n");
+ goto parse_fail;
+ }
+
+ if (mdata->nvig_pipes >= 2) {
+ u32 *vigOff = offsets;
+ mdata->size_sspp_vig = vigOff[1] - vigOff[0];
+ } else
+ mdata->size_sspp_vig = 0;
+
+ if (mdata->nrgb_pipes >= 2) {
+ u32 *rgbOff = offsets + mdata->nvig_pipes;
+ mdata->size_sspp_rgb = rgbOff[1] - rgbOff[0];
+ } else
+ mdata->size_sspp_rgb = 0;
+
+ if (mdata->ndma_pipes >= 2) {
+ u32 *dmaOff = offsets + mdata->nvig_pipes +
+ mdata->nrgb_pipes;
+ mdata->size_sspp_dma = dmaOff[1] - dmaOff[0];
+ } else
+ mdata->size_sspp_dma = 0;
+ } else {
+ mdata->size_sspp_vig = mdata->size_sspp;
+ mdata->size_sspp_rgb = mdata->size_sspp;
+ mdata->size_sspp_dma = mdata->size_sspp;
+ }
+
if (mdata->nvig_pipes > DEFAULT_TOTAL_VIG_PIPES) {
rc = mdss_mdp_pipe_addr_setup(mdata,
mdata->vig_pipes + DEFAULT_TOTAL_VIG_PIPES,
@@ -1862,8 +1890,13 @@ static int mdss_mdp_parse_dt_mixer(struct platform_device *pdev)
rc = mdss_mdp_parse_dt_handler(pdev, "qcom,mdss-mixer-intf-len",
&mdata->size_mixer_intf, 1);
- if (rc)
- goto parse_done;
+ if (rc) {
+ if (mdata->nmixers_intf >= 2)
+ mdata->size_mixer_intf = mixer_offsets[1] -
+ mixer_offsets[0];
+ else
+ goto parse_done;
+ }
rc = mdss_mdp_parse_dt_handler(pdev, "qcom,mdss-mixer-wb-off",
mixer_offsets + mdata->nmixers_intf, mdata->nmixers_wb);
@@ -1877,8 +1910,12 @@ static int mdss_mdp_parse_dt_mixer(struct platform_device *pdev)
rc = mdss_mdp_parse_dt_handler(pdev, "qcom,mdss-dspp-len",
&mdata->size_dspp, 1);
- if (rc)
- goto parse_done;
+ if (rc) {
+ if (ndspp >= 2)
+ mdata->size_dspp = dspp_offsets[1] - dspp_offsets[0];
+ else
+ goto parse_done;
+ }
rc = mdss_mdp_parse_dt_handler(pdev, "qcom,mdss-pingpong-off",
pingpong_offsets, npingpong);
@@ -1946,8 +1983,12 @@ static int mdss_mdp_parse_dt_ctl(struct platform_device *pdev)
rc = mdss_mdp_parse_dt_handler(pdev, "qcom,mdss-ctl-len",
&mdata->size_ctl, 1);
- if (rc)
- goto parse_done;
+ if (rc) {
+ if (mdata->nctl >= 2)
+ mdata->size_ctl = ctl_offsets[1] - ctl_offsets[0];
+ else
+ goto parse_done;
+ }
rc = mdss_mdp_parse_dt_handler(pdev, "qcom,mdss-wb-off",
wb_offsets, nwb);
diff --git a/drivers/video/fbdev/msm/mdss_mdp_pp.c b/drivers/video/fbdev/msm/mdss_mdp_pp.c
index 163c33710a0e..4dd20e141747 100644
--- a/drivers/video/fbdev/msm/mdss_mdp_pp.c
+++ b/drivers/video/fbdev/msm/mdss_mdp_pp.c
@@ -4858,13 +4858,13 @@ static int is_valid_calib_addr(void *addr, u32 operation)
* mdss_res->size_ctl))) {
ret = is_valid_calib_ctrl_addr(ptr);
} else if (ptr >= vig_base && ptr < (vig_base + (mdss_res->nvig_pipes
- * mdss_res->size_sspp))) {
+ * mdss_res->size_sspp_vig))) {
ret = is_valid_calib_vig_addr(ptr);
} else if (ptr >= rgb_base && ptr < (rgb_base + (mdss_res->nrgb_pipes
- * mdss_res->size_sspp))) {
+ * mdss_res->size_sspp_rgb))) {
ret = is_valid_calib_rgb_addr(ptr);
} else if (ptr >= dma_base && ptr < (dma_base + (mdss_res->ndma_pipes
- * mdss_res->size_sspp))) {
+ * mdss_res->size_sspp_dma))) {
ret = is_valid_calib_dma_addr(ptr);
} else if (ptr >= mixer_base && ptr < (mixer_base +
(mdss_res->nmixers_intf * mdss_res->size_mixer_intf))) {