Re: [PATCH] spi: Raise limit on number of chip selects

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

 



On 1/23/24 08:50, Jonas Gorski wrote:
Hi,

On Tue, 23 Jan 2024 at 14:56, Mark Brown <broonie@xxxxxxxxxx> wrote:

On Tue, Jan 23, 2024 at 01:26:04PM +0000, Christophe Leroy wrote:
Le 23/01/2024 à 14:18, Mark Brown a écrit :
On Tue, Jan 23, 2024 at 12:04:30PM +0100, Herve Codina wrote:

Moving the SPI_CS_CNT_MAX value from 4 to 8 is not enough to handle my case.
Tested moving SPI_CS_CNT_MAX to 16 and it was ok.

OK, I've also heard 12 as a number which this would cover.

By the way the comment in include/linux/spi/spi.h is confusing. This
SPI_CS_CNT_MAX is really not the max number of CS supported per SPI
device but the max number of CS supported per SPI controller.

Well, it's a combination of the comment being confusing and the
implementation being a bit broken - we simply shouldn't be limiting the
number of chip selects per controller, the per device limit is much more
reasonable.  So ideally the code would be changed to reflect the
comment.

At a first glance at all places using SPI_CS_CNT_MAX I don't see
anything being broken / reading out of bounds if a controller has more
chipselects than SPI_CS_CNT_MAX.

So I think the check of ctrl->num_chipselect in of_spi_parse_dt() is
bogus/unnecessary and is in the wrong place, as this is for parsing a
spi device node and not a controller node. The following check for the
amount of chip selects defined for the spi device should just check
against SPI_CS_CNT_MAX instead of ctrl->num_chipselects.
__spi_add_device() later will ensure that any chip selects are valid
chip selects, so no need for of_spi_parse_dt() to check that either.

But I didn't do a very thorough read, or even tested it, so I might
have easily missed something.


struct spi_controller {
	...
	char                            last_cs[SPI_CS_CNT_MAX];

does introduce the limit for controllers.

Guenter





[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