Hi Nas,
On 25/04/2022 12:16, Nas Chung wrote:
> The wave5 codec is a stateful encoder/decoder.
> It is found on the J721S2 SoC, JH7100 SoC, ssd202d SoC. Etc..
> But current test report is based on J721S2 SoC.
>
> The driver currently supports V4L2_PIX_FMT_HEVC, V4L2_PIX_FMT_H264.
>
> This driver has so far been tested on J721S2 EVM board and pre-silicon FPGA.
>
> Testing on J721S2 EVM board shows it working fine both decoder and encoder.
> The driver is successfully working with gstreamer v4l2 good-plugin without any modification.
>
> Testing on FPGA also shows it working fine, though the FPGA uses polled interrupts and copied buffers between the host and it's on board RAM.
>
> The wave5 driver will be updated to support various EXT_CTRL encoder interface.
Please note that for some unknown reason neither v6 nor v7 ever reached the
linux-media mailinglist. Can you try to repost, this time just to the mailinglist
and with a CC to me?
I have seen this problem before but it was never clear why linux-media would
reject it. If you have an alternative email address you can email from, then
you can try that as well.
>
> v4l2-compliance tests from J721S2:
>
> # v4l2-compliance -d0
> v4l2-compliance SHA: not available, 64 bits
You must compile v4l2-compliance from the v4l-utils git repo. You can tell because
the SHA will be shown. That way I can be certain you tested with the latest
v4l2-compliance.
>
> Compliance test for vpu-dec device /dev/video0:
>
> Driver Info:
> Driver name : vpu-dec
> Card type : vpu-dec
> Bus info : platform:vpu-dec
> Driver version : 5.10.100
5.10 is really quite old, is it possible to test with a newer kernel?
Regards,
Hans
> 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
>
> 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
> test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK
> test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
> Standard Controls: 2 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 (Not Supported)
> test Composing: OK
> test Scaling: OK
>
> 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 VIDIOC_EXPBUF: OK
> test Requests: OK (Not Supported)
>
> Total for vpu-dec device /dev/video0: 44, Succeeded: 44, Failed: 0, Warnings: 0
>
> # v4l2-compliance -d1
> v4l2-compliance SHA: not available, 64 bits
>
> Compliance test for vpu-enc device /dev/video1:
>
> Driver Info:
> Driver name : vpu-enc
> Card type : vpu-enc
> Bus info : platform:vpu-enc
> Driver version : 5.10.100
> 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
>
> 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
> test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK
> test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
> Standard Controls: 15 Private Controls: 0
>
> Format ioctls:
> test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK
> warn: ../../../v4l-utils-1.18.1/utils/v4l2-compliance/v4l2-test-formats.cpp(1320): S_PARM is supported for buftype 2, but not for ENUM_FRAMEINTERVALS
> warn: ../../../v4l-utils-1.18.1/utils/v4l2-compliance/v4l2-test-formats.cpp(1320): S_PARM is supported for buftype 10, but not for ENUM_FRAMEINTERVALS
> 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
>
> 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 VIDIOC_EXPBUF: OK
> test Requests: OK (Not Supported)
>
> Total for vpu-enc device /dev/video1: 44, Succeeded: 44, Failed: 0, Warnings: 2
>
> changes since v6:
>
> * update TODO file
> * get sram info from device tree
>
> changes since v5:
>
> * support NV12/NV21 pixelformat for encoder and decoder
> * handle adnormal exit and EOS
>
> changes since v4:
>
> * refactor functions in wave5-hw and fix bug reported by Daniel Palmer
> * rename functions and variables to better names
> * change variable types such as replacing s32 with u32 and int with bool as appropriate
>
> changes since v3:
>
> * Fixing all issues commented by Dan Carpenter
> * Change file names to have wave5- prefix
> * In wave5_vpu_probe, enable the clocks before reading registers, as commented from Daniel Palmer
> * Add more to the TODO list,
>
> changes since v2:
>
> Main fixes includes:
> * change the yaml and dirver code to support up to 4 clks (instead of one)
> * fix Kconfig format
> * remove unneeded cast,
> * change var types
> * change var names, func names
> * checkpatch fixes
>
> changes since v1:
>
> Fix chanes due to comments from Ezequiel and Dan Carpenter. Main fixes inclueds:
> * move all files to one dir 'wave5'
> * replace private error codes with standart error codes
> * fix extra spaces
> * various checkpatch fixes
> * replace private 'DPRINTK' macro with standart 'dev_err/dbg ..'
> * fix error handling
> * add more possible fixes to the TODO file
>
>
> Dafna Hirschfeld (1):
> staging: media: wave5: Add the vdi layer
>
> Nas Chung (3):
> staging: media: wave5: Add vpuapi layer
> staging: media: wave5: Add the v4l2 layer
> staging: media: wave5: Add TODO file
>
> Robert Beckett (2):
> dt-bindings: media: staging: wave5: add yaml devicetree bindings
> media: wave5: Add wave5 driver to maintainers file
>
> .../bindings/staging/media/cnm,wave.yaml | 73 +
> MAINTAINERS | 9 +
> drivers/staging/media/Kconfig | 2 +
> drivers/staging/media/Makefile | 1 +
> drivers/staging/media/wave5/Kconfig | 12 +
> drivers/staging/media/wave5/Makefile | 10 +
> drivers/staging/media/wave5/TODO | 34 +
> drivers/staging/media/wave5/wave5-hw.c | 3405 +++++++++++++++++
> drivers/staging/media/wave5/wave5-regdefine.h | 655 ++++
> drivers/staging/media/wave5/wave5-vdi.c | 260 ++
> drivers/staging/media/wave5/wave5-vdi.h | 81 +
> drivers/staging/media/wave5/wave5-vpu-dec.c | 1385 +++++++
> drivers/staging/media/wave5/wave5-vpu-enc.c | 1532 ++++++++
> drivers/staging/media/wave5/wave5-vpu.c | 381 ++
> drivers/staging/media/wave5/wave5-vpu.h | 73 +
> drivers/staging/media/wave5/wave5-vpuapi.c | 1049 +++++
> drivers/staging/media/wave5/wave5-vpuapi.h | 1144 ++++++
> drivers/staging/media/wave5/wave5-vpuconfig.h | 91 +
> drivers/staging/media/wave5/wave5-vpuerror.h | 455 +++
> drivers/staging/media/wave5/wave5.h | 82 +
> 20 files changed, 10734 insertions(+)
> create mode 100644 Documentation/devicetree/bindings/staging/media/cnm,wave.yaml
> create mode 100644 drivers/staging/media/wave5/Kconfig
> create mode 100644 drivers/staging/media/wave5/Makefile
> create mode 100644 drivers/staging/media/wave5/TODO
> create mode 100644 drivers/staging/media/wave5/wave5-hw.c
> create mode 100644 drivers/staging/media/wave5/wave5-regdefine.h
> create mode 100644 drivers/staging/media/wave5/wave5-vdi.c
> create mode 100644 drivers/staging/media/wave5/wave5-vdi.h
> create mode 100644 drivers/staging/media/wave5/wave5-vpu-dec.c
> create mode 100644 drivers/staging/media/wave5/wave5-vpu-enc.c
> create mode 100644 drivers/staging/media/wave5/wave5-vpu.c
> create mode 100644 drivers/staging/media/wave5/wave5-vpu.h
> create mode 100644 drivers/staging/media/wave5/wave5-vpuapi.c
> create mode 100644 drivers/staging/media/wave5/wave5-vpuapi.h
> create mode 100644 drivers/staging/media/wave5/wave5-vpuconfig.h
> create mode 100644 drivers/staging/media/wave5/wave5-vpuerror.h
> create mode 100644 drivers/staging/media/wave5/wave5.h
>