Message ID | 20231127165454.166373-8-benjamin.gaignard@collabora.com (mailing list archive) |
---|---|
State | Changes Requested |
Headers |
Received: from am.mirrors.kernel.org ([147.75.80.249]) by www.linuxtv.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from <linux-media+bounces-1112-patchwork=linuxtv.org@vger.kernel.org>) id 1r7etd-002Zl3-F5 for patchwork@linuxtv.org; Mon, 27 Nov 2023 16:55:45 +0000 Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by am.mirrors.kernel.org (Postfix) with ESMTPS id 69DEC1F20F12 for <patchwork@linuxtv.org>; Mon, 27 Nov 2023 16:55:43 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 09441374EA; Mon, 27 Nov 2023 16:55:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b="okc0FZ7T" X-Original-To: linux-media@vger.kernel.org Received: from madras.collabora.co.uk (madras.collabora.co.uk [IPv6:2a00:1098:0:82:1000:25:2eeb:e5ab]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E6ADD1BB; Mon, 27 Nov 2023 08:55:11 -0800 (PST) Received: from benjamin-XPS-13-9310.. (ec2-34-240-57-77.eu-west-1.compute.amazonaws.com [34.240.57.77]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: benjamin.gaignard) by madras.collabora.co.uk (Postfix) with ESMTPSA id 0396866072C1; Mon, 27 Nov 2023 16:55:09 +0000 (GMT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1701104110; bh=fG8KYI7BVcY4T+xVPe1Um4HGw++yjE8jKZBIAJBoZlg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=okc0FZ7TcnIOKXeJLnL2uTUwCwKyTO6cS1aLjFdac1E4ZKrZwt3bTF/ighydvER8N ADY4RmMXQ8JqgohutdfrYL3oh7WEZuyVPzqQ1Q81My7g/TG3K0vB50IudIAJ/mEPeH dguTHusau2bnbf3UU85pnxkZanK+mhfD1IOHHtUENOzPfedaPJ4Y8bU5WzRgc3V12L yWAiBVsKZGBIMfTw+j3EUIwco2urZjuTWOty9AbSJx7iKfO3u9HRGRe8EP6f8CKNBc LwL/pozPg1KZV+PzopLCbBaOWH3Da9+PcPNcltYbTI4zvCpBPYhze/yyx0FB7yaCjK 1PykHWF9j1vfQ== From: Benjamin Gaignard <benjamin.gaignard@collabora.com> To: hverkuil@xs4all.nl, mchehab@kernel.org, tfiga@chromium.org, m.szyprowski@samsung.com, matt.ranostay@konsulko.com Cc: linux-kernel@vger.kernel.org, linux-media@vger.kernel.org, linux-staging@lists.linux.dev, kernel@collabora.com, Benjamin Gaignard <benjamin.gaignard@collabora.com>, Laurent Pinchart <laurent.pinchart@ideasonboard.com>, Shawn Guo <shawnguo@kernel.org>, Sascha Hauer <s.hauer@pengutronix.de>, Pengutronix Kernel Team <kernel@pengutronix.de>, Fabio Estevam <festevam@gmail.com>, NXP Linux Team <linux-imx@nxp.com> Subject: [PATCH 07/55] media: imx8-isi: Stop abusing of min_buffers_needed field Date: Mon, 27 Nov 2023 17:54:06 +0100 Message-Id: <20231127165454.166373-8-benjamin.gaignard@collabora.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20231127165454.166373-1-benjamin.gaignard@collabora.com> References: <20231127165454.166373-1-benjamin.gaignard@collabora.com> Precedence: bulk X-Mailing-List: linux-media@vger.kernel.org List-Id: <linux-media.vger.kernel.org> List-Subscribe: <mailto:linux-media+subscribe@vger.kernel.org> List-Unsubscribe: <mailto:linux-media+unsubscribe@vger.kernel.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-LSpam-Score: -4.8 (----) X-LSpam-Report: No, score=-4.8 required=5.0 tests=BAYES_00=-1.9,DKIM_SIGNED=0.1,DKIM_VALID=-0.1,DKIM_VALID_AU=-0.1,HEADER_FROM_DIFFERENT_DOMAINS=0.5,MAILING_LIST_MULTI=-1,RCVD_IN_DNSWL_MED=-2.3 autolearn=ham autolearn_force=no |
Series |
Clean up queue_setup()/min_buffers_needed (ab)use
|
|
Commit Message
Benjamin Gaignard
Nov. 27, 2023, 4:54 p.m. UTC
'min_buffers_needed' is suppose to be used to indicate the number
of buffers needed by DMA engine to start streaming.
imx8-isi driver doesn't use DMA engine and just want to specify
the minimum number of buffers to allocate when calling VIDIOC_REQBUFS.
That 'min_reqbufs_allocation' field purpose so use it.
Signed-off-by: Benjamin Gaignard <benjamin.gaignard@collabora.com>
CC: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
CC: Mauro Carvalho Chehab <mchehab@kernel.org>
CC: Shawn Guo <shawnguo@kernel.org>
CC: Sascha Hauer <s.hauer@pengutronix.de>
CC: Pengutronix Kernel Team <kernel@pengutronix.de>
CC: Fabio Estevam <festevam@gmail.com>
CC: NXP Linux Team <linux-imx@nxp.com>
---
drivers/media/platform/nxp/imx8-isi/imx8-isi-video.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
Comments
Hi Benjamin, Thank you for the patch. On Mon, Nov 27, 2023 at 05:54:06PM +0100, Benjamin Gaignard wrote: > 'min_buffers_needed' is suppose to be used to indicate the number > of buffers needed by DMA engine to start streaming. > imx8-isi driver doesn't use DMA engine and just want to specify What do you mean, "doesn't use DMA engine" ? The ISI surely has DMA engines :-) > the minimum number of buffers to allocate when calling VIDIOC_REQBUFS. > That 'min_reqbufs_allocation' field purpose so use it. > > Signed-off-by: Benjamin Gaignard <benjamin.gaignard@collabora.com> > CC: Laurent Pinchart <laurent.pinchart@ideasonboard.com> > CC: Mauro Carvalho Chehab <mchehab@kernel.org> > CC: Shawn Guo <shawnguo@kernel.org> > CC: Sascha Hauer <s.hauer@pengutronix.de> > CC: Pengutronix Kernel Team <kernel@pengutronix.de> > CC: Fabio Estevam <festevam@gmail.com> > CC: NXP Linux Team <linux-imx@nxp.com> > --- > drivers/media/platform/nxp/imx8-isi/imx8-isi-video.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/media/platform/nxp/imx8-isi/imx8-isi-video.c b/drivers/media/platform/nxp/imx8-isi/imx8-isi-video.c > index 49bca2b01cc6..81673ff9084b 100644 > --- a/drivers/media/platform/nxp/imx8-isi/imx8-isi-video.c > +++ b/drivers/media/platform/nxp/imx8-isi/imx8-isi-video.c > @@ -1453,7 +1453,7 @@ int mxc_isi_video_register(struct mxc_isi_pipe *pipe, > q->mem_ops = &vb2_dma_contig_memops; > q->buf_struct_size = sizeof(struct mxc_isi_buffer); > q->timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC; > - q->min_buffers_needed = 2; > + q->min_reqbufs_allocation = 2; > q->lock = &video->lock; > q->dev = pipe->isi->dev; >
Le 27/11/2023 à 18:07, Laurent Pinchart a écrit : > Hi Benjamin, > > Thank you for the patch. > > On Mon, Nov 27, 2023 at 05:54:06PM +0100, Benjamin Gaignard wrote: >> 'min_buffers_needed' is suppose to be used to indicate the number >> of buffers needed by DMA engine to start streaming. >> imx8-isi driver doesn't use DMA engine and just want to specify > What do you mean, "doesn't use DMA engine" ? The ISI surely has DMA > engines :-) I have done assumption on drivers given if they use or dma_* functions. I have considers that all PCI drivers are using DMA engine and I don't know the design for each drivers so I hope to get this information from maintainers and fix that in v2. If imx8-isi driver needs a minimum number of buffers before start streaming I will do a v2 and use min_dma_buffers_needed instead. Regards, Benjamin > >> the minimum number of buffers to allocate when calling VIDIOC_REQBUFS. >> That 'min_reqbufs_allocation' field purpose so use it. >> >> Signed-off-by: Benjamin Gaignard <benjamin.gaignard@collabora.com> >> CC: Laurent Pinchart <laurent.pinchart@ideasonboard.com> >> CC: Mauro Carvalho Chehab <mchehab@kernel.org> >> CC: Shawn Guo <shawnguo@kernel.org> >> CC: Sascha Hauer <s.hauer@pengutronix.de> >> CC: Pengutronix Kernel Team <kernel@pengutronix.de> >> CC: Fabio Estevam <festevam@gmail.com> >> CC: NXP Linux Team <linux-imx@nxp.com> >> --- >> drivers/media/platform/nxp/imx8-isi/imx8-isi-video.c | 2 +- >> 1 file changed, 1 insertion(+), 1 deletion(-) >> >> diff --git a/drivers/media/platform/nxp/imx8-isi/imx8-isi-video.c b/drivers/media/platform/nxp/imx8-isi/imx8-isi-video.c >> index 49bca2b01cc6..81673ff9084b 100644 >> --- a/drivers/media/platform/nxp/imx8-isi/imx8-isi-video.c >> +++ b/drivers/media/platform/nxp/imx8-isi/imx8-isi-video.c >> @@ -1453,7 +1453,7 @@ int mxc_isi_video_register(struct mxc_isi_pipe *pipe, >> q->mem_ops = &vb2_dma_contig_memops; >> q->buf_struct_size = sizeof(struct mxc_isi_buffer); >> q->timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC; >> - q->min_buffers_needed = 2; >> + q->min_reqbufs_allocation = 2; >> q->lock = &video->lock; >> q->dev = pipe->isi->dev; >>
On Tue, Nov 28, 2023 at 6:31 PM Benjamin Gaignard <benjamin.gaignard@collabora.com> wrote: > > > Le 27/11/2023 à 18:07, Laurent Pinchart a écrit : > > Hi Benjamin, > > > > Thank you for the patch. > > > > On Mon, Nov 27, 2023 at 05:54:06PM +0100, Benjamin Gaignard wrote: > >> 'min_buffers_needed' is suppose to be used to indicate the number > >> of buffers needed by DMA engine to start streaming. > >> imx8-isi driver doesn't use DMA engine and just want to specify > > What do you mean, "doesn't use DMA engine" ? The ISI surely has DMA > > engines :-) > > I have done assumption on drivers given if they use or dma_* functions. I suspect the use of vb2_dma_sg_plane_desc() and vb2_dma_contig_plane_dma_addr() may be more correlated to whether there is a DMA involved or not. Usually V4L2 drivers don't really have to deal with the DMA API explicitly, because the vb2 framework handles most of the work. Best regards, Tomasz > I have considers that all PCI drivers are using DMA engine and > I don't know the design for each drivers so I hope to get this information > from maintainers and fix that in v2. > If imx8-isi driver needs a minimum number of buffers before start streaming > I will do a v2 and use min_dma_buffers_needed instead. > > Regards, > Benjamin > > > > >> the minimum number of buffers to allocate when calling VIDIOC_REQBUFS. > >> That 'min_reqbufs_allocation' field purpose so use it. > >> > >> Signed-off-by: Benjamin Gaignard <benjamin.gaignard@collabora.com> > >> CC: Laurent Pinchart <laurent.pinchart@ideasonboard.com> > >> CC: Mauro Carvalho Chehab <mchehab@kernel.org> > >> CC: Shawn Guo <shawnguo@kernel.org> > >> CC: Sascha Hauer <s.hauer@pengutronix.de> > >> CC: Pengutronix Kernel Team <kernel@pengutronix.de> > >> CC: Fabio Estevam <festevam@gmail.com> > >> CC: NXP Linux Team <linux-imx@nxp.com> > >> --- > >> drivers/media/platform/nxp/imx8-isi/imx8-isi-video.c | 2 +- > >> 1 file changed, 1 insertion(+), 1 deletion(-) > >> > >> diff --git a/drivers/media/platform/nxp/imx8-isi/imx8-isi-video.c b/drivers/media/platform/nxp/imx8-isi/imx8-isi-video.c > >> index 49bca2b01cc6..81673ff9084b 100644 > >> --- a/drivers/media/platform/nxp/imx8-isi/imx8-isi-video.c > >> +++ b/drivers/media/platform/nxp/imx8-isi/imx8-isi-video.c > >> @@ -1453,7 +1453,7 @@ int mxc_isi_video_register(struct mxc_isi_pipe *pipe, > >> q->mem_ops = &vb2_dma_contig_memops; > >> q->buf_struct_size = sizeof(struct mxc_isi_buffer); > >> q->timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC; > >> - q->min_buffers_needed = 2; > >> + q->min_reqbufs_allocation = 2; > >> q->lock = &video->lock; > >> q->dev = pipe->isi->dev; > >>
Le 28/11/2023 à 10:35, Tomasz Figa a écrit : > On Tue, Nov 28, 2023 at 6:31 PM Benjamin Gaignard > <benjamin.gaignard@collabora.com> wrote: >> >> Le 27/11/2023 à 18:07, Laurent Pinchart a écrit : >>> Hi Benjamin, >>> >>> Thank you for the patch. >>> >>> On Mon, Nov 27, 2023 at 05:54:06PM +0100, Benjamin Gaignard wrote: >>>> 'min_buffers_needed' is suppose to be used to indicate the number >>>> of buffers needed by DMA engine to start streaming. >>>> imx8-isi driver doesn't use DMA engine and just want to specify >>> What do you mean, "doesn't use DMA engine" ? The ISI surely has DMA >>> engines :-) >> I have done assumption on drivers given if they use or dma_* functions. > I suspect the use of vb2_dma_sg_plane_desc() and > vb2_dma_contig_plane_dma_addr() may be more correlated to whether > there is a DMA involved or not. Usually V4L2 drivers don't really have > to deal with the DMA API explicitly, because the vb2 framework handles > most of the work. Unfortunately isn't not true either, for example verisilicon driver use these function but doesn't need DMA engine. I haven't found yet a 100% criteria to decide if driver use or not DMA engine so I plan to fix case by case given maintainers remarks. Regards, Benjamin > > Best regards, > Tomasz > >> I have considers that all PCI drivers are using DMA engine and >> I don't know the design for each drivers so I hope to get this information >> from maintainers and fix that in v2. >> If imx8-isi driver needs a minimum number of buffers before start streaming >> I will do a v2 and use min_dma_buffers_needed instead. >> >> Regards, >> Benjamin >> >>>> the minimum number of buffers to allocate when calling VIDIOC_REQBUFS. >>>> That 'min_reqbufs_allocation' field purpose so use it. >>>> >>>> Signed-off-by: Benjamin Gaignard <benjamin.gaignard@collabora.com> >>>> CC: Laurent Pinchart <laurent.pinchart@ideasonboard.com> >>>> CC: Mauro Carvalho Chehab <mchehab@kernel.org> >>>> CC: Shawn Guo <shawnguo@kernel.org> >>>> CC: Sascha Hauer <s.hauer@pengutronix.de> >>>> CC: Pengutronix Kernel Team <kernel@pengutronix.de> >>>> CC: Fabio Estevam <festevam@gmail.com> >>>> CC: NXP Linux Team <linux-imx@nxp.com> >>>> --- >>>> drivers/media/platform/nxp/imx8-isi/imx8-isi-video.c | 2 +- >>>> 1 file changed, 1 insertion(+), 1 deletion(-) >>>> >>>> diff --git a/drivers/media/platform/nxp/imx8-isi/imx8-isi-video.c b/drivers/media/platform/nxp/imx8-isi/imx8-isi-video.c >>>> index 49bca2b01cc6..81673ff9084b 100644 >>>> --- a/drivers/media/platform/nxp/imx8-isi/imx8-isi-video.c >>>> +++ b/drivers/media/platform/nxp/imx8-isi/imx8-isi-video.c >>>> @@ -1453,7 +1453,7 @@ int mxc_isi_video_register(struct mxc_isi_pipe *pipe, >>>> q->mem_ops = &vb2_dma_contig_memops; >>>> q->buf_struct_size = sizeof(struct mxc_isi_buffer); >>>> q->timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC; >>>> - q->min_buffers_needed = 2; >>>> + q->min_reqbufs_allocation = 2; >>>> q->lock = &video->lock; >>>> q->dev = pipe->isi->dev; >>>>
On Tue, Nov 28, 2023 at 06:35:51PM +0900, Tomasz Figa wrote: > On Tue, Nov 28, 2023 at 6:31 PM Benjamin Gaignard wrote: > > Le 27/11/2023 à 18:07, Laurent Pinchart a écrit : > > > Hi Benjamin, > > > > > > Thank you for the patch. > > > > > > On Mon, Nov 27, 2023 at 05:54:06PM +0100, Benjamin Gaignard wrote: > > >> 'min_buffers_needed' is suppose to be used to indicate the number > > >> of buffers needed by DMA engine to start streaming. > > >> imx8-isi driver doesn't use DMA engine and just want to specify > > > What do you mean, "doesn't use DMA engine" ? The ISI surely has DMA > > > engines :-) > > > > I have done assumption on drivers given if they use or dma_* functions. > > I suspect the use of vb2_dma_sg_plane_desc() and > vb2_dma_contig_plane_dma_addr() may be more correlated to whether > there is a DMA involved or not. Usually V4L2 drivers don't really have > to deal with the DMA API explicitly, because the vb2 framework handles > most of the work. And this is anyway not related to DMA at all, but to the logic each driver implements when it deals with buffers. There's a lower chance a USB driver driver will have a hard requirement for more than one buffer compared to an AMBA/platform/PCI device driver, but at the end of the day, each driver needs to be analyzed individually to check what they require. Benjamin, I think you'll have some more homework to do :-) > > I have considers that all PCI drivers are using DMA engine and > > I don't know the design for each drivers so I hope to get this information > > from maintainers and fix that in v2. > > If imx8-isi driver needs a minimum number of buffers before start streaming > > I will do a v2 and use min_dma_buffers_needed instead. > > > > >> the minimum number of buffers to allocate when calling VIDIOC_REQBUFS. > > >> That 'min_reqbufs_allocation' field purpose so use it. > > >> > > >> Signed-off-by: Benjamin Gaignard <benjamin.gaignard@collabora.com> > > >> CC: Laurent Pinchart <laurent.pinchart@ideasonboard.com> > > >> CC: Mauro Carvalho Chehab <mchehab@kernel.org> > > >> CC: Shawn Guo <shawnguo@kernel.org> > > >> CC: Sascha Hauer <s.hauer@pengutronix.de> > > >> CC: Pengutronix Kernel Team <kernel@pengutronix.de> > > >> CC: Fabio Estevam <festevam@gmail.com> > > >> CC: NXP Linux Team <linux-imx@nxp.com> > > >> --- > > >> drivers/media/platform/nxp/imx8-isi/imx8-isi-video.c | 2 +- > > >> 1 file changed, 1 insertion(+), 1 deletion(-) > > >> > > >> diff --git a/drivers/media/platform/nxp/imx8-isi/imx8-isi-video.c b/drivers/media/platform/nxp/imx8-isi/imx8-isi-video.c > > >> index 49bca2b01cc6..81673ff9084b 100644 > > >> --- a/drivers/media/platform/nxp/imx8-isi/imx8-isi-video.c > > >> +++ b/drivers/media/platform/nxp/imx8-isi/imx8-isi-video.c > > >> @@ -1453,7 +1453,7 @@ int mxc_isi_video_register(struct mxc_isi_pipe *pipe, > > >> q->mem_ops = &vb2_dma_contig_memops; > > >> q->buf_struct_size = sizeof(struct mxc_isi_buffer); > > >> q->timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC; > > >> - q->min_buffers_needed = 2; > > >> + q->min_reqbufs_allocation = 2; > > >> q->lock = &video->lock; > > >> q->dev = pipe->isi->dev; > > >>
On Tue, Nov 28, 2023 at 7:26 PM Benjamin Gaignard <benjamin.gaignard@collabora.com> wrote: > > > Le 28/11/2023 à 10:35, Tomasz Figa a écrit : > > On Tue, Nov 28, 2023 at 6:31 PM Benjamin Gaignard > > <benjamin.gaignard@collabora.com> wrote: > >> > >> Le 27/11/2023 à 18:07, Laurent Pinchart a écrit : > >>> Hi Benjamin, > >>> > >>> Thank you for the patch. > >>> > >>> On Mon, Nov 27, 2023 at 05:54:06PM +0100, Benjamin Gaignard wrote: > >>>> 'min_buffers_needed' is suppose to be used to indicate the number > >>>> of buffers needed by DMA engine to start streaming. > >>>> imx8-isi driver doesn't use DMA engine and just want to specify > >>> What do you mean, "doesn't use DMA engine" ? The ISI surely has DMA > >>> engines :-) > >> I have done assumption on drivers given if they use or dma_* functions. > > I suspect the use of vb2_dma_sg_plane_desc() and > > vb2_dma_contig_plane_dma_addr() may be more correlated to whether > > there is a DMA involved or not. Usually V4L2 drivers don't really have > > to deal with the DMA API explicitly, because the vb2 framework handles > > most of the work. > > Unfortunately isn't not true either, for example verisilicon driver use > these function but doesn't need DMA engine. That sounds weird. Why would a driver that doesn't have a DMA engine need to obtain a scatterlist or the DMA address of the buffer? > I haven't found yet a 100% criteria to decide if driver use or not DMA engine > so I plan to fix case by case given maintainers remarks. Yeah, there probably wouldn't be a way that would give one a 100% certainty, although I'd still insist that the two functions I mentioned should be close to that. Of course a driver can use those functions for some queues, while other queues would be pure software queues, e.g. for some metadata - a simple grep is not enough. Is that perhaps the case for the verisilicon driver? Best regards, Tomasz > > Regards, > Benjamin > > > > > Best regards, > > Tomasz > > > >> I have considers that all PCI drivers are using DMA engine and > >> I don't know the design for each drivers so I hope to get this information > >> from maintainers and fix that in v2. > >> If imx8-isi driver needs a minimum number of buffers before start streaming > >> I will do a v2 and use min_dma_buffers_needed instead. > >> > >> Regards, > >> Benjamin > >> > >>>> the minimum number of buffers to allocate when calling VIDIOC_REQBUFS. > >>>> That 'min_reqbufs_allocation' field purpose so use it. > >>>> > >>>> Signed-off-by: Benjamin Gaignard <benjamin.gaignard@collabora.com> > >>>> CC: Laurent Pinchart <laurent.pinchart@ideasonboard.com> > >>>> CC: Mauro Carvalho Chehab <mchehab@kernel.org> > >>>> CC: Shawn Guo <shawnguo@kernel.org> > >>>> CC: Sascha Hauer <s.hauer@pengutronix.de> > >>>> CC: Pengutronix Kernel Team <kernel@pengutronix.de> > >>>> CC: Fabio Estevam <festevam@gmail.com> > >>>> CC: NXP Linux Team <linux-imx@nxp.com> > >>>> --- > >>>> drivers/media/platform/nxp/imx8-isi/imx8-isi-video.c | 2 +- > >>>> 1 file changed, 1 insertion(+), 1 deletion(-) > >>>> > >>>> diff --git a/drivers/media/platform/nxp/imx8-isi/imx8-isi-video.c b/drivers/media/platform/nxp/imx8-isi/imx8-isi-video.c > >>>> index 49bca2b01cc6..81673ff9084b 100644 > >>>> --- a/drivers/media/platform/nxp/imx8-isi/imx8-isi-video.c > >>>> +++ b/drivers/media/platform/nxp/imx8-isi/imx8-isi-video.c > >>>> @@ -1453,7 +1453,7 @@ int mxc_isi_video_register(struct mxc_isi_pipe *pipe, > >>>> q->mem_ops = &vb2_dma_contig_memops; > >>>> q->buf_struct_size = sizeof(struct mxc_isi_buffer); > >>>> q->timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC; > >>>> - q->min_buffers_needed = 2; > >>>> + q->min_reqbufs_allocation = 2; > >>>> q->lock = &video->lock; > >>>> q->dev = pipe->isi->dev; > >>>>
Le 29/11/2023 à 05:17, Tomasz Figa a écrit : > On Tue, Nov 28, 2023 at 7:26 PM Benjamin Gaignard > <benjamin.gaignard@collabora.com> wrote: >> >> Le 28/11/2023 à 10:35, Tomasz Figa a écrit : >>> On Tue, Nov 28, 2023 at 6:31 PM Benjamin Gaignard >>> <benjamin.gaignard@collabora.com> wrote: >>>> Le 27/11/2023 à 18:07, Laurent Pinchart a écrit : >>>>> Hi Benjamin, >>>>> >>>>> Thank you for the patch. >>>>> >>>>> On Mon, Nov 27, 2023 at 05:54:06PM +0100, Benjamin Gaignard wrote: >>>>>> 'min_buffers_needed' is suppose to be used to indicate the number >>>>>> of buffers needed by DMA engine to start streaming. >>>>>> imx8-isi driver doesn't use DMA engine and just want to specify >>>>> What do you mean, "doesn't use DMA engine" ? The ISI surely has DMA >>>>> engines :-) >>>> I have done assumption on drivers given if they use or dma_* functions. >>> I suspect the use of vb2_dma_sg_plane_desc() and >>> vb2_dma_contig_plane_dma_addr() may be more correlated to whether >>> there is a DMA involved or not. Usually V4L2 drivers don't really have >>> to deal with the DMA API explicitly, because the vb2 framework handles >>> most of the work. >> Unfortunately isn't not true either, for example verisilicon driver use >> these function but doesn't need DMA engine. > That sounds weird. Why would a driver that doesn't have a DMA engine > need to obtain a scatterlist or the DMA address of the buffer? Just because the hardware needs the physical address of the buffer to access it. > >> I haven't found yet a 100% criteria to decide if driver use or not DMA engine >> so I plan to fix case by case given maintainers remarks. > Yeah, there probably wouldn't be a way that would give one a 100% > certainty, although I'd still insist that the two functions I > mentioned should be close to that. Of course a driver can use those > functions for some queues, while other queues would be pure software > queues, e.g. for some metadata - a simple grep is not enough. Is that > perhaps the case for the verisilicon driver? Verisilicon hardware block doesn't have IOMMU so it needs the physical addresses of all the buffers it use (input buffer, reference frame buffers, etc...). No DMA engine involved here it is just how the hardware is working. Expect functions like dma_release_channel() or being in PCI directory, I don't have found any magical way to know if a driver needs a minimum number of buffers before start streaming. I can only read the code and do assumptions for the other cases. I hope maintainers, like Laurent or you, will answer to this question for each driver. Regards, Benjamin > > Best regards, > Tomasz > >> Regards, >> Benjamin >> >>> Best regards, >>> Tomasz >>> >>>> I have considers that all PCI drivers are using DMA engine and >>>> I don't know the design for each drivers so I hope to get this information >>>> from maintainers and fix that in v2. >>>> If imx8-isi driver needs a minimum number of buffers before start streaming >>>> I will do a v2 and use min_dma_buffers_needed instead. >>>> >>>> Regards, >>>> Benjamin >>>> >>>>>> the minimum number of buffers to allocate when calling VIDIOC_REQBUFS. >>>>>> That 'min_reqbufs_allocation' field purpose so use it. >>>>>> >>>>>> Signed-off-by: Benjamin Gaignard <benjamin.gaignard@collabora.com> >>>>>> CC: Laurent Pinchart <laurent.pinchart@ideasonboard.com> >>>>>> CC: Mauro Carvalho Chehab <mchehab@kernel.org> >>>>>> CC: Shawn Guo <shawnguo@kernel.org> >>>>>> CC: Sascha Hauer <s.hauer@pengutronix.de> >>>>>> CC: Pengutronix Kernel Team <kernel@pengutronix.de> >>>>>> CC: Fabio Estevam <festevam@gmail.com> >>>>>> CC: NXP Linux Team <linux-imx@nxp.com> >>>>>> --- >>>>>> drivers/media/platform/nxp/imx8-isi/imx8-isi-video.c | 2 +- >>>>>> 1 file changed, 1 insertion(+), 1 deletion(-) >>>>>> >>>>>> diff --git a/drivers/media/platform/nxp/imx8-isi/imx8-isi-video.c b/drivers/media/platform/nxp/imx8-isi/imx8-isi-video.c >>>>>> index 49bca2b01cc6..81673ff9084b 100644 >>>>>> --- a/drivers/media/platform/nxp/imx8-isi/imx8-isi-video.c >>>>>> +++ b/drivers/media/platform/nxp/imx8-isi/imx8-isi-video.c >>>>>> @@ -1453,7 +1453,7 @@ int mxc_isi_video_register(struct mxc_isi_pipe *pipe, >>>>>> q->mem_ops = &vb2_dma_contig_memops; >>>>>> q->buf_struct_size = sizeof(struct mxc_isi_buffer); >>>>>> q->timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC; >>>>>> - q->min_buffers_needed = 2; >>>>>> + q->min_reqbufs_allocation = 2; >>>>>> q->lock = &video->lock; >>>>>> q->dev = pipe->isi->dev; >>>>>>
On Wed, Nov 29, 2023 at 5:28 PM Benjamin Gaignard <benjamin.gaignard@collabora.com> wrote: > > > Le 29/11/2023 à 05:17, Tomasz Figa a écrit : > > On Tue, Nov 28, 2023 at 7:26 PM Benjamin Gaignard > > <benjamin.gaignard@collabora.com> wrote: > >> > >> Le 28/11/2023 à 10:35, Tomasz Figa a écrit : > >>> On Tue, Nov 28, 2023 at 6:31 PM Benjamin Gaignard > >>> <benjamin.gaignard@collabora.com> wrote: > >>>> Le 27/11/2023 à 18:07, Laurent Pinchart a écrit : > >>>>> Hi Benjamin, > >>>>> > >>>>> Thank you for the patch. > >>>>> > >>>>> On Mon, Nov 27, 2023 at 05:54:06PM +0100, Benjamin Gaignard wrote: > >>>>>> 'min_buffers_needed' is suppose to be used to indicate the number > >>>>>> of buffers needed by DMA engine to start streaming. > >>>>>> imx8-isi driver doesn't use DMA engine and just want to specify > >>>>> What do you mean, "doesn't use DMA engine" ? The ISI surely has DMA > >>>>> engines :-) > >>>> I have done assumption on drivers given if they use or dma_* functions. > >>> I suspect the use of vb2_dma_sg_plane_desc() and > >>> vb2_dma_contig_plane_dma_addr() may be more correlated to whether > >>> there is a DMA involved or not. Usually V4L2 drivers don't really have > >>> to deal with the DMA API explicitly, because the vb2 framework handles > >>> most of the work. > >> Unfortunately isn't not true either, for example verisilicon driver use > >> these function but doesn't need DMA engine. > > That sounds weird. Why would a driver that doesn't have a DMA engine > > need to obtain a scatterlist or the DMA address of the buffer? > > Just because the hardware needs the physical address of the buffer to access it. > Right, and the part of the hardware that accesses the memory is called a DMA engine. > > > >> I haven't found yet a 100% criteria to decide if driver use or not DMA engine > >> so I plan to fix case by case given maintainers remarks. > > Yeah, there probably wouldn't be a way that would give one a 100% > > certainty, although I'd still insist that the two functions I > > mentioned should be close to that. Of course a driver can use those > > functions for some queues, while other queues would be pure software > > queues, e.g. for some metadata - a simple grep is not enough. Is that > > perhaps the case for the verisilicon driver? > > Verisilicon hardware block doesn't have IOMMU so it needs the physical > addresses of all the buffers it use (input buffer, reference frame buffers, etc...). > No DMA engine involved here it is just how the hardware is working. I think we need to clarify what you mean by DMA engine. If it's basically a standalone hardware block that does the DMA for another hardware block, i.e. such as the standalone DMA engines under drivers/dma, then I'd like to ask what the relation is between using an external DMA engine and min_buffers_needed. > Expect functions like dma_release_channel() or being in PCI directory, > I don't have found any magical way to know if a driver needs a minimum number of buffers before start streaming. > I can only read the code and do assumptions for the other cases. > I hope maintainers, like Laurent or you, will answer to this question for each driver. > In theory that could work too, so hopefully we can achieve that. Some drivers may not have very active maintainers... And other maintainers who never worked with such drivers are as suited to read the code and guess the expected state as you. That said, let's make sure that everyone involved does their best, without pushing the task around. Best regards, Tomasz > Regards, > Benjamin > > > > > Best regards, > > Tomasz > > > >> Regards, > >> Benjamin > >> > >>> Best regards, > >>> Tomasz > >>> > >>>> I have considers that all PCI drivers are using DMA engine and > >>>> I don't know the design for each drivers so I hope to get this information > >>>> from maintainers and fix that in v2. > >>>> If imx8-isi driver needs a minimum number of buffers before start streaming > >>>> I will do a v2 and use min_dma_buffers_needed instead. > >>>> > >>>> Regards, > >>>> Benjamin > >>>> > >>>>>> the minimum number of buffers to allocate when calling VIDIOC_REQBUFS. > >>>>>> That 'min_reqbufs_allocation' field purpose so use it. > >>>>>> > >>>>>> Signed-off-by: Benjamin Gaignard <benjamin.gaignard@collabora.com> > >>>>>> CC: Laurent Pinchart <laurent.pinchart@ideasonboard.com> > >>>>>> CC: Mauro Carvalho Chehab <mchehab@kernel.org> > >>>>>> CC: Shawn Guo <shawnguo@kernel.org> > >>>>>> CC: Sascha Hauer <s.hauer@pengutronix.de> > >>>>>> CC: Pengutronix Kernel Team <kernel@pengutronix.de> > >>>>>> CC: Fabio Estevam <festevam@gmail.com> > >>>>>> CC: NXP Linux Team <linux-imx@nxp.com> > >>>>>> --- > >>>>>> drivers/media/platform/nxp/imx8-isi/imx8-isi-video.c | 2 +- > >>>>>> 1 file changed, 1 insertion(+), 1 deletion(-) > >>>>>> > >>>>>> diff --git a/drivers/media/platform/nxp/imx8-isi/imx8-isi-video.c b/drivers/media/platform/nxp/imx8-isi/imx8-isi-video.c > >>>>>> index 49bca2b01cc6..81673ff9084b 100644 > >>>>>> --- a/drivers/media/platform/nxp/imx8-isi/imx8-isi-video.c > >>>>>> +++ b/drivers/media/platform/nxp/imx8-isi/imx8-isi-video.c > >>>>>> @@ -1453,7 +1453,7 @@ int mxc_isi_video_register(struct mxc_isi_pipe *pipe, > >>>>>> q->mem_ops = &vb2_dma_contig_memops; > >>>>>> q->buf_struct_size = sizeof(struct mxc_isi_buffer); > >>>>>> q->timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC; > >>>>>> - q->min_buffers_needed = 2; > >>>>>> + q->min_reqbufs_allocation = 2; > >>>>>> q->lock = &video->lock; > >>>>>> q->dev = pipe->isi->dev; > >>>>>>
On Wed, Nov 29, 2023 at 05:39:25PM +0900, Tomasz Figa wrote: > On Wed, Nov 29, 2023 at 5:28 PM Benjamin Gaignard wrote: > > Le 29/11/2023 à 05:17, Tomasz Figa a écrit : > > > On Tue, Nov 28, 2023 at 7:26 PM Benjamin Gaignard wrote: > > >> Le 28/11/2023 à 10:35, Tomasz Figa a écrit : > > >>> On Tue, Nov 28, 2023 at 6:31 PM Benjamin Gaignard wrote: > > >>>> Le 27/11/2023 à 18:07, Laurent Pinchart a écrit : > > >>>>> On Mon, Nov 27, 2023 at 05:54:06PM +0100, Benjamin Gaignard wrote: > > >>>>>> 'min_buffers_needed' is suppose to be used to indicate the number > > >>>>>> of buffers needed by DMA engine to start streaming. > > >>>>>> imx8-isi driver doesn't use DMA engine and just want to specify > > >>>>> > > >>>>> What do you mean, "doesn't use DMA engine" ? The ISI surely has DMA > > >>>>> engines :-) > > >>>> > > >>>> I have done assumption on drivers given if they use or dma_* functions. > > >>> > > >>> I suspect the use of vb2_dma_sg_plane_desc() and > > >>> vb2_dma_contig_plane_dma_addr() may be more correlated to whether > > >>> there is a DMA involved or not. Usually V4L2 drivers don't really have > > >>> to deal with the DMA API explicitly, because the vb2 framework handles > > >>> most of the work. > > >> > > >> Unfortunately isn't not true either, for example verisilicon driver use > > >> these function but doesn't need DMA engine. > > > > > > That sounds weird. Why would a driver that doesn't have a DMA engine > > > need to obtain a scatterlist or the DMA address of the buffer? > > > > Just because the hardware needs the physical address of the buffer to access it. > > Right, and the part of the hardware that accesses the memory is called > a DMA engine. > > > >> I haven't found yet a 100% criteria to decide if driver use or not DMA engine > > >> so I plan to fix case by case given maintainers remarks. > > > > > > Yeah, there probably wouldn't be a way that would give one a 100% > > > certainty, although I'd still insist that the two functions I > > > mentioned should be close to that. Of course a driver can use those > > > functions for some queues, while other queues would be pure software > > > queues, e.g. for some metadata - a simple grep is not enough. Is that > > > perhaps the case for the verisilicon driver? > > > > Verisilicon hardware block doesn't have IOMMU so it needs the physical > > addresses of all the buffers it use (input buffer, reference frame buffers, etc...). > > No DMA engine involved here it is just how the hardware is working. > > I think we need to clarify what you mean by DMA engine. If it's > basically a standalone hardware block that does the DMA for another > hardware block, i.e. such as the standalone DMA engines under > drivers/dma, then I'd like to ask what the relation is between using > an external DMA engine and min_buffers_needed. Yes, there seems to have been some confusion, DMA engine != dmaengine.h. > > Expect functions like dma_release_channel() or being in PCI directory, > > I don't have found any magical way to know if a driver needs a minimum number of buffers before start streaming. > > I can only read the code and do assumptions for the other cases. > > I hope maintainers, like Laurent or you, will answer to this question for each driver. > > In theory that could work too, so hopefully we can achieve that. Some > drivers may not have very active maintainers... And other maintainers > who never worked with such drivers are as suited to read the code and > guess the expected state as you. That said, let's make sure that > everyone involved does their best, without pushing the task around. We can rely on individual drivers maintainers for review, but the initial work needs to make a reasonable effort to analyze the drivers and find the right value for min_buffers_needed and min_reqbufs_allocation. > > >>>> I have considers that all PCI drivers are using DMA engine and > > >>>> I don't know the design for each drivers so I hope to get this information > > >>>> from maintainers and fix that in v2. > > >>>> If imx8-isi driver needs a minimum number of buffers before start streaming > > >>>> I will do a v2 and use min_dma_buffers_needed instead. > > >>>> > > >>>>>> the minimum number of buffers to allocate when calling VIDIOC_REQBUFS. > > >>>>>> That 'min_reqbufs_allocation' field purpose so use it. > > >>>>>> > > >>>>>> Signed-off-by: Benjamin Gaignard <benjamin.gaignard@collabora.com> > > >>>>>> CC: Laurent Pinchart <laurent.pinchart@ideasonboard.com> > > >>>>>> CC: Mauro Carvalho Chehab <mchehab@kernel.org> > > >>>>>> CC: Shawn Guo <shawnguo@kernel.org> > > >>>>>> CC: Sascha Hauer <s.hauer@pengutronix.de> > > >>>>>> CC: Pengutronix Kernel Team <kernel@pengutronix.de> > > >>>>>> CC: Fabio Estevam <festevam@gmail.com> > > >>>>>> CC: NXP Linux Team <linux-imx@nxp.com> > > >>>>>> --- > > >>>>>> drivers/media/platform/nxp/imx8-isi/imx8-isi-video.c | 2 +- > > >>>>>> 1 file changed, 1 insertion(+), 1 deletion(-) > > >>>>>> > > >>>>>> diff --git a/drivers/media/platform/nxp/imx8-isi/imx8-isi-video.c b/drivers/media/platform/nxp/imx8-isi/imx8-isi-video.c > > >>>>>> index 49bca2b01cc6..81673ff9084b 100644 > > >>>>>> --- a/drivers/media/platform/nxp/imx8-isi/imx8-isi-video.c > > >>>>>> +++ b/drivers/media/platform/nxp/imx8-isi/imx8-isi-video.c > > >>>>>> @@ -1453,7 +1453,7 @@ int mxc_isi_video_register(struct mxc_isi_pipe *pipe, > > >>>>>> q->mem_ops = &vb2_dma_contig_memops; > > >>>>>> q->buf_struct_size = sizeof(struct mxc_isi_buffer); > > >>>>>> q->timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC; > > >>>>>> - q->min_buffers_needed = 2; > > >>>>>> + q->min_reqbufs_allocation = 2; > > >>>>>> q->lock = &video->lock; > > >>>>>> q->dev = pipe->isi->dev; > > >>>>>>
Le mardi 28 novembre 2023 à 12:31 +0200, Laurent Pinchart a écrit : > On Tue, Nov 28, 2023 at 06:35:51PM +0900, Tomasz Figa wrote: > > On Tue, Nov 28, 2023 at 6:31 PM Benjamin Gaignard wrote: > > > Le 27/11/2023 à 18:07, Laurent Pinchart a écrit : > > > > Hi Benjamin, > > > > > > > > Thank you for the patch. > > > > > > > > On Mon, Nov 27, 2023 at 05:54:06PM +0100, Benjamin Gaignard wrote: > > > > > 'min_buffers_needed' is suppose to be used to indicate the number > > > > > of buffers needed by DMA engine to start streaming. > > > > > imx8-isi driver doesn't use DMA engine and just want to specify > > > > What do you mean, "doesn't use DMA engine" ? The ISI surely has DMA > > > > engines :-) > > > > > > I have done assumption on drivers given if they use or dma_* functions. > > > > I suspect the use of vb2_dma_sg_plane_desc() and > > vb2_dma_contig_plane_dma_addr() may be more correlated to whether > > there is a DMA involved or not. Usually V4L2 drivers don't really have > > to deal with the DMA API explicitly, because the vb2 framework handles > > most of the work. > > And this is anyway not related to DMA at all, but to the logic each > driver implements when it deals with buffers. There's a lower chance a > USB driver driver will have a hard requirement for more than one buffer > compared to an AMBA/platform/PCI device driver, but at the end of the > day, each driver needs to be analyzed individually to check what they > require. Benjamin, I think you'll have some more homework to do :-) Personally, I disagree that we should blindly patch drivers and actually change the framework behaviour. A patch that simply take what we have, and make it so a human reader now understand what is going on should be acceptable. Maintainers or developer that have access to the hardware should be making this judgment now that the current behaviour is visible, modify and test it. Asking to eye review drivers and change their behaviour without any test being conducted will certainly cause regressions. I don't believe this is the right approach. Refactoring the code, making an effort to not change the behaviour during refactoring does make more sense to me. regards, Nicolas > > > > I have considers that all PCI drivers are using DMA engine and > > > I don't know the design for each drivers so I hope to get this information > > > from maintainers and fix that in v2. > > > If imx8-isi driver needs a minimum number of buffers before start streaming > > > I will do a v2 and use min_dma_buffers_needed instead. > > > > > > > > the minimum number of buffers to allocate when calling VIDIOC_REQBUFS. > > > > > That 'min_reqbufs_allocation' field purpose so use it. > > > > > > > > > > Signed-off-by: Benjamin Gaignard <benjamin.gaignard@collabora.com> > > > > > CC: Laurent Pinchart <laurent.pinchart@ideasonboard.com> > > > > > CC: Mauro Carvalho Chehab <mchehab@kernel.org> > > > > > CC: Shawn Guo <shawnguo@kernel.org> > > > > > CC: Sascha Hauer <s.hauer@pengutronix.de> > > > > > CC: Pengutronix Kernel Team <kernel@pengutronix.de> > > > > > CC: Fabio Estevam <festevam@gmail.com> > > > > > CC: NXP Linux Team <linux-imx@nxp.com> > > > > > --- > > > > > drivers/media/platform/nxp/imx8-isi/imx8-isi-video.c | 2 +- > > > > > 1 file changed, 1 insertion(+), 1 deletion(-) > > > > > > > > > > diff --git a/drivers/media/platform/nxp/imx8-isi/imx8-isi-video.c b/drivers/media/platform/nxp/imx8-isi/imx8-isi-video.c > > > > > index 49bca2b01cc6..81673ff9084b 100644 > > > > > --- a/drivers/media/platform/nxp/imx8-isi/imx8-isi-video.c > > > > > +++ b/drivers/media/platform/nxp/imx8-isi/imx8-isi-video.c > > > > > @@ -1453,7 +1453,7 @@ int mxc_isi_video_register(struct mxc_isi_pipe *pipe, > > > > > q->mem_ops = &vb2_dma_contig_memops; > > > > > q->buf_struct_size = sizeof(struct mxc_isi_buffer); > > > > > q->timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC; > > > > > - q->min_buffers_needed = 2; > > > > > + q->min_reqbufs_allocation = 2; > > > > > q->lock = &video->lock; > > > > > q->dev = pipe->isi->dev; > > > > > >
diff --git a/drivers/media/platform/nxp/imx8-isi/imx8-isi-video.c b/drivers/media/platform/nxp/imx8-isi/imx8-isi-video.c index 49bca2b01cc6..81673ff9084b 100644 --- a/drivers/media/platform/nxp/imx8-isi/imx8-isi-video.c +++ b/drivers/media/platform/nxp/imx8-isi/imx8-isi-video.c @@ -1453,7 +1453,7 @@ int mxc_isi_video_register(struct mxc_isi_pipe *pipe, q->mem_ops = &vb2_dma_contig_memops; q->buf_struct_size = sizeof(struct mxc_isi_buffer); q->timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC; - q->min_buffers_needed = 2; + q->min_reqbufs_allocation = 2; q->lock = &video->lock; q->dev = pipe->isi->dev;