Merge "msm: mdss: fix SMP allocation size when using BWC"
diff --git a/drivers/video/msm/mdss/mdss_mdp_pipe.c b/drivers/video/msm/mdss/mdss_mdp_pipe.c
index 4f9ab81..51ab2b6 100644
--- a/drivers/video/msm/mdss/mdss_mdp_pipe.c
+++ b/drivers/video/msm/mdss/mdss_mdp_pipe.c
@@ -163,9 +163,10 @@
 			return rc;
 	}
 
+	nlines = pipe->bwc_mode ? 1 : 2;
+
 	mutex_lock(&mdss_mdp_smp_lock);
 	for (i = 0; i < ps.num_planes; i++) {
-		nlines = pipe->bwc_mode ? ps.rau_h[i] : 2;
 		num_blks = DIV_ROUND_UP(nlines * ps.ystride[i], SMP_MB_SIZE);
 
 		if (mdata->mdp_rev == MDSS_MDP_HW_REV_100)
diff --git a/drivers/video/msm/mdss/mdss_mdp_util.c b/drivers/video/msm/mdss/mdss_mdp_util.c
index e010ba5..27b2104 100644
--- a/drivers/video/msm/mdss/mdss_mdp_util.c
+++ b/drivers/video/msm/mdss/mdss_mdp_util.c
@@ -234,7 +234,6 @@
 			       struct mdss_mdp_format_params *fmt,
 			       struct mdss_mdp_plane_sizes *ps)
 {
-	u32 stride_off;
 	if (fmt->is_yuv) {
 		ps->rau_cnt = DIV_ROUND_UP(w, 64);
 		ps->ystride[0] = 64 * 4;
@@ -258,9 +257,8 @@
 		return -EINVAL;
 	}
 
-	stride_off = DIV_ROUND_UP(ps->rau_cnt, 8);
-	ps->ystride[0] = ps->ystride[0] * ps->rau_cnt + stride_off;
-	ps->ystride[1] = ps->ystride[1] * ps->rau_cnt + stride_off;
+	ps->ystride[0] *= ps->rau_cnt;
+	ps->ystride[1] *= ps->rau_cnt;
 	ps->num_planes = 2;
 
 	return 0;
@@ -286,9 +284,16 @@
 	memset(ps, 0, sizeof(struct mdss_mdp_plane_sizes));
 
 	if (bwc_mode) {
+		u32 meta_size;
+
 		rc = mdss_mdp_get_rau_strides(w, h, fmt, ps);
 		if (rc)
 			return rc;
+
+		meta_size = DIV_ROUND_UP(ps->rau_cnt, 8);
+		ps->ystride[0] += meta_size;
+		ps->ystride[1] += meta_size;
+
 		ystride0_off = DIV_ROUND_UP(h, ps->rau_h[0]);
 		ystride1_off = DIV_ROUND_UP(h, ps->rau_h[1]);
 		ps->plane_size[0] = (ps->ystride[0] * ystride0_off) +