Tested on i.MX95, the sanity test pass of encoder and decoder. Only a v4l2-compliance issue about the deprecated behavior EOS event, other than that. Tested-by: Ming Qian <ming.qian@xxxxxxxxxxx> >-----Original Message----- >From: Nas Chung <nas.chung@xxxxxxxxxxxxxxx> >Sent: Monday, February 10, 2025 5:07 PM >To: mchehab@xxxxxxxxxx; hverkuil@xxxxxxxxx; sebastian.fricke@xxxxxxxxxxxxx; >robh@xxxxxxxxxx; krzk+dt@xxxxxxxxxx; conor+dt@xxxxxxxxxx >Cc: linux-media@xxxxxxxxxxxxxxx; devicetree@xxxxxxxxxxxxxxx; linux- >kernel@xxxxxxxxxxxxxxx; dl-linux-imx <linux-imx@xxxxxxx>; linux-arm- >kernel@xxxxxxxxxxxxxxxxxxx; jackson.lee@xxxxxxxxxxxxxxx; >lafley.kim@xxxxxxxxxxxxxxx; Nas Chung <nas.chung@xxxxxxxxxxxxxxx> >Subject: [EXT] [PATCH 0/8] Add support for Wave6 video codec driver > >Caution: This is an external email. Please take care when clicking links or >opening attachments. When in doubt, report the message using the 'Report >this email' button > > >This patch series introduces support for the Chips&Media Wave6 video codec >IP, a completely different hardware architecture compared to Wave5. > >The wave6 driver is a M2M stateful encoder/decoder driver. >It supports various video formats, including H.264 and H.265, for both >encoding and decoding. > >On NXP i.MX SoCs, the Wave6 IP functionality is split between two devices: >VPU Control Device, Manages shared resources such as firmware access and >power domains. >VPU Device, Provides encoding and decoding capabilities. >The VPU device cannot operate independently without the VPU control device. > >This driver has been tested with GStreamer on: >- NXP i.MX95 board >- pre-silicon FPGA environment > >Test results for decoder fluster: >- JVT-AVC_V1, Ran 77/135 tests successfully in 35.929 secs >- JVT-FR-EXT, Ran 25/69 tests successfully in 17.717 secs >- JCT-VC-HEVC_V1, Ran 132/147 tests successfully in 81.568 secs >- All failures are due to unsupported hardware features: >-- 10bit, Resolutions higher than 4K, FMO, MBAFF >-- Extended profile, Field encoding and High422 sreams. > >Test results for v4l2-compliance: >v4l2-compliance 1.29.0-5326, 64 bits, 64-bit time_t v4l2-compliance SHA: >77f5df419204 2025-02-07 08:59:59 > >Compliance test for wave6-dec device /dev/video0: > >Driver Info: > Driver name : wave6-dec > Card type : wave6-dec > Bus info : platform:wave6-dec > Driver version : 6.9.2 > Capabilities : 0x84204000 > Video Memory-to-Memory Multiplanar > Streaming > Extended Pix Format > Device Capabilities > Device Caps : 0x04204000 > Video Memory-to-Memory Multiplanar > Streaming > Extended Pix Format > Detected Stateful Decoder > >Required ioctls: > test VIDIOC_QUERYCAP: OK > test invalid ioctls: OK > >Allow for multiple opens: > test second /dev/video0 open: OK > test VIDIOC_QUERYCAP: OK > test VIDIOC_G/S_PRIORITY: OK > test for unlimited opens: OK > >Debug ioctls: > test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported) > test VIDIOC_LOG_STATUS: OK (Not Supported) > >Input ioctls: > test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported) > test VIDIOC_G/S_FREQUENCY: OK (Not Supported) > test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported) > test VIDIOC_ENUMAUDIO: OK (Not Supported) > test VIDIOC_G/S/ENUMINPUT: OK (Not Supported) > test VIDIOC_G/S_AUDIO: OK (Not Supported) > Inputs: 0 Audio Inputs: 0 Tuners: 0 > >Output ioctls: > test VIDIOC_G/S_MODULATOR: OK (Not Supported) > test VIDIOC_G/S_FREQUENCY: OK (Not Supported) > test VIDIOC_ENUMAUDOUT: OK (Not Supported) > test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported) > test VIDIOC_G/S_AUDOUT: OK (Not Supported) > Outputs: 0 Audio Outputs: 0 Modulators: 0 > >Input/Output configuration ioctls: > test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported) > test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported) > test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported) > test VIDIOC_G/S_EDID: OK (Not Supported) > >Control ioctls: > test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK > test VIDIOC_QUERYCTRL: OK > test VIDIOC_G/S_CTRL: OK > test VIDIOC_G/S/TRY_EXT_CTRLS: OK > fail: ../utils/v4l2-compliance/v4l2-test- >controls.cpp(1180): !have_source_change || !have_eos > test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: FAIL > test VIDIOC_G/S_JPEGCOMP: OK (Not Supported) > Standard Controls: 7 Private Controls: 1 > >Format ioctls: > test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK > test VIDIOC_G/S_PARM: OK (Not Supported) > test VIDIOC_G_FBUF: OK (Not Supported) > test VIDIOC_G_FMT: OK > test VIDIOC_TRY_FMT: OK > test VIDIOC_S_FMT: OK > test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported) > test Cropping: OK > test Composing: OK > test Scaling: OK (Not Supported) > >Codec ioctls: > test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported) > test VIDIOC_G_ENC_INDEX: OK (Not Supported) > test VIDIOC_(TRY_)DECODER_CMD: OK > >Buffer ioctls: > test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK > test CREATE_BUFS maximum buffers: OK > test VIDIOC_REMOVE_BUFS: OK > test VIDIOC_EXPBUF: OK > test Requests: OK (Not Supported) > test blocking wait: OK > >Total for wave6-dec device /dev/video0: 48, Succeeded: 47, Failed: 1, Warnings: >0 > >v4l2-compliance 1.29.0-5326, 64 bits, 64-bit time_t v4l2-compliance SHA: >77f5df419204 2025-02-07 08:59:59 > >Compliance test for wave6-enc device /dev/video1: > >Driver Info: > Driver name : wave6-enc > Card type : wave6-enc > Bus info : platform:wave6-enc > Driver version : 6.9.2 > Capabilities : 0x84204000 > Video Memory-to-Memory Multiplanar > Streaming > Extended Pix Format > Device Capabilities > Device Caps : 0x04204000 > Video Memory-to-Memory Multiplanar > Streaming > Extended Pix Format > Detected Stateful Encoder > >Required ioctls: > test VIDIOC_QUERYCAP: OK > test invalid ioctls: OK > >Allow for multiple opens: > test second /dev/video1 open: OK > test VIDIOC_QUERYCAP: OK > test VIDIOC_G/S_PRIORITY: OK > test for unlimited opens: OK > >Debug ioctls: > test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported) > test VIDIOC_LOG_STATUS: OK (Not Supported) > >Input ioctls: > test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported) > test VIDIOC_G/S_FREQUENCY: OK (Not Supported) > test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported) > test VIDIOC_ENUMAUDIO: OK (Not Supported) > test VIDIOC_G/S/ENUMINPUT: OK (Not Supported) > test VIDIOC_G/S_AUDIO: OK (Not Supported) > Inputs: 0 Audio Inputs: 0 Tuners: 0 > >Output ioctls: > test VIDIOC_G/S_MODULATOR: OK (Not Supported) > test VIDIOC_G/S_FREQUENCY: OK (Not Supported) > test VIDIOC_ENUMAUDOUT: OK (Not Supported) > test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported) > test VIDIOC_G/S_AUDOUT: OK (Not Supported) > Outputs: 0 Audio Outputs: 0 Modulators: 0 > >Input/Output configuration ioctls: > test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported) > test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported) > test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported) > test VIDIOC_G/S_EDID: OK (Not Supported) > >Control ioctls: > test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK > test VIDIOC_QUERYCTRL: OK > test VIDIOC_G/S_CTRL: OK > test VIDIOC_G/S/TRY_EXT_CTRLS: OK > fail: ../utils/v4l2-compliance/v4l2-test-controls.cpp(1169): node- >>codec_mask & STATEFUL_ENCODER > test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: FAIL > test VIDIOC_G/S_JPEGCOMP: OK (Not Supported) > Standard Controls: 53 Private Controls: 0 > >Format ioctls: > test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK > test VIDIOC_G/S_PARM: OK > test VIDIOC_G_FBUF: OK (Not Supported) > test VIDIOC_G_FMT: OK > test VIDIOC_TRY_FMT: OK > test VIDIOC_S_FMT: OK > test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported) > test Cropping: OK > test Composing: OK (Not Supported) > test Scaling: OK (Not Supported) > >Codec ioctls: > test VIDIOC_(TRY_)ENCODER_CMD: OK > test VIDIOC_G_ENC_INDEX: OK (Not Supported) > test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported) > >Buffer ioctls: > test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK > test CREATE_BUFS maximum buffers: OK > test VIDIOC_REMOVE_BUFS: OK > test VIDIOC_EXPBUF: OK > test Requests: OK (Not Supported) > test blocking wait: OK > >Total for wave6-enc device /dev/video1: 48, Succeeded: 47, Failed: 1, Warnings: >0 > >Nas Chung (8): > media: platform: chips-media: wave5: Rename Kconfig parameter > media: v4l2-common: Add YUV24 format info > dt-bindings: media: nxp: Add Wave6 video codec device > media: chips-media: wave6: Add Wave6 codec driver > media: chips-media: wave6: Add v4l2 m2m driver > media: chips-media: wave6: Add Wave6 vpu interface > media: chips-media: wave6: Add Wave6 control driver > media: chips-media: wave6: Improve debugging capabilities > > .../bindings/media/nxp,wave633c.yaml | 202 ++ > MAINTAINERS | 8 + > arch/arm64/configs/defconfig | 2 +- > drivers/media/platform/chips-media/Kconfig | 1 + > drivers/media/platform/chips-media/Makefile | 1 + > .../media/platform/chips-media/wave5/Kconfig | 6 +- > .../media/platform/chips-media/wave5/Makefile | 2 +- > .../media/platform/chips-media/wave6/Kconfig | 26 + > .../media/platform/chips-media/wave6/Makefile | 17 + > .../platform/chips-media/wave6/wave6-hw.c | 3113 +++++++++++++++++ > .../platform/chips-media/wave6/wave6-hw.h | 69 + > .../chips-media/wave6/wave6-regdefine.h | 675 ++++ > .../platform/chips-media/wave6/wave6-trace.h | 336 ++ > .../platform/chips-media/wave6/wave6-vdi.c | 52 + > .../platform/chips-media/wave6/wave6-vdi.h | 59 + > .../chips-media/wave6/wave6-vpu-ctrl.c | 1020 ++++++ > .../chips-media/wave6/wave6-vpu-ctrl.h | 38 + > .../chips-media/wave6/wave6-vpu-dbg.c | 230 ++ > .../chips-media/wave6/wave6-vpu-dbg.h | 22 + > .../chips-media/wave6/wave6-vpu-dec.c | 1883 ++++++++++ > .../chips-media/wave6/wave6-vpu-enc.c | 2698 ++++++++++++++ > .../chips-media/wave6/wave6-vpu-v4l2.c | 381 ++ > .../platform/chips-media/wave6/wave6-vpu.c | 487 +++ > .../platform/chips-media/wave6/wave6-vpu.h | 106 + > .../platform/chips-media/wave6/wave6-vpuapi.c | 1001 >++++++ .../platform/chips-media/wave6/wave6-vpuapi.h | 993 ++++++ > .../chips-media/wave6/wave6-vpuconfig.h | 80 + > .../chips-media/wave6/wave6-vpuerror.h | 262 ++ > drivers/media/v4l2-core/v4l2-common.c | 1 + > 29 files changed, 13766 insertions(+), 5 deletions(-) create mode 100644 >Documentation/devicetree/bindings/media/nxp,wave633c.yaml > create mode 100644 drivers/media/platform/chips-media/wave6/Kconfig > create mode 100644 drivers/media/platform/chips-media/wave6/Makefile > create mode 100644 drivers/media/platform/chips-media/wave6/wave6-hw.c > create mode 100644 drivers/media/platform/chips-media/wave6/wave6-hw.h > create mode 100644 drivers/media/platform/chips-media/wave6/wave6- >regdefine.h > create mode 100644 drivers/media/platform/chips-media/wave6/wave6- >trace.h > create mode 100644 drivers/media/platform/chips-media/wave6/wave6-vdi.c > create mode 100644 drivers/media/platform/chips-media/wave6/wave6-vdi.h > create mode 100644 drivers/media/platform/chips-media/wave6/wave6-vpu- >ctrl.c > create mode 100644 drivers/media/platform/chips-media/wave6/wave6-vpu- >ctrl.h > create mode 100644 drivers/media/platform/chips-media/wave6/wave6-vpu- >dbg.c > create mode 100644 drivers/media/platform/chips-media/wave6/wave6-vpu- >dbg.h > create mode 100644 drivers/media/platform/chips-media/wave6/wave6-vpu- >dec.c > create mode 100644 drivers/media/platform/chips-media/wave6/wave6-vpu- >enc.c > create mode 100644 drivers/media/platform/chips-media/wave6/wave6-vpu- >v4l2.c > create mode 100644 drivers/media/platform/chips-media/wave6/wave6-vpu.c > create mode 100644 drivers/media/platform/chips-media/wave6/wave6-vpu.h > create mode 100644 drivers/media/platform/chips-media/wave6/wave6- >vpuapi.c > create mode 100644 drivers/media/platform/chips-media/wave6/wave6- >vpuapi.h > create mode 100644 drivers/media/platform/chips-media/wave6/wave6- >vpuconfig.h > create mode 100644 drivers/media/platform/chips-media/wave6/wave6- >vpuerror.h > >-- >2.31.1 >