summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorshihong.zheng <shihong.zheng@amlogic.com>2020-12-22 15:07:35 +0800
committerHui Zhang <hui.zhang@amlogic.com>2020-12-23 19:08:05 -0800
commit829a87f7aa41f092650e9e671f76f60b51590894 (patch)
treedb98568778c22fadb2fca4458a892b96919b9965
parentcbb14c256a98166fc165a18e6c25ffbf9245dc70 (diff)
downloadmedia_modules-829a87f7aa41f092650e9e671f76f60b51590894.tar.gz
vav1: remove header bufsize in ucode work buffer. [1/1]
PD#SWPL-39162 Problem: fix av1 alloc ucode work buffer failed when create many instances. Solution: reduce used bufsize in workspace. the header buf is alloc dynamic, so do not need add size here. Verify: ah212 Change-Id: I5b35fcc8a06aaea96a066d610d3991f32cdb3a83 Signed-off-by: shihong.zheng <shihong.zheng@amlogic.com>
-rw-r--r--drivers/frame_provider/decoder/vav1/vav1.c63
1 files changed, 37 insertions, 26 deletions
diff --git a/drivers/frame_provider/decoder/vav1/vav1.c b/drivers/frame_provider/decoder/vav1/vav1.c
index c006e09..3e51019 100644
--- a/drivers/frame_provider/decoder/vav1/vav1.c
+++ b/drivers/frame_provider/decoder/vav1/vav1.c
@@ -1775,8 +1775,12 @@ static u32 seg_map_size = 0xd8000;
static u32 seg_map_size = 0x36000;
#endif
+#define VBH_BUF_SIZE (((2 * 16 * 2304) + 0xffff) & (~0xffff))
+#define VBH_BUF_COUNT 4
+
#define WORK_BUF_SPEC_NUM 2
-static struct BuffInfo_s aom_workbuff_spec[WORK_BUF_SPEC_NUM]={
+
+static struct BuffInfo_s aom_workbuff_spec[WORK_BUF_SPEC_NUM] = {
{ //8M bytes
.max_width = 1920,
.max_height = 1088,
@@ -1815,11 +1819,11 @@ static struct BuffInfo_s aom_workbuff_spec[WORK_BUF_SPEC_NUM]={
.buf_size = 0x800,
},
.cdf_buf = {
- // for context store/load 1024x256 x16 = 512K bytes 16*0x8000
+ // for context store/load 1024x256 x16 = 512K bytes 16*0x8000
.buf_size = 0x80000,
},
.gmc_buf = {
- // for gmc_parameter store/load 128 x 16 = 2K bytes 0x800
+ // for gmc_parameter store/load 128 x 16 = 2K bytes 0x800
.buf_size = 0x800,
},
.scalelut = {
@@ -1840,28 +1844,30 @@ static struct BuffInfo_s aom_workbuff_spec[WORK_BUF_SPEC_NUM]={
.buf_size = 0x60000,
},
.fgs_table = {
- .buf_size = FGS_TABLE_SIZE * FRAME_BUFFERS, // 512x128bits
+ .buf_size = FGS_TABLE_SIZE * FRAME_BUFFERS, // 512x128bits
},
#ifdef AOM_AV1_MMU
-#define VBH_BUF_SIZE (2 * 16 * 2304)
-#define VBH_BUF_COUNT 4
.mmu_vbh = {
- .buf_size = VBH_BUF_SIZE * VBH_BUF_COUNT,
- //.buf_size = 0x5000, //2*16*(more than 2304)/4, 4K
+ .buf_size = VBH_BUF_SIZE * VBH_BUF_COUNT, //2*16*(more than 2304)/4, 4K
},
.cm_header = {
- //.buf_size = MMU_COMPRESS_HEADER_SIZE*8, // 0x44000 = ((1088*2*1024*4)/32/4)*(32/8)
- .buf_size = MMU_COMPRESS_HEADER_SIZE*FRAME_BUFFERS, // 0x44000 = ((1088*2*1024*4)/32/4)*(32/8)
+ #ifdef USE_SPEC_BUF_FOR_MMU_HEAD
+ .buf_size = MMU_COMPRESS_HEADER_SIZE * FRAME_BUFFERS, // 0x44000 = ((1088*2*1024*4)/32/4)*(32/8)
+ #else
+ .buf_size = 0,
+ #endif
},
#endif
#ifdef AOM_AV1_MMU_DW
.mmu_vbh_dw = {
- .buf_size = VBH_BUF_SIZE * VBH_BUF_COUNT,
- //.buf_size = 0x5000, //2*16*(more than 2304)/4, 4K
+ .buf_size = VBH_BUF_SIZE * VBH_BUF_COUNT, //2*16*(more than 2304)/4, 4K
},
.cm_header_dw = {
- //.buf_size = MMU_COMPRESS_HEADER_SIZE*8, // 0x44000 = ((1088*2*1024*4)/32/4)*(32/8)
- .buf_size = MMU_COMPRESS_HEADER_SIZE_DW*FRAME_BUFFERS, // 0x44000 = ((1088*2*1024*4)/32/4)*(32/8)
+ #ifdef USE_SPEC_BUF_FOR_MMU_HEAD
+ .buf_size = MMU_COMPRESS_HEADER_SIZE_DW*FRAME_BUFFERS, // 0x44000 = ((1088*2*1024*4)/32/4)*(32/8)
+ #else
+ .buf_size = 0,
+ #endif
},
#endif
.mpred_above = {
@@ -1947,26 +1953,30 @@ static struct BuffInfo_s aom_workbuff_spec[WORK_BUF_SPEC_NUM]={
.buf_size = 0x60000,
},
.fgs_table = {
- .buf_size = FGS_TABLE_SIZE * FRAME_BUFFERS, // 512x128bits
+ .buf_size = FGS_TABLE_SIZE * FRAME_BUFFERS, // 512x128bits
},
#ifdef AOM_AV1_MMU
.mmu_vbh = {
- .buf_size = VBH_BUF_SIZE * VBH_BUF_COUNT,
- //.buf_size = 0x5000, //2*16*(more than 2304)/4, 4K
+ .buf_size = VBH_BUF_SIZE * VBH_BUF_COUNT, //2*16*(more than 2304)/4, 4K
},
.cm_header = {
- //.buf_size = MMU_COMPRESS_HEADER_SIZE*8, // 0x44000 = ((1088*2*1024*4)/32/4)*(32/8)
- .buf_size = MMU_COMPRESS_HEADER_SIZE*FRAME_BUFFERS, // 0x44000 = ((1088*2*1024*4)/32/4)*(32/8)
+ #ifdef USE_SPEC_BUF_FOR_MMU_HEAD
+ .buf_size = MMU_COMPRESS_HEADER_SIZE*FRAME_BUFFERS, // 0x44000 = ((1088*2*1024*4)/32/4)*(32/8)
+ #else
+ .buf_size = 0,
+ #endif
},
#endif
#ifdef AOM_AV1_MMU_DW
.mmu_vbh_dw = {
- .buf_size = VBH_BUF_SIZE * VBH_BUF_COUNT,
- //.buf_size = 0x5000, //2*16*(more than 2304)/4, 4K
+ .buf_size = VBH_BUF_SIZE * VBH_BUF_COUNT, //2*16*(more than 2304)/4, 4K
},
.cm_header_dw = {
- //.buf_size = MMU_COMPRESS_HEADER_SIZE*8, // 0x44000 = ((1088*2*1024*4)/32/4)*(32/8)
- .buf_size = MMU_COMPRESS_HEADER_SIZE_DW*FRAME_BUFFERS, // 0x44000 = ((1088*2*1024*4)/32/4)*(32/8)
+ #ifdef USE_SPEC_BUF_FOR_MMU_HEAD
+ .buf_size = MMU_COMPRESS_HEADER_SIZE_DW*FRAME_BUFFERS, // 0x44000 = ((1088*2*1024*4)/32/4)*(32/8)
+ #else
+ .buf_size = 0,
+ #endif
},
#endif
.mpred_above = {
@@ -4901,9 +4911,10 @@ static void aom_config_work_space_hw(struct AV1HW_s *hw, u32 mask)
#ifdef AOM_AV1_MMU_DW
data32 = READ_VREG(HEVC_SAO_CTRL5);
if (hw->dw_mmu_enable) {
- data32 = READ_VREG(HEVC_SAO_CTRL9);
- data32 |= (1<<10);
- WRITE_VREG(HEVC_SAO_CTRL9, data32);
+ u32 data_tmp;
+ data_tmp = READ_VREG(HEVC_SAO_CTRL9);
+ data_tmp |= (1<<10);
+ WRITE_VREG(HEVC_SAO_CTRL9, data_tmp);
WRITE_VREG(HEVC_CM_BODY_LENGTH2,losless_comp_body_size_dw);
WRITE_VREG(HEVC_CM_HEADER_OFFSET2,losless_comp_body_size_dw);