Re: [PATCH v5 3/4] spi/spi-bcm2835: Split transfers that exceed DLEN

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sat, Apr 13, 2019 at 08:24:14PM +0200, Noralf Trønnes wrote:
> @@ -844,6 +816,17 @@ static int bcm2835_spi_prepare_message(struct spi_master *master,
>  	struct spi_device *spi = msg->spi;
>  	struct bcm2835_spi *bs = spi_master_get_devdata(master);
>  	u32 cs = bcm2835_rd(bs, BCM2835_SPI_CS);
> +	int ret;
> +
> +	/*
> +	 * DMA transfers are limited to 16 bit (0 to 65535 bytes) by the SPI HW
> +	 * due to DLEN. Split up transfers (32-bit FIFO aligned) if the limit is
> +	 * exceeded.
> +	 */
> +	ret = spi_split_transfers_maxsize(master, msg, 65532,
> +					  GFP_KERNEL | GFP_DMA);
> +	if (ret)
> +		return ret;

This looks much better than the previous version because
spi_split_transfers_maxsize() is now used as a library function
by an individual driver, rather than something that is inflicted
on *all* drivers (midlayer fallacy).

Of course the performance is suboptimal compared to an approach
which transmits the sglist in portions which are < 65535 each,
but we can move to that later.

In case it helps,
Reviewed-by: Lukas Wunner <lukas@xxxxxxxxx>

Thanks,

Lukas



[Index of Archives]     [Linux Kernel]     [Linux ARM (vger)]     [Linux ARM MSM]     [Linux Omap]     [Linux Arm]     [Linux Tegra]     [Fedora ARM]     [Linux for Samsung SOC]     [eCos]     [Linux Fastboot]     [Gcc Help]     [Git]     [DCCP]     [IETF Announce]     [Security]     [Linux MIPS]     [Yosemite Campsites]

  Powered by Linux