Re: [PATCH] spi: prevent overriding established bus settings

2020-01-26 Thread Marcin Wojtas
niedz., 26 sty 2020 o 14:30 Jagan Teki  napisał(a):
>
> On Thu, Nov 21, 2019 at 10:09 AM Marcin Wojtas  wrote:
> >
> > The SPI stack relies on a proper bus speed/mode configuration
> > by calling dm_spi_claim_bus(). However the hitherto code
> > allowed to accidentally override those settings in
> > the spi_get_bus_and_cs() routine.
> >
> > The initially established speed could be discarded by using
> > the slave platdata, which turned out to be an issue on
> > the platforms whose slave maximum supported frequency
> > is not on par with the maximum frequency of the bus controller.
> >
> > This patch fixes above issue by configuring the bus from
> > spi_get_bus_and_cs() only in case it was not done before.
> >
> > Signed-off-by: Marcin Wojtas 
> > ---
>
> Applied to u-boot-spi/master

Great, thanks!
Marcin


Re: [PATCH] spi: prevent overriding established bus settings

2020-01-26 Thread Jagan Teki
On Thu, Nov 21, 2019 at 10:09 AM Marcin Wojtas  wrote:
>
> The SPI stack relies on a proper bus speed/mode configuration
> by calling dm_spi_claim_bus(). However the hitherto code
> allowed to accidentally override those settings in
> the spi_get_bus_and_cs() routine.
>
> The initially established speed could be discarded by using
> the slave platdata, which turned out to be an issue on
> the platforms whose slave maximum supported frequency
> is not on par with the maximum frequency of the bus controller.
>
> This patch fixes above issue by configuring the bus from
> spi_get_bus_and_cs() only in case it was not done before.
>
> Signed-off-by: Marcin Wojtas 
> ---

Applied to u-boot-spi/master


Re: [PATCH] spi: prevent overriding established bus settings

2019-12-10 Thread Marcin Wojtas
Hi,

Any comments on the patch?

Best regards,
Marcin

czw., 21 lis 2019 o 10:29 Marcin Wojtas  napisał(a):

> + Simon
>
> czw., 21 lis 2019 o 05:39 Marcin Wojtas  napisał(a):
>
>> The SPI stack relies on a proper bus speed/mode configuration
>> by calling dm_spi_claim_bus(). However the hitherto code
>> allowed to accidentally override those settings in
>> the spi_get_bus_and_cs() routine.
>>
>> The initially established speed could be discarded by using
>> the slave platdata, which turned out to be an issue on
>> the platforms whose slave maximum supported frequency
>> is not on par with the maximum frequency of the bus controller.
>>
>> This patch fixes above issue by configuring the bus from
>> spi_get_bus_and_cs() only in case it was not done before.
>>
>> Signed-off-by: Marcin Wojtas 
>> ---
>>  drivers/spi/spi-uclass.c | 20 +++-
>>  1 file changed, 11 insertions(+), 9 deletions(-)
>>
>> diff --git a/drivers/spi/spi-uclass.c b/drivers/spi/spi-uclass.c
>> index 76c4b53..fcbe532 100644
>> --- a/drivers/spi/spi-uclass.c
>> +++ b/drivers/spi/spi-uclass.c
>> @@ -296,6 +296,7 @@ int spi_get_bus_and_cs(int busnum, int cs, int speed,
>> int mode,
>>  {
>> struct udevice *bus, *dev;
>> struct dm_spi_slave_platdata *plat;
>> +   struct spi_slave *slave;
>> bool created = false;
>> int ret;
>>
>> @@ -351,19 +352,20 @@ int spi_get_bus_and_cs(int busnum, int cs, int
>> speed, int mode,
>> slave->dev = dev;
>> }
>>
>> -   plat = dev_get_parent_platdata(dev);
>> +   slave = dev_get_parent_priv(dev);
>>
>> -   /* get speed and mode from platdata when available */
>> -   if (plat->max_hz) {
>> -   speed = plat->max_hz;
>> -   mode = plat->mode;
>> +   /*
>> +* In case the operation speed is not yet established by
>> +* dm_spi_claim_bus() ensure the bus is configured properly.
>> +*/
>> +   if (!slave->speed) {
>> +   ret = spi_claim_bus(slave);
>> +   if (ret)
>> +   goto err;
>> }
>> -   ret = spi_set_speed_mode(bus, speed, mode);
>> -   if (ret)
>> -   goto err;
>>
>> *busp = bus;
>> -   *devp = dev_get_parent_priv(dev);
>> +   *devp = slave;
>> debug("%s: bus=%p, slave=%p\n", __func__, bus, *devp);
>>
>> return 0;
>> --
>> 2.7.4
>>
>>