[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <88e74f8f-feee-159a-3048-736a5ffc13cd@linaro.org>
Date: Wed, 19 Apr 2023 10:21:07 +0200
From: Krzysztof Kozlowski <krzysztof.kozlowski@...aro.org>
To: Jaewon Kim <jaewon02.kim@...sung.com>,
Mark Brown <broonie@...nel.org>, Andi Shyti <andi@...zian.org>,
Alim Akhtar <alim.akhtar@...sung.com>
Cc: linux-spi@...r.kernel.org, linux-samsung-soc@...r.kernel.org,
linux-arm-kernel@...ts.infradead.org, linux-kernel@...r.kernel.org,
Chanho Park <chanho61.park@...sung.com>
Subject: Re: [PATCH v2 4/4] spi: s3c64xx: support interrupt based pio mode
On 19/04/2023 08:06, Jaewon Kim wrote:
> Interrupt based pio mode is supported to reduce CPU load.
> If transfer size is larger than 32 byte, it is processed using interrupt.
>
> Signed-off-by: Jaewon Kim <jaewon02.kim@...sung.com>
> ---
> drivers/spi/spi-s3c64xx.c | 82 ++++++++++++++++++++++++++++++++-------
> 1 file changed, 67 insertions(+), 15 deletions(-)
>
> diff --git a/drivers/spi/spi-s3c64xx.c b/drivers/spi/spi-s3c64xx.c
> index cf3060b2639b..ce1afb9a4ed4 100644
> --- a/drivers/spi/spi-s3c64xx.c
> +++ b/drivers/spi/spi-s3c64xx.c
> @@ -58,6 +58,8 @@
> #define S3C64XX_SPI_MODE_BUS_TSZ_HALFWORD (1<<17)
> #define S3C64XX_SPI_MODE_BUS_TSZ_WORD (2<<17)
> #define S3C64XX_SPI_MODE_BUS_TSZ_MASK (3<<17)
> +#define S3C64XX_SPI_MODE_RX_RDY_LVL GENMASK(16, 11)
> +#define S3C64XX_SPI_MODE_RX_RDY_LVL_SHIFT 11
> #define S3C64XX_SPI_MODE_SELF_LOOPBACK (1<<3)
> #define S3C64XX_SPI_MODE_RXDMA_ON (1<<2)
> #define S3C64XX_SPI_MODE_TXDMA_ON (1<<1)
> @@ -114,6 +116,8 @@
>
> #define S3C64XX_SPI_TRAILCNT S3C64XX_SPI_MAX_TRAILCNT
>
> +#define S3C64XX_SPI_POLLING_SIZE 32
> +
> #define msecs_to_loops(t) (loops_per_jiffy / 1000 * HZ * t)
> #define is_polling(x) (x->cntrlr_info->polling)
>
> @@ -552,10 +556,11 @@ static int s3c64xx_wait_for_dma(struct s3c64xx_spi_driver_data *sdd,
> }
>
> static int s3c64xx_wait_for_pio(struct s3c64xx_spi_driver_data *sdd,
> - struct spi_transfer *xfer)
> + struct spi_transfer *xfer, int use_irq)
> {
> void __iomem *regs = sdd->regs;
> unsigned long val;
> + unsigned long time;
> u32 status;
> int loops;
> u32 cpy_len;
> @@ -563,17 +568,24 @@ static int s3c64xx_wait_for_pio(struct s3c64xx_spi_driver_data *sdd,
> int ms;
> u32 tx_time;
>
> - /* sleep during signal transfer time */
> - status = readl(regs + S3C64XX_SPI_STATUS);
> - if (RX_FIFO_LVL(status, sdd) < xfer->len) {
> - tx_time = (xfer->len * 8 * 1000 * 1000) / sdd->cur_speed;
> - usleep_range(tx_time / 2, tx_time);
> - }
You just added this code. Adding and immediately removing it, suggests
this should be one patch.
Best regards,
Krzysztof
Powered by blists - more mailing lists