devicetree.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [RESEND PATCH v6 0/5] Add support for video hardware codec of STMicroelectronics STM32 SoC series
@ 2024-01-10 10:46 Hugues Fruchet
  2024-01-10 10:46 ` [RESEND PATCH v6 1/5] dt-bindings: media: Document STM32MP25 VDEC & VENC video codecs Hugues Fruchet
                   ` (6 more replies)
  0 siblings, 7 replies; 9+ messages in thread
From: Hugues Fruchet @ 2024-01-10 10:46 UTC (permalink / raw)
  To: Ezequiel Garcia, Philipp Zabel, Andrzej Pietrasiewicz,
	Nicolas Dufresne, Sakari Ailus, Benjamin Gaignard,
	Laurent Pinchart, Daniel Almeida, Benjamin Mugnier,
	Heiko Stuebner, Mauro Carvalho Chehab, Hans Verkuil, linux-media,
	Maxime Coquelin, Alexandre Torgue, linux-stm32, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley, devicetree, linux-arm-kernel,
	linux-kernel, linux-rockchip
  Cc: Hugues Fruchet, Marco Felsch, Adam Ford

This patchset introduces support for VDEC video hardware decoder
and VENC video hardware encoder of STMicroelectronics STM32MP25
SoC series.

This initial support implements H264 decoding, VP8 decoding and
JPEG encoding.

This has been tested on STM32MP257F-EV1 evaluation board.

===========
= history =
===========
version 6:
   - Use a single file for VDEC and VENC variants as suggested by Alex Bee
   - Fix some typos raised by Sebastian Fricke
   - Add Krzysztof Kozlowski Reviewed-by

version 5:
   - Precise that video decoding as been successfully tested up to full HD
   - Add Nicolas Dufresne Reviewed-by

version 4:
   - Fix comments from Nicolas about dropping encoder raw steps

version 3:
   - Fix remarks from Krzysztof Kozlowski:
    - drop "items", we keep simple enum in such case
    - drop second example - it is the same as the first
   - Drop unused node labels as suggested by Conor Dooley
   - Revisit min/max resolutions as suggested by Nicolas Dufresne

version 2:
   - Fix remarks from Krzysztof Kozlowski on v1:
    - single video-codec binding for both VDEC/VENC
    - get rid of "-names"
    - use of generic node name "video-codec"

version 1:
  - Initial submission

Hugues Fruchet (5):
  dt-bindings: media: Document STM32MP25 VDEC & VENC video codecs
  media: hantro: add support for STM32MP25 VDEC
  media: hantro: add support for STM32MP25 VENC
  arm64: dts: st: add video decoder support to stm32mp255
  arm64: dts: st: add video encoder support to stm32mp255

 .../media/st,stm32mp25-video-codec.yaml       |  49 +++++
 arch/arm64/boot/dts/st/stm32mp251.dtsi        |  12 ++
 arch/arm64/boot/dts/st/stm32mp255.dtsi        |  17 ++
 drivers/media/platform/verisilicon/Kconfig    |  14 +-
 drivers/media/platform/verisilicon/Makefile   |   3 +
 .../media/platform/verisilicon/hantro_drv.c   |   4 +
 .../media/platform/verisilicon/hantro_hw.h    |   2 +
 .../platform/verisilicon/stm32mp25_vpu_hw.c   | 186 ++++++++++++++++++
 8 files changed, 284 insertions(+), 3 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/media/st,stm32mp25-video-codec.yaml
 create mode 100644 drivers/media/platform/verisilicon/stm32mp25_vpu_hw.c

-- 
2.25.1


^ permalink raw reply	[flat|nested] 9+ messages in thread

* [RESEND PATCH v6 1/5] dt-bindings: media: Document STM32MP25 VDEC & VENC video codecs
  2024-01-10 10:46 [RESEND PATCH v6 0/5] Add support for video hardware codec of STMicroelectronics STM32 SoC series Hugues Fruchet
@ 2024-01-10 10:46 ` Hugues Fruchet
  2024-01-10 10:46 ` [RESEND PATCH v6 2/5] media: hantro: add support for STM32MP25 VDEC Hugues Fruchet
                   ` (5 subsequent siblings)
  6 siblings, 0 replies; 9+ messages in thread
From: Hugues Fruchet @ 2024-01-10 10:46 UTC (permalink / raw)
  To: Ezequiel Garcia, Philipp Zabel, Andrzej Pietrasiewicz,
	Nicolas Dufresne, Sakari Ailus, Benjamin Gaignard,
	Laurent Pinchart, Daniel Almeida, Benjamin Mugnier,
	Heiko Stuebner, Mauro Carvalho Chehab, Hans Verkuil, linux-media,
	Maxime Coquelin, Alexandre Torgue, linux-stm32, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley, devicetree, linux-arm-kernel,
	linux-kernel, linux-rockchip
  Cc: Hugues Fruchet, Marco Felsch, Adam Ford

Add STM32MP25 VDEC video decoder & VENC video encoder bindings.

Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Signed-off-by: Hugues Fruchet <hugues.fruchet@foss.st.com>
---
 .../media/st,stm32mp25-video-codec.yaml       | 49 +++++++++++++++++++
 1 file changed, 49 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/media/st,stm32mp25-video-codec.yaml

diff --git a/Documentation/devicetree/bindings/media/st,stm32mp25-video-codec.yaml b/Documentation/devicetree/bindings/media/st,stm32mp25-video-codec.yaml
new file mode 100644
index 000000000000..b8611bc8756c
--- /dev/null
+++ b/Documentation/devicetree/bindings/media/st,stm32mp25-video-codec.yaml
@@ -0,0 +1,49 @@
+# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/media/st,stm32mp25-video-codec.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: STMicroelectronics STM32MP25 VDEC video decoder & VENC video encoder
+
+maintainers:
+  - Hugues Fruchet <hugues.fruchet@foss.st.com>
+
+description:
+  The STMicroelectronics STM32MP25 SOCs embeds a VDEC video hardware
+  decoder peripheral based on Verisilicon VC8000NanoD IP (former Hantro G1)
+  and a VENC video hardware encoder peripheral based on Verisilicon
+  VC8000NanoE IP (former Hantro H1).
+
+properties:
+  compatible:
+    enum:
+      - st,stm32mp25-vdec
+      - st,stm32mp25-venc
+
+  reg:
+    maxItems: 1
+
+  interrupts:
+    maxItems: 1
+
+  clocks:
+    maxItems: 1
+
+required:
+  - compatible
+  - reg
+  - interrupts
+  - clocks
+
+additionalProperties: false
+
+examples:
+  - |
+    #include <dt-bindings/interrupt-controller/arm-gic.h>
+    video-codec@580d0000 {
+        compatible = "st,stm32mp25-vdec";
+        reg = <0x580d0000 0x3c8>;
+        interrupts = <GIC_SPI 117 IRQ_TYPE_LEVEL_HIGH>;
+        clocks = <&ck_icn_p_vdec>;
+    };
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [RESEND PATCH v6 2/5] media: hantro: add support for STM32MP25 VDEC
  2024-01-10 10:46 [RESEND PATCH v6 0/5] Add support for video hardware codec of STMicroelectronics STM32 SoC series Hugues Fruchet
  2024-01-10 10:46 ` [RESEND PATCH v6 1/5] dt-bindings: media: Document STM32MP25 VDEC & VENC video codecs Hugues Fruchet
@ 2024-01-10 10:46 ` Hugues Fruchet
  2024-01-10 10:46 ` [RESEND PATCH v6 3/5] media: hantro: add support for STM32MP25 VENC Hugues Fruchet
                   ` (4 subsequent siblings)
  6 siblings, 0 replies; 9+ messages in thread
From: Hugues Fruchet @ 2024-01-10 10:46 UTC (permalink / raw)
  To: Ezequiel Garcia, Philipp Zabel, Andrzej Pietrasiewicz,
	Nicolas Dufresne, Sakari Ailus, Benjamin Gaignard,
	Laurent Pinchart, Daniel Almeida, Benjamin Mugnier,
	Heiko Stuebner, Mauro Carvalho Chehab, Hans Verkuil, linux-media,
	Maxime Coquelin, Alexandre Torgue, linux-stm32, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley, devicetree, linux-arm-kernel,
	linux-kernel, linux-rockchip
  Cc: Hugues Fruchet, Marco Felsch, Adam Ford

Add support for STM32MP25 VDEC video hardware decoder.
Support of H264/VP8 decoding.
No post-processor support.
VDEC has its own reset/clock/irq.

Successfully tested up to full HD.

Reviewed-by: Nicolas Dufresne <nicolas.dufresne@collabora.com>
Signed-off-by: Hugues Fruchet <hugues.fruchet@foss.st.com>
---
 drivers/media/platform/verisilicon/Kconfig    | 14 ++-
 drivers/media/platform/verisilicon/Makefile   |  3 +
 .../media/platform/verisilicon/hantro_drv.c   |  3 +
 .../media/platform/verisilicon/hantro_hw.h    |  1 +
 .../platform/verisilicon/stm32mp25_vpu_hw.c   | 96 +++++++++++++++++++
 5 files changed, 114 insertions(+), 3 deletions(-)
 create mode 100644 drivers/media/platform/verisilicon/stm32mp25_vpu_hw.c

diff --git a/drivers/media/platform/verisilicon/Kconfig b/drivers/media/platform/verisilicon/Kconfig
index 24b927d8f182..9a34d14c6e40 100644
--- a/drivers/media/platform/verisilicon/Kconfig
+++ b/drivers/media/platform/verisilicon/Kconfig
@@ -4,7 +4,7 @@ comment "Verisilicon media platform drivers"
 
 config VIDEO_HANTRO
 	tristate "Hantro VPU driver"
-	depends on ARCH_MXC || ARCH_ROCKCHIP || ARCH_AT91 || ARCH_SUNXI || COMPILE_TEST
+	depends on ARCH_MXC || ARCH_ROCKCHIP || ARCH_AT91 || ARCH_SUNXI || ARCH_STM32 || COMPILE_TEST
 	depends on V4L_MEM2MEM_DRIVERS
 	depends on VIDEO_DEV
 	select MEDIA_CONTROLLER
@@ -15,8 +15,8 @@ config VIDEO_HANTRO
 	select V4L2_VP9
 	help
 	  Support for the Hantro IP based Video Processing Units present on
-	  Rockchip and NXP i.MX8M SoCs, which accelerate video and image
-	  encoding and decoding.
+	  Rockchip, NXP i.MX8M and STM32MP25 SoCs, which accelerate video
+	  and image encoding and decoding.
 	  To compile this driver as a module, choose M here: the module
 	  will be called hantro-vpu.
 
@@ -51,3 +51,11 @@ config VIDEO_HANTRO_SUNXI
 	default y
 	help
 	  Enable support for H6 SoC.
+
+config VIDEO_HANTRO_STM32MP25
+	bool "Hantro STM32MP25 support"
+	depends on VIDEO_HANTRO
+	depends on ARCH_STM32 || COMPILE_TEST
+	default y
+	help
+	  Enable support for STM32MP25 SoCs.
diff --git a/drivers/media/platform/verisilicon/Makefile b/drivers/media/platform/verisilicon/Makefile
index 6ad2ef885920..eb38a1833b02 100644
--- a/drivers/media/platform/verisilicon/Makefile
+++ b/drivers/media/platform/verisilicon/Makefile
@@ -39,3 +39,6 @@ hantro-vpu-$(CONFIG_VIDEO_HANTRO_ROCKCHIP) += \
 
 hantro-vpu-$(CONFIG_VIDEO_HANTRO_SUNXI) += \
 		sunxi_vpu_hw.o
+
+hantro-vpu-$(CONFIG_VIDEO_HANTRO_STM32MP25) += \
+		stm32mp25_vpu_hw.o
diff --git a/drivers/media/platform/verisilicon/hantro_drv.c b/drivers/media/platform/verisilicon/hantro_drv.c
index db3df6cc4513..fe8e2240324c 100644
--- a/drivers/media/platform/verisilicon/hantro_drv.c
+++ b/drivers/media/platform/verisilicon/hantro_drv.c
@@ -735,6 +735,9 @@ static const struct of_device_id of_hantro_match[] = {
 #endif
 #ifdef CONFIG_VIDEO_HANTRO_SUNXI
 	{ .compatible = "allwinner,sun50i-h6-vpu-g2", .data = &sunxi_vpu_variant, },
+#endif
+#ifdef CONFIG_VIDEO_HANTRO_STM32MP25
+	{ .compatible = "st,stm32mp25-vdec", .data = &stm32mp25_vdec_variant, },
 #endif
 	{ /* sentinel */ }
 };
diff --git a/drivers/media/platform/verisilicon/hantro_hw.h b/drivers/media/platform/verisilicon/hantro_hw.h
index 9aec8a79acdc..0b4806f67630 100644
--- a/drivers/media/platform/verisilicon/hantro_hw.h
+++ b/drivers/media/platform/verisilicon/hantro_hw.h
@@ -408,6 +408,7 @@ extern const struct hantro_variant rk3568_vpu_variant;
 extern const struct hantro_variant rk3588_vpu981_variant;
 extern const struct hantro_variant sama5d4_vdec_variant;
 extern const struct hantro_variant sunxi_vpu_variant;
+extern const struct hantro_variant stm32mp25_vdec_variant;
 
 extern const struct hantro_postproc_ops hantro_g1_postproc_ops;
 extern const struct hantro_postproc_ops hantro_g2_postproc_ops;
diff --git a/drivers/media/platform/verisilicon/stm32mp25_vpu_hw.c b/drivers/media/platform/verisilicon/stm32mp25_vpu_hw.c
new file mode 100644
index 000000000000..6af6edcb6650
--- /dev/null
+++ b/drivers/media/platform/verisilicon/stm32mp25_vpu_hw.c
@@ -0,0 +1,96 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * STM32MP25 video codec driver
+ *
+ * Copyright (C) STMicroelectronics SA 2024
+ * Authors: Hugues Fruchet <hugues.fruchet@foss.st.com>
+ *          for STMicroelectronics.
+ *
+ */
+
+#include "hantro.h"
+
+/*
+ * Supported formats.
+ */
+
+static const struct hantro_fmt stm32mp25_vdec_fmts[] = {
+	{
+		.fourcc = V4L2_PIX_FMT_NV12,
+		.codec_mode = HANTRO_MODE_NONE,
+		.frmsize = {
+			.min_width = FMT_MIN_WIDTH,
+			.max_width = FMT_FHD_WIDTH,
+			.step_width = MB_DIM,
+			.min_height = FMT_MIN_HEIGHT,
+			.max_height = FMT_FHD_HEIGHT,
+			.step_height = MB_DIM,
+		},
+	},
+	{
+		.fourcc = V4L2_PIX_FMT_VP8_FRAME,
+		.codec_mode = HANTRO_MODE_VP8_DEC,
+		.max_depth = 2,
+		.frmsize = {
+			.min_width = FMT_MIN_WIDTH,
+			.max_width = FMT_FHD_WIDTH,
+			.step_width = MB_DIM,
+			.min_height = FMT_MIN_HEIGHT,
+			.max_height = FMT_FHD_HEIGHT,
+			.step_height = MB_DIM,
+		},
+	},
+	{
+		.fourcc = V4L2_PIX_FMT_H264_SLICE,
+		.codec_mode = HANTRO_MODE_H264_DEC,
+		.max_depth = 2,
+		.frmsize = {
+			.min_width = FMT_MIN_WIDTH,
+			.max_width = FMT_FHD_WIDTH,
+			.step_width = MB_DIM,
+			.min_height = FMT_MIN_HEIGHT,
+			.max_height = FMT_FHD_HEIGHT,
+			.step_height = MB_DIM,
+		},
+	},
+};
+
+/*
+ * Supported codec ops.
+ */
+
+static const struct hantro_codec_ops stm32mp25_vdec_codec_ops[] = {
+	[HANTRO_MODE_VP8_DEC] = {
+		.run = hantro_g1_vp8_dec_run,
+		.reset = hantro_g1_reset,
+		.init = hantro_vp8_dec_init,
+		.exit = hantro_vp8_dec_exit,
+	},
+	[HANTRO_MODE_H264_DEC] = {
+		.run = hantro_g1_h264_dec_run,
+		.reset = hantro_g1_reset,
+		.init = hantro_h264_dec_init,
+		.exit = hantro_h264_dec_exit,
+	},
+};
+
+/*
+ * Variants.
+ */
+
+static const struct hantro_irq stm32mp25_vdec_irqs[] = {
+	{ "vdec", hantro_g1_irq },
+};
+
+static const char * const stm32mp25_vdec_clk_names[] = { "vdec-clk" };
+
+const struct hantro_variant stm32mp25_vdec_variant = {
+	.dec_fmts = stm32mp25_vdec_fmts,
+	.num_dec_fmts = ARRAY_SIZE(stm32mp25_vdec_fmts),
+	.codec = HANTRO_VP8_DECODER | HANTRO_H264_DECODER,
+	.codec_ops = stm32mp25_vdec_codec_ops,
+	.irqs = stm32mp25_vdec_irqs,
+	.num_irqs = ARRAY_SIZE(stm32mp25_vdec_irqs),
+	.clk_names = stm32mp25_vdec_clk_names,
+	.num_clocks = ARRAY_SIZE(stm32mp25_vdec_clk_names),
+};
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [RESEND PATCH v6 3/5] media: hantro: add support for STM32MP25 VENC
  2024-01-10 10:46 [RESEND PATCH v6 0/5] Add support for video hardware codec of STMicroelectronics STM32 SoC series Hugues Fruchet
  2024-01-10 10:46 ` [RESEND PATCH v6 1/5] dt-bindings: media: Document STM32MP25 VDEC & VENC video codecs Hugues Fruchet
  2024-01-10 10:46 ` [RESEND PATCH v6 2/5] media: hantro: add support for STM32MP25 VDEC Hugues Fruchet
@ 2024-01-10 10:46 ` Hugues Fruchet
  2024-01-10 10:46 ` [RESEND PATCH v6 4/5] arm64: dts: st: add video decoder support to stm32mp255 Hugues Fruchet
                   ` (3 subsequent siblings)
  6 siblings, 0 replies; 9+ messages in thread
From: Hugues Fruchet @ 2024-01-10 10:46 UTC (permalink / raw)
  To: Ezequiel Garcia, Philipp Zabel, Andrzej Pietrasiewicz,
	Nicolas Dufresne, Sakari Ailus, Benjamin Gaignard,
	Laurent Pinchart, Daniel Almeida, Benjamin Mugnier,
	Heiko Stuebner, Mauro Carvalho Chehab, Hans Verkuil, linux-media,
	Maxime Coquelin, Alexandre Torgue, linux-stm32, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley, devicetree, linux-arm-kernel,
	linux-kernel, linux-rockchip
  Cc: Hugues Fruchet, Marco Felsch, Adam Ford

Add support for STM32MP25 VENC video hardware encoder.
Support of JPEG encoding.
VENC has its own reset/clock/irq.

Reviewed-by: Nicolas Dufresne <nicolas.dufresne@collabora.com>
Signed-off-by: Hugues Fruchet <hugues.fruchet@foss.st.com>
---
 .../media/platform/verisilicon/hantro_drv.c   |  1 +
 .../media/platform/verisilicon/hantro_hw.h    |  1 +
 .../platform/verisilicon/stm32mp25_vpu_hw.c   | 90 +++++++++++++++++++
 3 files changed, 92 insertions(+)

diff --git a/drivers/media/platform/verisilicon/hantro_drv.c b/drivers/media/platform/verisilicon/hantro_drv.c
index fe8e2240324c..34b123dafd89 100644
--- a/drivers/media/platform/verisilicon/hantro_drv.c
+++ b/drivers/media/platform/verisilicon/hantro_drv.c
@@ -738,6 +738,7 @@ static const struct of_device_id of_hantro_match[] = {
 #endif
 #ifdef CONFIG_VIDEO_HANTRO_STM32MP25
 	{ .compatible = "st,stm32mp25-vdec", .data = &stm32mp25_vdec_variant, },
+	{ .compatible = "st,stm32mp25-venc", .data = &stm32mp25_venc_variant, },
 #endif
 	{ /* sentinel */ }
 };
diff --git a/drivers/media/platform/verisilicon/hantro_hw.h b/drivers/media/platform/verisilicon/hantro_hw.h
index 0b4806f67630..7737320cc8cc 100644
--- a/drivers/media/platform/verisilicon/hantro_hw.h
+++ b/drivers/media/platform/verisilicon/hantro_hw.h
@@ -409,6 +409,7 @@ extern const struct hantro_variant rk3588_vpu981_variant;
 extern const struct hantro_variant sama5d4_vdec_variant;
 extern const struct hantro_variant sunxi_vpu_variant;
 extern const struct hantro_variant stm32mp25_vdec_variant;
+extern const struct hantro_variant stm32mp25_venc_variant;
 
 extern const struct hantro_postproc_ops hantro_g1_postproc_ops;
 extern const struct hantro_postproc_ops hantro_g2_postproc_ops;
diff --git a/drivers/media/platform/verisilicon/stm32mp25_vpu_hw.c b/drivers/media/platform/verisilicon/stm32mp25_vpu_hw.c
index 6af6edcb6650..833821120b20 100644
--- a/drivers/media/platform/verisilicon/stm32mp25_vpu_hw.c
+++ b/drivers/media/platform/verisilicon/stm32mp25_vpu_hw.c
@@ -9,6 +9,8 @@
  */
 
 #include "hantro.h"
+#include "hantro_jpeg.h"
+#include "hantro_h1_regs.h"
 
 /*
  * Supported formats.
@@ -55,6 +57,67 @@ static const struct hantro_fmt stm32mp25_vdec_fmts[] = {
 	},
 };
 
+static const struct hantro_fmt stm32mp25_venc_fmts[] = {
+	{
+		.fourcc = V4L2_PIX_FMT_YUV420M,
+		.codec_mode = HANTRO_MODE_NONE,
+		.enc_fmt = ROCKCHIP_VPU_ENC_FMT_YUV420P,
+	},
+	{
+		.fourcc = V4L2_PIX_FMT_NV12M,
+		.codec_mode = HANTRO_MODE_NONE,
+		.enc_fmt = ROCKCHIP_VPU_ENC_FMT_YUV420SP,
+	},
+	{
+		.fourcc = V4L2_PIX_FMT_YUYV,
+		.codec_mode = HANTRO_MODE_NONE,
+		.enc_fmt = ROCKCHIP_VPU_ENC_FMT_YUYV422,
+	},
+	{
+		.fourcc = V4L2_PIX_FMT_UYVY,
+		.codec_mode = HANTRO_MODE_NONE,
+		.enc_fmt = ROCKCHIP_VPU_ENC_FMT_UYVY422,
+	},
+	{
+		.fourcc = V4L2_PIX_FMT_JPEG,
+		.codec_mode = HANTRO_MODE_JPEG_ENC,
+		.max_depth = 2,
+		.header_size = JPEG_HEADER_SIZE,
+		.frmsize = {
+			.min_width = 96,
+			.max_width = FMT_4K_WIDTH,
+			.step_width = MB_DIM,
+			.min_height = 96,
+			.max_height = FMT_4K_HEIGHT,
+			.step_height = MB_DIM,
+		},
+	},
+};
+
+static irqreturn_t stm32mp25_venc_irq(int irq, void *dev_id)
+{
+	struct hantro_dev *vpu = dev_id;
+	enum vb2_buffer_state state;
+	u32 status;
+
+	status = vepu_read(vpu, H1_REG_INTERRUPT);
+	state = (status & H1_REG_INTERRUPT_FRAME_RDY) ?
+		VB2_BUF_STATE_DONE : VB2_BUF_STATE_ERROR;
+
+	vepu_write(vpu, H1_REG_INTERRUPT_BIT, H1_REG_INTERRUPT);
+
+	hantro_irq_done(vpu, state);
+
+	return IRQ_HANDLED;
+}
+
+static void stm32mp25_venc_reset(struct hantro_ctx *ctx)
+{
+	struct hantro_dev *vpu = ctx->dev;
+
+	reset_control_reset(vpu->resets);
+}
+
 /*
  * Supported codec ops.
  */
@@ -74,6 +137,14 @@ static const struct hantro_codec_ops stm32mp25_vdec_codec_ops[] = {
 	},
 };
 
+static const struct hantro_codec_ops stm32mp25_venc_codec_ops[] = {
+	[HANTRO_MODE_JPEG_ENC] = {
+		.run = hantro_h1_jpeg_enc_run,
+		.reset = stm32mp25_venc_reset,
+		.done = hantro_h1_jpeg_enc_done,
+	},
+};
+
 /*
  * Variants.
  */
@@ -94,3 +165,22 @@ const struct hantro_variant stm32mp25_vdec_variant = {
 	.clk_names = stm32mp25_vdec_clk_names,
 	.num_clocks = ARRAY_SIZE(stm32mp25_vdec_clk_names),
 };
+
+static const struct hantro_irq stm32mp25_venc_irqs[] = {
+	{ "venc", stm32mp25_venc_irq },
+};
+
+static const char * const stm32mp25_venc_clk_names[] = {
+	"venc-clk"
+};
+
+const struct hantro_variant stm32mp25_venc_variant = {
+	.enc_fmts = stm32mp25_venc_fmts,
+	.num_enc_fmts = ARRAY_SIZE(stm32mp25_venc_fmts),
+	.codec = HANTRO_JPEG_ENCODER,
+	.codec_ops = stm32mp25_venc_codec_ops,
+	.irqs = stm32mp25_venc_irqs,
+	.num_irqs = ARRAY_SIZE(stm32mp25_venc_irqs),
+	.clk_names = stm32mp25_venc_clk_names,
+	.num_clocks = ARRAY_SIZE(stm32mp25_venc_clk_names)
+};
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [RESEND PATCH v6 4/5] arm64: dts: st: add video decoder support to stm32mp255
  2024-01-10 10:46 [RESEND PATCH v6 0/5] Add support for video hardware codec of STMicroelectronics STM32 SoC series Hugues Fruchet
                   ` (2 preceding siblings ...)
  2024-01-10 10:46 ` [RESEND PATCH v6 3/5] media: hantro: add support for STM32MP25 VENC Hugues Fruchet
@ 2024-01-10 10:46 ` Hugues Fruchet
  2024-01-10 10:46 ` [RESEND PATCH v6 5/5] arm64: dts: st: add video encoder " Hugues Fruchet
                   ` (2 subsequent siblings)
  6 siblings, 0 replies; 9+ messages in thread
From: Hugues Fruchet @ 2024-01-10 10:46 UTC (permalink / raw)
  To: Ezequiel Garcia, Philipp Zabel, Andrzej Pietrasiewicz,
	Nicolas Dufresne, Sakari Ailus, Benjamin Gaignard,
	Laurent Pinchart, Daniel Almeida, Benjamin Mugnier,
	Heiko Stuebner, Mauro Carvalho Chehab, Hans Verkuil, linux-media,
	Maxime Coquelin, Alexandre Torgue, linux-stm32, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley, devicetree, linux-arm-kernel,
	linux-kernel, linux-rockchip
  Cc: Hugues Fruchet, Marco Felsch, Adam Ford

Add VDEC hardware video decoder support to STM32MP255.

Signed-off-by: Hugues Fruchet <hugues.fruchet@foss.st.com>
---
 arch/arm64/boot/dts/st/stm32mp251.dtsi |  6 ++++++
 arch/arm64/boot/dts/st/stm32mp255.dtsi | 10 ++++++++++
 2 files changed, 16 insertions(+)

diff --git a/arch/arm64/boot/dts/st/stm32mp251.dtsi b/arch/arm64/boot/dts/st/stm32mp251.dtsi
index 124403f5f1f4..cd6c4f627739 100644
--- a/arch/arm64/boot/dts/st/stm32mp251.dtsi
+++ b/arch/arm64/boot/dts/st/stm32mp251.dtsi
@@ -52,6 +52,12 @@ ck_icn_ls_mcu: ck-icn-ls-mcu {
 			compatible = "fixed-clock";
 			clock-frequency = <200000000>;
 		};
+
+		ck_icn_p_vdec: ck-icn-p-vdec {
+			#clock-cells = <0>;
+			compatible = "fixed-clock";
+			clock-frequency = <200000000>;
+		};
 	};
 
 	firmware {
diff --git a/arch/arm64/boot/dts/st/stm32mp255.dtsi b/arch/arm64/boot/dts/st/stm32mp255.dtsi
index e6fa596211f5..aea5096dac3c 100644
--- a/arch/arm64/boot/dts/st/stm32mp255.dtsi
+++ b/arch/arm64/boot/dts/st/stm32mp255.dtsi
@@ -6,4 +6,14 @@
 #include "stm32mp253.dtsi"
 
 / {
+	soc@0 {
+		rifsc: rifsc-bus@42080000 {
+			vdec: vdec@480d0000 {
+				compatible = "st,stm32mp25-vdec";
+				reg = <0x480d0000 0x3c8>;
+				interrupts = <GIC_SPI 117 IRQ_TYPE_LEVEL_HIGH>;
+				clocks = <&ck_icn_p_vdec>;
+			};
+		};
+	};
 };
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [RESEND PATCH v6 5/5] arm64: dts: st: add video encoder support to stm32mp255
  2024-01-10 10:46 [RESEND PATCH v6 0/5] Add support for video hardware codec of STMicroelectronics STM32 SoC series Hugues Fruchet
                   ` (3 preceding siblings ...)
  2024-01-10 10:46 ` [RESEND PATCH v6 4/5] arm64: dts: st: add video decoder support to stm32mp255 Hugues Fruchet
@ 2024-01-10 10:46 ` Hugues Fruchet
  2024-01-24 12:36 ` [RESEND PATCH v6 0/5] Add support for video hardware codec of STMicroelectronics STM32 SoC series Alexandre TORGUE
  2024-02-29  9:34 ` Alexandre TORGUE
  6 siblings, 0 replies; 9+ messages in thread
From: Hugues Fruchet @ 2024-01-10 10:46 UTC (permalink / raw)
  To: Ezequiel Garcia, Philipp Zabel, Andrzej Pietrasiewicz,
	Nicolas Dufresne, Sakari Ailus, Benjamin Gaignard,
	Laurent Pinchart, Daniel Almeida, Benjamin Mugnier,
	Heiko Stuebner, Mauro Carvalho Chehab, Hans Verkuil, linux-media,
	Maxime Coquelin, Alexandre Torgue, linux-stm32, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley, devicetree, linux-arm-kernel,
	linux-kernel, linux-rockchip
  Cc: Hugues Fruchet, Marco Felsch, Adam Ford

Add VENC hardware video encoder support to STM32MP255.

Signed-off-by: Hugues Fruchet <hugues.fruchet@foss.st.com>
---
 arch/arm64/boot/dts/st/stm32mp251.dtsi | 6 ++++++
 arch/arm64/boot/dts/st/stm32mp255.dtsi | 7 +++++++
 2 files changed, 13 insertions(+)

diff --git a/arch/arm64/boot/dts/st/stm32mp251.dtsi b/arch/arm64/boot/dts/st/stm32mp251.dtsi
index cd6c4f627739..1584debca7f5 100644
--- a/arch/arm64/boot/dts/st/stm32mp251.dtsi
+++ b/arch/arm64/boot/dts/st/stm32mp251.dtsi
@@ -58,6 +58,12 @@ ck_icn_p_vdec: ck-icn-p-vdec {
 			compatible = "fixed-clock";
 			clock-frequency = <200000000>;
 		};
+
+		ck_icn_p_venc: ck-icn-p-venc {
+			#clock-cells = <0>;
+			compatible = "fixed-clock";
+			clock-frequency = <200000000>;
+		};
 	};
 
 	firmware {
diff --git a/arch/arm64/boot/dts/st/stm32mp255.dtsi b/arch/arm64/boot/dts/st/stm32mp255.dtsi
index aea5096dac3c..17f197c5b22b 100644
--- a/arch/arm64/boot/dts/st/stm32mp255.dtsi
+++ b/arch/arm64/boot/dts/st/stm32mp255.dtsi
@@ -14,6 +14,13 @@ vdec: vdec@480d0000 {
 				interrupts = <GIC_SPI 117 IRQ_TYPE_LEVEL_HIGH>;
 				clocks = <&ck_icn_p_vdec>;
 			};
+
+			venc: venc@480e0000 {
+				compatible = "st,stm32mp25-venc";
+				reg = <0x480e0000 0x800>;
+				interrupts = <GIC_SPI 167 IRQ_TYPE_LEVEL_HIGH>;
+				clocks = <&ck_icn_ls_mcu>;
+			};
 		};
 	};
 };
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: [RESEND PATCH v6 0/5] Add support for video hardware codec of STMicroelectronics STM32 SoC series
  2024-01-10 10:46 [RESEND PATCH v6 0/5] Add support for video hardware codec of STMicroelectronics STM32 SoC series Hugues Fruchet
                   ` (4 preceding siblings ...)
  2024-01-10 10:46 ` [RESEND PATCH v6 5/5] arm64: dts: st: add video encoder " Hugues Fruchet
@ 2024-01-24 12:36 ` Alexandre TORGUE
  2024-01-25 16:03   ` Sakari Ailus
  2024-02-29  9:34 ` Alexandre TORGUE
  6 siblings, 1 reply; 9+ messages in thread
From: Alexandre TORGUE @ 2024-01-24 12:36 UTC (permalink / raw)
  To: Hugues Fruchet, Ezequiel Garcia, Philipp Zabel,
	Andrzej Pietrasiewicz, Nicolas Dufresne, Sakari Ailus,
	Benjamin Gaignard, Laurent Pinchart, Daniel Almeida,
	Benjamin Mugnier, Heiko Stuebner, Mauro Carvalho Chehab,
	Hans Verkuil, linux-media, Maxime Coquelin, linux-stm32,
	Rob Herring, Krzysztof Kozlowski, Conor Dooley, devicetree,
	linux-arm-kernel, linux-kernel, linux-rockchip
  Cc: Marco Felsch, Adam Ford

Hi

On 1/10/24 11:46, Hugues Fruchet wrote:
> This patchset introduces support for VDEC video hardware decoder
> and VENC video hardware encoder of STMicroelectronics STM32MP25
> SoC series.
> 
> This initial support implements H264 decoding, VP8 decoding and
> JPEG encoding.
> 
> This has been tested on STM32MP257F-EV1 evaluation board.
> 
> ===========
> = history =
> ===========
> version 6:
>     - Use a single file for VDEC and VENC variants as suggested by Alex Bee
>     - Fix some typos raised by Sebastian Fricke
>     - Add Krzysztof Kozlowski Reviewed-by
> 
> version 5:
>     - Precise that video decoding as been successfully tested up to full HD
>     - Add Nicolas Dufresne Reviewed-by
> 
> version 4:
>     - Fix comments from Nicolas about dropping encoder raw steps
> 
> version 3:
>     - Fix remarks from Krzysztof Kozlowski:
>      - drop "items", we keep simple enum in such case
>      - drop second example - it is the same as the first
>     - Drop unused node labels as suggested by Conor Dooley
>     - Revisit min/max resolutions as suggested by Nicolas Dufresne
> 
> version 2:
>     - Fix remarks from Krzysztof Kozlowski on v1:
>      - single video-codec binding for both VDEC/VENC
>      - get rid of "-names"
>      - use of generic node name "video-codec"
> 
> version 1:
>    - Initial submission
> 
> Hugues Fruchet (5):
>    dt-bindings: media: Document STM32MP25 VDEC & VENC video codecs
>    media: hantro: add support for STM32MP25 VDEC
>    media: hantro: add support for STM32MP25 VENC
>    arm64: dts: st: add video decoder support to stm32mp255
>    arm64: dts: st: add video encoder support to stm32mp255
> 

Sakari, Mauro, do you plan to take patches 1 to 3 on your next branch ?
I will take DT pacthes in mine but I would like to be sure that 
dt-binding will be applied in a next branch (for the next v6.9 cycle);

regards
Alex


>   .../media/st,stm32mp25-video-codec.yaml       |  49 +++++
>   arch/arm64/boot/dts/st/stm32mp251.dtsi        |  12 ++
>   arch/arm64/boot/dts/st/stm32mp255.dtsi        |  17 ++
>   drivers/media/platform/verisilicon/Kconfig    |  14 +-
>   drivers/media/platform/verisilicon/Makefile   |   3 +
>   .../media/platform/verisilicon/hantro_drv.c   |   4 +
>   .../media/platform/verisilicon/hantro_hw.h    |   2 +
>   .../platform/verisilicon/stm32mp25_vpu_hw.c   | 186 ++++++++++++++++++
>   8 files changed, 284 insertions(+), 3 deletions(-)
>   create mode 100644 Documentation/devicetree/bindings/media/st,stm32mp25-video-codec.yaml
>   create mode 100644 drivers/media/platform/verisilicon/stm32mp25_vpu_hw.c
> 

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [RESEND PATCH v6 0/5] Add support for video hardware codec of STMicroelectronics STM32 SoC series
  2024-01-24 12:36 ` [RESEND PATCH v6 0/5] Add support for video hardware codec of STMicroelectronics STM32 SoC series Alexandre TORGUE
@ 2024-01-25 16:03   ` Sakari Ailus
  0 siblings, 0 replies; 9+ messages in thread
From: Sakari Ailus @ 2024-01-25 16:03 UTC (permalink / raw)
  To: Hans Verkuil, Alexandre TORGUE
  Cc: Hugues Fruchet, Ezequiel Garcia, Philipp Zabel,
	Andrzej Pietrasiewicz, Nicolas Dufresne, Benjamin Gaignard,
	Laurent Pinchart, Daniel Almeida, Benjamin Mugnier,
	Heiko Stuebner, Mauro Carvalho Chehab, linux-media,
	Maxime Coquelin, linux-stm32, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, devicetree, linux-arm-kernel, linux-kernel,
	linux-rockchip, Marco Felsch, Adam Ford

Hi Alexandre,

On Wed, Jan 24, 2024 at 01:36:02PM +0100, Alexandre TORGUE wrote:
> > Hugues Fruchet (5):
> >    dt-bindings: media: Document STM32MP25 VDEC & VENC video codecs
> >    media: hantro: add support for STM32MP25 VDEC
> >    media: hantro: add support for STM32MP25 VENC
> >    arm64: dts: st: add video decoder support to stm32mp255
> >    arm64: dts: st: add video encoder support to stm32mp255
> > 
> 
> Sakari, Mauro, do you plan to take patches 1 to 3 on your next branch ?
> I will take DT pacthes in mine but I would like to be sure that dt-binding
> will be applied in a next branch (for the next v6.9 cycle);

This being a codec driver, I presume Hans would pick these.

-- 
Regards,

Sakari Ailus

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [RESEND PATCH v6 0/5] Add support for video hardware codec of STMicroelectronics STM32 SoC series
  2024-01-10 10:46 [RESEND PATCH v6 0/5] Add support for video hardware codec of STMicroelectronics STM32 SoC series Hugues Fruchet
                   ` (5 preceding siblings ...)
  2024-01-24 12:36 ` [RESEND PATCH v6 0/5] Add support for video hardware codec of STMicroelectronics STM32 SoC series Alexandre TORGUE
@ 2024-02-29  9:34 ` Alexandre TORGUE
  6 siblings, 0 replies; 9+ messages in thread
From: Alexandre TORGUE @ 2024-02-29  9:34 UTC (permalink / raw)
  To: Hugues Fruchet, Ezequiel Garcia, Philipp Zabel,
	Andrzej Pietrasiewicz, Nicolas Dufresne, Sakari Ailus,
	Benjamin Gaignard, Laurent Pinchart, Daniel Almeida,
	Benjamin Mugnier, Heiko Stuebner, Mauro Carvalho Chehab,
	Hans Verkuil, linux-media, Maxime Coquelin, linux-stm32,
	Rob Herring, Krzysztof Kozlowski, Conor Dooley, devicetree,
	linux-arm-kernel, linux-kernel, linux-rockchip
  Cc: Marco Felsch, Adam Ford

Hi

On 1/10/24 11:46, Hugues Fruchet wrote:
> This patchset introduces support for VDEC video hardware decoder
> and VENC video hardware encoder of STMicroelectronics STM32MP25
> SoC series.
> 
> This initial support implements H264 decoding, VP8 decoding and
> JPEG encoding.
> 
> This has been tested on STM32MP257F-EV1 evaluation board.
> 
> ===========
> = history =
> ===========
> version 6:
>     - Use a single file for VDEC and VENC variants as suggested by Alex Bee
>     - Fix some typos raised by Sebastian Fricke
>     - Add Krzysztof Kozlowski Reviewed-by
> 
> version 5:
>     - Precise that video decoding as been successfully tested up to full HD
>     - Add Nicolas Dufresne Reviewed-by
> 
> version 4:
>     - Fix comments from Nicolas about dropping encoder raw steps
> 
> version 3:
>     - Fix remarks from Krzysztof Kozlowski:
>      - drop "items", we keep simple enum in such case
>      - drop second example - it is the same as the first
>     - Drop unused node labels as suggested by Conor Dooley
>     - Revisit min/max resolutions as suggested by Nicolas Dufresne
> 
> version 2:
>     - Fix remarks from Krzysztof Kozlowski on v1:
>      - single video-codec binding for both VDEC/VENC
>      - get rid of "-names"
>      - use of generic node name "video-codec"
> 
> version 1:
>    - Initial submission
> 
> Hugues Fruchet (5):
>    dt-bindings: media: Document STM32MP25 VDEC & VENC video codecs
>    media: hantro: add support for STM32MP25 VDEC
>    media: hantro: add support for STM32MP25 VENC
>    arm64: dts: st: add video decoder support to stm32mp255
>    arm64: dts: st: add video encoder support to stm32mp255
> 

DT patches ([4]&[5]) applied on stm32-next. I assume that dt-bindings 
patch will go through the media tree.

Thanks
Alex


>   .../media/st,stm32mp25-video-codec.yaml       |  49 +++++
>   arch/arm64/boot/dts/st/stm32mp251.dtsi        |  12 ++
>   arch/arm64/boot/dts/st/stm32mp255.dtsi        |  17 ++
>   drivers/media/platform/verisilicon/Kconfig    |  14 +-
>   drivers/media/platform/verisilicon/Makefile   |   3 +
>   .../media/platform/verisilicon/hantro_drv.c   |   4 +
>   .../media/platform/verisilicon/hantro_hw.h    |   2 +
>   .../platform/verisilicon/stm32mp25_vpu_hw.c   | 186 ++++++++++++++++++
>   8 files changed, 284 insertions(+), 3 deletions(-)
>   create mode 100644 Documentation/devicetree/bindings/media/st,stm32mp25-video-codec.yaml
>   create mode 100644 drivers/media/platform/verisilicon/stm32mp25_vpu_hw.c
> 

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2024-02-29  9:36 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-01-10 10:46 [RESEND PATCH v6 0/5] Add support for video hardware codec of STMicroelectronics STM32 SoC series Hugues Fruchet
2024-01-10 10:46 ` [RESEND PATCH v6 1/5] dt-bindings: media: Document STM32MP25 VDEC & VENC video codecs Hugues Fruchet
2024-01-10 10:46 ` [RESEND PATCH v6 2/5] media: hantro: add support for STM32MP25 VDEC Hugues Fruchet
2024-01-10 10:46 ` [RESEND PATCH v6 3/5] media: hantro: add support for STM32MP25 VENC Hugues Fruchet
2024-01-10 10:46 ` [RESEND PATCH v6 4/5] arm64: dts: st: add video decoder support to stm32mp255 Hugues Fruchet
2024-01-10 10:46 ` [RESEND PATCH v6 5/5] arm64: dts: st: add video encoder " Hugues Fruchet
2024-01-24 12:36 ` [RESEND PATCH v6 0/5] Add support for video hardware codec of STMicroelectronics STM32 SoC series Alexandre TORGUE
2024-01-25 16:03   ` Sakari Ailus
2024-02-29  9:34 ` Alexandre TORGUE

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).