[PATCH v4 0/4] Add Synopsys DesignWare HDMI RX Controller

Shreeya Patel shreeya.patel at collabora.com
Thu Aug 29 03:03:40 PDT 2024


 ---- On Thu, 29 Aug 2024 03:43:40 +0530  Tim Surber  wrote --- 
 > Hi Shreeya,
 > 
 > another hint:
 > 
 > Changing the EDID like you described fixed the 4k60fps BGR3 input.
 > 
 > But still for NV16/NV24 (I can't output NV12 for some reason) there is 
 > the error which Nicolas described.
 > 
 > The output from v4l2-ctl for NV16/NV24 is:
 > 
 > Plane 0           :
 >         Bytes per Line : 3840
 >         Size Image     : 8294400
 > 
 > According to Nicolas there should be an additional plane/more memory 
 > reserved.
 > 

Yes, it could be possible that the imagesize is incorrect as we made some
modifications related to it in v4. I'll increase this as required by the NV12/24
and see if that fixes the issue.


Thanks,
Shreeya Patel

 > This leads to errors when trying to read the device using for example 
 > gstreamer:
 > 
 >   gst_memory_resize: assertion 'size + mem->offset + offset <= 
 > mem->maxsize' failed
 > 
 > 
 > This seems to always happen using the  NV16/NV24 formats regardless of 
 > resolution/fps.
 > 
 > 
 > Best regards,
 > 
 > Tim
 > 
 > On 14.08.24 12:22, Shreeya Patel wrote:
 > >   ---- On Sun, 04 Aug 2024 05:27:08 +0530  Tim Surber  wrote ---
 > >   > Hi Shreeya,
 > >   >
 > >
 > > Hi Tim,
 > >
 > >
 > >   > I tested your patch and noticed problems when using 3840x2160 resolution
 > >   > at  60fps.
 > >   >
 > >   > For my testing I connected an HDMI source and set it to 4k60fps. I
 > >   > verified that this source and the cables work on a screen at this
 > >   > resolution.
 > >   >
 > >   > Using
 > >   > 'v4l2-ctl --verbose -d /dev/video1
 > >   > --set-fmt-video=width=3840,height=2160,pixelformat='NV12'
 > >   > --stream-mmap=4 --stream-skip=3 --stream-count=100 --stream-poll'
 > >   > I get the video format output, but not the periodic output which shows
 > >   > the fps.
 > >   >
 > >   > Using
 > >   > 'GST_DEBUG=4 gst-launch-1.0 -v v4l2src device=/dev/video1 !
 > >   > fpsdisplaysink text-overlay=false video-sink="fakevideosink"'
 > >   > I get the following error message:
 > >   >
 > >   > (gst-launch-1.0:3231): GStreamer-CRITICAL **: 01:34:39.137:
 > >   > gst_memory_resize: assertion 'size + mem->offset + offset <=
 > >   > mem->maxsize' failed
 > >   > 0:00:03.489382529  3231 0xffffa0000b90 WARN  v4l2bufferpool
 > >   > gstv4l2bufferpool.c:2209:gst_v4l2_buffer_pool_process:
 > >   > Dropping truncated buffer, this is likely a driver bug.
 > >   > 0:00:03.489421906  3231 0xffffa0000b90 WARN  bufferpool
 > >   > gstbufferpool.c:1252:default_reset_buffer: Buffer
 > >   > 0xffff98008e80 without the memory tag has maxsize (8294400) that is
 > >   > smaller than the configured buffer pool size (12441600). The buffer will
 > >   > be not be reused. This is most likely a bug in this GstBufferPool subclass
 > >   >
 > >   >
 > >   > Everything works with 4k30fps or 1080p 60fps. The hardware should
 > >   > support 4k60fps.
 > >   >
 > >
 > >
 > > Sorry for the delayed response, I've been trying to reproduce this on my side
 > > and to also fix it.
 > >
 > > It seems you are right, 4K at 60 fps doesn't work with the latest version of HDMIRX.
 > > We found out that it could be because of the current EDID which shows some failures.
 > >
 > > Though I wasn't able to test the following on my side since my device doesn't support
 > > 4K, one of my colleague tried to replace the EDID and 4K at 60 fps worked fine after that.
 > >
 > > If you'd like to try it yourself then following is the command to get the new EDID
 > >
 > > v4l2-ctl --show-edid type=hdmi-4k-600mhz
 > >
 > > You will have to replace the EDID in the driver with the EDID you get the from the above
 > > command in HEX format.
 > >
 > > Thanks for reporting this, I will soon send v5 with this change included in it.
 > >
 > >
 > > Thanks,
 > > Shreeya Patel
 > >
 > >
 > >   > Best regards,
 > >   > Tim
 > >   >
 > >   > On 19.07.24 14:40, Shreeya Patel wrote:
 > >   > > This series implements support for the Synopsys DesignWare
 > >   > > HDMI RX Controller, being compliant with standard HDMI 1.4b
 > >   > > and HDMI 2.0.
 > >   > >
 > >   > > Features that are currently supported by the HDMI RX driver
 > >   > > have been tested on rock5b board using a HDMI to micro-HDMI cable.
 > >   > > It is recommended to use a good quality cable as there were
 > >   > > multiple issues seen during testing the driver.
 > >   > >
 > >   > > Please note the below information :-
 > >   > > * While testing the driver on rock5b we noticed that the binary BL31
 > >   > > from Rockchip contains some unknown code to get the HDMI-RX PHY
 > >   > > access working without any errors.
 > >   > > With TF-A BL31, the HDMI-RX PHY also works fine but there were no
 > >   > > interrupts seen for rk_hdmirx-hdmi leading to some errors when
 > >   > > loading the driver [0]. It doesn't affect the functionality of the
 > >   > > driver though.
 > >   > > * We have tested the working of OBS studio with HDMIRX driver and
 > >   > > there were no issues seen.
 > >   > > * We also tested and verified the support for interlaced video.
 > >   > >
 > >   > > [0] https://gitlab.collabora.com/hardware-enablement/rockchip-3588/trusted-firmware-a/-/issues/1
 > >   > >
 > >   > > To test the HDMI RX Controller driver, following example commands can be used :-
 > >   > >
 > >   > > root at debian-rockchip-rock5b-rk3588:~# v4l2-ctl --verbose -d /dev/video0 \
 > >   > > --set-fmt-video=width=1920,height=1080,pixelformat='BGR3' --stream-mmap=4 \
 > >   > > --stream-skip=3 --stream-count=100 --stream-to=/home/hdmiin4k.raw --stream-poll
 > >   > >
 > >   > > root at debian-rockchip-rock5b-rk3588:~# ffmpeg -f rawvideo -vcodec rawvideo \
 > >   > > -s 1920x1080 -r 60 -pix_fmt bgr24 -i /home/hdmiin4k.raw output.mkv
 > >   > >
 > >   > > CEC compliance test results :-
 > >   > >
 > >   > > * https://gitlab.collabora.com/-/snippets/381
 > >   > > * https://gitlab.collabora.com/-/snippets/380
 > >   > >
 > >   > > Following is the v4l2-compliance test result :-
 > >   > >
 > >   > > root at debian-rockchip-rock5b-rk3588:~# v4l2-compliance -d /dev/video0
 > >   > > v4l2-compliance 1.27.0-5220, 64 bits, 64-bit time_t
 > >   > > v4l2-compliance SHA: 8387e3673837 2024-07-01 11:09:32
 > >   > >
 > >   > > Compliance test for snps_hdmirx device /dev/video0:
 > >   > >
 > >   > > Driver Info:
 > >   > >     Driver name      : snps_hdmirx
 > >   > >     Card type        : snps_hdmirx
 > >   > >     Bus info         : platform:fdee0000.hdmi-receiver
 > >   > >     Driver version   : 6.10.0
 > >   > >     Capabilities     : 0x84201000
 > >   > >         Video Capture Multiplanar
 > >   > >         Streaming
 > >   > >         Extended Pix Format
 > >   > >         Device Capabilities
 > >   > >     Device Caps      : 0x04201000
 > >   > >         Video Capture Multiplanar
 > >   > >         Streaming
 > >   > >         Extended Pix Format
 > >   > >
 > >   > > 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
 > >   > >
 > >   > > 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
 > >   > >     test VIDIOC_G/S_AUDIO: OK (Not Supported)
 > >   > >     Inputs: 1 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
 > >   > >     test VIDIOC_DV_TIMINGS_CAP: OK
 > >   > >     test VIDIOC_G/S_EDID: OK
 > >   > >
 > >   > > Control ioctls (Input 0):
 > >   > >     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: 3 Private Controls: 0
 > >   > >
 > >   > > Format ioctls (Input 0):
 > >   > >     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 (Not Supported)
 > >   > >     test Composing: OK (Not Supported)
 > >   > >     test Scaling: OK (Not Supported)
 > >   > >
 > >   > > Codec ioctls (Input 0):
 > >   > >     test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
 > >   > >     test VIDIOC_G_ENC_INDEX: OK (Not Supported)
 > >   > >     test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
 > >   > >
 > >   > > Buffer ioctls (Input 0):
 > >   > >     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)
 > >   > >
 > >   > > Total for snps_hdmirx device /dev/video0: 47, Succeeded: 47, Failed: 0, Warnings: 0
 > >   > >
 > >   > > Changes in v4 :-
 > >   > >    - Remove DTS changes included in the device tree patch
 > >   > >    - Remove the hdmi rx pin info as it's already present
 > >   > >      in the rk3588-base-pinctrl.dtsi
 > >   > >    - Create a separate config option for selecting the EDID
 > >   > >      and enable it by default
 > >   > >    - Improve the comment related to DV timings and move it
 > >   > >      to the side of hdmirx_get_detected_timings
 > >   > >    - Add 100ms delay before pulling the HPD high
 > >   > >    - Do not return the detected timings from VIDIOC_G_DV_TIMINGS
 > >   > >    - Drop the bus info from hdmirx_querycap
 > >   > >    - If *num_planes != 0 then return 0 in hdmirx_queue_setup
 > >   > >    - Set queue->min_queued_buffers to 1
 > >   > >    - Drop q->allow_cache_hints = 0; as it's always 0 by default
 > >   > >    - Add a comment for q->dma_attrs = DMA_ATTR_FORCE_CONTIGUOUS;
 > >   > >    - Drop .read = vb2_fop_read as it's not supported by driver
 > >   > >    - Remove redundant edid_init_data_600M
 > >   > >    - Make HPD low when driver is loaded
 > >   > >    - Add support for reading AVI Infoframe
 > >   > >    - Remove msg_len checks from hdmirx_cec_transmit
 > >   > >    - Add info about the CEC compliance test in the cover letter
 > >   > >    - Add arbitration lost status
 > >   > >    - Validate the physical address inside the EDID
 > >   > >
 > >   > > Changes in v3 :-
 > >   > >    - Use v4l2-common helpers in the HDMIRX driver
 > >   > >    - Rename cma node and phandle names
 > >   > >    - Elaborate the comment to explain 160MiB calculation
 > >   > >    - Move &hdmi_receiver_cma to the rock5b dts file
 > >   > >    - Add information about interlaced video testing in the
 > >   > >      cover-letter
 > >   > >
 > >   > > Changes in v2 :-
 > >   > >    - Fix checkpatch --strict warnings
 > >   > >    - Move the dt-binding include file changes in a separate patch
 > >   > >    - Add a description for the hardware in the dt-bindings file
 > >   > >    - Rename resets, vo1 grf and HPD properties
 > >   > >    - Add a proper description for grf and vo1-grf phandles in the
 > >   > >      bindings
 > >   > >    - Rename the HDMI RX node name to hdmi-receiver
 > >   > >    - Include gpio header file in binding example to fix the
 > >   > >      dt_binding_check failure
 > >   > >    - Move hdmirx_cma node to the rk3588.dtsi file
 > >   > >    - Add an entry to MAINTAINERS file for the HDMIRX driver
 > >   > >
 > >   > > Shreeya Patel (4):
 > >   > >    MAINTAINERS: Add entry for Synopsys DesignWare HDMI RX Driver
 > >   > >    dt-bindings: media: Document bindings for HDMI RX Controller
 > >   > >    arm64: dts: rockchip: Add device tree support for HDMI RX Controller
 > >   > >    media: platform: synopsys: Add support for hdmi input driver
 > >   > >
 > >   > >   .../bindings/media/snps,dw-hdmi-rx.yaml       |  132 +
 > >   > >   MAINTAINERS                                   |    8 +
 > >   > >   .../dts/rockchip/rk3588-base-pinctrl.dtsi     |   14 +
 > >   > >   .../arm64/boot/dts/rockchip/rk3588-extra.dtsi |   56 +
 > >   > >   drivers/media/platform/Kconfig                |    1 +
 > >   > >   drivers/media/platform/Makefile               |    1 +
 > >   > >   drivers/media/platform/synopsys/Kconfig       |    3 +
 > >   > >   drivers/media/platform/synopsys/Makefile      |    2 +
 > >   > >   .../media/platform/synopsys/hdmirx/Kconfig    |   27 +
 > >   > >   .../media/platform/synopsys/hdmirx/Makefile   |    4 +
 > >   > >   .../platform/synopsys/hdmirx/snps_hdmirx.c    | 2763 +++++++++++++++++
 > >   > >   .../platform/synopsys/hdmirx/snps_hdmirx.h    |  394 +++
 > >   > >   .../synopsys/hdmirx/snps_hdmirx_cec.c         |  285 ++
 > >   > >   .../synopsys/hdmirx/snps_hdmirx_cec.h         |   44 +
 > >   > >   14 files changed, 3734 insertions(+)
 > >   > >   create mode 100644 Documentation/devicetree/bindings/media/snps,dw-hdmi-rx.yaml
 > >   > >   create mode 100644 drivers/media/platform/synopsys/Kconfig
 > >   > >   create mode 100644 drivers/media/platform/synopsys/Makefile
 > >   > >   create mode 100644 drivers/media/platform/synopsys/hdmirx/Kconfig
 > >   > >   create mode 100644 drivers/media/platform/synopsys/hdmirx/Makefile
 > >   > >   create mode 100644 drivers/media/platform/synopsys/hdmirx/snps_hdmirx.c
 > >   > >   create mode 100644 drivers/media/platform/synopsys/hdmirx/snps_hdmirx.h
 > >   > >   create mode 100644 drivers/media/platform/synopsys/hdmirx/snps_hdmirx_cec.c
 > >   > >   create mode 100644 drivers/media/platform/synopsys/hdmirx/snps_hdmirx_cec.h
 > >   > >
 > >   >
 > 



More information about the Linux-rockchip mailing list