diff --git a/projects/Rockchip/patches/linux/default/linux-0011-v4l2-from-list.patch b/projects/Rockchip/patches/linux/default/linux-0011-v4l2-from-list.patch index 1815338b13..8ae520924a 100644 --- a/projects/Rockchip/patches/linux/default/linux-0011-v4l2-from-list.patch +++ b/projects/Rockchip/patches/linux/default/linux-0011-v4l2-from-list.patch @@ -128,39 +128,6 @@ index efd316550807..c88e817cac0a 100644 return 0; } -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Jonas Karlman -Date: Mon, 6 Jul 2020 21:54:35 +0000 -Subject: [PATCH] media: rkvdec: h264: Fix bit depth wrap in pps packet - -The luma and chroma bit depth fields in the pps packet is 3 bits wide. -8 is wrongly added to the bit depth value written to these 3-bit fields. -Because only the 3 LSB is written the hardware is configured correctly. - -Correct this by not adding 8 to the luma and chroma bit depth value. - -Signed-off-by: Jonas Karlman -Reviewed-by: Ezequiel Garcia ---- - drivers/staging/media/rkvdec/rkvdec-h264.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/drivers/staging/media/rkvdec/rkvdec-h264.c b/drivers/staging/media/rkvdec/rkvdec-h264.c -index a379e43147fb..503ae683d0fd 100644 ---- a/drivers/staging/media/rkvdec/rkvdec-h264.c -+++ b/drivers/staging/media/rkvdec/rkvdec-h264.c -@@ -661,8 +661,8 @@ static void assemble_hw_pps(struct rkvdec_ctx *ctx, - WRITE_PPS(0xff, PROFILE_IDC); - WRITE_PPS(1, CONSTRAINT_SET3_FLAG); - WRITE_PPS(sps->chroma_format_idc, CHROMA_FORMAT_IDC); -- WRITE_PPS(sps->bit_depth_luma_minus8 + 8, BIT_DEPTH_LUMA); -- WRITE_PPS(sps->bit_depth_chroma_minus8 + 8, BIT_DEPTH_CHROMA); -+ WRITE_PPS(sps->bit_depth_luma_minus8, BIT_DEPTH_LUMA); -+ WRITE_PPS(sps->bit_depth_chroma_minus8, BIT_DEPTH_CHROMA); - WRITE_PPS(0, QPPRIME_Y_ZERO_TRANSFORM_BYPASS_FLAG); - WRITE_PPS(sps->log2_max_frame_num_minus4, LOG2_MAX_FRAME_NUM_MINUS4); - WRITE_PPS(sps->max_num_ref_frames, MAX_NUM_REF_FRAMES); - From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Jonas Karlman Date: Mon, 6 Jul 2020 21:54:35 +0000 diff --git a/projects/Rockchip/patches/linux/default/linux-1001-v4l2-rockchip.patch b/projects/Rockchip/patches/linux/default/linux-1001-v4l2-rockchip.patch index a672d31142..858d62224e 100644 --- a/projects/Rockchip/patches/linux/default/linux-1001-v4l2-rockchip.patch +++ b/projects/Rockchip/patches/linux/default/linux-1001-v4l2-rockchip.patch @@ -101,7 +101,7 @@ index c9a551dbd9bc..6ce11b736363 100644 @@ -763,19 +767,7 @@ static void assemble_hw_rps(struct rkvdec_ctx *ctx, for (j = 0; j < RKVDEC_NUM_REFLIST; j++) { for (i = 0; i < h264_ctx->reflists.num_valid; i++) { - u8 dpb_valid = 0; + bool dpb_valid = run->ref_buf_idx[i] >= 0; - u8 idx = 0; - - switch (j) { @@ -143,28 +143,24 @@ index 6ce11b736363..9c3f08c94800 100644 u16 *p = (u16 *)hw_rps; memset(hw_rps, 0, sizeof(priv_tbl->rps)); -@@ -764,18 +764,71 @@ static void assemble_hw_rps(struct rkvdec_ctx *ctx, +@@ -764,16 +764,69 @@ static void assemble_hw_rps(struct rkvdec_ctx *ctx, p[i] = dpb[i].frame_num - max_frame_num; } - for (j = 0; j < RKVDEC_NUM_REFLIST; j++) { - for (i = 0; i < h264_ctx->reflists.num_valid; i++) { -- u8 dpb_valid = 0; +- bool dpb_valid = run->ref_buf_idx[i] >= 0; - u8 idx = reflists[j][i]; + if (!(dec_params->flags & V4L2_H264_DECODE_PARAM_FLAG_FIELD_PIC)) { + for (j = 0; j < RKVDEC_NUM_REFLIST; j++) { + for (i = 0; i < h264_ctx->reflists.num_valid; i++) { -+ u8 dpb_valid = 0; ++ bool dpb_valid = run->ref_buf_idx[i] >= 0; + u8 idx = reflists[j][i]; - if (idx >= ARRAY_SIZE(dec_params->dpb)) - continue; -- dpb_valid = !!(dpb[idx].flags & -- V4L2_H264_DPB_ENTRY_FLAG_ACTIVE); + if (idx >= ARRAY_SIZE(dec_params->dpb)) + continue; -+ dpb_valid = !!(dpb[idx].flags & -+ V4L2_H264_DPB_ENTRY_FLAG_ACTIVE); - set_ps_field(hw_rps, DPB_INFO(i, j), - idx | dpb_valid << 4); @@ -933,37 +929,6 @@ index 908cacb91c6a..d8a812a7d23b 100644 vop: vop@ff370000 { -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Alex Bee -Date: Sun, 3 May 2020 18:34:56 +0200 -Subject: [PATCH] WIP: media/rkvdec: don't overclock IP - -Signed-off-by: Alex Bee ---- - drivers/staging/media/rkvdec/rkvdec.c | 8 +++++--- - 1 file changed, 5 insertions(+), 3 deletions(-) - -diff --git a/drivers/staging/media/rkvdec/rkvdec.c b/drivers/staging/media/rkvdec/rkvdec.c -index 8d2495bee04d..19b31bef0bb3 100644 ---- a/drivers/staging/media/rkvdec/rkvdec.c -+++ b/drivers/staging/media/rkvdec/rkvdec.c -@@ -1130,10 +1130,12 @@ static int rkvdec_probe(struct platform_device *pdev) - return ret; - - /* -- * Bump ACLK to max. possible freq. (500 MHz) to improve performance -- * When 4k video playback. -+ * Don't bump ACLK to max. possible freq. (500 MHz) to improve performance, -+ * since it will lead to non-recoverable decoder lockups in case of decoding -+ * errors, instead put it to 400 MHz, which seems to have no drawbacks -+ * in decoding performance and doesn't result in those hangs. - */ -- clk_set_rate(rkvdec->clocks[0].clk, 500 * 1000 * 1000); -+ clk_set_rate(rkvdec->clocks[0].clk, 400 * 1000 * 1000); - - rkvdec->regs = devm_platform_ioremap_resource(pdev, 0); - if (IS_ERR(rkvdec->regs)) - From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Alex Bee Date: Sat, 21 Aug 2021 16:12:36 +0200 diff --git a/projects/Rockchip/patches/linux/default/linux-2000-v4l2-wip-rkvdec-hevc.patch b/projects/Rockchip/patches/linux/default/linux-2000-v4l2-wip-rkvdec-hevc.patch index aabfdfe4b5..78efb47a18 100644 --- a/projects/Rockchip/patches/linux/default/linux-2000-v4l2-wip-rkvdec-hevc.patch +++ b/projects/Rockchip/patches/linux/default/linux-2000-v4l2-wip-rkvdec-hevc.patch @@ -3337,9 +3337,9 @@ index 62e728777cd4..a5552ccc9460 100644 + + rkvdec->capabilities = variant->capabilities; + - /* - * Don't bump ACLK to max. possible freq. (500 MHz) to improve performance, - * since it will lead to non-recoverable decoder lockups in case of decoding + rkvdec->regs = devm_platform_ioremap_resource(pdev, 0); + if (IS_ERR(rkvdec->regs)) + return PTR_ERR(rkvdec->regs); diff --git a/drivers/staging/media/rkvdec/rkvdec.h b/drivers/staging/media/rkvdec/rkvdec.h index 53719e825c70..d2096ec351e1 100644 --- a/drivers/staging/media/rkvdec/rkvdec.h