diff options
| author | Huaibin Yang <huaibiny@codeaurora.org> | 2013-04-22 17:08:50 -0700 |
|---|---|---|
| committer | David Keitel <dkeitel@codeaurora.org> | 2016-03-23 20:16:55 -0700 |
| commit | ad3acf59b3811753b49dbf3433aab51c5e629708 (patch) | |
| tree | 35c00dcfa97360ff637fadf2318c45bbb04921cc | |
| parent | 7be668f2c0131c827ee07dcf9b950d40e58a1aff (diff) | |
msm: mdss: allow not having frame buffer memory
If pan_display is not used, the frame buffer memory is not reserved
and allocated. Adding checks to make sure no memory operations on
framebuffer.
Change-Id: Ia837d4ea0cad4e40e52ee5817c8d58e7db852a97
Signed-off-by: Huaibin Yang <huaibiny@codeaurora.org>
| -rw-r--r-- | drivers/video/fbdev/msm/mdss_fb.c | 5 | ||||
| -rw-r--r-- | drivers/video/fbdev/msm/mdss_mdp_overlay.c | 11 | ||||
| -rw-r--r-- | drivers/video/fbdev/msm/mdss_mdp_util.c | 5 |
3 files changed, 18 insertions, 3 deletions
diff --git a/drivers/video/fbdev/msm/mdss_fb.c b/drivers/video/fbdev/msm/mdss_fb.c index 1ad818239391..08937c4cf259 100644 --- a/drivers/video/fbdev/msm/mdss_fb.c +++ b/drivers/video/fbdev/msm/mdss_fb.c @@ -657,6 +657,11 @@ static int mdss_fb_mmap(struct fb_info *info, struct vm_area_struct *vma) unsigned long off = vma->vm_pgoff << PAGE_SHIFT; struct msm_fb_data_type *mfd = (struct msm_fb_data_type *)info->par; + if (!start) { + pr_warn("No framebuffer memory is allocated.\n"); + return -ENOMEM; + } + mdss_fb_pan_idle(mfd); if (off >= len) { /* memory mapped io */ diff --git a/drivers/video/fbdev/msm/mdss_mdp_overlay.c b/drivers/video/fbdev/msm/mdss_mdp_overlay.c index ac1c4ce565d4..56fd163f17aa 100644 --- a/drivers/video/fbdev/msm/mdss_mdp_overlay.c +++ b/drivers/video/fbdev/msm/mdss_mdp_overlay.c @@ -1111,7 +1111,8 @@ static void mdss_mdp_overlay_pan_display(struct msm_fb_data_type *mfd) fbi = mfd->fbi; - if (fbi->fix.smem_len == 0 || mdp5_data->borderfill_enable) { + if (!fbi->fix.smem_start || fbi->fix.smem_len == 0 || + mdp5_data->borderfill_enable) { mfd->mdp.kickoff_fnc(mfd); return; } @@ -1142,9 +1143,13 @@ static void mdss_mdp_overlay_pan_display(struct msm_fb_data_type *mfd) goto pan_display_error; } - if (is_mdss_iommu_attached()) + if (is_mdss_iommu_attached()) { + if (!mfd->iova) { + pr_err("mfd iova is zero\n"); + goto pan_display_error; + } data.p[0].addr = mfd->iova; - else + } else data.p[0].addr = fbi->fix.smem_start; data.p[0].addr += offset; diff --git a/drivers/video/fbdev/msm/mdss_mdp_util.c b/drivers/video/fbdev/msm/mdss_mdp_util.c index 8bb30612339c..57051a3ef7f5 100644 --- a/drivers/video/fbdev/msm/mdss_mdp_util.c +++ b/drivers/video/fbdev/msm/mdss_mdp_util.c @@ -521,6 +521,11 @@ int mdss_mdp_get_img(struct msmfb_data *img, struct mdss_mdp_img_data *data) } } + if (!*start) { + pr_err("start address is zero!\n"); + return -ENOMEM; + } + if (!ret && (img->offset < data->len)) { data->addr += img->offset; data->len -= img->offset; |
