Re: [PATCH] fbtft: limit transfer length by spi device limit
On Thu, May 26, 2016 at 07:25:22PM -, Michal Suchanek wrote: > Some SPI controllers can transfer only small piece of data at a time. > Since SPI core gained a function to get the maximum transfer length use > it. > > Signed-off-by: Michal Suchanek > Acked-by: Noralf Trønnes > --- > > Tested on sunxi spi with DMA enabled and disabled. Makes a visible speed > difference and display works in either case. > > drivers/staging/fbtft/fbtft-core.c | 9 + > 1 file changed, 9 insertions(+) This patch adds a build warning to the tree, so I can't take it. Please fix up and resend. thanks, greg k-h ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
Re: [PATCH] fbtft: limit transfer length by spi device limit
Den 26.05.2016 21:25, skrev Michal Suchanek: Some SPI controllers can transfer only small piece of data at a time. Since SPI core gained a function to get the maximum transfer length use it. Signed-off-by: Michal Suchanek --- Tested on sunxi spi with DMA enabled and disabled. Makes a visible speed difference and display works in either case. drivers/staging/fbtft/fbtft-core.c | 9 + 1 file changed, 9 insertions(+) diff --git a/drivers/staging/fbtft/fbtft-core.c b/drivers/staging/fbtft/fbtft-core.c index 0c1a77c..f3bdc8f 100644 --- a/drivers/staging/fbtft/fbtft-core.c +++ b/drivers/staging/fbtft/fbtft-core.c @@ -1346,6 +1346,15 @@ int fbtft_probe_common(struct fbtft_display *display, return PTR_ERR(pdata); } + if (sdev && (spi_max_transfer_size(sdev) < SIZE_MAX)) + if ((pdata->txbuflen <= 0) || (pdata->txbuflen > spi_max_transfer_size(sdev))) { + dev_warn(dev, +"Limiting used buffer size %i -> %i due to device %s transfer size limitation", +pdata->txbuflen, spi_max_transfer_size(sdev), +dev_name(&sdev->dev)); + pdata->txbuflen = spi_max_transfer_size(sdev); + } + info = fbtft_framebuffer_alloc(display, dev, pdata); if (!info) return -ENOMEM; (Ugh, this code of mine looks worse each time I'm confronted with it.) You have even taken care of the special txbuflen == -1 value I see, so I guess this is as good as it gets without any major refactoring, so: Acked-by: Noralf Trønnes And there's no point in doing any refactoring since I'm working on a DRM successor for fbtft. I have been working on it since the fbdev maintainer issued the "No more new fbdev drivers, please" call in September and now it has reached a tipping point where I can say that I will keep working on it until it's done. Some info: https://github.com/notro/tinydrm/wiki Thanks, Noralf. ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
[PATCH] fbtft: limit transfer length by spi device limit
Some SPI controllers can transfer only small piece of data at a time. Since SPI core gained a function to get the maximum transfer length use it. Signed-off-by: Michal Suchanek --- Tested on sunxi spi with DMA enabled and disabled. Makes a visible speed difference and display works in either case. drivers/staging/fbtft/fbtft-core.c | 9 + 1 file changed, 9 insertions(+) diff --git a/drivers/staging/fbtft/fbtft-core.c b/drivers/staging/fbtft/fbtft-core.c index 0c1a77c..f3bdc8f 100644 --- a/drivers/staging/fbtft/fbtft-core.c +++ b/drivers/staging/fbtft/fbtft-core.c @@ -1346,6 +1346,15 @@ int fbtft_probe_common(struct fbtft_display *display, return PTR_ERR(pdata); } + if (sdev && (spi_max_transfer_size(sdev) < SIZE_MAX)) + if ((pdata->txbuflen <= 0) || (pdata->txbuflen > spi_max_transfer_size(sdev))) { + dev_warn(dev, +"Limiting used buffer size %i -> %i due to device %s transfer size limitation", +pdata->txbuflen, spi_max_transfer_size(sdev), +dev_name(&sdev->dev)); + pdata->txbuflen = spi_max_transfer_size(sdev); + } + info = fbtft_framebuffer_alloc(display, dev, pdata); if (!info) return -ENOMEM; -- 2.8.1 ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel