di: "DI: di_init_buf vmap fail" is seen when power on [1/1]

PD#SWPL-5908

Problem:
execute vmap when di reserved memory is disable

Solution:
skip memory calculation in init buf  while using cma

Verify:
verified by t962x2_x301

Change-Id: Ib0c2e422f61f2b4182109cb7bbb3107029363ce0
Signed-off-by: zhiwei.yuan <zhiwei.yuan@amlogic.com>
This commit is contained in:
zhiwei.yuan
2019-03-14 14:31:38 +08:00
committed by Tao Zeng
parent c3c9fb95af
commit 2c8ed09c51

View File

@@ -2240,14 +2240,21 @@ static int di_init_buf(int width, int height, unsigned char prog_flag)
if (prog_flag) { if (prog_flag) {
di_buf->canvas_height = canvas_height; di_buf->canvas_height = canvas_height;
//use reserved memory
if (de_devp->flag_cma == 0)
di_buf->nr_adr = de_devp->mem_start + di_buf->nr_adr = de_devp->mem_start +
di_buf_size * i; di_buf_size * i;
di_buf->canvas_config_flag = 1; di_buf->canvas_config_flag = 1;
} else { } else {
di_buf->canvas_height = (canvas_height>>1); di_buf->canvas_height = (canvas_height>>1);
di_buf->canvas_height = di_buf->canvas_height =
roundup(di_buf->canvas_height, roundup(di_buf->canvas_height,
canvas_align_width); canvas_align_width);
//use reserved memory
if (de_devp->flag_cma == 0) {
di_buf->nr_adr = de_devp->mem_start + di_buf->nr_adr = de_devp->mem_start +
di_buf_size * i; di_buf_size * i;
di_buf->mtn_adr = de_devp->mem_start + di_buf->mtn_adr = de_devp->mem_start +
@@ -2258,15 +2265,21 @@ static int di_init_buf(int width, int height, unsigned char prog_flag)
nr_size + mtn_size; nr_size + mtn_size;
if (mc_mem_alloc) { if (mc_mem_alloc) {
di_buf->mcvec_adr = de_devp->mem_start + di_buf->mcvec_adr =
de_devp->mem_start +
di_buf_size * i + di_buf_size * i +
nr_size + mtn_size + count_size; nr_size + mtn_size +
count_size;
di_buf->mcinfo_adr = di_buf->mcinfo_adr =
de_devp->mem_start + de_devp->mem_start +
di_buf_size * i + nr_size + di_buf_size * i +
mtn_size + count_size + mv_size; nr_size +
tmp = di_vmap(di_buf->mcinfo_adr, mtn_size +
di_pre_stru.mcinfo_size, count_size + mv_size;
tmp = di_vmap(
di_buf->mcinfo_adr,
di_pre_stru.
mcinfo_size,
&di_buf->bflg_vmap); &di_buf->bflg_vmap);
if (di_buf->bflg_vmap == true) if (di_buf->bflg_vmap == true)
@@ -2278,8 +2291,11 @@ static int di_init_buf(int width, int height, unsigned char prog_flag)
__func__); __func__);
} }
} }
}
di_buf->canvas_config_flag = 2; di_buf->canvas_config_flag = 2;
} }
di_buf->index = i; di_buf->index = i;
di_buf->vframe = &(vframe_local[i]); di_buf->vframe = &(vframe_local[i]);
di_buf->vframe->private_data = di_buf; di_buf->vframe->private_data = di_buf;
@@ -2299,6 +2315,9 @@ static int di_init_buf(int width, int height, unsigned char prog_flag)
up(&di_sema); up(&di_sema);
} }
#endif #endif
//use reserved memory
if (de_devp->flag_cma == 0)
di_post_mem = de_devp->mem_start + di_post_mem = de_devp->mem_start +
di_buf_size*de_devp->buf_num_avail; di_buf_size*de_devp->buf_num_avail;
if (post_wr_en && post_wr_support) { if (post_wr_en && post_wr_support) {
@@ -2348,6 +2367,9 @@ static int di_init_buf(int width, int height, unsigned char prog_flag)
(nr_width << 1); (nr_width << 1);
di_buf->canvas_height = canvas_height; di_buf->canvas_height = canvas_height;
di_buf->canvas_config_flag = 1; di_buf->canvas_config_flag = 1;
//use reserved memory
if (de_devp->flag_cma == 0)
di_buf->nr_adr = di_post_mem + di_buf->nr_adr = di_post_mem +
di_post_buf_size*i; di_post_buf_size*i;
} }