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) +