summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHuaibin Yang <huaibiny@codeaurora.org>2013-04-22 17:08:50 -0700
committerDavid Keitel <dkeitel@codeaurora.org>2016-03-23 20:16:55 -0700
commitad3acf59b3811753b49dbf3433aab51c5e629708 (patch)
tree35c00dcfa97360ff637fadf2318c45bbb04921cc
parent7be668f2c0131c827ee07dcf9b950d40e58a1aff (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.c5
-rw-r--r--drivers/video/fbdev/msm/mdss_mdp_overlay.c11
-rw-r--r--drivers/video/fbdev/msm/mdss_mdp_util.c5
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;