All of lore.kernel.org
 help / color / mirror / Atom feed
From: Marcin Wojtas <mw@semihalf.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH] spi: prevent overriding established bus settings
Date: Thu, 21 Nov 2019 10:29:49 +0100	[thread overview]
Message-ID: <CAPv3WKceDVAfeGqu16MpfLBH_xsBDt_K7pFAKmvBeCfquBrpbw@mail.gmail.com> (raw)
In-Reply-To: <1574311127-7745-1-git-send-email-mw@semihalf.com>

+ Simon

czw., 21 lis 2019 o 05:39 Marcin Wojtas <mw@semihalf.com> 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 <mw@semihalf.com>
> ---
>  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
>
>

  reply	other threads:[~2019-11-21  9:29 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-11-21  4:38 [U-Boot] [PATCH] spi: prevent overriding established bus settings Marcin Wojtas
2019-11-21  9:29 ` Marcin Wojtas [this message]
2019-12-11  7:18   ` Marcin Wojtas
2019-12-28  2:26 ` [U-Boot] " Simon Glass
2020-01-16  9:55   ` Marcin Wojtas
2020-01-26 13:30 ` Jagan Teki
2020-01-26 13:39   ` Marcin Wojtas

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CAPv3WKceDVAfeGqu16MpfLBH_xsBDt_K7pFAKmvBeCfquBrpbw@mail.gmail.com \
    --to=mw@semihalf.com \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.