mbox series

[RFC,0/3] Add driver for Renesas RZ/G2L CRU module

Message ID 20211207012351.15754-1-prabhakar.mahadev-lad.rj@bp.renesas.com
Headers show
Series Add driver for Renesas RZ/G2L CRU module | expand

Message

Prabhakar Mahadev Lad Dec. 7, 2021, 1:23 a.m. UTC
Hi All,

This patch series aims to add driver support to CRU module found
on Renesas RZ/G2L SoC.

The Camera Data Receiving Unit (CRU) consists of a MIPI CSI-2
block and an Image Processing block. The Image Processing block
can receive video data received from the external Digital Parallel
Interface or MIPI CSI-2 block, and perform appropriate image
processing for each.

More details:
* https://renesas.info/wiki/File:CRU.png
* https://www.renesas.com/document/mah/
  rzg2l-group-rzg2lc-group-users-manual-hardware-0?language=en&r=1467981

Currently the driver has been tested using yavta and Gstreamer
on RZ/G2L SMARC EVK using the ov5645 sensor on CSI2 interface
only.

root@smarc-rzg2l:~# media-ctl -p
Media controller API version 5.16.0

Media device information
------------------------
driver          rzg2l_cru
model           renesas,rzg2l-cru
serial
bus info        platform:10830000.video
hw revision     0x0
driver version  5.16.0

Device topology
- entity 1: rzg2l_cru 10830000.video (5 pads, 5 links)
            type V4L2 subdev subtype Unknown flags 0
            device node name /dev/v4l-subdev0
        pad0: Sink
                [fmt:unknown/0x0]
                <- "ov5645 0-003c":0 [ENABLED,IMMUTABLE]
        pad1: Source
                [fmt:unknown/0x0]
                -> "CRU output":0 []
        pad2: Source
                [fmt:unknown/0x0]
                -> "CRU output":0 []
        pad3: Source
                [fmt:unknown/0x0]
                -> "CRU output":0 []
        pad4: Source
                [fmt:unknown/0x0]
                -> "CRU output":0 []

- entity 7: ov5645 0-003c (1 pad, 1 link)
            type V4L2 subdev subtype Sensor flags 0
            device node name /dev/v4l-subdev1
        pad0: Source
                [fmt:UYVY8_2X8/1920x1080 field:none colorspace:srgb
                 crop:(0,0)/1920x1080]
                -> "rzg2l_cru 10830000.video":0 [ENABLED,IMMUTABLE]

- entity 15: CRU output (1 pad, 4 links)
             type Node subtype V4L flags 0
             device node name /dev/video0
        pad0: Sink
                <- "rzg2l_cru 10830000.video":1 []
                <- "rzg2l_cru 10830000.video":2 []
                <- "rzg2l_cru 10830000.video":3 []
                <- "rzg2l_cru 10830000.video":4 []

root@smarc-rzg2l:~#
root@smarc-rzg2l:~# v4l2-compliance -s
v4l2-compliance 1.22.1-4864, 64 bits, 64-bit time_t
v4l2-compliance SHA: 47c8c377cf29 2021-10-23 15:12:35

Compliance test for rzg2l_cru device /dev/video0:

Driver Info:
        Driver name      : rzg2l_cru
        Card type        : RZG2L_CRU
        Bus info         : platform:10830000.video
        Driver version   : 5.16.0
        Capabilities     : 0xa5200001
                Video Capture
                Read/Write
                Streaming
                Extended Pix Format
                Device Capabilities
        Device Caps      : 0x25200001
                Video Capt[   32.432429] rzg2l-cru 10830000.video: =================  START STATUS  =================
ure
                Read/Write
                Str[   32.442279] rzg2l-cru 10830000.video: ==================  END STATUS  ==================
eaming
                Extended Pix Format
Media Driver Info:
        Driver name      : rzg2l_cru
        Model            : renesas,rzg2l-cru
        Serial           :
        Bus info         : platform:10830000.video
        Media version    : 5.16.0
        Hardware revision: 0x00000000 (0)
        Driver version   : 5.16.0
Interface Info:
        ID               : 0x03000011
        Type             : V4L Video
Entity Info:
        ID               : 0x0000000f (15)
        Name             : CRU output
        Function         : V4L2 I/O
        Pad 0x01000010   : 0: Sink
          Link 0x02000013: from remote pad 0x1000003 of entity 'rzg2l_cru 10830000.video' (Video Pixel Formatter): Data, Enabled
          Link 0x02000015: from remote pad 0x1000004 of entity 'rzg2l_cru 10830000.video' (Video Pixel Formatter): Data
          Link 0x02000017: from remote pad 0x1000005 of entity 'rzg2l_cru 10830000.video' (Video Pixel Formatter): Data
          Link 0x02000019: from remote pad 0x1000006 of entity 'rzg2l_cru 10830000.video' (Video Pixel Formatter): Data

Required ioctls:
        test MC information (see 'Media Driver Info' above): OK
        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 (Not Supported)
        test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
        test VIDIOC_G/S_EDID: OK (Not Supported)

Control ioctls (Input 0):
        test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK (Not Supported)
        test VIDIOC_QUERYCTRL: OK (Not Supported)
        test VIDIOC_G/S_CTRL: OK (Not Supported)
        test VIDIOC_G/S/TRY_EXT_CTRLS: OK (Not Supported)
        test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK (Not Supported)
        test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
        Standard Controls: 0 Private Controls: 0

Format ioctls (Input 0):
        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 (Not Supported)
        test Scaling: OK

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 VIDIOC_EXPBUF: OK
        test Requests: OK (Not Supported)

Test input 0:

Streaming ioctls:
        test read/write: OK
        test blocking wait: OK
        test MMAP (no poll): OK
        test MMAP (select): OK
        test MMAP (epoll): OK
        test USERPTR (no poll): OK (Not Supported)
        test USERPTR (select): OK (Not Supported)
        test DMABUF: Cannot test, specify --expbuf-device

Total for rzg2l_cru device /dev/video0: 53, Succeeded: 53, Failed: 0, Warnings: 0
root@smarc-rzg2l:~#

Cheers,
Prabhakar

Lad Prabhakar (3):
  media: dt-bindings: media: Document RZ/G2L CRU block
  media: platform: Add CRU driver for RZ/G2L SoC
  arm64: dts: renesas: r9a07g044: Add CRU node

 .../bindings/media/renesas,rzg2l-cru.yaml     | 227 ++++++
 arch/arm64/boot/dts/renesas/r9a07g044.dtsi    |  59 ++
 drivers/media/platform/Kconfig                |   1 +
 drivers/media/platform/Makefile               |   2 +
 drivers/media/platform/rzg2l-cru/Kconfig      |  15 +
 drivers/media/platform/rzg2l-cru/Makefile     |   4 +
 drivers/media/platform/rzg2l-cru/rzg2l-core.c | 473 ++++++++++++
 drivers/media/platform/rzg2l-cru/rzg2l-cru.h  | 244 ++++++
 drivers/media/platform/rzg2l-cru/rzg2l-csi2.c | 625 ++++++++++++++++
 drivers/media/platform/rzg2l-cru/rzg2l-dma.c  | 703 ++++++++++++++++++
 drivers/media/platform/rzg2l-cru/rzg2l-v4l2.c | 361 +++++++++
 11 files changed, 2714 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/media/renesas,rzg2l-cru.yaml
 create mode 100644 drivers/media/platform/rzg2l-cru/Kconfig
 create mode 100644 drivers/media/platform/rzg2l-cru/Makefile
 create mode 100644 drivers/media/platform/rzg2l-cru/rzg2l-core.c
 create mode 100644 drivers/media/platform/rzg2l-cru/rzg2l-cru.h
 create mode 100644 drivers/media/platform/rzg2l-cru/rzg2l-csi2.c
 create mode 100644 drivers/media/platform/rzg2l-cru/rzg2l-dma.c
 create mode 100644 drivers/media/platform/rzg2l-cru/rzg2l-v4l2.c

Comments

Philipp Zabel Dec. 7, 2021, 8:16 a.m. UTC | #1
On Tue, 2021-12-07 at 01:23 +0000, Lad Prabhakar wrote:
[...]
> +static int rzg2l_cru_probe(struct platform_device *pdev)
> +{
> +	struct rzg2l_cru_dev *cru;
> +	struct v4l2_ctrl *ctrl;
> +	int irq, ret;
> +
> +	cru = devm_kzalloc(&pdev->dev, sizeof(*cru), GFP_KERNEL);
> +	if (!cru)
> +		return -ENOMEM;
> +
> +	cru->dev = &pdev->dev;
> +	cru->info = of_device_get_match_data(&pdev->dev);
> +
> +	cru->base = devm_platform_ioremap_resource(pdev, 0);
> +	if (IS_ERR(cru->base))
> +		return PTR_ERR(cru->base);
> +
> +	irq = platform_get_irq(pdev, 1);
> +	if (irq < 0)
> +		return irq;
> +
> +	cru->vclk = clk_get(&pdev->dev, "vclk");
> +	if (IS_ERR(cru->vclk))
> +		return PTR_ERR(cru->vclk);

devm_clk_get()?
Don't mix devm and non-devm functions like this, all devm functions
should be placed first.

> +	cru->cmn_restb = devm_reset_control_get_by_index(&pdev->dev, 0);

Your binding has reset-names defined, please request reset controls by
name. Use devm_reset_control_get_explicit() instead, same below.

> +	if (IS_ERR(cru->cmn_restb)) {
> +		dev_err(&pdev->dev, "failed to get cpg cmn_restb\n");
> +		return PTR_ERR(cru->cmn_restb);

These could return -EPROBE_DEFER, I suggest to

		return dev_err_probe(&pdev->dev, PTR_ERR(cru->cmn_restb),
				     "failed to get cpg cmn_restb\n");

instead, same below.

> +	}
> +	cru->presetn = devm_reset_control_get_by_index(&pdev->dev, 1);
> +	if (IS_ERR(cru->presetn)) {
> +		dev_err(&pdev->dev, "failed to get cpg presetn\n");
> +		return PTR_ERR(cru->presetn);
> +	}
> +	cru->aresetn = devm_reset_control_get_by_index(&pdev->dev, 2);
> +	if (IS_ERR(cru->aresetn)) {
> +		dev_err(&pdev->dev, "failed to get cpg aresetn\n");
> +		return PTR_ERR(cru->aresetn);
> +	}

regards
Philipp
Lad, Prabhakar Dec. 8, 2021, 12:32 a.m. UTC | #2
Hi Philipp,

Thank you for the review.

On Tue, Dec 7, 2021 at 8:16 AM Philipp Zabel <p.zabel@pengutronix.de> wrote:
>
> On Tue, 2021-12-07 at 01:23 +0000, Lad Prabhakar wrote:
> [...]
> > +static int rzg2l_cru_probe(struct platform_device *pdev)
> > +{
> > +     struct rzg2l_cru_dev *cru;
> > +     struct v4l2_ctrl *ctrl;
> > +     int irq, ret;
> > +
> > +     cru = devm_kzalloc(&pdev->dev, sizeof(*cru), GFP_KERNEL);
> > +     if (!cru)
> > +             return -ENOMEM;
> > +
> > +     cru->dev = &pdev->dev;
> > +     cru->info = of_device_get_match_data(&pdev->dev);
> > +
> > +     cru->base = devm_platform_ioremap_resource(pdev, 0);
> > +     if (IS_ERR(cru->base))
> > +             return PTR_ERR(cru->base);
> > +
> > +     irq = platform_get_irq(pdev, 1);
> > +     if (irq < 0)
> > +             return irq;
> > +
> > +     cru->vclk = clk_get(&pdev->dev, "vclk");
> > +     if (IS_ERR(cru->vclk))
> > +             return PTR_ERR(cru->vclk);
>
> devm_clk_get()?
> Don't mix devm and non-devm functions like this, all devm functions
> should be placed first.
>
Agreed, I will use devm_clk_get().

> > +     cru->cmn_restb = devm_reset_control_get_by_index(&pdev->dev, 0);
>
> Your binding has reset-names defined, please request reset controls by
> name. Use devm_reset_control_get_explicit() instead, same below.
>
> > +     if (IS_ERR(cru->cmn_restb)) {
> > +             dev_err(&pdev->dev, "failed to get cpg cmn_restb\n");
> > +             return PTR_ERR(cru->cmn_restb);
>
> These could return -EPROBE_DEFER, I suggest to
>
>                 return dev_err_probe(&pdev->dev, PTR_ERR(cru->cmn_restb),
>                                      "failed to get cpg cmn_restb\n");
>
OK will do.
> instead, same below.
>
ditto.

Cheers,
Prabhakar

> > +     }
> > +     cru->presetn = devm_reset_control_get_by_index(&pdev->dev, 1);
> > +     if (IS_ERR(cru->presetn)) {
> > +             dev_err(&pdev->dev, "failed to get cpg presetn\n");
> > +             return PTR_ERR(cru->presetn);
> > +     }
> > +     cru->aresetn = devm_reset_control_get_by_index(&pdev->dev, 2);
> > +     if (IS_ERR(cru->aresetn)) {
> > +             dev_err(&pdev->dev, "failed to get cpg aresetn\n");
> > +             return PTR_ERR(cru->aresetn);
> > +     }
>
> regards
> Philipp
Lad, Prabhakar Dec. 20, 2021, 9:04 p.m. UTC | #3
On Tue, Dec 7, 2021 at 1:24 AM Lad Prabhakar
<prabhakar.mahadev-lad.rj@bp.renesas.com> wrote:
>
> Hi All,
>
> This patch series aims to add driver support to CRU module found
> on Renesas RZ/G2L SoC.
>
> The Camera Data Receiving Unit (CRU) consists of a MIPI CSI-2
> block and an Image Processing block. The Image Processing block
> can receive video data received from the external Digital Parallel
> Interface or MIPI CSI-2 block, and perform appropriate image
> processing for each.
>
> More details:
> * https://renesas.info/wiki/File:CRU.png
> * https://www.renesas.com/document/mah/
>   rzg2l-group-rzg2lc-group-users-manual-hardware-0?language=en&r=1467981
>
> Currently the driver has been tested using yavta and Gstreamer
> on RZ/G2L SMARC EVK using the ov5645 sensor on CSI2 interface
> only.
>
> root@smarc-rzg2l:~# media-ctl -p
> Media controller API version 5.16.0
>
> Media device information
> ------------------------
> driver          rzg2l_cru
> model           renesas,rzg2l-cru
> serial
> bus info        platform:10830000.video
> hw revision     0x0
> driver version  5.16.0
>
> Device topology
> - entity 1: rzg2l_cru 10830000.video (5 pads, 5 links)
>             type V4L2 subdev subtype Unknown flags 0
>             device node name /dev/v4l-subdev0
>         pad0: Sink
>                 [fmt:unknown/0x0]
>                 <- "ov5645 0-003c":0 [ENABLED,IMMUTABLE]
>         pad1: Source
>                 [fmt:unknown/0x0]
>                 -> "CRU output":0 []
>         pad2: Source
>                 [fmt:unknown/0x0]
>                 -> "CRU output":0 []
>         pad3: Source
>                 [fmt:unknown/0x0]
>                 -> "CRU output":0 []
>         pad4: Source
>                 [fmt:unknown/0x0]
>                 -> "CRU output":0 []
>
> - entity 7: ov5645 0-003c (1 pad, 1 link)
>             type V4L2 subdev subtype Sensor flags 0
>             device node name /dev/v4l-subdev1
>         pad0: Source
>                 [fmt:UYVY8_2X8/1920x1080 field:none colorspace:srgb
>                  crop:(0,0)/1920x1080]
>                 -> "rzg2l_cru 10830000.video":0 [ENABLED,IMMUTABLE]
>
> - entity 15: CRU output (1 pad, 4 links)
>              type Node subtype V4L flags 0
>              device node name /dev/video0
>         pad0: Sink
>                 <- "rzg2l_cru 10830000.video":1 []
>                 <- "rzg2l_cru 10830000.video":2 []
>                 <- "rzg2l_cru 10830000.video":3 []
>                 <- "rzg2l_cru 10830000.video":4 []
>
> root@smarc-rzg2l:~#
> root@smarc-rzg2l:~# v4l2-compliance -s
> v4l2-compliance 1.22.1-4864, 64 bits, 64-bit time_t
> v4l2-compliance SHA: 47c8c377cf29 2021-10-23 15:12:35
>
> Compliance test for rzg2l_cru device /dev/video0:
>
> Driver Info:
>         Driver name      : rzg2l_cru
>         Card type        : RZG2L_CRU
>         Bus info         : platform:10830000.video
>         Driver version   : 5.16.0
>         Capabilities     : 0xa5200001
>                 Video Capture
>                 Read/Write
>                 Streaming
>                 Extended Pix Format
>                 Device Capabilities
>         Device Caps      : 0x25200001
>                 Video Capt[   32.432429] rzg2l-cru 10830000.video: =================  START STATUS  =================
> ure
>                 Read/Write
>                 Str[   32.442279] rzg2l-cru 10830000.video: ==================  END STATUS  ==================
> eaming
>                 Extended Pix Format
> Media Driver Info:
>         Driver name      : rzg2l_cru
>         Model            : renesas,rzg2l-cru
>         Serial           :
>         Bus info         : platform:10830000.video
>         Media version    : 5.16.0
>         Hardware revision: 0x00000000 (0)
>         Driver version   : 5.16.0
> Interface Info:
>         ID               : 0x03000011
>         Type             : V4L Video
> Entity Info:
>         ID               : 0x0000000f (15)
>         Name             : CRU output
>         Function         : V4L2 I/O
>         Pad 0x01000010   : 0: Sink
>           Link 0x02000013: from remote pad 0x1000003 of entity 'rzg2l_cru 10830000.video' (Video Pixel Formatter): Data, Enabled
>           Link 0x02000015: from remote pad 0x1000004 of entity 'rzg2l_cru 10830000.video' (Video Pixel Formatter): Data
>           Link 0x02000017: from remote pad 0x1000005 of entity 'rzg2l_cru 10830000.video' (Video Pixel Formatter): Data
>           Link 0x02000019: from remote pad 0x1000006 of entity 'rzg2l_cru 10830000.video' (Video Pixel Formatter): Data
>
> Required ioctls:
>         test MC information (see 'Media Driver Info' above): OK
>         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 (Not Supported)
>         test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
>         test VIDIOC_G/S_EDID: OK (Not Supported)
>
> Control ioctls (Input 0):
>         test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK (Not Supported)
>         test VIDIOC_QUERYCTRL: OK (Not Supported)
>         test VIDIOC_G/S_CTRL: OK (Not Supported)
>         test VIDIOC_G/S/TRY_EXT_CTRLS: OK (Not Supported)
>         test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK (Not Supported)
>         test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
>         Standard Controls: 0 Private Controls: 0
>
> Format ioctls (Input 0):
>         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 (Not Supported)
>         test Scaling: OK
>
> 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 VIDIOC_EXPBUF: OK
>         test Requests: OK (Not Supported)
>
> Test input 0:
>
> Streaming ioctls:
>         test read/write: OK
>         test blocking wait: OK
>         test MMAP (no poll): OK
>         test MMAP (select): OK
>         test MMAP (epoll): OK
>         test USERPTR (no poll): OK (Not Supported)
>         test USERPTR (select): OK (Not Supported)
>         test DMABUF: Cannot test, specify --expbuf-device
>
> Total for rzg2l_cru device /dev/video0: 53, Succeeded: 53, Failed: 0, Warnings: 0
> root@smarc-rzg2l:~#
>
> Cheers,
> Prabhakar
>
> Lad Prabhakar (3):
>   media: dt-bindings: media: Document RZ/G2L CRU block
>   media: platform: Add CRU driver for RZ/G2L SoC
>   arm64: dts: renesas: r9a07g044: Add CRU node
>
>  .../bindings/media/renesas,rzg2l-cru.yaml     | 227 ++++++
>  arch/arm64/boot/dts/renesas/r9a07g044.dtsi    |  59 ++
>  drivers/media/platform/Kconfig                |   1 +
>  drivers/media/platform/Makefile               |   2 +
>  drivers/media/platform/rzg2l-cru/Kconfig      |  15 +
>  drivers/media/platform/rzg2l-cru/Makefile     |   4 +
>  drivers/media/platform/rzg2l-cru/rzg2l-core.c | 473 ++++++++++++
>  drivers/media/platform/rzg2l-cru/rzg2l-cru.h  | 244 ++++++
>  drivers/media/platform/rzg2l-cru/rzg2l-csi2.c | 625 ++++++++++++++++
>  drivers/media/platform/rzg2l-cru/rzg2l-dma.c  | 703 ++++++++++++++++++
>  drivers/media/platform/rzg2l-cru/rzg2l-v4l2.c | 361 +++++++++
>  11 files changed, 2714 insertions(+)
>  create mode 100644 Documentation/devicetree/bindings/media/renesas,rzg2l-cru.yaml
>  create mode 100644 drivers/media/platform/rzg2l-cru/Kconfig
>  create mode 100644 drivers/media/platform/rzg2l-cru/Makefile
>  create mode 100644 drivers/media/platform/rzg2l-cru/rzg2l-core.c
>  create mode 100644 drivers/media/platform/rzg2l-cru/rzg2l-cru.h
>  create mode 100644 drivers/media/platform/rzg2l-cru/rzg2l-csi2.c
>  create mode 100644 drivers/media/platform/rzg2l-cru/rzg2l-dma.c
>  create mode 100644 drivers/media/platform/rzg2l-cru/rzg2l-v4l2.c
>
Gentle ping.

Cheers,
Prabhakar