All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Ilpo Järvinen" <ilpo.jarvinen@linux.intel.com>
To: Ferry Toth <fntoth@gmail.com>, Miquel Raynal <miquel.raynal@bootlin.com>
Cc: "Jiri Slaby" <jirislaby@kernel.org>,
	neil.armstrong@linaro.org,
	"Greg Kroah-Hartman" <gregkh@linuxfoundation.org>,
	linux-serial <linux-serial@vger.kernel.org>,
	LKML <linux-kernel@vger.kernel.org>,
	"Al Cooper" <alcooperx@gmail.com>,
	"Alexander Shiyan" <shc_work@mail.ru>,
	"Alexandre Belloni" <alexandre.belloni@bootlin.com>,
	"Alexandre Torgue" <alexandre.torgue@foss.st.com>,
	"Alim Akhtar" <alim.akhtar@samsung.com>,
	"Andrew Morton" <akpm@linux-foundation.org>,
	"Aneesh Kumar K.V" <aneesh.kumar@kernel.org>,
	"AngeloGioacchino Del Regno"
	<angelogioacchino.delregno@collabora.com>,
	"Baolin Wang" <baolin.wang@linux.alibaba.com>,
	"Baruch Siach" <baruch@tkos.co.il>,
	"Bjorn Andersson" <andersson@kernel.org>,
	"Claudiu Beznea" <claudiu.beznea@tuxon.dev>,
	"David S. Miller" <davem@davemloft.net>,
	"Fabio Estevam" <festevam@gmail.com>,
	"Hammer Hsieh" <hammerh0314@gmail.com>,
	"Christian König" <christian.koenig@amd.com>,
	"Christophe Leroy" <christophe.leroy@csgroup.eu>,
	"Chunyan Zhang" <zhang.lyra@gmail.com>,
	"Jerome Brunet" <jbrunet@baylibre.com>,
	"Jonathan Hunter" <jonathanh@nvidia.com>,
	"Kevin Hilman" <khilman@baylibre.com>,
	"Konrad Dybcio" <konrad.dybcio@linaro.org>,
	"Krzysztof Kozlowski" <krzysztof.kozlowski@linaro.org>,
	"Kumaravel Thiagarajan" <kumaravel.thiagarajan@microchip.com>,
	"Laxman Dewangan" <ldewangan@nvidia.com>,
	linux-arm-kernel@lists.infradead.org,
	linux-arm-msm@vger.kernel.org,
	"Maciej W. Rozycki" <macro@orcam.me.uk>,
	"Manivannan Sadhasivam" <manivannan.sadhasivam@linaro.org>,
	"Martin Blumenstingl" <martin.blumenstingl@googlemail.com>,
	"Matthias Brugger" <matthias.bgg@gmail.com>,
	"Maxime Coquelin" <mcoquelin.stm32@gmail.com>,
	"Michael Ellerman" <mpe@ellerman.id.au>,
	"Michal Simek" <michal.simek@amd.com>,
	"Naveen N. Rao" <naveen.n.rao@linux.ibm.com>,
	"Nicolas Ferre" <nicolas.ferre@microchip.com>,
	"Nicholas Piggin" <npiggin@gmail.com>,
	"Orson Zhai" <orsonzhai@gmail.com>,
	"Pali Rohár" <pali@kernel.org>,
	"Patrice Chotard" <patrice.chotard@foss.st.com>,
	"Peter Korsgaard" <jacmet@sunsite.dk>,
	"Richard Genoud" <richard.genoud@gmail.com>,
	"Russell King" <linux@armlinux.org.uk>,
	"Sascha Hauer" <s.hauer@pengutronix.de>,
	"Shawn Guo" <shawnguo@kernel.org>,
	"Stefani Seibold" <stefani@seibold.net>,
	"Sumit Semwal" <sumit.semwal@linaro.org>,
	"Taichi Sugaya" <sugaya.taichi@socionext.com>,
	"Takao Orito" <orito.takao@socionext.com>,
	"Tharun Kumar P" <tharunkumar.pasumarthi@microchip.com>,
	"Thierry Reding" <thierry.reding@gmail.com>,
	"Timur Tabi" <timur@kernel.org>,
	"Vineet Gupta" <vgupta@kernel.org>,
	"Marek Szyprowski" <m.szyprowski@samsung.com>,
	"Phil Edworthy" <phil.edworthy@renesas.com>
Subject: Re: [PATCH 00/15] tty: serial: switch from circ_buf to kfifo
Date: Mon, 17 Jun 2024 09:23:13 +0300 (EEST)	[thread overview]
Message-ID: <4d8d8e80-cc65-02f6-799c-412a2b8eb00a@linux.intel.com> (raw)
In-Reply-To: <45d41a5d-384e-4dc9-8b43-8dd8734b822a@gmail.com>

[-- Attachment #1: Type: text/plain, Size: 7053 bytes --]

On Sun, 16 Jun 2024, Ferry Toth wrote:

> Hi
> 
> adding Phil
> 
> Op 12-06-2024 om 15:13 schreef Ilpo Järvinen:
> > On Mon, 10 Jun 2024, Ferry Toth wrote:
> > > Op 07-06-2024 om 22:32 schreef Ferry Toth:
> > > > Op 22-04-2024 om 07:51 schreef Jiri Slaby:
> > > > > On 19. 04. 24, 17:12, Neil Armstrong wrote:
> > > > > > On 05/04/2024 08:08, Jiri Slaby (SUSE) wrote:
> > > > > > > This series switches tty serial layer to use kfifo instead of
> > > > > > > circ_buf.
> > > > > > > 
> > > > > > > The reasoning can be found in the switching patch in this series:
> > > > > > > """
> > > > > > > Switch from struct circ_buf to proper kfifo. kfifo provides much
> > > > > > > better
> > > > > > > API, esp. when wrap-around of the buffer needs to be taken into
> > > > > > > account.
> > > > > > > Look at pl011_dma_tx_refill() or cpm_uart_tx_pump() changes for
> > > > > > > example.
> > > > > > > 
> > > > > > > Kfifo API can also fill in scatter-gather DMA structures, so it
> > > > > > > easier
> > > > > > > for that use case too. Look at lpuart_dma_tx() for example. Note
> > > > > > > that
> > > > > > > not all drivers can be converted to that (like atmel_serial), they
> > > > > > > handle DMA specially.
> > > > > > > 
> > > > > > > Note that usb-serial uses kfifo for TX for ages.
> > > > > > > """
> > > > > Sadly, everyone had a chance to test the series:
> > > > >     https://lore.kernel.org/all/20240319095315.27624-1-jirislaby@kernel.org/
> > > > > for more than two weeks before I sent this version for inclusion. And
> > > > > then
> > > > > it took another 5 days till this series appeared in -next. But noone
> > > > > with
> > > > > this HW apparently cared enough back then. I'd wish they (you) didn't.
> > > > > Maybe next time, people will listen more carefully:
> > > > > ===
> > > > > This is Request for Testing as I cannot test all the changes
> > > > > (obviously). So please test your HW's serial properly.
> > > > > ===
> > > > > 
> > > > > > and should've been dropped immediately when the first regressions
> > > > > > were
> > > > > > reported.
> > > > > Provided the RFT was mostly ignored (anyone who tested that here, or I
> > > > > only wasted my time?), how exactly would dropping help me finding
> > > > > potential issues in the series? In the end, noone is running -next in
> > > > > production, so glitches are sort of expected, right? And I believe I
> > > > > smashed them quickly enough (despite I was sidetracked to handle the
> > > > > n_gsm
> > > > > issue). But I might be wrong, as usual.
> > > > I arrived at this party a bit late, sorry about that. No good excuses.
> > > > 
> > > > > So no, dropping is not helping moving forward, actions taken by e.g.
> > > > > Marek
> > > > > Szyprowski <m.szyprowski@samsung.com> do, IMNSHO.
> > > > Good news is I tested on Merrifield (Intel Edison) which is slow
> > > > (500MHz)
> > > > and has a HSU that can transmit up to 3.5Mb/s. It really normally needs
> > > > DMA
> > > > and just a single interrupt at the end of transmit and receive for which
> > > > I
> > > > my own patches locally. The bounce buffer I was using on transmit broke
> > > > due
> > > > to this patch, so I dropped that. Still, with the extra interrupts
> > > > caused by
> > > > the circ buffer wrapping around it seems to work well. Too late to add
> > > > my
> > > > Tested-by.
> > > > 
> > > > One question though: in 8250_dma.c serial8250_tx_dma() you mention "/*
> > > > kfifo
> > > > can do more than one sg, we don't (quite yet) */".
> > > > 
> > > > I see the opportunity to use 2 sg entries to get all the data out in one
> > > > dma
> > > > transfer, but there doesn't seem to be much documentation or examples on
> > > > how
> > > > to do that. It seems just increasing nents to 2 would do the trick?
> > > Currently I have this working on mrfld:
> 
> diff --git a/drivers/tty/serial/8250/8250_dma.c
> b/drivers/tty/serial/8250/8250_dma.c
> 
> index 8a353e3cc3dd..d215c494ee24 100644
> 
> --- a/drivers/tty/serial/8250/8250_dma.c
> 
> +++ b/drivers/tty/serial/8250/8250_dma.c
> 
> @@ -89,7 +89,9 @@ int serial8250_tx_dma(struct uart_8250_port *p)
> 
> struct tty_port *tport = &p->port.state->port;
> 
> struct dma_async_tx_descriptor *desc;
> 
> struct uart_port *up = &p->port;
> 
> - struct scatterlist sg;
> 
> + struct scatterlist *sg;
> 
> + struct scatterlist sgl[2];
> 
> + int i;
> 
> int ret;
> 
> if (dma->tx_running) {
> 
> @@ -110,18 +112,17 @@ int serial8250_tx_dma(struct uart_8250_port *p)
> 
> serial8250_do_prepare_tx_dma(p);
> 
> - sg_init_table(&sg, 1);
> 
> - /* kfifo can do more than one sg, we don't (quite yet) */
> 
> - ret = kfifo_dma_out_prepare_mapped(&tport->xmit_fifo, &sg, 1,
> 
> + sg_init_table(sgl, ARRAY_SIZE(sgl));
> 
> +
> 
> + ret = kfifo_dma_out_prepare_mapped(&tport->xmit_fifo, sgl, ARRAY_SIZE(sgl),
> 
> UART_XMIT_SIZE, dma->tx_addr);
> 
> - /* we already checked empty fifo above, so there should be something */
> 
> - if (WARN_ON_ONCE(ret != 1))
> 
> - return 0;
> 
> + dma->tx_size = 0;
> 
> - dma->tx_size = sg_dma_len(&sg);
> 
> + for_each_sg(sgl, sg, ret, i)
> 
> + dma->tx_size += sg_dma_len(sg);
> 
> - desc = dmaengine_prep_slave_sg(dma->txchan, &sg, 1,
> 
> + desc = dmaengine_prep_slave_sg(dma->txchan, sgl, ret,
> 
> DMA_MEM_TO_DEV,
> 
> DMA_PREP_INTERRUPT | DMA_CTRL_ACK);
> 
> if (!desc) {
> 
> > > Nevertheless I got this to work. Very nice. Thanks for this series.
> > > I am seeing only 2 interrupts (x2 as each interrupt happens twice), one
> > > for
> > > dma complete. The 2nd, not sure but likely, uart tx done.
> > > In any case the whole buffer is transferred without interchar gaps.
> > > 
> > > > So, what was the reason to "don't (quite yet)"?
> > > Before considering to send out a patch for this, are there any caveats
> > > that
> > > I'm overlooking?
> > Not exactly related to that quoted comment, but you should Cc the person
> > who added RNZ1 DMA a year or two back (in 8250_dw.c) because it required
> 
> RZN1
> 
> I think you are referring to aa63d786cea2 ("serial: 8250: dw: Add support for
> DMA flow controlling devices") by
> 
> Phil Edworthy<phil.edworthy@renesas.com>?

The change was submitted by Miquel, I've added him into receipients as 
well.

> > writing Tx length into some custom register. I don't know the meaning of
> > that HW specific register so it would be good to get confirmation the HW
> I see dw8250_prepare_tx_dma() has RZN1_UART_xDMACR_BLK_SZ(dma->tx_size)
> > is okay if it gets more than 1 sg entry (at worst, a HW-specific limit
> > on nents might need to be imposed).
> > 
> And is there a way to get the maximum nents supported? I thought
> kfifo_dma_out_prepare_mapped() would return a safe number.

This is about writing a value into RZN1_UART_*DMACR which seems to be 
outside of dma subsystem's influence so I'd expect dma side does not know 
about it.

-- 
 i.

      reply	other threads:[~2024-06-17  6:23 UTC|newest]

Thread overview: 66+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-04-05  6:08 [PATCH 00/15] tty: serial: switch from circ_buf to kfifo Jiri Slaby (SUSE)
2024-04-05  6:08 ` [PATCH 01/15] kfifo: drop __kfifo_dma_out_finish_r() Jiri Slaby (SUSE)
2024-04-05  6:08 ` [PATCH 02/15] kfifo: introduce and use kfifo_skip_count() Jiri Slaby (SUSE)
2024-04-05  6:08 ` [PATCH 03/15] kfifo: add kfifo_out_linear{,_ptr}() Jiri Slaby (SUSE)
2024-04-05  6:08 ` [PATCH 04/15] kfifo: remove support for physically non-contiguous memory Jiri Slaby (SUSE)
2024-04-05  6:08 ` [PATCH 05/15] kfifo: rename l to len_to_end in setup_sgl() Jiri Slaby (SUSE)
2024-04-05  6:08 ` [PATCH 06/15] kfifo: pass offset to setup_sgl_buf() instead of a pointer Jiri Slaby (SUSE)
2024-04-05  6:08 ` [PATCH 07/15] kfifo: add kfifo_dma_out_prepare_mapped() Jiri Slaby (SUSE)
2024-04-05  6:08 ` [PATCH 08/15] kfifo: fix typos in kernel-doc Jiri Slaby (SUSE)
2024-04-05  6:08 ` [PATCH 09/15] tty: 8250_dma: use dmaengine_prep_slave_sg() Jiri Slaby (SUSE)
2024-04-05  6:08 ` [PATCH 10/15] tty: 8250_omap: " Jiri Slaby (SUSE)
2024-04-05  6:08 ` [PATCH 11/15] tty: msm_serial: " Jiri Slaby (SUSE)
2024-04-15 21:17   ` Marek Szyprowski
2024-04-16 10:23     ` Jiri Slaby
2024-04-17 10:15       ` Marek Szyprowski
2024-04-17 10:50         ` Jiri Slaby
2024-04-17 12:45           ` Marek Szyprowski
2024-04-19  7:17             ` Jiri Slaby
2024-04-19  7:43             ` Jiri Slaby
2024-04-19  7:53               ` Jiri Slaby
2024-04-19  8:00                 ` Marek Szyprowski
2024-04-19  8:09                   ` Jiri Slaby
2024-04-19  8:09                   ` [PATCH] serial: msm: check dma_map_sg() return value properly Jiri Slaby (SUSE)
2024-04-19  9:03                     ` Marek Szyprowski
2024-04-05  6:08 ` [PATCH 12/15] tty: serial: switch from circ_buf to kfifo Jiri Slaby (SUSE)
2024-04-15 12:58   ` Marek Szyprowski
2024-04-15 12:58     ` Marek Szyprowski
2024-04-15 13:28     ` Jiri Slaby
2024-04-15 13:28       ` Jiri Slaby
2024-04-15 14:17       ` Marek Szyprowski
2024-04-15 14:17         ` Marek Szyprowski
2024-04-16  5:48         ` [PATCH] serial: meson+qcom: don't advance the kfifo twice Jiri Slaby (SUSE)
2024-04-16  5:48           ` Jiri Slaby (SUSE)
2024-04-16  5:48           ` Jiri Slaby (SUSE)
2024-04-17 10:08       ` [PATCH 12/15] tty: serial: switch from circ_buf to kfifo Anders Roxell
2024-04-17 10:08         ` Anders Roxell
2024-04-17 10:20         ` Marek Szyprowski
2024-04-17 10:20           ` Marek Szyprowski
2024-04-17 11:19           ` Anders Roxell
2024-04-17 11:19             ` Anders Roxell
2024-04-22  6:45             ` Jiri Slaby
2024-04-22  6:45               ` Jiri Slaby
2024-04-22 10:05               ` Anders Roxell
2024-04-22 10:05                 ` Anders Roxell
2024-04-16  3:24   ` Pengfei Xu
2024-04-16  7:04     ` Jiri Slaby
2024-04-16  7:19     ` [PATCH] serial: drop debugging WARN_ON_ONCE() from uart_put_char() Jiri Slaby (SUSE)
2024-05-28 15:05   ` [PATCH] serial: drop debugging WARN_ON_ONCE() from uart_write() Tetsuo Handa
2024-06-03  7:10     ` Jiri Slaby
2024-04-05  6:08 ` [PATCH 13/15] tty: atmel_serial: use single DMA mapping for TX Jiri Slaby (SUSE)
2024-04-05  6:08   ` Jiri Slaby (SUSE)
2024-04-05  6:08 ` [PATCH 14/15] tty: atmel_serial: define macro for RX size Jiri Slaby (SUSE)
2024-04-05  6:08   ` Jiri Slaby (SUSE)
2024-04-05  6:08 ` [PATCH 15/15] tty: atmel_serial: use single DMA mapping for RX Jiri Slaby (SUSE)
2024-04-05  6:08   ` Jiri Slaby (SUSE)
2024-04-19 15:12 ` [PATCH 00/15] tty: serial: switch from circ_buf to kfifo Neil Armstrong
2024-04-20  5:42   ` Greg KH
2024-04-22  7:50     ` Neil Armstrong
2024-04-22  5:51   ` Jiri Slaby
2024-04-22  7:43     ` neil.armstrong
2024-06-07 20:32     ` Ferry Toth
2024-06-10 20:16       ` Ferry Toth
2024-06-11  7:36         ` Jiri Slaby
2024-06-12 13:13         ` Ilpo Järvinen
2024-06-16 20:55           ` Ferry Toth
2024-06-17  6:23             ` Ilpo Järvinen [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4d8d8e80-cc65-02f6-799c-412a2b8eb00a@linux.intel.com \
    --to=ilpo.jarvinen@linux.intel.com \
    --cc=akpm@linux-foundation.org \
    --cc=alcooperx@gmail.com \
    --cc=alexandre.belloni@bootlin.com \
    --cc=alexandre.torgue@foss.st.com \
    --cc=alim.akhtar@samsung.com \
    --cc=andersson@kernel.org \
    --cc=aneesh.kumar@kernel.org \
    --cc=angelogioacchino.delregno@collabora.com \
    --cc=baolin.wang@linux.alibaba.com \
    --cc=baruch@tkos.co.il \
    --cc=christian.koenig@amd.com \
    --cc=christophe.leroy@csgroup.eu \
    --cc=claudiu.beznea@tuxon.dev \
    --cc=davem@davemloft.net \
    --cc=festevam@gmail.com \
    --cc=fntoth@gmail.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=hammerh0314@gmail.com \
    --cc=jacmet@sunsite.dk \
    --cc=jbrunet@baylibre.com \
    --cc=jirislaby@kernel.org \
    --cc=jonathanh@nvidia.com \
    --cc=khilman@baylibre.com \
    --cc=konrad.dybcio@linaro.org \
    --cc=krzysztof.kozlowski@linaro.org \
    --cc=kumaravel.thiagarajan@microchip.com \
    --cc=ldewangan@nvidia.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-arm-msm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-serial@vger.kernel.org \
    --cc=linux@armlinux.org.uk \
    --cc=m.szyprowski@samsung.com \
    --cc=macro@orcam.me.uk \
    --cc=manivannan.sadhasivam@linaro.org \
    --cc=martin.blumenstingl@googlemail.com \
    --cc=matthias.bgg@gmail.com \
    --cc=mcoquelin.stm32@gmail.com \
    --cc=michal.simek@amd.com \
    --cc=miquel.raynal@bootlin.com \
    --cc=mpe@ellerman.id.au \
    --cc=naveen.n.rao@linux.ibm.com \
    --cc=neil.armstrong@linaro.org \
    --cc=nicolas.ferre@microchip.com \
    --cc=npiggin@gmail.com \
    --cc=orito.takao@socionext.com \
    --cc=orsonzhai@gmail.com \
    --cc=pali@kernel.org \
    --cc=patrice.chotard@foss.st.com \
    --cc=phil.edworthy@renesas.com \
    --cc=richard.genoud@gmail.com \
    --cc=s.hauer@pengutronix.de \
    --cc=shawnguo@kernel.org \
    --cc=shc_work@mail.ru \
    --cc=stefani@seibold.net \
    --cc=sugaya.taichi@socionext.com \
    --cc=sumit.semwal@linaro.org \
    --cc=tharunkumar.pasumarthi@microchip.com \
    --cc=thierry.reding@gmail.com \
    --cc=timur@kernel.org \
    --cc=vgupta@kernel.org \
    --cc=zhang.lyra@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.