author | Hui Zhang <hui.zhang@amlogic.com> | 2019-01-15 05:10:35 (GMT) |
---|---|---|
committer | Luan Yuan <luan.yuan@amlogic.com> | 2019-02-25 06:22:14 (GMT) |
commit | 9300c3a589185b995c897a28f72d856f28e8275d (patch) | |
tree | c119c127b2625356fd87ee565f1369bb84149364 | |
parent | 3aee14ddbb88f8f2ac62375a92c54ed75b695609 (diff) | |
download | media_modules-9300c3a589185b995c897a28f72d856f28e8275d.zip media_modules-9300c3a589185b995c897a28f72d856f28e8275d.tar.gz media_modules-9300c3a589185b995c897a28f72d856f28e8275d.tar.bz2 |
media_module: fix 264 mmu stream mode playback issue [1/1]
PD#SWPL-4203
Problem:
in h264 mmu mode, some 264 4k stream playback failed in stream mode.
(frame mode is ok)
Solution:
1) add extif sw reset in mmu mode for each run
2) remove some vdec can debug printk (no related with 264 mmu)
Verify:
U212
Change-Id: Ic030f23f1b5c2fa1329dced5a7bf64dd9a16c5ae
Signed-off-by: Hui Zhang <hui.zhang@amlogic.com>
-rw-r--r-- | drivers/frame_provider/decoder/h264_multi/vmh264.c | 6 | ||||
-rw-r--r-- | drivers/frame_provider/decoder/utils/vdec.c | 28 |
2 files changed, 21 insertions, 13 deletions
diff --git a/drivers/frame_provider/decoder/h264_multi/vmh264.c b/drivers/frame_provider/decoder/h264_multi/vmh264.c index b7ab3b7..471f8db 100644 --- a/drivers/frame_provider/decoder/h264_multi/vmh264.c +++ b/drivers/frame_provider/decoder/h264_multi/vmh264.c @@ -114,7 +114,7 @@ #define H264_MMU #define VIDEO_SIGNAL_TYPE_AVAILABLE_MASK 0x20000000 static int mmu_enable; -static int force_enable_mmu; +static int force_enable_mmu = 1; unsigned int h264_debug_flag; /* 0xa0000000; */ unsigned int h264_debug_mask = 0xff; /* @@ -5652,7 +5652,9 @@ static int vh264_hw_ctx_restore(struct vdec_h264_hw_s *hw) CLEAR_VREG_MASK(MDEC_PIC_DC_CTRL, 1 << 31); if (hw->mmu_enable) { SET_VREG_MASK(MDEC_PIC_DC_MUX_CTRL, 1<<31); - WRITE_VREG(MDEC_EXTIF_CFG1, 0x80000000); + /* sw reset to extif hardware */ + SET_VREG_MASK(MDEC_EXTIF_CFG1, 1<<30); + CLEAR_VREG_MASK(MDEC_EXTIF_CFG1, 1<<30); } else { CLEAR_VREG_MASK(MDEC_PIC_DC_MUX_CTRL, 1 << 31); WRITE_VREG(MDEC_EXTIF_CFG1, 0); diff --git a/drivers/frame_provider/decoder/utils/vdec.c b/drivers/frame_provider/decoder/utils/vdec.c index 06f4d16..2c8787f 100644 --- a/drivers/frame_provider/decoder/utils/vdec.c +++ b/drivers/frame_provider/decoder/utils/vdec.c @@ -84,6 +84,7 @@ static unsigned int clk_config; /* &1: sched_priority to MAX_RT_PRIO -1. &2: always reload firmware. + &4: vdec canvas debug enable */ static unsigned int debug; @@ -271,7 +272,8 @@ static int get_canvas_ex(int type, int id) (canvas_stat[i].id & (1 << id)) == 0) { canvas_stat[i].canvas_used_flag++; canvas_stat[i].id |= (1 << id); - pr_debug("get used canvas %d\n", i); + if (debug & 4) + pr_debug("get used canvas %d\n", i); vdec_canvas_unlock(vdec_core, flags); if (i < AMVDEC_CANVAS_MAX2 + 1) return i; @@ -288,11 +290,13 @@ static int get_canvas_ex(int type, int id) canvas_stat[i].type = type; canvas_stat[i].canvas_used_flag = 1; canvas_stat[i].id = (1 << id); - pr_debug("get canvas %d\n", i); - pr_debug("canvas_used_flag %d\n", - canvas_stat[i].canvas_used_flag); - pr_debug("canvas_stat[i].id %d\n", - canvas_stat[i].id); + if (debug & 4) { + pr_debug("get canvas %d\n", i); + pr_debug("canvas_used_flag %d\n", + canvas_stat[i].canvas_used_flag); + pr_debug("canvas_stat[i].id %d\n", + canvas_stat[i].id); + } vdec_canvas_unlock(vdec_core, flags); if (i < AMVDEC_CANVAS_MAX2 + 1) return i; @@ -332,11 +336,13 @@ static void free_canvas_ex(int index, int id) canvas_stat[offset].type = 0; canvas_stat[offset].id = 0; } - pr_debug("free index %d used_flag %d, type = %d, id = %d\n", - offset, - canvas_stat[offset].canvas_used_flag, - canvas_stat[offset].type, - canvas_stat[offset].id); + if (debug & 4) { + pr_debug("free index %d used_flag %d, type = %d, id = %d\n", + offset, + canvas_stat[offset].canvas_used_flag, + canvas_stat[offset].type, + canvas_stat[offset].id); + } } vdec_canvas_unlock(vdec_core, flags); |