mirror of
https://github.com/LibreELEC/LibreELEC.tv.git
synced 2025-07-24 11:16:51 +00:00
linux (Rockchip): upstreamed and rebase patches for 5.18.3-rc1
This commit is contained in:
parent
4aacc45968
commit
c875b2879d
@ -128,39 +128,6 @@ index efd316550807..c88e817cac0a 100644
|
||||
return 0;
|
||||
}
|
||||
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Jonas Karlman <jonas@kwiboo.se>
|
||||
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 <jonas@kwiboo.se>
|
||||
Reviewed-by: Ezequiel Garcia <ezequiel@collabora.com>
|
||||
---
|
||||
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 <jonas@kwiboo.se>
|
||||
Date: Mon, 6 Jul 2020 21:54:35 +0000
|
||||
|
@ -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 <knaerzche@gmail.com>
|
||||
Date: Sun, 3 May 2020 18:34:56 +0200
|
||||
Subject: [PATCH] WIP: media/rkvdec: don't overclock IP
|
||||
|
||||
Signed-off-by: Alex Bee <knaerzche@gmail.com>
|
||||
---
|
||||
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 <knaerzche@gmail.com>
|
||||
Date: Sat, 21 Aug 2021 16:12:36 +0200
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user