mirror of
https://github.com/LibreELEC/LibreELEC.tv.git
synced 2025-07-30 14:16:40 +00:00
Merge pull request #5329 from knaerzche/rk-fixes-b2
Rockchip updates / fixes
This commit is contained in:
commit
5aaf229baf
@ -155,6 +155,10 @@ else
|
||||
# Amlogic GX HDMI and S/PDIF
|
||||
mixer $card 'AIU HDMI CTRL SRC' 'I2S'
|
||||
mixer $card 'AIU SPDIF SRC SEL' 'SPDIF'
|
||||
|
||||
# ES8316 headphone jack
|
||||
mixer $card 'Right Headphone Mixer Right DAC' on
|
||||
mixer $card 'Left Headphone Mixer Left DAC' on
|
||||
fi
|
||||
|
||||
exit 0
|
||||
|
@ -0,0 +1,91 @@
|
||||
From a2769637a9b98c6809d4d25a3a20447a3ff7b23a Mon Sep 17 00:00:00 2001
|
||||
From: Matthias Reichl <hias@horus.com>
|
||||
Date: Fri, 19 Mar 2021 12:14:17 +0100
|
||||
Subject: [PATCH] ALSA: pcm: fix ELD constraints for some compressed audio
|
||||
formats
|
||||
|
||||
The SADs of compressed formats like AC3 and DTS contain the channel
|
||||
and sample rate info of the audio data inside the compressed stream,
|
||||
but when building constraints we must use the rates and formats used
|
||||
to pass through the stream. eg 2ch 48kHz for AC3.
|
||||
|
||||
Signed-off-by: Matthias Reichl <hias@horus.com>
|
||||
---
|
||||
sound/core/pcm_drm_eld.c | 38 +++++++++++++++++++++++++++++++++++---
|
||||
1 file changed, 35 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/sound/core/pcm_drm_eld.c b/sound/core/pcm_drm_eld.c
|
||||
index 4b5faae5d16e5..e7ec7a8b9d420 100644
|
||||
--- a/sound/core/pcm_drm_eld.c
|
||||
+++ b/sound/core/pcm_drm_eld.c
|
||||
@@ -6,6 +6,7 @@
|
||||
#include <drm/drm_edid.h>
|
||||
#include <sound/pcm.h>
|
||||
#include <sound/pcm_drm_eld.h>
|
||||
+#include <linux/hdmi.h>
|
||||
|
||||
static const unsigned int eld_rates[] = {
|
||||
32000,
|
||||
@@ -17,9 +18,40 @@ static const unsigned int eld_rates[] = {
|
||||
192000,
|
||||
};
|
||||
|
||||
+static unsigned int sad_format(const u8 *sad)
|
||||
+{
|
||||
+ return (sad[0] & 0x78) >> 3;
|
||||
+}
|
||||
+
|
||||
static unsigned int sad_max_channels(const u8 *sad)
|
||||
{
|
||||
- return 1 + (sad[0] & 7);
|
||||
+ switch (sad_format(sad)) {
|
||||
+ case HDMI_AUDIO_CODING_TYPE_AC3:
|
||||
+ case HDMI_AUDIO_CODING_TYPE_DTS:
|
||||
+ case HDMI_AUDIO_CODING_TYPE_EAC3:
|
||||
+ return 2;
|
||||
+ case HDMI_AUDIO_CODING_TYPE_DTS_HD:
|
||||
+ case HDMI_AUDIO_CODING_TYPE_MLP:
|
||||
+ return 8;
|
||||
+ default:
|
||||
+ return 1 + (sad[0] & 7);
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+static unsigned int sad_rate_mask(const u8 *sad)
|
||||
+{
|
||||
+ switch (sad_format(sad)) {
|
||||
+ case HDMI_AUDIO_CODING_TYPE_AC3:
|
||||
+ case HDMI_AUDIO_CODING_TYPE_DTS:
|
||||
+ return 0x07; // 32-48kHz
|
||||
+ case HDMI_AUDIO_CODING_TYPE_EAC3:
|
||||
+ return 0x7f; // 32-192kHz
|
||||
+ case HDMI_AUDIO_CODING_TYPE_DTS_HD:
|
||||
+ case HDMI_AUDIO_CODING_TYPE_MLP:
|
||||
+ return 0x60; // 176.4, 192kHz
|
||||
+ default:
|
||||
+ return sad[1] & 0x7f;
|
||||
+ }
|
||||
}
|
||||
|
||||
static int eld_limit_rates(struct snd_pcm_hw_params *params,
|
||||
@@ -42,7 +74,7 @@ static int eld_limit_rates(struct snd_pcm_hw_params *params,
|
||||
* requested number of channels.
|
||||
*/
|
||||
if (c->min <= max_channels)
|
||||
- rate_mask |= sad[1];
|
||||
+ rate_mask |= sad_rate_mask(sad);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -70,7 +102,7 @@ static int eld_limit_channels(struct snd_pcm_hw_params *params,
|
||||
rate_mask |= BIT(i);
|
||||
|
||||
for (i = drm_eld_sad_count(eld); i > 0; i--, sad += 3)
|
||||
- if (rate_mask & sad[1])
|
||||
+ if (rate_mask & sad_rate_mask(sad))
|
||||
t.max = max(t.max, sad_max_channels(sad));
|
||||
}
|
||||
|
||||
--
|
||||
2.20.1
|
||||
|
@ -1,6 +1,6 @@
|
||||
#
|
||||
# Automatically generated file; DO NOT EDIT.
|
||||
# Linux/arm 5.10.21 Kernel Configuration
|
||||
# Linux/arm 5.10.30 Kernel Configuration
|
||||
#
|
||||
|
||||
#
|
||||
@ -538,7 +538,7 @@ CONFIG_ARM_CPUIDLE=y
|
||||
CONFIG_VFP=y
|
||||
CONFIG_VFPv3=y
|
||||
CONFIG_NEON=y
|
||||
# CONFIG_KERNEL_MODE_NEON is not set
|
||||
CONFIG_KERNEL_MODE_NEON=y
|
||||
# end of Floating point emulation
|
||||
|
||||
#
|
||||
@ -586,11 +586,20 @@ CONFIG_HAVE_ARM_SMCCC=y
|
||||
|
||||
CONFIG_ARM_CRYPTO=y
|
||||
CONFIG_CRYPTO_SHA1_ARM=y
|
||||
CONFIG_CRYPTO_SHA1_ARM_NEON=y
|
||||
# CONFIG_CRYPTO_SHA1_ARM_CE is not set
|
||||
# CONFIG_CRYPTO_SHA2_ARM_CE is not set
|
||||
CONFIG_CRYPTO_SHA256_ARM=y
|
||||
CONFIG_CRYPTO_SHA512_ARM=y
|
||||
CONFIG_CRYPTO_AES_ARM=y
|
||||
CONFIG_CRYPTO_AES_ARM_BS=y
|
||||
# CONFIG_CRYPTO_AES_ARM_CE is not set
|
||||
# CONFIG_CRYPTO_GHASH_ARM_CE is not set
|
||||
CONFIG_CRYPTO_CRC32_ARM_CE=y
|
||||
CONFIG_CRYPTO_CHACHA20_NEON=y
|
||||
CONFIG_CRYPTO_POLY1305_ARM=y
|
||||
CONFIG_CRYPTO_NHPOLY1305_NEON=y
|
||||
CONFIG_CRYPTO_CURVE25519_NEON=y
|
||||
CONFIG_AS_VFP_VMRS_FPINST=y
|
||||
|
||||
#
|
||||
@ -1059,8 +1068,7 @@ CONFIG_HAVE_PCI=y
|
||||
#
|
||||
# Generic Driver Options
|
||||
#
|
||||
CONFIG_UEVENT_HELPER=y
|
||||
CONFIG_UEVENT_HELPER_PATH=""
|
||||
# CONFIG_UEVENT_HELPER is not set
|
||||
CONFIG_DEVTMPFS=y
|
||||
CONFIG_DEVTMPFS_MOUNT=y
|
||||
CONFIG_STANDALONE=y
|
||||
@ -5668,9 +5676,10 @@ CONFIG_CRYPTO_GF128MUL=y
|
||||
CONFIG_CRYPTO_NULL=y
|
||||
CONFIG_CRYPTO_NULL2=y
|
||||
# CONFIG_CRYPTO_PCRYPT is not set
|
||||
# CONFIG_CRYPTO_CRYPTD is not set
|
||||
CONFIG_CRYPTO_CRYPTD=y
|
||||
CONFIG_CRYPTO_AUTHENC=m
|
||||
# CONFIG_CRYPTO_TEST is not set
|
||||
CONFIG_CRYPTO_SIMD=y
|
||||
CONFIG_CRYPTO_ENGINE=m
|
||||
|
||||
#
|
||||
@ -5707,6 +5716,7 @@ CONFIG_CRYPTO_ECB=y
|
||||
# CONFIG_CRYPTO_PCBC is not set
|
||||
# CONFIG_CRYPTO_XTS is not set
|
||||
# CONFIG_CRYPTO_KEYWRAP is not set
|
||||
CONFIG_CRYPTO_NHPOLY1305=y
|
||||
# CONFIG_CRYPTO_ADIANTUM is not set
|
||||
# CONFIG_CRYPTO_ESSIV is not set
|
||||
|
||||
@ -5787,7 +5797,7 @@ CONFIG_CRYPTO_DRBG_HMAC=y
|
||||
# CONFIG_CRYPTO_DRBG_CTR is not set
|
||||
CONFIG_CRYPTO_DRBG=m
|
||||
CONFIG_CRYPTO_JITTERENTROPY=m
|
||||
CONFIG_CRYPTO_USER_API=m
|
||||
CONFIG_CRYPTO_USER_API=y
|
||||
CONFIG_CRYPTO_USER_API_HASH=y
|
||||
CONFIG_CRYPTO_USER_API_SKCIPHER=y
|
||||
CONFIG_CRYPTO_USER_API_RNG=m
|
||||
@ -5806,11 +5816,13 @@ CONFIG_CRYPTO_LIB_BLAKE2S_GENERIC=m
|
||||
CONFIG_CRYPTO_LIB_BLAKE2S=m
|
||||
CONFIG_CRYPTO_ARCH_HAVE_LIB_CHACHA=y
|
||||
CONFIG_CRYPTO_LIB_CHACHA=m
|
||||
CONFIG_CRYPTO_LIB_CURVE25519_GENERIC=m
|
||||
CONFIG_CRYPTO_ARCH_HAVE_LIB_CURVE25519=y
|
||||
CONFIG_CRYPTO_LIB_CURVE25519_GENERIC=y
|
||||
CONFIG_CRYPTO_LIB_CURVE25519=m
|
||||
CONFIG_CRYPTO_LIB_DES=y
|
||||
CONFIG_CRYPTO_LIB_POLY1305_RSIZE=9
|
||||
CONFIG_CRYPTO_ARCH_HAVE_LIB_POLY1305=y
|
||||
CONFIG_CRYPTO_LIB_POLY1305_GENERIC=y
|
||||
CONFIG_CRYPTO_LIB_POLY1305=m
|
||||
CONFIG_CRYPTO_LIB_CHACHA20POLY1305=m
|
||||
CONFIG_CRYPTO_LIB_SHA256=y
|
||||
|
@ -664,7 +664,7 @@ CONFIG_ARCH_HAS_GCOV_PROFILE_ALL=y
|
||||
CONFIG_HAVE_GCC_PLUGINS=y
|
||||
CONFIG_GCC_PLUGINS=y
|
||||
# CONFIG_GCC_PLUGIN_LATENT_ENTROPY is not set
|
||||
CONFIG_GCC_PLUGIN_RANDSTRUCT=y
|
||||
# CONFIG_GCC_PLUGIN_RANDSTRUCT is not set
|
||||
# CONFIG_GCC_PLUGIN_RANDSTRUCT_PERFORMANCE is not set
|
||||
# end of General architecture-dependent options
|
||||
|
||||
@ -1303,8 +1303,7 @@ CONFIG_HAVE_PCI=y
|
||||
#
|
||||
# Generic Driver Options
|
||||
#
|
||||
CONFIG_UEVENT_HELPER=y
|
||||
CONFIG_UEVENT_HELPER_PATH=""
|
||||
# CONFIG_UEVENT_HELPER is not set
|
||||
CONFIG_DEVTMPFS=y
|
||||
CONFIG_DEVTMPFS_MOUNT=y
|
||||
CONFIG_STANDALONE=y
|
||||
|
@ -1,6 +1,6 @@
|
||||
#
|
||||
# Automatically generated file; DO NOT EDIT.
|
||||
# Linux/arm64 5.10.21 Kernel Configuration
|
||||
# Linux/arm64 5.10.30 Kernel Configuration
|
||||
#
|
||||
|
||||
#
|
||||
@ -1372,8 +1372,7 @@ CONFIG_PCIE_ROCKCHIP_HOST=m
|
||||
#
|
||||
# Generic Driver Options
|
||||
#
|
||||
CONFIG_UEVENT_HELPER=y
|
||||
CONFIG_UEVENT_HELPER_PATH=""
|
||||
# CONFIG_UEVENT_HELPER is not set
|
||||
CONFIG_DEVTMPFS=y
|
||||
CONFIG_DEVTMPFS_MOUNT=y
|
||||
CONFIG_STANDALONE=y
|
||||
@ -1549,9 +1548,19 @@ CONFIG_VIRTIO_BLK=y
|
||||
#
|
||||
# NVME Support
|
||||
#
|
||||
# CONFIG_BLK_DEV_NVME is not set
|
||||
# CONFIG_NVME_FC is not set
|
||||
# CONFIG_NVME_TARGET is not set
|
||||
CONFIG_NVME_CORE=y
|
||||
CONFIG_BLK_DEV_NVME=y
|
||||
CONFIG_NVME_MULTIPATH=y
|
||||
# CONFIG_NVME_HWMON is not set
|
||||
CONFIG_NVME_FABRICS=m
|
||||
CONFIG_NVME_FC=m
|
||||
# CONFIG_NVME_TCP is not set
|
||||
CONFIG_NVME_TARGET=m
|
||||
# CONFIG_NVME_TARGET_PASSTHRU is not set
|
||||
CONFIG_NVME_TARGET_LOOP=m
|
||||
CONFIG_NVME_TARGET_FC=m
|
||||
# CONFIG_NVME_TARGET_FCLOOP is not set
|
||||
# CONFIG_NVME_TARGET_TCP is not set
|
||||
# end of NVME Support
|
||||
|
||||
#
|
||||
|
@ -3059,41 +3059,54 @@ index b3247a3a7290..f5617529dbb5 100644
|
||||
RK3066_PLL_RATE_NB(426000000, 3, 213, 4, 32),
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Alex Bee <knaerzche@gmail.com>
|
||||
Date: Wed, 3 Mar 2021 18:27:40 +0100
|
||||
Subject: [PATCH] HACK: drm/bridge: prefer RGB output over YUV422/YUV444 in
|
||||
dw-hdmi
|
||||
Date: Sat, 10 Apr 2021 16:54:26 +0200
|
||||
Subject: [PATCH] drm/bridge: dw-hdmi: fix RGB to YUV color space conversion
|
||||
|
||||
We are currently providing color space conversion coefficents
|
||||
for RGB to YUV conversion for full range to full range.
|
||||
This is wrong, since we are hardcoding YCC quantization range
|
||||
limited in the AVI infoframe (which is correct according to
|
||||
HDMI specs). This results in to dark colors if this conversion
|
||||
is used.
|
||||
I verfied this by setting YCC quantization range to full in
|
||||
AVI infoframe which resulted in correct colors. Doing this,
|
||||
however, will be ignored by some (most) sinks.
|
||||
|
||||
This patch fixes this, by providing CSC coefficents which
|
||||
convert RGB full range to YUV limited range for both BT601
|
||||
and BT709 colorspaces.
|
||||
|
||||
Fixes: 9aaf880ed4ee ("imx-drm: Add mx6 hdmi transmitter support")
|
||||
Signed-off-by: Alex Bee <knaerzche@gmail.com>
|
||||
---
|
||||
drivers/gpu/drm/bridge/synopsys/dw-hdmi.c | 12 ++++++++----
|
||||
1 file changed, 8 insertions(+), 4 deletions(-)
|
||||
drivers/gpu/drm/bridge/synopsys/dw-hdmi.c | 12 ++++++------
|
||||
1 file changed, 6 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
|
||||
index f86b8fa40ab6..00ca09956545 100644
|
||||
index 5716aabbaf50..508738edfac8 100644
|
||||
--- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
|
||||
+++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
|
||||
@@ -2664,6 +2664,14 @@ static u32 *dw_hdmi_bridge_atomic_get_output_bus_fmts(struct drm_bridge *bridge,
|
||||
output_fmts[i++] = MEDIA_BUS_FMT_RGB101010_1X30;
|
||||
}
|
||||
@@ -81,15 +81,15 @@ static const u16 csc_coeff_rgb_out_eitu709[3][4] = {
|
||||
};
|
||||
|
||||
+ /* Hack: prefer output of RGB over YUV422/YUV444 for Rockchip,
|
||||
+ * since color space conversion produces wrong results here
|
||||
+ * TODO: investigate
|
||||
+ */
|
||||
+
|
||||
+ if (is_tmds_allowed(info, mode, MEDIA_BUS_FMT_RGB888_1X24))
|
||||
+ output_fmts[i++] = MEDIA_BUS_FMT_RGB888_1X24;
|
||||
+
|
||||
if ((info->color_formats & DRM_COLOR_FORMAT_YCRCB422) &&
|
||||
is_tmds_allowed(info, mode, MEDIA_BUS_FMT_UYVY8_1X16))
|
||||
output_fmts[i++] = MEDIA_BUS_FMT_UYVY8_1X16;
|
||||
@@ -2672,10 +2680,6 @@ static u32 *dw_hdmi_bridge_atomic_get_output_bus_fmts(struct drm_bridge *bridge,
|
||||
is_tmds_allowed(info, mode, MEDIA_BUS_FMT_YUV8_1X24))
|
||||
output_fmts[i++] = MEDIA_BUS_FMT_YUV8_1X24;
|
||||
static const u16 csc_coeff_rgb_in_eitu601[3][4] = {
|
||||
- { 0x2591, 0x1322, 0x074b, 0x0000 },
|
||||
- { 0x6535, 0x2000, 0x7acc, 0x0200 },
|
||||
- { 0x6acd, 0x7534, 0x2000, 0x0200 }
|
||||
+ { 0x2040, 0x1080, 0x0640, 0x0040 },
|
||||
+ { 0xe880, 0x1c00, 0xfb80, 0x0200 },
|
||||
+ { 0xed80, 0xf680, 0x1c00, 0x0200 }
|
||||
};
|
||||
|
||||
- /* Default 8bit RGB fallback */
|
||||
- if (is_tmds_allowed(info, mode, MEDIA_BUS_FMT_RGB888_1X24))
|
||||
- output_fmts[i++] = MEDIA_BUS_FMT_RGB888_1X24;
|
||||
-
|
||||
*num_output_fmts = i;
|
||||
static const u16 csc_coeff_rgb_in_eitu709[3][4] = {
|
||||
- { 0x2dc5, 0x0d9b, 0x049e, 0x0000 },
|
||||
- { 0x62f0, 0x2000, 0x7d11, 0x0200 },
|
||||
- { 0x6756, 0x78ab, 0x2000, 0x0200 }
|
||||
+ { 0x2740, 0x0bc0, 0x0400, 0x0040 },
|
||||
+ { 0xe680, 0x1c00, 0xfd80, 0x0200 },
|
||||
+ { 0xea40, 0xf980, 0x1c00, 0x0200 }
|
||||
};
|
||||
|
||||
return output_fmts;
|
||||
static const u16 csc_coeff_rgb_full_to_rgb_limited[3][4] = {
|
||||
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
From f675d4c92c304ab18b2d35495ad988a5097f7570 Mon Sep 17 00:00:00 2001
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Jonas Karlman <jonas@kwiboo.se>
|
||||
Date: Sat, 23 May 2020 10:18:16 +0000
|
||||
Subject: [PATCH] WIP: media: rkvdec: continue to gate clock when decoding
|
||||
@ -34,7 +34,7 @@ index 87987a782d75..a1c33905970d 100644
|
||||
rkvdec_job_finish(ctx, VB2_BUF_STATE_ERROR);
|
||||
}
|
||||
|
||||
From d7b43acd1c553dd7db2857e788d9181e0bf46807 Mon Sep 17 00:00:00 2001
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Jonas Karlman <jonas@kwiboo.se>
|
||||
Date: Sat, 23 May 2020 10:16:01 +0000
|
||||
Subject: [PATCH] WIP: media: rkvdec: pm runtime dont use autosuspend before
|
||||
@ -62,7 +62,7 @@ index a1c33905970d..8c2ff05e01f7 100644
|
||||
}
|
||||
|
||||
|
||||
From 958084181228d25b2e62f3a29974050d4aae6d74 Mon Sep 17 00:00:00 2001
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Jonas Karlman <jonas@kwiboo.se>
|
||||
Date: Sat, 23 May 2020 11:23:04 +0000
|
||||
Subject: [PATCH] WIP: media: rkvdec: h264: return early when no reference
|
||||
@ -120,7 +120,7 @@ index c115cd362a7f..d9a2fd9386e2 100644
|
||||
if (idx >= ARRAY_SIZE(dec_params->dpb))
|
||||
continue;
|
||||
|
||||
From 6468b5ada5761e13da563207de76b49cc5481763 Mon Sep 17 00:00:00 2001
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Jonas Karlman <jonas@kwiboo.se>
|
||||
Date: Sat, 23 May 2020 14:42:27 +0000
|
||||
Subject: [PATCH] WIP: media: rkvdec: h264: add field decoding support
|
||||
@ -237,7 +237,7 @@ index d9a2fd9386e2..d4f27ef7addd 100644
|
||||
writel_relaxed(reg, rkvdec->regs + RKVDEC_REG_CUR_POC0);
|
||||
|
||||
|
||||
From d79b22857b95e78b98216ae53d3981a121ed05b9 Mon Sep 17 00:00:00 2001
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Jonas Karlman <jonas@kwiboo.se>
|
||||
Date: Tue, 29 Oct 2019 01:26:02 +0000
|
||||
Subject: [PATCH] RFC: media: hantro: Fix H264 decoding of field encoded
|
||||
@ -438,81 +438,7 @@ index 219283a06f52..7e35140a4f22 100644
|
||||
|
||||
/**
|
||||
|
||||
From 12de17b99d7e2389381657ad6f5328c95c6aad10 Mon Sep 17 00:00:00 2001
|
||||
From: Alex Bee <knaerzche@gmail.com>
|
||||
Date: Wed, 19 Aug 2020 21:12:54 +0200
|
||||
Subject: [PATCH] arm64: dts: rockchip: add rkvdec node for RK3328
|
||||
|
||||
Signed-off-by: Alex Bee <knaerzche@gmail.com>
|
||||
---
|
||||
.../bindings/media/rockchip,vdec.yaml | 5 +++++
|
||||
arch/arm64/boot/dts/rockchip/rk3328.dtsi | 21 ++++++++++++++++++-
|
||||
2 files changed, 25 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/Documentation/devicetree/bindings/media/rockchip,vdec.yaml b/Documentation/devicetree/bindings/media/rockchip,vdec.yaml
|
||||
index 8d35c327018b..4e4f07d3050c 100644
|
||||
--- a/Documentation/devicetree/bindings/media/rockchip,vdec.yaml
|
||||
+++ b/Documentation/devicetree/bindings/media/rockchip,vdec.yaml
|
||||
@@ -16,6 +16,11 @@ description: |-
|
||||
properties:
|
||||
compatible:
|
||||
const: rockchip,rk3399-vdec
|
||||
+ - items:
|
||||
+ - enum:
|
||||
+ - rockchip,rk3328-vdec
|
||||
+ - const: rockchip,rk3399-vdec
|
||||
+
|
||||
|
||||
reg:
|
||||
maxItems: 1
|
||||
diff --git a/arch/arm64/boot/dts/rockchip/rk3328.dtsi b/arch/arm64/boot/dts/rockchip/rk3328.dtsi
|
||||
index 9358d302f5e4..b54ff9055e5f 100644
|
||||
--- a/arch/arm64/boot/dts/rockchip/rk3328.dtsi
|
||||
+++ b/arch/arm64/boot/dts/rockchip/rk3328.dtsi
|
||||
@@ -326,6 +326,10 @@ pd_hevc@RK3328_PD_HEVC {
|
||||
};
|
||||
pd_video@RK3328_PD_VIDEO {
|
||||
reg = <RK3328_PD_VIDEO>;
|
||||
+ clocks = <&cru ACLK_RKVDEC>,
|
||||
+ <&cru HCLK_RKVDEC>,
|
||||
+ <&cru SCLK_VDEC_CABAC>,
|
||||
+ <&cru SCLK_VDEC_CORE>;
|
||||
};
|
||||
pd_vpu@RK3328_PD_VPU {
|
||||
reg = <RK3328_PD_VPU>;
|
||||
@@ -670,6 +674,21 @@ vpu_mmu: iommu@ff350800 {
|
||||
power-domains = <&power RK3328_PD_VPU>;
|
||||
};
|
||||
|
||||
+ rkvdec: video-codec@ff360000 {
|
||||
+ compatible = "rockchip,rk3328-vdec", "rockchip,rk3399-vdec";
|
||||
+ reg = <0x0 0xff360000 0x0 0x480>;
|
||||
+ interrupts = <GIC_SPI 7 IRQ_TYPE_LEVEL_HIGH>;
|
||||
+ interrupt-names = "vdpu";
|
||||
+ assigned-clocks = <&cru ACLK_RKVDEC>, <&cru SCLK_VDEC_CABAC>,
|
||||
+ <&cru SCLK_VDEC_CORE>;
|
||||
+ assigned-clock-rates = <500000000>, <300000000>, <250000000>;
|
||||
+ clocks = <&cru ACLK_RKVDEC>, <&cru HCLK_RKVDEC>,
|
||||
+ <&cru SCLK_VDEC_CABAC>, <&cru SCLK_VDEC_CORE>;
|
||||
+ clock-names = "axi", "ahb", "cabac", "core";
|
||||
+ iommus = <&rkvdec_mmu>;
|
||||
+ power-domains = <&power RK3328_PD_VIDEO>;
|
||||
+ };
|
||||
+
|
||||
rkvdec_mmu: iommu@ff360480 {
|
||||
compatible = "rockchip,iommu";
|
||||
reg = <0x0 0xff360480 0x0 0x40>, <0x0 0xff3604c0 0x0 0x40>;
|
||||
@@ -678,7 +697,7 @@ rkvdec_mmu: iommu@ff360480 {
|
||||
clocks = <&cru ACLK_RKVDEC>, <&cru HCLK_RKVDEC>;
|
||||
clock-names = "aclk", "iface";
|
||||
#iommu-cells = <0>;
|
||||
- status = "disabled";
|
||||
+ power-domains = <&power RK3328_PD_VIDEO>;
|
||||
};
|
||||
|
||||
vop: vop@ff370000 {
|
||||
|
||||
From 6e4661c70aef5e7d9a30e0bf0aa5cfa233fb94a1 Mon Sep 17 00:00:00 2001
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Alex Bee <knaerzche@gmail.com>
|
||||
Date: Wed, 14 Oct 2020 13:27:12 +0200
|
||||
Subject: [PATCH] media: hantro: adapt to match 5.11 H.264 uapi changes
|
||||
@ -540,7 +466,7 @@ index bc2af450a94c..7bdefcc2fc77 100644
|
||||
|
||||
if (dpb[i / 2].flags & V4L2_H264_DPB_ENTRY_FLAG_LONG_TERM)
|
||||
|
||||
From 0c62ee6f28b97e6c9265761bb2c88cc544ec65f2 Mon Sep 17 00:00:00 2001
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Alex Bee <knaerzche@gmail.com>
|
||||
Date: Wed, 14 Oct 2020 13:42:01 +0200
|
||||
Subject: [PATCH] media: rkvdec: adapt to match 5.11 H.264 uapi changes
|
||||
@ -586,7 +512,7 @@ index d4f27ef7addd..627cd4efabef 100644
|
||||
set_ps_field(hw_rps, DPB_INFO(i, j),
|
||||
idx | (1 << 4));
|
||||
|
||||
From 8414ee78e57232ef2cbd169e1db6e30999801564 Mon Sep 17 00:00:00 2001
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Alex Bee <knaerzche@gmail.com>
|
||||
Date: Sun, 31 May 2020 18:22:01 +0200
|
||||
Subject: [PATCH] media: hantro: rk3288: increase max ACLK
|
||||
@ -612,60 +538,462 @@ index 7b299ee3e93d..23f793e73941 100644
|
||||
/*
|
||||
* Supported formats.
|
||||
|
||||
From 739eb1964e8ca26371588e231c18efe842f08a3e Mon Sep 17 00:00:00 2001
|
||||
From: Jonas Karlman <jonas@kwiboo.se>
|
||||
Date: Sat, 23 May 2020 11:42:23 +0000
|
||||
Subject: [PATCH] HACK: media: rkvdec: soft reset
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Randy Li <ayaka@soulik.info>
|
||||
Date: Sun, 6 Jan 2019 01:48:37 +0800
|
||||
Subject: [PATCH] soc: rockchip: power-domain: export idle request
|
||||
|
||||
NOTE: rkvdec does not fully self reset, trigger pm runtime suspend to unlock when rkvdec issue soft reset
|
||||
We need to put the power status of HEVC IP into IDLE unless
|
||||
we can't reset that IP or the SoC would crash down.
|
||||
rockchip_pmu_idle_request(dev, true)---> enter idle
|
||||
rockchip_pmu_idle_request(dev, false)---> exit idle
|
||||
|
||||
Signed-off-by: Caesar Wang <wxt@rock-chips.com>
|
||||
Signed-off-by: Jeffy Chen <jeffy.chen@rock-chips.com>
|
||||
Signed-off-by: Randy Li <ayaka@soulik.info>
|
||||
---
|
||||
drivers/staging/media/rkvdec/rkvdec.c | 9 ++++++++-
|
||||
drivers/staging/media/rkvdec/rkvdec.h | 1 +
|
||||
2 files changed, 9 insertions(+), 1 deletion(-)
|
||||
drivers/soc/rockchip/pm_domains.c | 23 +++++++++++++++++++++++
|
||||
include/linux/rockchip_pmu.h | 15 +++++++++++++++
|
||||
include/soc/rockchip/pm_domains.h | 18 ++++++++++++++++++
|
||||
3 files changed, 56 insertions(+)
|
||||
create mode 100644 include/linux/rockchip_pmu.h
|
||||
create mode 100644 include/soc/rockchip/pm_domains.h
|
||||
|
||||
diff --git a/drivers/soc/rockchip/pm_domains.c b/drivers/soc/rockchip/pm_domains.c
|
||||
index 54eb6cfc5d5b..727af107e6d3 100644
|
||||
--- a/drivers/soc/rockchip/pm_domains.c
|
||||
+++ b/drivers/soc/rockchip/pm_domains.c
|
||||
@@ -196,6 +196,29 @@ static int rockchip_pmu_set_idle_request(struct rockchip_pm_domain *pd,
|
||||
return 0;
|
||||
}
|
||||
|
||||
+int rockchip_pmu_idle_request(struct device *dev, bool idle)
|
||||
+{
|
||||
+ struct generic_pm_domain *genpd;
|
||||
+ struct rockchip_pm_domain *pd;
|
||||
+ int ret;
|
||||
+
|
||||
+ if (IS_ERR_OR_NULL(dev))
|
||||
+ return -EINVAL;
|
||||
+
|
||||
+ if (IS_ERR_OR_NULL(dev->pm_domain))
|
||||
+ return -EINVAL;
|
||||
+
|
||||
+ genpd = pd_to_genpd(dev->pm_domain);
|
||||
+ pd = to_rockchip_pd(genpd);
|
||||
+
|
||||
+ mutex_lock(&pd->pmu->mutex);
|
||||
+ ret = rockchip_pmu_set_idle_request(pd, idle);
|
||||
+ mutex_unlock(&pd->pmu->mutex);
|
||||
+
|
||||
+ return ret;
|
||||
+}
|
||||
+EXPORT_SYMBOL(rockchip_pmu_idle_request);
|
||||
+
|
||||
static int rockchip_pmu_save_qos(struct rockchip_pm_domain *pd)
|
||||
{
|
||||
int i;
|
||||
diff --git a/include/linux/rockchip_pmu.h b/include/linux/rockchip_pmu.h
|
||||
new file mode 100644
|
||||
index 000000000000..720b3314e71a
|
||||
--- /dev/null
|
||||
+++ b/include/linux/rockchip_pmu.h
|
||||
@@ -0,0 +1,15 @@
|
||||
+/*
|
||||
+ * pm_domain.h - Definitions and headers related to device power domains.
|
||||
+ *
|
||||
+ * Copyright (C) 2017 Randy Li <ayaka@soulik.info>.
|
||||
+ *
|
||||
+ * This file is released under the GPLv2.
|
||||
+ */
|
||||
+
|
||||
+#ifndef _LINUX_ROCKCHIP_PM_H
|
||||
+#define _LINUX_ROCKCHIP_PM_H
|
||||
+#include <linux/device.h>
|
||||
+
|
||||
+int rockchip_pmu_idle_request(struct device *dev, bool idle);
|
||||
+
|
||||
+#endif /* _LINUX_ROCKCHIP_PM_H */
|
||||
diff --git a/include/soc/rockchip/pm_domains.h b/include/soc/rockchip/pm_domains.h
|
||||
new file mode 100644
|
||||
index 000000000000..690db6118636
|
||||
--- /dev/null
|
||||
+++ b/include/soc/rockchip/pm_domains.h
|
||||
@@ -0,0 +1,18 @@
|
||||
+/* SPDX-License-Identifier: GPL-2.0 */
|
||||
+#ifndef __SOC_ROCKCHIP_PM_DOMAINS_H
|
||||
+#define __SOC_ROCKCHIP_PM_DOMAINS_H
|
||||
+
|
||||
+#include <linux/errno.h>
|
||||
+
|
||||
+struct device;
|
||||
+
|
||||
+#ifdef CONFIG_ROCKCHIP_PM_DOMAINS
|
||||
+int rockchip_pmu_idle_request(struct device *dev, bool idle);
|
||||
+#else
|
||||
+static inline int rockchip_pmu_idle_request(struct device *dev, bool idle)
|
||||
+{
|
||||
+ return -ENOTSUPP;
|
||||
+}
|
||||
+#endif
|
||||
+
|
||||
+#endif
|
||||
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Alex Bee <knaerzche@gmail.com>
|
||||
Date: Wed, 20 May 2020 17:04:47 +0200
|
||||
Subject: [PATCH] WIP: media: rkvdec: implement reset controls
|
||||
|
||||
---
|
||||
.../bindings/media/rockchip,vdec.yaml | 19 +++++++
|
||||
drivers/staging/media/rkvdec/rkvdec-regs.h | 5 ++
|
||||
drivers/staging/media/rkvdec/rkvdec.c | 54 +++++++++++++++++++
|
||||
drivers/staging/media/rkvdec/rkvdec.h | 11 +++-
|
||||
4 files changed, 88 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/Documentation/devicetree/bindings/media/rockchip,vdec.yaml b/Documentation/devicetree/bindings/media/rockchip,vdec.yaml
|
||||
index 8d35c327018b..dfafdb671798 100644
|
||||
--- a/Documentation/devicetree/bindings/media/rockchip,vdec.yaml
|
||||
+++ b/Documentation/devicetree/bindings/media/rockchip,vdec.yaml
|
||||
@@ -43,6 +43,18 @@ properties:
|
||||
iommus:
|
||||
maxItems: 1
|
||||
|
||||
+ resets:
|
||||
+ maxItems: 6
|
||||
+
|
||||
+ reset-names:
|
||||
+ items:
|
||||
+ - const: video_h
|
||||
+ - const: video_a
|
||||
+ - const: video_core
|
||||
+ - const: video_cabac
|
||||
+ - const: niu_a
|
||||
+ - const: niu_h
|
||||
+
|
||||
required:
|
||||
- compatible
|
||||
- reg
|
||||
@@ -50,6 +62,8 @@ required:
|
||||
- clocks
|
||||
- clock-names
|
||||
- power-domains
|
||||
+ - resets
|
||||
+ - reset-names
|
||||
|
||||
additionalProperties: false
|
||||
|
||||
@@ -68,6 +82,11 @@ examples:
|
||||
clock-names = "axi", "ahb", "cabac", "core";
|
||||
power-domains = <&power RK3399_PD_VDU>;
|
||||
iommus = <&vdec_mmu>;
|
||||
+ resets = <&cru SRST_H_VDU>, <&cru SRST_A_VDU>,
|
||||
+ <&cru SRST_VDU_CORE>, <&cru SRST_VDU_CA>,
|
||||
+ <&cru SRST_A_VDU_NOC>, <&cru SRST_H_VDU_NOC>;
|
||||
+ reset-names = "video_h", "video_a", "video_core", "video_cabac",
|
||||
+ "niu_a", "niu_h";
|
||||
};
|
||||
|
||||
...
|
||||
diff --git a/drivers/staging/media/rkvdec/rkvdec-regs.h b/drivers/staging/media/rkvdec/rkvdec-regs.h
|
||||
index 15b9bee92016..3acc914888f6 100644
|
||||
--- a/drivers/staging/media/rkvdec/rkvdec-regs.h
|
||||
+++ b/drivers/staging/media/rkvdec/rkvdec-regs.h
|
||||
@@ -28,6 +28,11 @@
|
||||
#define RKVDEC_SOFTRST_EN_P BIT(20)
|
||||
#define RKVDEC_FORCE_SOFTRESET_VALID BIT(21)
|
||||
#define RKVDEC_SOFTRESET_RDY BIT(22)
|
||||
+#define RKVDEC_ERR_MASK (RKVDEC_BUS_STA \
|
||||
+ | RKVDEC_ERR_STA \
|
||||
+ | RKVDEC_TIMEOUT_STA \
|
||||
+ | RKVDEC_BUF_EMPTY_STA \
|
||||
+ | RKVDEC_COLMV_REF_ERR_STA )
|
||||
|
||||
#define RKVDEC_REG_SYSCTRL 0x008
|
||||
#define RKVDEC_IN_ENDIAN BIT(0)
|
||||
diff --git a/drivers/staging/media/rkvdec/rkvdec.c b/drivers/staging/media/rkvdec/rkvdec.c
|
||||
index 8c2ff05e01f7..6bc766f88c13 100644
|
||||
index 8c2ff05e01f7..a0a1149ca1a8 100644
|
||||
--- a/drivers/staging/media/rkvdec/rkvdec.c
|
||||
+++ b/drivers/staging/media/rkvdec/rkvdec.c
|
||||
@@ -725,6 +725,8 @@ static void rkvdec_job_finish(struct rkvdec_ctx *ctx,
|
||||
@@ -10,12 +10,15 @@
|
||||
*/
|
||||
|
||||
#include <linux/clk.h>
|
||||
+#include <linux/delay.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/of.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/pm.h>
|
||||
#include <linux/pm_runtime.h>
|
||||
+#include <linux/reset.h>
|
||||
+#include <linux/rockchip_pmu.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/videodev2.h>
|
||||
#include <linux/workqueue.h>
|
||||
@@ -725,6 +728,11 @@ static void rkvdec_job_finish(struct rkvdec_ctx *ctx,
|
||||
|
||||
pm_runtime_mark_last_busy(rkvdec->dev);
|
||||
pm_runtime_put_autosuspend(rkvdec->dev);
|
||||
+ if (result == VB2_BUF_STATE_ERROR)
|
||||
+ rkvdec->soft_reset = true;
|
||||
+
|
||||
+ if (result == VB2_BUF_STATE_ERROR &&
|
||||
+ rkvdec->reset_mask == RESET_NONE)
|
||||
+ rkvdec->reset_mask |= RESET_SOFT;
|
||||
+
|
||||
rkvdec_job_finish_no_pm(ctx, result);
|
||||
}
|
||||
|
||||
@@ -763,6 +765,11 @@ static void rkvdec_device_run(void *priv)
|
||||
@@ -762,6 +770,34 @@ static void rkvdec_device_run(void *priv)
|
||||
|
||||
if (WARN_ON(!desc))
|
||||
return;
|
||||
|
||||
+ if (rkvdec->soft_reset) {
|
||||
+ pm_runtime_suspend(rkvdec->dev);
|
||||
+ rkvdec->soft_reset = false;
|
||||
+ }
|
||||
+ if (rkvdec->reset_mask != RESET_NONE) {
|
||||
+
|
||||
+ if (rkvdec->reset_mask & RESET_SOFT) {
|
||||
+ writel(RKVDEC_SOFTRST_EN_P,
|
||||
+ rkvdec->regs + RKVDEC_REG_INTERRUPT);
|
||||
+ udelay(RKVDEC_RESET_DELAY);
|
||||
+ if (readl(rkvdec->regs + RKVDEC_REG_INTERRUPT)
|
||||
+ & RKVDEC_SOFTRESET_RDY)
|
||||
+ dev_info_ratelimited(rkvdec->dev,
|
||||
+ "softreset failed\n");
|
||||
+ }
|
||||
+
|
||||
+ if (rkvdec->reset_mask & RESET_HARD) {
|
||||
+ pm_runtime_suspend(rkvdec->dev);
|
||||
+ rockchip_pmu_idle_request(rkvdec->dev, true);
|
||||
+ ret = reset_control_assert(rkvdec->rstc);
|
||||
+ if (!ret) {
|
||||
+ udelay(RKVDEC_RESET_DELAY);
|
||||
+ ret = reset_control_deassert(rkvdec->rstc);
|
||||
+ }
|
||||
+ rockchip_pmu_idle_request(rkvdec->dev, false);
|
||||
+ if (ret)
|
||||
+ dev_notice_ratelimited(rkvdec->dev,
|
||||
+ "hardreset failed\n");
|
||||
+ }
|
||||
+
|
||||
+ rkvdec->reset_mask = RESET_NONE;
|
||||
+ }
|
||||
|
||||
ret = pm_runtime_get_sync(rkvdec->dev);
|
||||
if (ret < 0) {
|
||||
rkvdec_job_finish_no_pm(ctx, VB2_BUF_STATE_ERROR);
|
||||
@@ -1046,7 +1053,7 @@ static void rkvdec_watchdog_func(struct work_struct *work)
|
||||
@@ -1029,6 +1065,11 @@ static irqreturn_t rkvdec_irq_handler(int irq, void *priv)
|
||||
if (cancel_delayed_work(&rkvdec->watchdog_work)) {
|
||||
struct rkvdec_ctx *ctx;
|
||||
|
||||
+ if (state == VB2_BUF_STATE_ERROR) {
|
||||
+ rkvdec->reset_mask |= (status & RKVDEC_ERR_MASK) ?
|
||||
+ RESET_HARD : RESET_SOFT;
|
||||
+ }
|
||||
+
|
||||
ctx = v4l2_m2m_get_curr_priv(rkvdec->m2m_dev);
|
||||
rkvdec_job_finish(ctx, state);
|
||||
}
|
||||
@@ -1046,6 +1087,7 @@ static void rkvdec_watchdog_func(struct work_struct *work)
|
||||
ctx = v4l2_m2m_get_curr_priv(rkvdec->m2m_dev);
|
||||
if (ctx) {
|
||||
dev_err(rkvdec->dev, "Frame processing timed out!\n");
|
||||
- writel(RKVDEC_CONFIG_DEC_CLK_GATE_E | RKVDEC_IRQ_DIS,
|
||||
+ writel(RKVDEC_CONFIG_DEC_CLK_GATE_E | RKVDEC_IRQ_DIS | RKVDEC_SOFTRST_EN_P,
|
||||
+ rkvdec->reset_mask |= RESET_HARD;
|
||||
writel(RKVDEC_CONFIG_DEC_CLK_GATE_E | RKVDEC_IRQ_DIS,
|
||||
rkvdec->regs + RKVDEC_REG_INTERRUPT);
|
||||
writel(0, rkvdec->regs + RKVDEC_REG_SYSCTRL);
|
||||
rkvdec_job_finish(ctx, VB2_BUF_STATE_ERROR);
|
||||
@@ -1125,6 +1167,18 @@ static int rkvdec_probe(struct platform_device *pdev)
|
||||
return ret;
|
||||
}
|
||||
|
||||
+
|
||||
+ rkvdec->rstc = devm_reset_control_array_get(&pdev->dev, false, true);
|
||||
+ if (IS_ERR(rkvdec->rstc)) {
|
||||
+ dev_err(&pdev->dev,
|
||||
+ "get resets failed %ld\n", PTR_ERR(rkvdec->rstc));
|
||||
+ return PTR_ERR(rkvdec->rstc);
|
||||
+ } else {
|
||||
+ dev_dbg(&pdev->dev,
|
||||
+ "requested %d resets\n",
|
||||
+ reset_control_get_count(&pdev->dev));
|
||||
+ }
|
||||
+
|
||||
pm_runtime_set_autosuspend_delay(&pdev->dev, 100);
|
||||
pm_runtime_use_autosuspend(&pdev->dev);
|
||||
pm_runtime_enable(&pdev->dev);
|
||||
diff --git a/drivers/staging/media/rkvdec/rkvdec.h b/drivers/staging/media/rkvdec/rkvdec.h
|
||||
index e95c52e3168a..2e42833d83e1 100644
|
||||
index e95c52e3168a..c14cd2571bfc 100644
|
||||
--- a/drivers/staging/media/rkvdec/rkvdec.h
|
||||
+++ b/drivers/staging/media/rkvdec/rkvdec.h
|
||||
@@ -91,6 +91,7 @@ struct rkvdec_dev {
|
||||
@@ -11,10 +11,11 @@
|
||||
#ifndef RKVDEC_H_
|
||||
#define RKVDEC_H_
|
||||
|
||||
+#include <linux/clk.h>
|
||||
#include <linux/platform_device.h>
|
||||
+#include <linux/reset.h>
|
||||
#include <linux/videodev2.h>
|
||||
#include <linux/wait.h>
|
||||
-#include <linux/clk.h>
|
||||
|
||||
#include <media/v4l2-ctrls.h>
|
||||
#include <media/v4l2-device.h>
|
||||
@@ -22,6 +23,12 @@
|
||||
#include <media/videobuf2-core.h>
|
||||
#include <media/videobuf2-dma-contig.h>
|
||||
|
||||
+#define RESET_NONE 0
|
||||
+#define RESET_SOFT BIT(0)
|
||||
+#define RESET_HARD BIT(1)
|
||||
+
|
||||
+#define RKVDEC_RESET_DELAY 5
|
||||
+
|
||||
struct rkvdec_ctx;
|
||||
|
||||
struct rkvdec_ctrl_desc {
|
||||
@@ -91,6 +98,8 @@ struct rkvdec_dev {
|
||||
void __iomem *regs;
|
||||
struct mutex vdev_lock; /* serializes ioctls */
|
||||
struct delayed_work watchdog_work;
|
||||
+ bool soft_reset;
|
||||
+ struct reset_control *rstc;
|
||||
+ u8 reset_mask;
|
||||
};
|
||||
|
||||
struct rkvdec_ctx {
|
||||
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Alex Bee <knaerzche@gmail.com>
|
||||
Date: Tue, 18 Aug 2020 11:38:04 +0200
|
||||
Subject: [PATCH] WIP: arm64: dts: add resets to vdec for RK3399
|
||||
|
||||
---
|
||||
arch/arm64/boot/dts/rockchip/rk3399.dtsi | 10 +++++++++-
|
||||
1 file changed, 9 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/arch/arm64/boot/dts/rockchip/rk3399.dtsi b/arch/arm64/boot/dts/rockchip/rk3399.dtsi
|
||||
index ea1ef6c7455a..92e3f6da0297 100644
|
||||
--- a/arch/arm64/boot/dts/rockchip/rk3399.dtsi
|
||||
+++ b/arch/arm64/boot/dts/rockchip/rk3399.dtsi
|
||||
@@ -1022,7 +1022,10 @@ pd_vcodec@RK3399_PD_VCODEC {
|
||||
pd_vdu@RK3399_PD_VDU {
|
||||
reg = <RK3399_PD_VDU>;
|
||||
clocks = <&cru ACLK_VDU>,
|
||||
- <&cru HCLK_VDU>;
|
||||
+ <&cru HCLK_VDU>,
|
||||
+ <&cru SCLK_VDU_CA>,
|
||||
+ <&cru SCLK_VDU_CORE>;
|
||||
+
|
||||
pm_qos = <&qos_video_m1_r>,
|
||||
<&qos_video_m1_w>;
|
||||
};
|
||||
@@ -1283,6 +1286,11 @@ vdec: video-codec@ff660000 {
|
||||
clock-names = "axi", "ahb", "cabac", "core";
|
||||
iommus = <&vdec_mmu>;
|
||||
power-domains = <&power RK3399_PD_VDU>;
|
||||
+ resets = <&cru SRST_H_VDU>, <&cru SRST_A_VDU>,
|
||||
+ <&cru SRST_VDU_CORE>, <&cru SRST_VDU_CA>,
|
||||
+ <&cru SRST_A_VDU_NOC>, <&cru SRST_H_VDU_NOC>;
|
||||
+ reset-names = "video_h", "video_a", "video_core", "video_cabac",
|
||||
+ "niu_a", "niu_h";
|
||||
};
|
||||
|
||||
vdec_mmu: iommu@ff660480 {
|
||||
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Alex Bee <knaerzche@gmail.com>
|
||||
Date: Fri, 1 Jan 2021 12:11:12 +0200
|
||||
Subject: [PATCH] arm64: dts: rockchip: fix RK3399 vdec register witdh
|
||||
|
||||
Signed-off-by: Alex Bee <knaerzche@gmail.com>
|
||||
---
|
||||
arch/arm64/boot/dts/rockchip/rk3399.dtsi | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/arch/arm64/boot/dts/rockchip/rk3399.dtsi b/arch/arm64/boot/dts/rockchip/rk3399.dtsi
|
||||
index 92e3f6da0297..03c6737ca0ea 100644
|
||||
--- a/arch/arm64/boot/dts/rockchip/rk3399.dtsi
|
||||
+++ b/arch/arm64/boot/dts/rockchip/rk3399.dtsi
|
||||
@@ -1279,7 +1279,7 @@ vpu_mmu: iommu@ff650800 {
|
||||
|
||||
vdec: video-codec@ff660000 {
|
||||
compatible = "rockchip,rk3399-vdec";
|
||||
- reg = <0x0 0xff660000 0x0 0x400>;
|
||||
+ reg = <0x0 0xff660000 0x0 0x480>;
|
||||
interrupts = <GIC_SPI 116 IRQ_TYPE_LEVEL_HIGH 0>;
|
||||
clocks = <&cru ACLK_VDU>, <&cru HCLK_VDU>,
|
||||
<&cru SCLK_VDU_CA>, <&cru SCLK_VDU_CORE>;
|
||||
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Alex Bee <knaerzche@gmail.com>
|
||||
Date: Wed, 19 Aug 2020 21:12:54 +0200
|
||||
Subject: [PATCH] arm64: dts: rockchip: add rkvdec node for RK3328
|
||||
|
||||
Signed-off-by: Alex Bee <knaerzche@gmail.com>
|
||||
---
|
||||
.../bindings/media/rockchip,vdec.yaml | 5 ++++
|
||||
arch/arm64/boot/dts/rockchip/rk3328.dtsi | 26 ++++++++++++++++++-
|
||||
2 files changed, 30 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/Documentation/devicetree/bindings/media/rockchip,vdec.yaml b/Documentation/devicetree/bindings/media/rockchip,vdec.yaml
|
||||
index dfafdb671798..360b750e5514 100644
|
||||
--- a/Documentation/devicetree/bindings/media/rockchip,vdec.yaml
|
||||
+++ b/Documentation/devicetree/bindings/media/rockchip,vdec.yaml
|
||||
@@ -16,6 +16,11 @@ description: |-
|
||||
properties:
|
||||
compatible:
|
||||
const: rockchip,rk3399-vdec
|
||||
+ - items:
|
||||
+ - enum:
|
||||
+ - rockchip,rk3328-vdec
|
||||
+ - const: rockchip,rk3399-vdec
|
||||
+
|
||||
|
||||
reg:
|
||||
maxItems: 1
|
||||
diff --git a/arch/arm64/boot/dts/rockchip/rk3328.dtsi b/arch/arm64/boot/dts/rockchip/rk3328.dtsi
|
||||
index 31c48c38c955..dad09ad7e501 100644
|
||||
--- a/arch/arm64/boot/dts/rockchip/rk3328.dtsi
|
||||
+++ b/arch/arm64/boot/dts/rockchip/rk3328.dtsi
|
||||
@@ -326,6 +326,10 @@ pd_hevc@RK3328_PD_HEVC {
|
||||
};
|
||||
pd_video@RK3328_PD_VIDEO {
|
||||
reg = <RK3328_PD_VIDEO>;
|
||||
+ clocks = <&cru ACLK_RKVDEC>,
|
||||
+ <&cru HCLK_RKVDEC>,
|
||||
+ <&cru SCLK_VDEC_CABAC>,
|
||||
+ <&cru SCLK_VDEC_CORE>;
|
||||
};
|
||||
pd_vpu@RK3328_PD_VPU {
|
||||
reg = <RK3328_PD_VPU>;
|
||||
@@ -670,6 +674,26 @@ vpu_mmu: iommu@ff350800 {
|
||||
power-domains = <&power RK3328_PD_VPU>;
|
||||
};
|
||||
|
||||
+ rkvdec: video-codec@ff360000 {
|
||||
+ compatible = "rockchip,rk3328-vdec", "rockchip,rk3399-vdec";
|
||||
+ reg = <0x0 0xff360000 0x0 0x480>;
|
||||
+ interrupts = <GIC_SPI 7 IRQ_TYPE_LEVEL_HIGH>;
|
||||
+ interrupt-names = "vdpu";
|
||||
+ assigned-clocks = <&cru ACLK_RKVDEC>, <&cru SCLK_VDEC_CABAC>,
|
||||
+ <&cru SCLK_VDEC_CORE>;
|
||||
+ assigned-clock-rates = <500000000>, <300000000>, <250000000>;
|
||||
+ clocks = <&cru ACLK_RKVDEC>, <&cru HCLK_RKVDEC>,
|
||||
+ <&cru SCLK_VDEC_CABAC>, <&cru SCLK_VDEC_CORE>;
|
||||
+ clock-names = "axi", "ahb", "cabac", "core";
|
||||
+ iommus = <&rkvdec_mmu>;
|
||||
+ power-domains = <&power RK3328_PD_VIDEO>;
|
||||
+ resets = <&cru SRST_VDEC_H>, <&cru SRST_VDEC_A>,
|
||||
+ <&cru SRST_VDEC_CORE>, <&cru SRST_VDEC_CABAC>,
|
||||
+ <&cru SRST_VDEC_NIU_A>, <&cru SRST_VDEC_NIU_H>;
|
||||
+ reset-names = "video_h", "video_a", "video_core", "video_cabac",
|
||||
+ "niu_a", "niu_h";
|
||||
+ };
|
||||
+
|
||||
rkvdec_mmu: iommu@ff360480 {
|
||||
compatible = "rockchip,iommu";
|
||||
reg = <0x0 0xff360480 0x0 0x40>, <0x0 0xff3604c0 0x0 0x40>;
|
||||
@@ -678,7 +702,7 @@ rkvdec_mmu: iommu@ff360480 {
|
||||
clocks = <&cru ACLK_RKVDEC>, <&cru HCLK_RKVDEC>;
|
||||
clock-names = "aclk", "iface";
|
||||
#iommu-cells = <0>;
|
||||
- status = "disabled";
|
||||
+ power-domains = <&power RK3328_PD_VIDEO>;
|
||||
};
|
||||
|
||||
vop: vop@ff370000 {
|
||||
|
@ -149,30 +149,6 @@ index b54ff9055e5f..2fae7fa6b000 100644
|
||||
|
||||
h265e_mmu: iommu@ff330200 {
|
||||
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Alex Bee <knaerzche@gmail.com>
|
||||
Date: Wed, 2 Sep 2020 21:22:31 +0200
|
||||
Subject: [PATCH] arm64: dts: rockchip: add rockchip,disable-mmu-reset for vdec
|
||||
iommu
|
||||
|
||||
Signed-off-by: Alex Bee <knaerzche@gmail.com>
|
||||
---
|
||||
arch/arm64/boot/dts/rockchip/rk3328.dtsi | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/arch/arm64/boot/dts/rockchip/rk3328.dtsi b/arch/arm64/boot/dts/rockchip/rk3328.dtsi
|
||||
index 2fae7fa6b000..3d933d74c2b3 100644
|
||||
--- a/arch/arm64/boot/dts/rockchip/rk3328.dtsi
|
||||
+++ b/arch/arm64/boot/dts/rockchip/rk3328.dtsi
|
||||
@@ -731,6 +731,7 @@ rkvdec_mmu: iommu@ff360480 {
|
||||
clock-names = "aclk", "iface";
|
||||
#iommu-cells = <0>;
|
||||
power-domains = <&power RK3328_PD_VIDEO>;
|
||||
+ rockchip,disable-mmu-reset;
|
||||
};
|
||||
|
||||
vop: vop@ff370000 {
|
||||
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Alex Bee <knaerzche@gmail.com>
|
||||
Date: Mon, 10 Feb 2020 19:22:41 +0100
|
||||
@ -220,7 +196,7 @@ Signed-off-by: Alex Bee <knaerzche@gmail.com>
|
||||
1 file changed, 20 insertions(+)
|
||||
|
||||
diff --git a/arch/arm/boot/dts/rk3288-miqi.dts b/arch/arm/boot/dts/rk3288-miqi.dts
|
||||
index 713f55e143c6..2420d8e1c66f 100644
|
||||
index 713f55e143c6..8d30c49f406e 100644
|
||||
--- a/arch/arm/boot/dts/rk3288-miqi.dts
|
||||
+++ b/arch/arm/boot/dts/rk3288-miqi.dts
|
||||
@@ -78,6 +78,21 @@ vcc_sys: vsys-regulator {
|
||||
@ -231,7 +207,7 @@ index 713f55e143c6..2420d8e1c66f 100644
|
||||
+ sound {
|
||||
+ compatible = "simple-audio-card";
|
||||
+ simple-audio-card,format = "i2s";
|
||||
+ simple-audio-card,name = "rockchip,miqi-codec";
|
||||
+ simple-audio-card,name = "HDMI";
|
||||
+ simple-audio-card,mclk-fs = <512>;
|
||||
+
|
||||
+ simple-audio-card,codec {
|
||||
@ -260,27 +236,41 @@ index 713f55e143c6..2420d8e1c66f 100644
|
||||
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Alex Bee <knaerzche@gmail.com>
|
||||
Date: Fri, 1 Jan 2021 12:11:12 +0200
|
||||
Subject: [PATCH] arm64: dts: rockchip: fix RK3399 vdec register witdh
|
||||
Date: Fri, 2 Apr 2021 17:54:22 +0200
|
||||
Subject: [PATCH] ARM64/ARM: dts: align sound card names
|
||||
|
||||
Signed-off-by: Alex Bee <knaerzche@gmail.com>
|
||||
---
|
||||
arch/arm/boot/dts/rk3288-tinker.dtsi | 2 +-
|
||||
arch/arm64/boot/dts/rockchip/rk3399.dtsi | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
2 files changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/arch/arm/boot/dts/rk3288-tinker.dtsi b/arch/arm/boot/dts/rk3288-tinker.dtsi
|
||||
index 9c1e38c54eae..ee332fc9cf1f 100644
|
||||
--- a/arch/arm/boot/dts/rk3288-tinker.dtsi
|
||||
+++ b/arch/arm/boot/dts/rk3288-tinker.dtsi
|
||||
@@ -75,7 +75,7 @@ sdio_pwrseq: sdio-pwrseq {
|
||||
sound {
|
||||
compatible = "simple-audio-card";
|
||||
simple-audio-card,format = "i2s";
|
||||
- simple-audio-card,name = "rockchip,tinker-codec";
|
||||
+ simple-audio-card,name = "HDMI";
|
||||
simple-audio-card,mclk-fs = <512>;
|
||||
|
||||
simple-audio-card,codec {
|
||||
diff --git a/arch/arm64/boot/dts/rockchip/rk3399.dtsi b/arch/arm64/boot/dts/rockchip/rk3399.dtsi
|
||||
index 418d16b0b648..4d5004c9c778 100644
|
||||
index 03c6737ca0ea..9c2ac03c154b 100644
|
||||
--- a/arch/arm64/boot/dts/rockchip/rk3399.dtsi
|
||||
+++ b/arch/arm64/boot/dts/rockchip/rk3399.dtsi
|
||||
@@ -1276,7 +1276,7 @@ vpu_mmu: iommu@ff650800 {
|
||||
@@ -1782,7 +1782,7 @@ hdmi_sound: hdmi-sound {
|
||||
compatible = "simple-audio-card";
|
||||
simple-audio-card,format = "i2s";
|
||||
simple-audio-card,mclk-fs = <256>;
|
||||
- simple-audio-card,name = "hdmi-sound";
|
||||
+ simple-audio-card,name = "HDMI";
|
||||
status = "disabled";
|
||||
|
||||
vdec: video-codec@ff660000 {
|
||||
compatible = "rockchip,rk3399-vdec";
|
||||
- reg = <0x0 0xff660000 0x0 0x400>;
|
||||
+ reg = <0x0 0xff660000 0x0 0x480>;
|
||||
interrupts = <GIC_SPI 116 IRQ_TYPE_LEVEL_HIGH 0>;
|
||||
interrupt-names = "vdpu";
|
||||
clocks = <&cru ACLK_VDU>, <&cru HCLK_VDU>,
|
||||
simple-audio-card,cpu {
|
||||
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Alex Bee <knaerzche@gmail.com>
|
||||
@ -774,3 +764,4 @@ index 70ab4fbdc23e..4dbc370e538f 100644
|
||||
cec_transmit_attempt_done(adap, cec->tx_status);
|
||||
}
|
||||
if (cec->rx_done) {
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
From 669adf695f98a9566741ab25f59c24ed619a456e Mon Sep 17 00:00:00 2001
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Jernej Skrabec <jernej.skrabec@siol.net>
|
||||
Date: Sat, 26 Oct 2019 13:55:15 +0200
|
||||
Subject: [PATCH] media: uapi: hevc: Add scaling matrix control
|
||||
@ -78,7 +78,7 @@ index d585909bc4e2..f817c643761b 100644
|
||||
Buffers associated with this pixel format must contain the appropriate
|
||||
number of macroblocks to decode a full corresponding frame.
|
||||
diff --git a/drivers/media/v4l2-core/v4l2-ctrls.c b/drivers/media/v4l2-core/v4l2-ctrls.c
|
||||
index a88e962ac8a1..4267ba536013 100644
|
||||
index 1666a7ec873a..92bbfb81610d 100644
|
||||
--- a/drivers/media/v4l2-core/v4l2-ctrls.c
|
||||
+++ b/drivers/media/v4l2-core/v4l2-ctrls.c
|
||||
@@ -1026,6 +1026,7 @@ const char *v4l2_ctrl_get_name(u32 id)
|
||||
@ -109,7 +109,7 @@ index a88e962ac8a1..4267ba536013 100644
|
||||
case V4L2_CTRL_TYPE_AREA:
|
||||
area = p;
|
||||
if (!area->width || !area->height)
|
||||
@@ -2865,6 +2872,9 @@ static struct v4l2_ctrl *v4l2_ctrl_new(struct v4l2_ctrl_handler *hdl,
|
||||
@@ -2866,6 +2873,9 @@ static struct v4l2_ctrl *v4l2_ctrl_new(struct v4l2_ctrl_handler *hdl,
|
||||
case V4L2_CTRL_TYPE_HEVC_SLICE_PARAMS:
|
||||
elem_size = sizeof(struct v4l2_ctrl_hevc_slice_params);
|
||||
break;
|
||||
@ -154,7 +154,7 @@ index 1009cf0891cc..1592e52c3614 100644
|
||||
+
|
||||
#endif
|
||||
|
||||
From 440e3efbf4c5340a7e69329fb75f40756a800a48 Mon Sep 17 00:00:00 2001
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Jernej Skrabec <jernej.skrabec@siol.net>
|
||||
Date: Sat, 26 Oct 2019 15:42:28 +0200
|
||||
Subject: [PATCH] media: uapi: hevc: Add segment address field
|
||||
@ -217,7 +217,7 @@ index 1592e52c3614..3e2e32098312 100644
|
||||
/* ISO/IEC 23008-2, ITU-T Rec. H.265: General slice segment header */
|
||||
struct v4l2_hevc_dpb_entry dpb[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
|
||||
|
||||
From 858acf136fbac4923e04d8faeb0e18d8fcb446c0 Mon Sep 17 00:00:00 2001
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Jonas Karlman <jonas@kwiboo.se>
|
||||
Date: Sat, 23 May 2020 15:03:46 +0000
|
||||
Subject: [PATCH] WIP: media: uapi: hevc: add fields needed for rkvdec
|
||||
@ -287,7 +287,7 @@ index 3e2e32098312..3cc3b47e1417 100644
|
||||
/* ISO/IEC 23008-2, ITU-T Rec. H.265: General slice segment header */
|
||||
struct v4l2_hevc_dpb_entry dpb[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
|
||||
|
||||
From 2442d3b1ae900e75f19cbfcdc506e3dd06f12042 Mon Sep 17 00:00:00 2001
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Jonas Karlman <jonas@kwiboo.se>
|
||||
Date: Sat, 23 May 2020 15:07:15 +0000
|
||||
Subject: [PATCH] HACK: media: uapi: hevc: tiles and num_slices
|
||||
@ -330,7 +330,7 @@ index 3cc3b47e1417..b33e1a8141e1 100644
|
||||
/* ISO/IEC 23008-2, ITU-T Rec. H.265: General slice segment header */
|
||||
struct v4l2_hevc_dpb_entry dpb[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
|
||||
|
||||
From e7453ce1b822f9abc7b29460edd6d6b0a01d1eac Mon Sep 17 00:00:00 2001
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Jonas Karlman <jonas@kwiboo.se>
|
||||
Date: Sat, 23 May 2020 15:17:45 +0000
|
||||
Subject: [PATCH] WIP: media: rkvdec: add HEVC backend
|
||||
@ -2886,10 +2886,10 @@ index 000000000000..03ba848411c6
|
||||
+ .run = rkvdec_hevc_run,
|
||||
+};
|
||||
diff --git a/drivers/staging/media/rkvdec/rkvdec-regs.h b/drivers/staging/media/rkvdec/rkvdec-regs.h
|
||||
index 15b9bee92016..83bf790ed9b7 100644
|
||||
index 3acc914888f6..4addfaefdfb4 100644
|
||||
--- a/drivers/staging/media/rkvdec/rkvdec-regs.h
|
||||
+++ b/drivers/staging/media/rkvdec/rkvdec-regs.h
|
||||
@@ -43,6 +43,7 @@
|
||||
@@ -48,6 +48,7 @@
|
||||
#define RKVDEC_RLC_MODE BIT(11)
|
||||
#define RKVDEC_STRM_START_BIT(x) (((x) & 0x7f) << 12)
|
||||
#define RKVDEC_MODE(x) (((x) & 0x03) << 20)
|
||||
@ -2898,10 +2898,10 @@ index 15b9bee92016..83bf790ed9b7 100644
|
||||
#define RKVDEC_MODE_VP9 2
|
||||
#define RKVDEC_RPS_MODE BIT(24)
|
||||
diff --git a/drivers/staging/media/rkvdec/rkvdec.c b/drivers/staging/media/rkvdec/rkvdec.c
|
||||
index 073a7b0fd7b0..315894fc511b 100644
|
||||
index 7b4ac2292751..c005e2fba128 100644
|
||||
--- a/drivers/staging/media/rkvdec/rkvdec.c
|
||||
+++ b/drivers/staging/media/rkvdec/rkvdec.c
|
||||
@@ -159,6 +159,61 @@ static const u32 rkvdec_h264_decoded_fmts[] = {
|
||||
@@ -162,6 +162,61 @@ static const u32 rkvdec_h264_decoded_fmts[] = {
|
||||
V4L2_PIX_FMT_NV20,
|
||||
};
|
||||
|
||||
@ -2963,7 +2963,7 @@ index 073a7b0fd7b0..315894fc511b 100644
|
||||
static const struct rkvdec_ctrl_desc rkvdec_vp9_ctrl_descs[] = {
|
||||
{
|
||||
.mandatory = true,
|
||||
@@ -209,6 +264,21 @@ static const struct rkvdec_coded_fmt_desc rkvdec_coded_fmts[] = {
|
||||
@@ -212,6 +267,21 @@ static const struct rkvdec_coded_fmt_desc rkvdec_coded_fmts[] = {
|
||||
.num_decoded_fmts = ARRAY_SIZE(rkvdec_h264_decoded_fmts),
|
||||
.decoded_fmts = rkvdec_h264_decoded_fmts,
|
||||
},
|
||||
@ -2986,10 +2986,10 @@ index 073a7b0fd7b0..315894fc511b 100644
|
||||
.fourcc = V4L2_PIX_FMT_VP9_FRAME,
|
||||
.frmsize = {
|
||||
diff --git a/drivers/staging/media/rkvdec/rkvdec.h b/drivers/staging/media/rkvdec/rkvdec.h
|
||||
index 68d268f37c86..a801668f5f7b 100644
|
||||
index d760c3609e2c..975fe4b5dd68 100644
|
||||
--- a/drivers/staging/media/rkvdec/rkvdec.h
|
||||
+++ b/drivers/staging/media/rkvdec/rkvdec.h
|
||||
@@ -124,6 +124,7 @@ void rkvdec_run_preamble(struct rkvdec_ctx *ctx, struct rkvdec_run *run);
|
||||
@@ -132,6 +132,7 @@ void rkvdec_run_preamble(struct rkvdec_ctx *ctx, struct rkvdec_run *run);
|
||||
void rkvdec_run_postamble(struct rkvdec_ctx *ctx, struct rkvdec_run *run);
|
||||
|
||||
extern const struct rkvdec_coded_fmt_ops rkvdec_h264_fmt_ops;
|
||||
@ -2998,7 +2998,7 @@ index 68d268f37c86..a801668f5f7b 100644
|
||||
|
||||
#endif /* RKVDEC_H_ */
|
||||
|
||||
From c4d8468621327805f65b028779e035c35a65613c Mon Sep 17 00:00:00 2001
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Jonas Karlman <jonas@kwiboo.se>
|
||||
Date: Sat, 1 Aug 2020 12:24:58 +0000
|
||||
Subject: [PATCH] WIP: media: rkvdec: add HEVC format validation
|
||||
@ -3038,10 +3038,10 @@ index 03ba848411c6..b8ad7fc2271c 100644
|
||||
.stop = rkvdec_hevc_stop,
|
||||
.run = rkvdec_hevc_run,
|
||||
diff --git a/drivers/staging/media/rkvdec/rkvdec.c b/drivers/staging/media/rkvdec/rkvdec.c
|
||||
index 315894fc511b..3108d06ef7e0 100644
|
||||
index c005e2fba128..55a54a1f8496 100644
|
||||
--- a/drivers/staging/media/rkvdec/rkvdec.c
|
||||
+++ b/drivers/staging/media/rkvdec/rkvdec.c
|
||||
@@ -76,6 +76,26 @@ static int rkvdec_try_ctrl(struct v4l2_ctrl *ctrl)
|
||||
@@ -79,6 +79,26 @@ static int rkvdec_try_ctrl(struct v4l2_ctrl *ctrl)
|
||||
if (width > ctx->coded_fmt.fmt.pix_mp.width ||
|
||||
height > ctx->coded_fmt.fmt.pix_mp.height)
|
||||
return -EINVAL;
|
||||
@ -3068,7 +3068,7 @@ index 315894fc511b..3108d06ef7e0 100644
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@@ -84,7 +104,7 @@ static int rkvdec_s_ctrl(struct v4l2_ctrl *ctrl)
|
||||
@@ -87,7 +107,7 @@ static int rkvdec_s_ctrl(struct v4l2_ctrl *ctrl)
|
||||
{
|
||||
struct rkvdec_ctx *ctx = container_of(ctrl->handler, struct rkvdec_ctx, ctrl_hdl);
|
||||
|
||||
@ -3077,7 +3077,7 @@ index 315894fc511b..3108d06ef7e0 100644
|
||||
ctx->valid_fmt = rkvdec_valid_fmt(ctx, ctrl);
|
||||
if (ctx->valid_fmt) {
|
||||
struct v4l2_pix_format_mplane *pix_mp;
|
||||
@@ -170,6 +190,7 @@ static const struct rkvdec_ctrl_desc rkvdec_hevc_ctrl_descs[] = {
|
||||
@@ -173,6 +193,7 @@ static const struct rkvdec_ctrl_desc rkvdec_hevc_ctrl_descs[] = {
|
||||
{
|
||||
.mandatory = true,
|
||||
.cfg.id = V4L2_CID_MPEG_VIDEO_HEVC_SPS,
|
||||
@ -3085,6 +3085,141 @@ index 315894fc511b..3108d06ef7e0 100644
|
||||
},
|
||||
{
|
||||
.mandatory = true,
|
||||
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Alex Bee <knaerzche@gmail.com>
|
||||
Date: Wed, 14 Apr 2021 18:01:21 +0200
|
||||
Subject: [PATCH] WIP: media: rkvdec: hevc: Fix column width / row height
|
||||
calculation for no-tiled case
|
||||
|
||||
Signed-off-by: Alex Bee <knaerzche@gmail.com>
|
||||
---
|
||||
drivers/staging/media/rkvdec/rkvdec-hevc.c | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/drivers/staging/media/rkvdec/rkvdec-hevc.c b/drivers/staging/media/rkvdec/rkvdec-hevc.c
|
||||
index a6be4eebef74..8a94fc04980f 100644
|
||||
--- a/drivers/staging/media/rkvdec/rkvdec-hevc.c
|
||||
+++ b/drivers/staging/media/rkvdec/rkvdec-hevc.c
|
||||
@@ -2164,9 +2164,9 @@ static void assemble_hw_pps(struct rkvdec_ctx *ctx,
|
||||
for (i = 0; i <= pps->num_tile_rows_minus1; i++)
|
||||
WRITE_PPS(pps->row_height_minus1[i], ROW_HEIGHT(i));
|
||||
} else {
|
||||
- WRITE_PPS(round_up(sps->pic_width_in_luma_samples, ctb_size_y) - 1,
|
||||
+ WRITE_PPS(((sps->pic_width_in_luma_samples + ctb_size_y - 1) / ctb_size_y) - 1,
|
||||
COLUMN_WIDTH(0));
|
||||
- WRITE_PPS(round_up(sps->pic_height_in_luma_samples, ctb_size_y) - 1,
|
||||
+ WRITE_PPS(((sps->pic_height_in_luma_samples + ctb_size_y - 1) / ctb_size_y) - 1,
|
||||
ROW_HEIGHT(0));
|
||||
}
|
||||
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Alex Bee <knaerzche@gmail.com>
|
||||
Date: Wed, 14 Apr 2021 17:26:43 +0200
|
||||
Subject: [PATCH] WIP: media: rkvdec: hevc: fix long ref decoding
|
||||
|
||||
Signed-off-by: Alex Bee <knaerzche@gmail.com>
|
||||
---
|
||||
drivers/staging/media/rkvdec/rkvdec-hevc.c | 12 ++++++------
|
||||
1 file changed, 6 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/drivers/staging/media/rkvdec/rkvdec-hevc.c b/drivers/staging/media/rkvdec/rkvdec-hevc.c
|
||||
index b8ad7fc2271c..7c6d46bc69e9 100644
|
||||
--- a/drivers/staging/media/rkvdec/rkvdec-hevc.c
|
||||
+++ b/drivers/staging/media/rkvdec/rkvdec-hevc.c
|
||||
@@ -2194,8 +2194,8 @@ static void assemble_hw_rps(struct rkvdec_ctx *ctx,
|
||||
#define REF_PIC_IDX_L1(i) PS_FIELD((i < 4 ? 76 : 128) + (i * 5), 4)
|
||||
|
||||
#define LOWDELAY PS_FIELD(182, 1)
|
||||
-#define SHORT_TERM_REF_PIC_SET_SIZE PS_FIELD(183, 10)
|
||||
-#define LONG_TERM_REF_PIC_SET_SIZE PS_FIELD(193, 9)
|
||||
+#define LONG_TERM_RPS_BIT_OFFSET PS_FIELD(183, 10)
|
||||
+#define SHORT_TERM_RPS_BIT_OFFSET PS_FIELD(193, 9)
|
||||
#define NUM_RPS_POC PS_FIELD(202, 4)
|
||||
|
||||
for (j = 0; j < run->num_slices; j++) {
|
||||
@@ -2222,11 +2222,11 @@ static void assemble_hw_rps(struct rkvdec_ctx *ctx,
|
||||
// TODO: lowdelay
|
||||
WRITE_RPS(0, LOWDELAY);
|
||||
|
||||
- // NOTE: these two differs from mpp
|
||||
+ WRITE_RPS(sl_params->long_term_ref_pic_set_size +
|
||||
+ sl_params->short_term_ref_pic_set_size,
|
||||
+ LONG_TERM_RPS_BIT_OFFSET);
|
||||
WRITE_RPS(sl_params->short_term_ref_pic_set_size,
|
||||
- SHORT_TERM_REF_PIC_SET_SIZE);
|
||||
- WRITE_RPS(sl_params->long_term_ref_pic_set_size,
|
||||
- LONG_TERM_REF_PIC_SET_SIZE);
|
||||
+ SHORT_TERM_RPS_BIT_OFFSET);
|
||||
|
||||
WRITE_RPS(sl_params->num_rps_poc_st_curr_before +
|
||||
sl_params->num_rps_poc_st_curr_after +
|
||||
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Alex Bee <knaerzche@gmail.com>
|
||||
Date: Thu, 15 Apr 2021 20:22:54 +0200
|
||||
Subject: [PATCH] WIP: media: rkvdec: hevc: implement lowdelay
|
||||
|
||||
Signed-off-by: Alex Bee <knaerzche@gmail.com>
|
||||
---
|
||||
drivers/staging/media/rkvdec/rkvdec-hevc.c | 16 ++++++++++++++--
|
||||
include/media/hevc-ctrls.h | 1 +
|
||||
2 files changed, 15 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/drivers/staging/media/rkvdec/rkvdec-hevc.c b/drivers/staging/media/rkvdec/rkvdec-hevc.c
|
||||
index 7c6d46bc69e9..a6be4eebef74 100644
|
||||
--- a/drivers/staging/media/rkvdec/rkvdec-hevc.c
|
||||
+++ b/drivers/staging/media/rkvdec/rkvdec-hevc.c
|
||||
@@ -2185,6 +2185,7 @@ static void assemble_hw_rps(struct rkvdec_ctx *ctx,
|
||||
struct rkvdec_hevc_priv_tbl *priv_tbl = hevc_ctx->priv_tbl.cpu;
|
||||
struct rkvdec_rps_packet *hw_ps;
|
||||
int i, j;
|
||||
+ unsigned int lowdelay;
|
||||
|
||||
#define WRITE_RPS(value, field) set_ps_field(hw_ps->info, field, value)
|
||||
|
||||
@@ -2201,6 +2202,7 @@ static void assemble_hw_rps(struct rkvdec_ctx *ctx,
|
||||
for (j = 0; j < run->num_slices; j++) {
|
||||
sl_params = &run->slices_params[j];
|
||||
dpb = sl_params->dpb;
|
||||
+ lowdelay = 0;
|
||||
|
||||
hw_ps = &priv_tbl->rps[j];
|
||||
memset(hw_ps, 0, sizeof(*hw_ps));
|
||||
@@ -2219,8 +2221,18 @@ static void assemble_hw_rps(struct rkvdec_ctx *ctx,
|
||||
|
||||
//WRITE_RPS(0xffffffff, PS_FIELD(96, 32));
|
||||
|
||||
- // TODO: lowdelay
|
||||
- WRITE_RPS(0, LOWDELAY);
|
||||
+ if (sl_params->slice_type != V4L2_HEVC_SLICE_TYPE_I &&
|
||||
+ !(!!(sl_params->flags & V4L2_HEVC_SLICE_PARAMS_FLAG_DEPENDENT_SLICE_SEGMENT))) {
|
||||
+ lowdelay = 1;
|
||||
+ for (i = 0; i < sl_params->num_active_dpb_entries; i++) {
|
||||
+ if (dpb[i].pic_order_cnt[0] > sl_params->slice_pic_order_cnt) {
|
||||
+ lowdelay = 0;
|
||||
+ break;
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ WRITE_RPS(lowdelay, LOWDELAY);
|
||||
|
||||
WRITE_RPS(sl_params->long_term_ref_pic_set_size +
|
||||
sl_params->short_term_ref_pic_set_size,
|
||||
diff --git a/include/media/hevc-ctrls.h b/include/media/hevc-ctrls.h
|
||||
index b33e1a8141e1..bda0ea61f331 100644
|
||||
--- a/include/media/hevc-ctrls.h
|
||||
+++ b/include/media/hevc-ctrls.h
|
||||
@@ -168,6 +168,7 @@ struct v4l2_hevc_pred_weight_table {
|
||||
#define V4L2_HEVC_SLICE_PARAMS_FLAG_USE_INTEGER_MV (1ULL << 6)
|
||||
#define V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_DEBLOCKING_FILTER_DISABLED (1ULL << 7)
|
||||
#define V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_LOOP_FILTER_ACROSS_SLICES_ENABLED (1ULL << 8)
|
||||
+#define V4L2_HEVC_SLICE_PARAMS_FLAG_DEPENDENT_SLICE_SEGMENT (1ULL << 9)
|
||||
|
||||
struct v4l2_ctrl_hevc_slice_params {
|
||||
__u32 bit_size;
|
||||
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Alex Bee <knaerzche@gmail.com>
|
||||
Date: Sat, 30 Jan 2021 18:16:39 +0100
|
||||
@ -3107,10 +3242,10 @@ Signed-off-by: Alex Bee <knaerzche@gmail.com>
|
||||
2 files changed, 84 insertions(+), 30 deletions(-)
|
||||
|
||||
diff --git a/drivers/staging/media/rkvdec/rkvdec.c b/drivers/staging/media/rkvdec/rkvdec.c
|
||||
index 3108d06ef7e0..18ae1b15d0a4 100644
|
||||
index 55a54a1f8496..2a056413e4b4 100644
|
||||
--- a/drivers/staging/media/rkvdec/rkvdec.c
|
||||
+++ b/drivers/staging/media/rkvdec/rkvdec.c
|
||||
@@ -13,6 +13,7 @@
|
||||
@@ -14,6 +14,7 @@
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/of.h>
|
||||
@ -3118,7 +3253,7 @@ index 3108d06ef7e0..18ae1b15d0a4 100644
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/pm.h>
|
||||
#include <linux/pm_runtime.h>
|
||||
@@ -270,21 +271,6 @@ static const u32 rkvdec_vp9_decoded_fmts[] = {
|
||||
@@ -273,21 +274,6 @@ static const u32 rkvdec_vp9_decoded_fmts[] = {
|
||||
};
|
||||
|
||||
static const struct rkvdec_coded_fmt_desc rkvdec_coded_fmts[] = {
|
||||
@ -3140,7 +3275,7 @@ index 3108d06ef7e0..18ae1b15d0a4 100644
|
||||
{
|
||||
.fourcc = V4L2_PIX_FMT_HEVC_SLICE,
|
||||
.frmsize = {
|
||||
@@ -299,6 +285,23 @@ static const struct rkvdec_coded_fmt_desc rkvdec_coded_fmts[] = {
|
||||
@@ -302,6 +288,23 @@ static const struct rkvdec_coded_fmt_desc rkvdec_coded_fmts[] = {
|
||||
.ops = &rkvdec_hevc_fmt_ops,
|
||||
.num_decoded_fmts = ARRAY_SIZE(rkvdec_hevc_decoded_fmts),
|
||||
.decoded_fmts = rkvdec_hevc_decoded_fmts,
|
||||
@ -3164,7 +3299,7 @@ index 3108d06ef7e0..18ae1b15d0a4 100644
|
||||
},
|
||||
{
|
||||
.fourcc = V4L2_PIX_FMT_VP9_FRAME,
|
||||
@@ -314,16 +317,31 @@ static const struct rkvdec_coded_fmt_desc rkvdec_coded_fmts[] = {
|
||||
@@ -317,16 +320,31 @@ static const struct rkvdec_coded_fmt_desc rkvdec_coded_fmts[] = {
|
||||
.ops = &rkvdec_vp9_fmt_ops,
|
||||
.num_decoded_fmts = ARRAY_SIZE(rkvdec_vp9_decoded_fmts),
|
||||
.decoded_fmts = rkvdec_vp9_decoded_fmts,
|
||||
@ -3176,11 +3311,10 @@ index 3108d06ef7e0..18ae1b15d0a4 100644
|
||||
static const struct rkvdec_coded_fmt_desc *
|
||||
-rkvdec_find_coded_fmt_desc(u32 fourcc)
|
||||
+rkvdec_default_coded_fmt_desc(unsigned int capabilities)
|
||||
{
|
||||
unsigned int i;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(rkvdec_coded_fmts); i++) {
|
||||
- if (rkvdec_coded_fmts[i].fourcc == fourcc)
|
||||
+{
|
||||
+ unsigned int i;
|
||||
+
|
||||
+ for (i = 0; i < ARRAY_SIZE(rkvdec_coded_fmts); i++) {
|
||||
+ if (rkvdec_coded_fmts[i].capability & capabilities)
|
||||
+ return &rkvdec_coded_fmts[i];
|
||||
+ }
|
||||
@ -3190,16 +3324,17 @@ index 3108d06ef7e0..18ae1b15d0a4 100644
|
||||
+
|
||||
+static const struct rkvdec_coded_fmt_desc *
|
||||
+rkvdec_find_coded_fmt_desc(u32 fourcc, unsigned int capabilities)
|
||||
+{
|
||||
+ unsigned int i;
|
||||
+
|
||||
+ for (i = 0; i < ARRAY_SIZE(rkvdec_coded_fmts); i++) {
|
||||
{
|
||||
unsigned int i;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(rkvdec_coded_fmts); i++) {
|
||||
- if (rkvdec_coded_fmts[i].fourcc == fourcc)
|
||||
+ if (rkvdec_coded_fmts[i].fourcc == fourcc &&
|
||||
+ (rkvdec_coded_fmts[i].capability & capabilities))
|
||||
return &rkvdec_coded_fmts[i];
|
||||
}
|
||||
|
||||
@@ -346,7 +364,7 @@ static void rkvdec_reset_coded_fmt(struct rkvdec_ctx *ctx)
|
||||
@@ -349,7 +367,7 @@ static void rkvdec_reset_coded_fmt(struct rkvdec_ctx *ctx)
|
||||
{
|
||||
struct v4l2_format *f = &ctx->coded_fmt;
|
||||
|
||||
@ -3208,7 +3343,7 @@ index 3108d06ef7e0..18ae1b15d0a4 100644
|
||||
rkvdec_reset_fmt(ctx, f, ctx->coded_fmt_desc->fourcc);
|
||||
|
||||
f->type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE;
|
||||
@@ -373,11 +391,13 @@ static int rkvdec_enum_framesizes(struct file *file, void *priv,
|
||||
@@ -376,11 +394,13 @@ static int rkvdec_enum_framesizes(struct file *file, void *priv,
|
||||
struct v4l2_frmsizeenum *fsize)
|
||||
{
|
||||
const struct rkvdec_coded_fmt_desc *fmt;
|
||||
@ -3223,7 +3358,7 @@ index 3108d06ef7e0..18ae1b15d0a4 100644
|
||||
if (!fmt)
|
||||
return -EINVAL;
|
||||
|
||||
@@ -448,10 +468,11 @@ static int rkvdec_try_output_fmt(struct file *file, void *priv,
|
||||
@@ -451,10 +471,11 @@ static int rkvdec_try_output_fmt(struct file *file, void *priv,
|
||||
struct rkvdec_ctx *ctx = fh_to_rkvdec_ctx(priv);
|
||||
const struct rkvdec_coded_fmt_desc *desc;
|
||||
|
||||
@ -3238,7 +3373,7 @@ index 3108d06ef7e0..18ae1b15d0a4 100644
|
||||
}
|
||||
|
||||
v4l2_apply_frmsize_constraints(&pix_mp->width,
|
||||
@@ -538,7 +559,8 @@ static int rkvdec_s_output_fmt(struct file *file, void *priv,
|
||||
@@ -541,7 +562,8 @@ static int rkvdec_s_output_fmt(struct file *file, void *priv,
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
@ -3248,7 +3383,7 @@ index 3108d06ef7e0..18ae1b15d0a4 100644
|
||||
if (!desc)
|
||||
return -EINVAL;
|
||||
ctx->coded_fmt_desc = desc;
|
||||
@@ -586,7 +608,10 @@ static int rkvdec_g_capture_fmt(struct file *file, void *priv,
|
||||
@@ -589,7 +611,10 @@ static int rkvdec_g_capture_fmt(struct file *file, void *priv,
|
||||
static int rkvdec_enum_output_fmt(struct file *file, void *priv,
|
||||
struct v4l2_fmtdesc *f)
|
||||
{
|
||||
@ -3260,7 +3395,7 @@ index 3108d06ef7e0..18ae1b15d0a4 100644
|
||||
return -EINVAL;
|
||||
|
||||
f->pixelformat = rkvdec_coded_fmts[f->index].fourcc;
|
||||
@@ -1012,14 +1037,17 @@ static int rkvdec_init_ctrls(struct rkvdec_ctx *ctx)
|
||||
@@ -1041,14 +1066,17 @@ static int rkvdec_init_ctrls(struct rkvdec_ctx *ctx)
|
||||
int ret;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(rkvdec_coded_fmts); i++)
|
||||
@ -3282,7 +3417,7 @@ index 3108d06ef7e0..18ae1b15d0a4 100644
|
||||
}
|
||||
|
||||
ret = v4l2_ctrl_handler_setup(&ctx->ctrl_hdl);
|
||||
@@ -1217,8 +1245,17 @@ static void rkvdec_watchdog_func(struct work_struct *work)
|
||||
@@ -1252,8 +1280,17 @@ static void rkvdec_watchdog_func(struct work_struct *work)
|
||||
}
|
||||
}
|
||||
|
||||
@ -3301,7 +3436,7 @@ index 3108d06ef7e0..18ae1b15d0a4 100644
|
||||
{ /* sentinel */ }
|
||||
};
|
||||
MODULE_DEVICE_TABLE(of, of_rkvdec_match);
|
||||
@@ -1231,6 +1268,7 @@ static int rkvdec_probe(struct platform_device *pdev)
|
||||
@@ -1266,6 +1303,7 @@ static int rkvdec_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct rkvdec_dev *rkvdec;
|
||||
struct resource *res;
|
||||
@ -3309,7 +3444,7 @@ index 3108d06ef7e0..18ae1b15d0a4 100644
|
||||
unsigned int i;
|
||||
int ret, irq;
|
||||
|
||||
@@ -1256,6 +1294,12 @@ static int rkvdec_probe(struct platform_device *pdev)
|
||||
@@ -1291,6 +1329,12 @@ static int rkvdec_probe(struct platform_device *pdev)
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
@ -3323,12 +3458,12 @@ index 3108d06ef7e0..18ae1b15d0a4 100644
|
||||
* Bump ACLK to max. possible freq. (500 MHz) to improve performance
|
||||
* When 4k video playback.
|
||||
diff --git a/drivers/staging/media/rkvdec/rkvdec.h b/drivers/staging/media/rkvdec/rkvdec.h
|
||||
index a801668f5f7b..ff1cfd89a1e0 100644
|
||||
index 975fe4b5dd68..cc505bc4a042 100644
|
||||
--- a/drivers/staging/media/rkvdec/rkvdec.h
|
||||
+++ b/drivers/staging/media/rkvdec/rkvdec.h
|
||||
@@ -22,6 +22,10 @@
|
||||
#include <media/videobuf2-core.h>
|
||||
#include <media/videobuf2-dma-contig.h>
|
||||
@@ -29,6 +29,10 @@
|
||||
|
||||
#define RKVDEC_RESET_DELAY 5
|
||||
|
||||
+#define RKVDEC_CAPABILITY_H264 BIT(0)
|
||||
+#define RKVDEC_CAPABILITY_HEVC BIT(1)
|
||||
@ -3337,7 +3472,7 @@ index a801668f5f7b..ff1cfd89a1e0 100644
|
||||
struct rkvdec_ctx;
|
||||
|
||||
struct rkvdec_ctrl_desc {
|
||||
@@ -64,6 +68,10 @@ vb2_to_rkvdec_decoded_buf(struct vb2_buffer *buf)
|
||||
@@ -71,6 +75,10 @@ vb2_to_rkvdec_decoded_buf(struct vb2_buffer *buf)
|
||||
base.vb.vb2_buf);
|
||||
}
|
||||
|
||||
@ -3348,7 +3483,7 @@ index a801668f5f7b..ff1cfd89a1e0 100644
|
||||
struct rkvdec_coded_fmt_ops {
|
||||
int (*adjust_fmt)(struct rkvdec_ctx *ctx,
|
||||
struct v4l2_format *f);
|
||||
@@ -83,6 +91,7 @@ struct rkvdec_coded_fmt_desc {
|
||||
@@ -90,6 +98,7 @@ struct rkvdec_coded_fmt_desc {
|
||||
const struct rkvdec_coded_fmt_ops *ops;
|
||||
unsigned int num_decoded_fmts;
|
||||
const u32 *decoded_fmts;
|
||||
@ -3356,10 +3491,10 @@ index a801668f5f7b..ff1cfd89a1e0 100644
|
||||
};
|
||||
|
||||
struct rkvdec_dev {
|
||||
@@ -96,6 +105,7 @@ struct rkvdec_dev {
|
||||
struct mutex vdev_lock; /* serializes ioctls */
|
||||
@@ -104,6 +113,7 @@ struct rkvdec_dev {
|
||||
struct delayed_work watchdog_work;
|
||||
bool soft_reset;
|
||||
struct reset_control *rstc;
|
||||
u8 reset_mask;
|
||||
+ unsigned int capabilities;
|
||||
};
|
||||
|
||||
@ -3379,10 +3514,10 @@ Signed-off-by: Alex Bee <knaerzche@gmail.com>
|
||||
1 file changed, 8 insertions(+)
|
||||
|
||||
diff --git a/drivers/staging/media/rkvdec/rkvdec.c b/drivers/staging/media/rkvdec/rkvdec.c
|
||||
index 18ae1b15d0a4..c3b74ac8d979 100644
|
||||
index 2a056413e4b4..1c0e35f9d84f 100644
|
||||
--- a/drivers/staging/media/rkvdec/rkvdec.c
|
||||
+++ b/drivers/staging/media/rkvdec/rkvdec.c
|
||||
@@ -1251,11 +1251,19 @@ static const struct rkvdec_variant rk3399_rkvdec_variant = {
|
||||
@@ -1286,11 +1286,19 @@ static const struct rkvdec_variant rk3399_rkvdec_variant = {
|
||||
RKVDEC_CAPABILITY_VP9
|
||||
};
|
||||
|
||||
@ -3410,14 +3545,14 @@ Subject: [PATCH] ARM: dts: RK3288: add hevc node
|
||||
|
||||
Signed-off-by: Alex Bee <knaerzche@gmail.com>
|
||||
---
|
||||
arch/arm/boot/dts/rk3288.dtsi | 19 ++++++++++++++++++-
|
||||
1 file changed, 18 insertions(+), 1 deletion(-)
|
||||
arch/arm/boot/dts/rk3288.dtsi | 21 ++++++++++++++++++++-
|
||||
1 file changed, 20 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/arch/arm/boot/dts/rk3288.dtsi b/arch/arm/boot/dts/rk3288.dtsi
|
||||
index 746acfac1e92..ba43ee6b91e8 100644
|
||||
index 746acfac1e92..32e141a3955b 100644
|
||||
--- a/arch/arm/boot/dts/rk3288.dtsi
|
||||
+++ b/arch/arm/boot/dts/rk3288.dtsi
|
||||
@@ -1271,6 +1271,23 @@ vpu_mmu: iommu@ff9a0800 {
|
||||
@@ -1271,6 +1271,25 @@ vpu_mmu: iommu@ff9a0800 {
|
||||
power-domains = <&power RK3288_PD_VIDEO>;
|
||||
};
|
||||
|
||||
@ -3436,12 +3571,14 @@ index 746acfac1e92..ba43ee6b91e8 100644
|
||||
+ <300000000>, <300000000>;
|
||||
+ iommus = <&hevc_mmu>;
|
||||
+ power-domains = <&power RK3288_PD_HEVC>;
|
||||
+ resets = <&cru SRST_HEVC>;
|
||||
+ reset-names = "video_core";
|
||||
+ };
|
||||
+
|
||||
hevc_mmu: iommu@ff9c0440 {
|
||||
compatible = "rockchip,iommu";
|
||||
reg = <0x0 0xff9c0440 0x0 0x40>, <0x0 0xff9c0480 0x0 0x40>;
|
||||
@@ -1279,7 +1296,7 @@ hevc_mmu: iommu@ff9c0440 {
|
||||
@@ -1279,7 +1298,7 @@ hevc_mmu: iommu@ff9c0440 {
|
||||
clocks = <&cru ACLK_HEVC>, <&cru HCLK_HEVC>;
|
||||
clock-names = "aclk", "iface";
|
||||
#iommu-cells = <0>;
|
||||
|
Loading…
x
Reference in New Issue
Block a user