mirror of
https://github.com/LibreELEC/LibreELEC.tv.git
synced 2025-08-02 07:27:49 +00:00
Rockchip: linux: rkvdec: implement HW reset, fix HEVC decoding
This commit is contained in:
parent
e3f11652c4
commit
9aa06b17dd
@ -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>
|
From: Jonas Karlman <jonas@kwiboo.se>
|
||||||
Date: Sat, 23 May 2020 10:18:16 +0000
|
Date: Sat, 23 May 2020 10:18:16 +0000
|
||||||
Subject: [PATCH] WIP: media: rkvdec: continue to gate clock when decoding
|
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);
|
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>
|
From: Jonas Karlman <jonas@kwiboo.se>
|
||||||
Date: Sat, 23 May 2020 10:16:01 +0000
|
Date: Sat, 23 May 2020 10:16:01 +0000
|
||||||
Subject: [PATCH] WIP: media: rkvdec: pm runtime dont use autosuspend before
|
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>
|
From: Jonas Karlman <jonas@kwiboo.se>
|
||||||
Date: Sat, 23 May 2020 11:23:04 +0000
|
Date: Sat, 23 May 2020 11:23:04 +0000
|
||||||
Subject: [PATCH] WIP: media: rkvdec: h264: return early when no reference
|
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))
|
if (idx >= ARRAY_SIZE(dec_params->dpb))
|
||||||
continue;
|
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>
|
From: Jonas Karlman <jonas@kwiboo.se>
|
||||||
Date: Sat, 23 May 2020 14:42:27 +0000
|
Date: Sat, 23 May 2020 14:42:27 +0000
|
||||||
Subject: [PATCH] WIP: media: rkvdec: h264: add field decoding support
|
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);
|
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>
|
From: Jonas Karlman <jonas@kwiboo.se>
|
||||||
Date: Tue, 29 Oct 2019 01:26:02 +0000
|
Date: Tue, 29 Oct 2019 01:26:02 +0000
|
||||||
Subject: [PATCH] RFC: media: hantro: Fix H264 decoding of field encoded
|
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 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 | 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: Alex Bee <knaerzche@gmail.com>
|
From: Alex Bee <knaerzche@gmail.com>
|
||||||
Date: Wed, 14 Oct 2020 13:27:12 +0200
|
Date: Wed, 14 Oct 2020 13:27:12 +0200
|
||||||
Subject: [PATCH] media: hantro: adapt to match 5.11 H.264 uapi changes
|
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)
|
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>
|
From: Alex Bee <knaerzche@gmail.com>
|
||||||
Date: Wed, 14 Oct 2020 13:42:01 +0200
|
Date: Wed, 14 Oct 2020 13:42:01 +0200
|
||||||
Subject: [PATCH] media: rkvdec: adapt to match 5.11 H.264 uapi changes
|
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),
|
set_ps_field(hw_rps, DPB_INFO(i, j),
|
||||||
idx | (1 << 4));
|
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>
|
From: Alex Bee <knaerzche@gmail.com>
|
||||||
Date: Sun, 31 May 2020 18:22:01 +0200
|
Date: Sun, 31 May 2020 18:22:01 +0200
|
||||||
Subject: [PATCH] media: hantro: rk3288: increase max ACLK
|
Subject: [PATCH] media: hantro: rk3288: increase max ACLK
|
||||||
@ -612,60 +538,462 @@ index 7b299ee3e93d..23f793e73941 100644
|
|||||||
/*
|
/*
|
||||||
* Supported formats.
|
* Supported formats.
|
||||||
|
|
||||||
From 739eb1964e8ca26371588e231c18efe842f08a3e Mon Sep 17 00:00:00 2001
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
From: Jonas Karlman <jonas@kwiboo.se>
|
From: Randy Li <ayaka@soulik.info>
|
||||||
Date: Sat, 23 May 2020 11:42:23 +0000
|
Date: Sun, 6 Jan 2019 01:48:37 +0800
|
||||||
Subject: [PATCH] HACK: media: rkvdec: soft reset
|
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/soc/rockchip/pm_domains.c | 23 +++++++++++++++++++++++
|
||||||
drivers/staging/media/rkvdec/rkvdec.h | 1 +
|
include/linux/rockchip_pmu.h | 15 +++++++++++++++
|
||||||
2 files changed, 9 insertions(+), 1 deletion(-)
|
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
|
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
|
--- a/drivers/staging/media/rkvdec/rkvdec.c
|
||||||
+++ b/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_mark_last_busy(rkvdec->dev);
|
||||||
pm_runtime_put_autosuspend(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);
|
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))
|
if (WARN_ON(!desc))
|
||||||
return;
|
return;
|
||||||
|
+ if (rkvdec->reset_mask != RESET_NONE) {
|
||||||
+ if (rkvdec->soft_reset) {
|
|
||||||
+ pm_runtime_suspend(rkvdec->dev);
|
|
||||||
+ rkvdec->soft_reset = false;
|
|
||||||
+ }
|
|
||||||
+
|
+
|
||||||
|
+ 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);
|
ret = pm_runtime_get_sync(rkvdec->dev);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
rkvdec_job_finish_no_pm(ctx, VB2_BUF_STATE_ERROR);
|
@@ -1029,6 +1065,11 @@ static irqreturn_t rkvdec_irq_handler(int irq, void *priv)
|
||||||
@@ -1046,7 +1053,7 @@ static void rkvdec_watchdog_func(struct work_struct *work)
|
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);
|
ctx = v4l2_m2m_get_curr_priv(rkvdec->m2m_dev);
|
||||||
if (ctx) {
|
if (ctx) {
|
||||||
dev_err(rkvdec->dev, "Frame processing timed out!\n");
|
dev_err(rkvdec->dev, "Frame processing timed out!\n");
|
||||||
- writel(RKVDEC_CONFIG_DEC_CLK_GATE_E | RKVDEC_IRQ_DIS,
|
+ rkvdec->reset_mask |= RESET_HARD;
|
||||||
+ writel(RKVDEC_CONFIG_DEC_CLK_GATE_E | RKVDEC_IRQ_DIS | RKVDEC_SOFTRST_EN_P,
|
writel(RKVDEC_CONFIG_DEC_CLK_GATE_E | RKVDEC_IRQ_DIS,
|
||||||
rkvdec->regs + RKVDEC_REG_INTERRUPT);
|
rkvdec->regs + RKVDEC_REG_INTERRUPT);
|
||||||
writel(0, rkvdec->regs + RKVDEC_REG_SYSCTRL);
|
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
|
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
|
--- a/drivers/staging/media/rkvdec/rkvdec.h
|
||||||
+++ b/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;
|
void __iomem *regs;
|
||||||
struct mutex vdev_lock; /* serializes ioctls */
|
struct mutex vdev_lock; /* serializes ioctls */
|
||||||
struct delayed_work watchdog_work;
|
struct delayed_work watchdog_work;
|
||||||
+ bool soft_reset;
|
+ struct reset_control *rstc;
|
||||||
|
+ u8 reset_mask;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct rkvdec_ctx {
|
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 {
|
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 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
From: Alex Bee <knaerzche@gmail.com>
|
From: Alex Bee <knaerzche@gmail.com>
|
||||||
Date: Mon, 10 Feb 2020 19:22:41 +0100
|
Date: Mon, 10 Feb 2020 19:22:41 +0100
|
||||||
@ -258,30 +234,6 @@ index 713f55e143c6..2420d8e1c66f 100644
|
|||||||
status = "okay";
|
status = "okay";
|
||||||
|
|
||||||
|
|
||||||
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 418d16b0b648..4d5004c9c778 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 {
|
|
||||||
|
|
||||||
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>,
|
|
||||||
|
|
||||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
From: Alex Bee <knaerzche@gmail.com>
|
From: Alex Bee <knaerzche@gmail.com>
|
||||||
Date: Wed, 10 Feb 2021 18:44:56 +0200
|
Date: Wed, 10 Feb 2021 18:44:56 +0200
|
||||||
|
@ -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>
|
From: Jernej Skrabec <jernej.skrabec@siol.net>
|
||||||
Date: Sat, 26 Oct 2019 13:55:15 +0200
|
Date: Sat, 26 Oct 2019 13:55:15 +0200
|
||||||
Subject: [PATCH] media: uapi: hevc: Add scaling matrix control
|
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
|
Buffers associated with this pixel format must contain the appropriate
|
||||||
number of macroblocks to decode a full corresponding frame.
|
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
|
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
|
--- a/drivers/media/v4l2-core/v4l2-ctrls.c
|
||||||
+++ b/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)
|
@@ -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:
|
case V4L2_CTRL_TYPE_AREA:
|
||||||
area = p;
|
area = p;
|
||||||
if (!area->width || !area->height)
|
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:
|
case V4L2_CTRL_TYPE_HEVC_SLICE_PARAMS:
|
||||||
elem_size = sizeof(struct v4l2_ctrl_hevc_slice_params);
|
elem_size = sizeof(struct v4l2_ctrl_hevc_slice_params);
|
||||||
break;
|
break;
|
||||||
@ -154,7 +154,7 @@ index 1009cf0891cc..1592e52c3614 100644
|
|||||||
+
|
+
|
||||||
#endif
|
#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>
|
From: Jernej Skrabec <jernej.skrabec@siol.net>
|
||||||
Date: Sat, 26 Oct 2019 15:42:28 +0200
|
Date: Sat, 26 Oct 2019 15:42:28 +0200
|
||||||
Subject: [PATCH] media: uapi: hevc: Add segment address field
|
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 */
|
/* 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];
|
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>
|
From: Jonas Karlman <jonas@kwiboo.se>
|
||||||
Date: Sat, 23 May 2020 15:03:46 +0000
|
Date: Sat, 23 May 2020 15:03:46 +0000
|
||||||
Subject: [PATCH] WIP: media: uapi: hevc: add fields needed for rkvdec
|
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 */
|
/* 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];
|
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>
|
From: Jonas Karlman <jonas@kwiboo.se>
|
||||||
Date: Sat, 23 May 2020 15:07:15 +0000
|
Date: Sat, 23 May 2020 15:07:15 +0000
|
||||||
Subject: [PATCH] HACK: media: uapi: hevc: tiles and num_slices
|
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 */
|
/* 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];
|
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>
|
From: Jonas Karlman <jonas@kwiboo.se>
|
||||||
Date: Sat, 23 May 2020 15:17:45 +0000
|
Date: Sat, 23 May 2020 15:17:45 +0000
|
||||||
Subject: [PATCH] WIP: media: rkvdec: add HEVC backend
|
Subject: [PATCH] WIP: media: rkvdec: add HEVC backend
|
||||||
@ -2886,10 +2886,10 @@ index 000000000000..03ba848411c6
|
|||||||
+ .run = rkvdec_hevc_run,
|
+ .run = rkvdec_hevc_run,
|
||||||
+};
|
+};
|
||||||
diff --git a/drivers/staging/media/rkvdec/rkvdec-regs.h b/drivers/staging/media/rkvdec/rkvdec-regs.h
|
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
|
--- a/drivers/staging/media/rkvdec/rkvdec-regs.h
|
||||||
+++ b/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_RLC_MODE BIT(11)
|
||||||
#define RKVDEC_STRM_START_BIT(x) (((x) & 0x7f) << 12)
|
#define RKVDEC_STRM_START_BIT(x) (((x) & 0x7f) << 12)
|
||||||
#define RKVDEC_MODE(x) (((x) & 0x03) << 20)
|
#define RKVDEC_MODE(x) (((x) & 0x03) << 20)
|
||||||
@ -2898,10 +2898,10 @@ index 15b9bee92016..83bf790ed9b7 100644
|
|||||||
#define RKVDEC_MODE_VP9 2
|
#define RKVDEC_MODE_VP9 2
|
||||||
#define RKVDEC_RPS_MODE BIT(24)
|
#define RKVDEC_RPS_MODE BIT(24)
|
||||||
diff --git a/drivers/staging/media/rkvdec/rkvdec.c b/drivers/staging/media/rkvdec/rkvdec.c
|
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
|
--- a/drivers/staging/media/rkvdec/rkvdec.c
|
||||||
+++ b/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,
|
V4L2_PIX_FMT_NV20,
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -2963,7 +2963,7 @@ index 073a7b0fd7b0..315894fc511b 100644
|
|||||||
static const struct rkvdec_ctrl_desc rkvdec_vp9_ctrl_descs[] = {
|
static const struct rkvdec_ctrl_desc rkvdec_vp9_ctrl_descs[] = {
|
||||||
{
|
{
|
||||||
.mandatory = true,
|
.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),
|
.num_decoded_fmts = ARRAY_SIZE(rkvdec_h264_decoded_fmts),
|
||||||
.decoded_fmts = rkvdec_h264_decoded_fmts,
|
.decoded_fmts = rkvdec_h264_decoded_fmts,
|
||||||
},
|
},
|
||||||
@ -2986,10 +2986,10 @@ index 073a7b0fd7b0..315894fc511b 100644
|
|||||||
.fourcc = V4L2_PIX_FMT_VP9_FRAME,
|
.fourcc = V4L2_PIX_FMT_VP9_FRAME,
|
||||||
.frmsize = {
|
.frmsize = {
|
||||||
diff --git a/drivers/staging/media/rkvdec/rkvdec.h b/drivers/staging/media/rkvdec/rkvdec.h
|
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
|
--- a/drivers/staging/media/rkvdec/rkvdec.h
|
||||||
+++ b/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);
|
void rkvdec_run_postamble(struct rkvdec_ctx *ctx, struct rkvdec_run *run);
|
||||||
|
|
||||||
extern const struct rkvdec_coded_fmt_ops rkvdec_h264_fmt_ops;
|
extern const struct rkvdec_coded_fmt_ops rkvdec_h264_fmt_ops;
|
||||||
@ -2998,7 +2998,7 @@ index 68d268f37c86..a801668f5f7b 100644
|
|||||||
|
|
||||||
#endif /* RKVDEC_H_ */
|
#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>
|
From: Jonas Karlman <jonas@kwiboo.se>
|
||||||
Date: Sat, 1 Aug 2020 12:24:58 +0000
|
Date: Sat, 1 Aug 2020 12:24:58 +0000
|
||||||
Subject: [PATCH] WIP: media: rkvdec: add HEVC format validation
|
Subject: [PATCH] WIP: media: rkvdec: add HEVC format validation
|
||||||
@ -3038,10 +3038,10 @@ index 03ba848411c6..b8ad7fc2271c 100644
|
|||||||
.stop = rkvdec_hevc_stop,
|
.stop = rkvdec_hevc_stop,
|
||||||
.run = rkvdec_hevc_run,
|
.run = rkvdec_hevc_run,
|
||||||
diff --git a/drivers/staging/media/rkvdec/rkvdec.c b/drivers/staging/media/rkvdec/rkvdec.c
|
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
|
--- a/drivers/staging/media/rkvdec/rkvdec.c
|
||||||
+++ b/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 ||
|
if (width > ctx->coded_fmt.fmt.pix_mp.width ||
|
||||||
height > ctx->coded_fmt.fmt.pix_mp.height)
|
height > ctx->coded_fmt.fmt.pix_mp.height)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
@ -3068,7 +3068,7 @@ index 315894fc511b..3108d06ef7e0 100644
|
|||||||
}
|
}
|
||||||
return 0;
|
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);
|
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);
|
ctx->valid_fmt = rkvdec_valid_fmt(ctx, ctrl);
|
||||||
if (ctx->valid_fmt) {
|
if (ctx->valid_fmt) {
|
||||||
struct v4l2_pix_format_mplane *pix_mp;
|
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,
|
.mandatory = true,
|
||||||
.cfg.id = V4L2_CID_MPEG_VIDEO_HEVC_SPS,
|
.cfg.id = V4L2_CID_MPEG_VIDEO_HEVC_SPS,
|
||||||
@ -3085,6 +3085,141 @@ index 315894fc511b..3108d06ef7e0 100644
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
.mandatory = true,
|
.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 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
From: Alex Bee <knaerzche@gmail.com>
|
From: Alex Bee <knaerzche@gmail.com>
|
||||||
Date: Sat, 30 Jan 2021 18:16:39 +0100
|
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(-)
|
2 files changed, 84 insertions(+), 30 deletions(-)
|
||||||
|
|
||||||
diff --git a/drivers/staging/media/rkvdec/rkvdec.c b/drivers/staging/media/rkvdec/rkvdec.c
|
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
|
--- a/drivers/staging/media/rkvdec/rkvdec.c
|
||||||
+++ b/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/interrupt.h>
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
#include <linux/of.h>
|
#include <linux/of.h>
|
||||||
@ -3118,7 +3253,7 @@ index 3108d06ef7e0..18ae1b15d0a4 100644
|
|||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
#include <linux/pm.h>
|
#include <linux/pm.h>
|
||||||
#include <linux/pm_runtime.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[] = {
|
static const struct rkvdec_coded_fmt_desc rkvdec_coded_fmts[] = {
|
||||||
@ -3140,7 +3275,7 @@ index 3108d06ef7e0..18ae1b15d0a4 100644
|
|||||||
{
|
{
|
||||||
.fourcc = V4L2_PIX_FMT_HEVC_SLICE,
|
.fourcc = V4L2_PIX_FMT_HEVC_SLICE,
|
||||||
.frmsize = {
|
.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,
|
.ops = &rkvdec_hevc_fmt_ops,
|
||||||
.num_decoded_fmts = ARRAY_SIZE(rkvdec_hevc_decoded_fmts),
|
.num_decoded_fmts = ARRAY_SIZE(rkvdec_hevc_decoded_fmts),
|
||||||
.decoded_fmts = rkvdec_hevc_decoded_fmts,
|
.decoded_fmts = rkvdec_hevc_decoded_fmts,
|
||||||
@ -3164,7 +3299,7 @@ index 3108d06ef7e0..18ae1b15d0a4 100644
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
.fourcc = V4L2_PIX_FMT_VP9_FRAME,
|
.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,
|
.ops = &rkvdec_vp9_fmt_ops,
|
||||||
.num_decoded_fmts = ARRAY_SIZE(rkvdec_vp9_decoded_fmts),
|
.num_decoded_fmts = ARRAY_SIZE(rkvdec_vp9_decoded_fmts),
|
||||||
.decoded_fmts = 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 *
|
static const struct rkvdec_coded_fmt_desc *
|
||||||
-rkvdec_find_coded_fmt_desc(u32 fourcc)
|
-rkvdec_find_coded_fmt_desc(u32 fourcc)
|
||||||
+rkvdec_default_coded_fmt_desc(unsigned int capabilities)
|
+rkvdec_default_coded_fmt_desc(unsigned int capabilities)
|
||||||
{
|
+{
|
||||||
unsigned int i;
|
+ unsigned int i;
|
||||||
|
+
|
||||||
for (i = 0; i < ARRAY_SIZE(rkvdec_coded_fmts); i++) {
|
+ for (i = 0; i < ARRAY_SIZE(rkvdec_coded_fmts); i++) {
|
||||||
- if (rkvdec_coded_fmts[i].fourcc == fourcc)
|
|
||||||
+ if (rkvdec_coded_fmts[i].capability & capabilities)
|
+ if (rkvdec_coded_fmts[i].capability & capabilities)
|
||||||
+ return &rkvdec_coded_fmts[i];
|
+ return &rkvdec_coded_fmts[i];
|
||||||
+ }
|
+ }
|
||||||
@ -3190,16 +3324,17 @@ index 3108d06ef7e0..18ae1b15d0a4 100644
|
|||||||
+
|
+
|
||||||
+static const struct rkvdec_coded_fmt_desc *
|
+static const struct rkvdec_coded_fmt_desc *
|
||||||
+rkvdec_find_coded_fmt_desc(u32 fourcc, unsigned int capabilities)
|
+rkvdec_find_coded_fmt_desc(u32 fourcc, unsigned int capabilities)
|
||||||
+{
|
{
|
||||||
+ unsigned int i;
|
unsigned int i;
|
||||||
+
|
|
||||||
+ for (i = 0; i < ARRAY_SIZE(rkvdec_coded_fmts); 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 &&
|
+ if (rkvdec_coded_fmts[i].fourcc == fourcc &&
|
||||||
+ (rkvdec_coded_fmts[i].capability & capabilities))
|
+ (rkvdec_coded_fmts[i].capability & capabilities))
|
||||||
return &rkvdec_coded_fmts[i];
|
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;
|
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);
|
rkvdec_reset_fmt(ctx, f, ctx->coded_fmt_desc->fourcc);
|
||||||
|
|
||||||
f->type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE;
|
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)
|
struct v4l2_frmsizeenum *fsize)
|
||||||
{
|
{
|
||||||
const struct rkvdec_coded_fmt_desc *fmt;
|
const struct rkvdec_coded_fmt_desc *fmt;
|
||||||
@ -3223,7 +3358,7 @@ index 3108d06ef7e0..18ae1b15d0a4 100644
|
|||||||
if (!fmt)
|
if (!fmt)
|
||||||
return -EINVAL;
|
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);
|
struct rkvdec_ctx *ctx = fh_to_rkvdec_ctx(priv);
|
||||||
const struct rkvdec_coded_fmt_desc *desc;
|
const struct rkvdec_coded_fmt_desc *desc;
|
||||||
|
|
||||||
@ -3238,7 +3373,7 @@ index 3108d06ef7e0..18ae1b15d0a4 100644
|
|||||||
}
|
}
|
||||||
|
|
||||||
v4l2_apply_frmsize_constraints(&pix_mp->width,
|
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)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
@ -3248,7 +3383,7 @@ index 3108d06ef7e0..18ae1b15d0a4 100644
|
|||||||
if (!desc)
|
if (!desc)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
ctx->coded_fmt_desc = desc;
|
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,
|
static int rkvdec_enum_output_fmt(struct file *file, void *priv,
|
||||||
struct v4l2_fmtdesc *f)
|
struct v4l2_fmtdesc *f)
|
||||||
{
|
{
|
||||||
@ -3260,7 +3395,7 @@ index 3108d06ef7e0..18ae1b15d0a4 100644
|
|||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
f->pixelformat = rkvdec_coded_fmts[f->index].fourcc;
|
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;
|
int ret;
|
||||||
|
|
||||||
for (i = 0; i < ARRAY_SIZE(rkvdec_coded_fmts); i++)
|
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);
|
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 */ }
|
{ /* sentinel */ }
|
||||||
};
|
};
|
||||||
MODULE_DEVICE_TABLE(of, of_rkvdec_match);
|
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 rkvdec_dev *rkvdec;
|
||||||
struct resource *res;
|
struct resource *res;
|
||||||
@ -3309,7 +3444,7 @@ index 3108d06ef7e0..18ae1b15d0a4 100644
|
|||||||
unsigned int i;
|
unsigned int i;
|
||||||
int ret, irq;
|
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)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
@ -3323,12 +3458,12 @@ index 3108d06ef7e0..18ae1b15d0a4 100644
|
|||||||
* Bump ACLK to max. possible freq. (500 MHz) to improve performance
|
* Bump ACLK to max. possible freq. (500 MHz) to improve performance
|
||||||
* When 4k video playback.
|
* When 4k video playback.
|
||||||
diff --git a/drivers/staging/media/rkvdec/rkvdec.h b/drivers/staging/media/rkvdec/rkvdec.h
|
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
|
--- a/drivers/staging/media/rkvdec/rkvdec.h
|
||||||
+++ b/drivers/staging/media/rkvdec/rkvdec.h
|
+++ b/drivers/staging/media/rkvdec/rkvdec.h
|
||||||
@@ -22,6 +22,10 @@
|
@@ -29,6 +29,10 @@
|
||||||
#include <media/videobuf2-core.h>
|
|
||||||
#include <media/videobuf2-dma-contig.h>
|
#define RKVDEC_RESET_DELAY 5
|
||||||
|
|
||||||
+#define RKVDEC_CAPABILITY_H264 BIT(0)
|
+#define RKVDEC_CAPABILITY_H264 BIT(0)
|
||||||
+#define RKVDEC_CAPABILITY_HEVC BIT(1)
|
+#define RKVDEC_CAPABILITY_HEVC BIT(1)
|
||||||
@ -3337,7 +3472,7 @@ index a801668f5f7b..ff1cfd89a1e0 100644
|
|||||||
struct rkvdec_ctx;
|
struct rkvdec_ctx;
|
||||||
|
|
||||||
struct rkvdec_ctrl_desc {
|
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);
|
base.vb.vb2_buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3348,7 +3483,7 @@ index a801668f5f7b..ff1cfd89a1e0 100644
|
|||||||
struct rkvdec_coded_fmt_ops {
|
struct rkvdec_coded_fmt_ops {
|
||||||
int (*adjust_fmt)(struct rkvdec_ctx *ctx,
|
int (*adjust_fmt)(struct rkvdec_ctx *ctx,
|
||||||
struct v4l2_format *f);
|
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;
|
const struct rkvdec_coded_fmt_ops *ops;
|
||||||
unsigned int num_decoded_fmts;
|
unsigned int num_decoded_fmts;
|
||||||
const u32 *decoded_fmts;
|
const u32 *decoded_fmts;
|
||||||
@ -3356,10 +3491,10 @@ index a801668f5f7b..ff1cfd89a1e0 100644
|
|||||||
};
|
};
|
||||||
|
|
||||||
struct rkvdec_dev {
|
struct rkvdec_dev {
|
||||||
@@ -96,6 +105,7 @@ struct rkvdec_dev {
|
@@ -104,6 +113,7 @@ struct rkvdec_dev {
|
||||||
struct mutex vdev_lock; /* serializes ioctls */
|
|
||||||
struct delayed_work watchdog_work;
|
struct delayed_work watchdog_work;
|
||||||
bool soft_reset;
|
struct reset_control *rstc;
|
||||||
|
u8 reset_mask;
|
||||||
+ unsigned int capabilities;
|
+ unsigned int capabilities;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -3379,10 +3514,10 @@ Signed-off-by: Alex Bee <knaerzche@gmail.com>
|
|||||||
1 file changed, 8 insertions(+)
|
1 file changed, 8 insertions(+)
|
||||||
|
|
||||||
diff --git a/drivers/staging/media/rkvdec/rkvdec.c b/drivers/staging/media/rkvdec/rkvdec.c
|
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
|
--- a/drivers/staging/media/rkvdec/rkvdec.c
|
||||||
+++ b/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
|
RKVDEC_CAPABILITY_VP9
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -3410,14 +3545,14 @@ Subject: [PATCH] ARM: dts: RK3288: add hevc node
|
|||||||
|
|
||||||
Signed-off-by: Alex Bee <knaerzche@gmail.com>
|
Signed-off-by: Alex Bee <knaerzche@gmail.com>
|
||||||
---
|
---
|
||||||
arch/arm/boot/dts/rk3288.dtsi | 19 ++++++++++++++++++-
|
arch/arm/boot/dts/rk3288.dtsi | 21 ++++++++++++++++++++-
|
||||||
1 file changed, 18 insertions(+), 1 deletion(-)
|
1 file changed, 20 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
diff --git a/arch/arm/boot/dts/rk3288.dtsi b/arch/arm/boot/dts/rk3288.dtsi
|
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
|
--- a/arch/arm/boot/dts/rk3288.dtsi
|
||||||
+++ b/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>;
|
power-domains = <&power RK3288_PD_VIDEO>;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -3436,12 +3571,14 @@ index 746acfac1e92..ba43ee6b91e8 100644
|
|||||||
+ <300000000>, <300000000>;
|
+ <300000000>, <300000000>;
|
||||||
+ iommus = <&hevc_mmu>;
|
+ iommus = <&hevc_mmu>;
|
||||||
+ power-domains = <&power RK3288_PD_HEVC>;
|
+ power-domains = <&power RK3288_PD_HEVC>;
|
||||||
|
+ resets = <&cru SRST_HEVC>;
|
||||||
|
+ reset-names = "video_core";
|
||||||
+ };
|
+ };
|
||||||
+
|
+
|
||||||
hevc_mmu: iommu@ff9c0440 {
|
hevc_mmu: iommu@ff9c0440 {
|
||||||
compatible = "rockchip,iommu";
|
compatible = "rockchip,iommu";
|
||||||
reg = <0x0 0xff9c0440 0x0 0x40>, <0x0 0xff9c0480 0x0 0x40>;
|
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>;
|
clocks = <&cru ACLK_HEVC>, <&cru HCLK_HEVC>;
|
||||||
clock-names = "aclk", "iface";
|
clock-names = "aclk", "iface";
|
||||||
#iommu-cells = <0>;
|
#iommu-cells = <0>;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user