142 lines
5.4 KiB
Diff
142 lines
5.4 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Sebastian Reichel <sebastian.reichel@collabora.com>
|
|
Date: Thu, 13 Jun 2024 15:48:42 +0200
|
|
Subject: media: dt-bindings: rk3568-vepu: Add RK3588 VEPU121
|
|
|
|
From: Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
|
|
|
|
This encoder-only device is present four times on this SoC, and should
|
|
support everything the rk3568 vepu supports (so JPEG, H.264 and VP8
|
|
encoding). No fallback compatible has been added, since the operating
|
|
systems might already support RK3568 VEPU and want to avoid registering
|
|
four of them separately considering they can be used as a cluster.
|
|
|
|
Signed-off-by: Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
|
|
Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
|
|
---
|
|
Documentation/devicetree/bindings/media/rockchip,rk3568-vepu.yaml | 1 +
|
|
1 file changed, 1 insertion(+)
|
|
|
|
diff --git a/Documentation/devicetree/bindings/media/rockchip,rk3568-vepu.yaml b/Documentation/devicetree/bindings/media/rockchip,rk3568-vepu.yaml
|
|
index 111111111111..222222222222 100644
|
|
--- a/Documentation/devicetree/bindings/media/rockchip,rk3568-vepu.yaml
|
|
+++ b/Documentation/devicetree/bindings/media/rockchip,rk3568-vepu.yaml
|
|
@@ -17,6 +17,7 @@ properties:
|
|
compatible:
|
|
enum:
|
|
- rockchip,rk3568-vepu
|
|
+ - rockchip,rk3588-vepu121
|
|
|
|
reg:
|
|
maxItems: 1
|
|
--
|
|
Armbian
|
|
|
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Sebastian Reichel <sebastian.reichel@collabora.com>
|
|
Date: Thu, 13 Jun 2024 15:48:44 +0200
|
|
Subject: media: hantro: Disable multicore support
|
|
|
|
Avoid exposing equal Hantro video codecs to userspace. Equal video
|
|
codecs allow scheduling work between the cores. For that kernel support
|
|
is required, which does not yet exist. Until that is implemented avoid
|
|
exposing each core separately to userspace so that multicore can be
|
|
added in the future without breaking userspace ABI.
|
|
|
|
This was written with Rockchip RK3588 in mind (which has 4 Hantro H1
|
|
cores), but applies to all SoCs.
|
|
|
|
Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
|
|
---
|
|
drivers/media/platform/verisilicon/hantro_drv.c | 37 ++++++++++
|
|
1 file changed, 37 insertions(+)
|
|
|
|
diff --git a/drivers/media/platform/verisilicon/hantro_drv.c b/drivers/media/platform/verisilicon/hantro_drv.c
|
|
index 111111111111..222222222222 100644
|
|
--- a/drivers/media/platform/verisilicon/hantro_drv.c
|
|
+++ b/drivers/media/platform/verisilicon/hantro_drv.c
|
|
@@ -992,6 +992,39 @@ static const struct media_device_ops hantro_m2m_media_ops = {
|
|
.req_queue = v4l2_m2m_request_queue,
|
|
};
|
|
|
|
+/*
|
|
+ * Some SoCs, like RK3588 have multiple identical Hantro cores, but the
|
|
+ * kernel is currently missing support for multi-core handling. Exposing
|
|
+ * separate devices for each core to userspace is bad, since that does
|
|
+ * not allow scheduling tasks properly (and creates ABI). With this workaround
|
|
+ * the driver will only probe for the first core and early exit for the other
|
|
+ * cores. Once the driver gains multi-core support, the same technique
|
|
+ * for detecting the main core can be used to cluster all cores together.
|
|
+ */
|
|
+static int hantro_disable_multicore(struct hantro_dev *vpu)
|
|
+{
|
|
+ const char *compatible;
|
|
+ struct device_node *node;
|
|
+ int ret;
|
|
+
|
|
+ /* Intentionally ignores the fallback strings */
|
|
+ ret = of_property_read_string(vpu->dev->of_node, "compatible", &compatible);
|
|
+ if (ret)
|
|
+ return ret;
|
|
+
|
|
+ /* first compatible node found from the root node is considered the main core */
|
|
+ node = of_find_compatible_node(NULL, NULL, compatible);
|
|
+ if (!node)
|
|
+ return -EINVAL; /* broken DT? */
|
|
+
|
|
+ if (vpu->dev->of_node != node) {
|
|
+ dev_info(vpu->dev, "missing multi-core support, ignoring this instance\n");
|
|
+ return -ENODEV;
|
|
+ }
|
|
+
|
|
+ return 0;
|
|
+}
|
|
+
|
|
static int hantro_probe(struct platform_device *pdev)
|
|
{
|
|
const struct of_device_id *match;
|
|
@@ -1011,6 +1044,10 @@ static int hantro_probe(struct platform_device *pdev)
|
|
match = of_match_node(of_hantro_match, pdev->dev.of_node);
|
|
vpu->variant = match->data;
|
|
|
|
+ ret = hantro_disable_multicore(vpu);
|
|
+ if (ret)
|
|
+ return ret;
|
|
+
|
|
/*
|
|
* Support for nxp,imx8mq-vpu is kept for backwards compatibility
|
|
* but it's deprecated. Please update your DTS file to use
|
|
--
|
|
Armbian
|
|
|
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Sebastian Reichel <sebastian.reichel@collabora.com>
|
|
Date: Thu, 13 Jun 2024 15:48:45 +0200
|
|
Subject: media: hantro: Add RK3588 VEPU121
|
|
|
|
RK3588 handling is exactly the same as RK3568. This is not
|
|
handled using fallback compatibles to avoid exposing multiple
|
|
video devices on kernels not having the multicore disable
|
|
patch.
|
|
|
|
Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
|
|
---
|
|
drivers/media/platform/verisilicon/hantro_drv.c | 1 +
|
|
1 file changed, 1 insertion(+)
|
|
|
|
diff --git a/drivers/media/platform/verisilicon/hantro_drv.c b/drivers/media/platform/verisilicon/hantro_drv.c
|
|
index 111111111111..222222222222 100644
|
|
--- a/drivers/media/platform/verisilicon/hantro_drv.c
|
|
+++ b/drivers/media/platform/verisilicon/hantro_drv.c
|
|
@@ -722,6 +722,7 @@ static const struct of_device_id of_hantro_match[] = {
|
|
{ .compatible = "rockchip,rk3399-vpu", .data = &rk3399_vpu_variant, },
|
|
{ .compatible = "rockchip,rk3568-vepu", .data = &rk3568_vepu_variant, },
|
|
{ .compatible = "rockchip,rk3568-vpu", .data = &rk3568_vpu_variant, },
|
|
+ { .compatible = "rockchip,rk3588-vepu121", .data = &rk3568_vepu_variant, },
|
|
{ .compatible = "rockchip,rk3588-av1-vpu", .data = &rk3588_vpu981_variant, },
|
|
#endif
|
|
#ifdef CONFIG_VIDEO_HANTRO_IMX8M
|
|
--
|
|
Armbian
|
|
|