diff options
| author | Zohaib Alam <zalam@codeaurora.org> | 2014-01-13 18:17:16 -0500 |
|---|---|---|
| committer | David Keitel <dkeitel@codeaurora.org> | 2016-03-23 20:25:17 -0700 |
| commit | 8037fdb52c8554524baeae9f8d7cbcbcffdc764a (patch) | |
| tree | 3b9b995bc840192aedb3551fc406c8f4cb68a425 /drivers | |
| parent | 9e393a96a02cda710423d73f9fd7c1b39a9dce34 (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.h | 3 | ||||
| -rw-r--r-- | drivers/video/fbdev/msm/mdss_mdp.c | 63 | ||||
| -rw-r--r-- | drivers/video/fbdev/msm/mdss_mdp_pp.c | 6 |
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))) { |
