public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
* [U-Boot] [PATCH v3] dm: spi: Read default speed and mode values from DT
@ 2016-04-20  9:56 Qianyu Gong
  2016-04-20 10:46 ` Vignesh R
  0 siblings, 1 reply; 17+ messages in thread
From: Qianyu Gong @ 2016-04-20  9:56 UTC (permalink / raw)
  To: u-boot

Hi Vignesh,



> Date: Wed, 13 Apr 2016 15:40:53 +0530

> From: Vignesh R <vigneshr at ti.com<mailto:vigneshr@ti.com>>

> To: Jagan Teki <jteki at openedev.com<mailto:jteki@openedev.com>>, Tom Rini <trini at konsulko.com<mailto:trini@konsulko.com>>

> Cc: u-boot at lists.denx.de<mailto:u-boot@lists.denx.de>, Stefan Roese <sr at denx.de<mailto:sr@denx.de>>

> Subject: [U-Boot] [PATCH v3] dm: spi: Read default speed and mode

>             values    from DT

> Message-ID: <1460542253-10580-1-git-send-email-vigneshr at ti.com<mailto:1460542253-10580-1-git-send-email-vigneshr@ti.com>>

> Content-Type: text/plain

>

> In case of DT boot, don't read default speed and mode for SPI from

> CONFIG_*, instead read from DT node. This will make sure that boards

> with multiple SPI/QSPI controllers can be probed at different

> bus frequencies and SPI modes.

>

> Signed-off-by: Vignesh R <vigneshr at ti.com<mailto:vigneshr@ti.com>>

> ---

>

> v3: Update commit message to mention SPI mode changes

>

> v2: Initialize speed, mode to 0 instead of -1

>

>  cmd/sf.c                 | 2 ++

>  drivers/spi/spi-uclass.c | 8 ++++++--

>  2 files changed, 8 insertions(+), 2 deletions(-)

>

> diff --git a/cmd/sf.c b/cmd/sf.c

> index 42862d9d921a..286906c3a151 100644

> --- a/cmd/sf.c

> +++ b/cmd/sf.c

> @@ -88,6 +88,8 @@ static int do_spi_flash_probe(int argc, char * const argv[])

>  #ifdef CONFIG_DM_SPI_FLASH

>             struct udevice *new, *bus_dev;

>             int ret;

> +          /* In DM mode defaults will be taken from DT */

> +          speed = 0, mode = 0;

>  #else

>             struct spi_flash *new;

>  #endif

> diff --git a/drivers/spi/spi-uclass.c b/drivers/spi/spi-uclass.c

> index 5561f36762f9..5fb5630e2981 100644

> --- a/drivers/spi/spi-uclass.c

> +++ b/drivers/spi/spi-uclass.c

> @@ -264,6 +264,7 @@ int spi_get_bus_and_cs(int busnum, int cs, int speed, int

> mode,

>                                   struct udevice **busp, struct spi_slave **devp)

>  {

>             struct udevice *bus, *dev;

> +          struct dm_spi_slave_platdata *plat;

>             bool created = false;

>             int ret;

>

> @@ -280,8 +281,6 @@ int spi_get_bus_and_cs(int busnum, int cs, int speed, int

> mode,

>              * SPI flash chip - we will bind to the correct driver.

>              */

>             if (ret == -ENODEV && drv_name) {

> -                         struct dm_spi_slave_platdata *plat;

> -

>                            debug("%s: Binding new device '%s', busnum=%d, cs=%d,

> driver=%s\n",

>                                  __func__, dev_name, busnum, cs, drv_name);

>                            ret = device_bind_driver(bus, drv_name, dev_name, &dev);

> @@ -308,6 +307,11 @@ int spi_get_bus_and_cs(int busnum, int cs, int speed, int

> mode,

>                            slave->dev = dev;

>             }

>

> +          plat = dev_get_parent_platdata(dev);

> +          if (!speed) {

> +                         speed = plat->max_hz;

> +                         mode = plat->mode;

> +          }

>             ret = spi_set_speed_mode(bus, speed, mode);

>             if (ret)

>                            goto err;

> --

I just doubt if spi_set_speed_mode() has really made a difference to
the actual transfer.
Seems that if the device is inactive, calling device_probe() would also call
spi_set_speed_mode() and do the data transfer. Even if it's active, setting
speed and mode for it again would not be necessary.


Regards,
Qianyu

^ permalink raw reply	[flat|nested] 17+ messages in thread
* [U-Boot] [PATCH v3 0/1] Read default speed and mode values from DT
@ 2019-01-28  9:06 Patrick Delaunay
  2019-01-28  9:06 ` [U-Boot] [PATCH v3] dm: spi: " Patrick Delaunay
  0 siblings, 1 reply; 17+ messages in thread
From: Patrick Delaunay @ 2019-01-28  9:06 UTC (permalink / raw)
  To: u-boot


This patch-set finish the previous serie:
http://patchwork.ozlabs.org/project/uboot/list/?series=76834

and also replace the serie:
"Remove defines for SPI default speed and mode "
http://patchwork.ozlabs.org/project/uboot/list/?series=80769&state=*

This new version is a complete rework after several remarks
and regression for these 2 patchset, mainly when SPI node
configuration is not in DT, when platdata is used.

I take some time to check the code and this 3rd proposal
is a rework of commit
96907c0fe50a ("dm: spi: Read default speed and mode values from DT")

This patch avoid spi_get_bus_and_cs() callers to force value of
parameter speed to 0 for some board (without DT node)
and regression for other board (as i was the case in my previous
Series V2).

I see this kind of problem in file env/sf.c with first commit
96907c0fe50a ("dm: spi: Read default speed and mode values from DT")
and come-back to the previous behavior with CONFIG_ in the commit
25a17652c9c2 ("fix: env: Fix the SPI flash device setup for DM mode")

So I decide to don't remove the defines used for default value
of speed and mode but they are no more used when platdata
is available.

That avoid regression when spi_get_bus_and_cs is directly called.

NB: I don't sure that the behavior of 'compatibility' function
    spi_setup_slave() will be still is still the correct on
    (in some case speed and mode will parameter will be not used).

Tested on my board only for the boot from SPI NOR
so when spl_spi_load_image() is called in SPL.


Changes in v3:
    - complete rework of the patch-set to avoid regression

Changes in v2:
    - use variables to avoid duplicated code

Patrick Delaunay (1):
  dm: spi: Read default speed and mode values from DT

 README                   | 3 +++
 cmd/sf.c                 | 3 +--
 common/spl/spl_spi.c     | 2 ++
 drivers/spi/spi-uclass.c | 4 +++-
 include/spi.h            | 9 +++++----
 5 files changed, 14 insertions(+), 7 deletions(-)

-- 
2.7.4

^ permalink raw reply	[flat|nested] 17+ messages in thread
* [U-Boot] [PATCH v3] dm: spi: Read default speed and mode values from DT
@ 2016-04-13 10:10 Vignesh R
  2016-04-20 14:41 ` Simon Glass
                   ` (2 more replies)
  0 siblings, 3 replies; 17+ messages in thread
From: Vignesh R @ 2016-04-13 10:10 UTC (permalink / raw)
  To: u-boot

In case of DT boot, don't read default speed and mode for SPI from
CONFIG_*, instead read from DT node. This will make sure that boards
with multiple SPI/QSPI controllers can be probed at different
bus frequencies and SPI modes.

Signed-off-by: Vignesh R <vigneshr@ti.com>
---

v3: Update commit message to mention SPI mode changes

v2: Initialize speed, mode to 0 instead of -1

 cmd/sf.c                 | 2 ++
 drivers/spi/spi-uclass.c | 8 ++++++--
 2 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/cmd/sf.c b/cmd/sf.c
index 42862d9d921a..286906c3a151 100644
--- a/cmd/sf.c
+++ b/cmd/sf.c
@@ -88,6 +88,8 @@ static int do_spi_flash_probe(int argc, char * const argv[])
 #ifdef CONFIG_DM_SPI_FLASH
 	struct udevice *new, *bus_dev;
 	int ret;
+	/* In DM mode defaults will be taken from DT */
+	speed = 0, mode = 0;
 #else
 	struct spi_flash *new;
 #endif
diff --git a/drivers/spi/spi-uclass.c b/drivers/spi/spi-uclass.c
index 5561f36762f9..5fb5630e2981 100644
--- a/drivers/spi/spi-uclass.c
+++ b/drivers/spi/spi-uclass.c
@@ -264,6 +264,7 @@ int spi_get_bus_and_cs(int busnum, int cs, int speed, int mode,
 		       struct udevice **busp, struct spi_slave **devp)
 {
 	struct udevice *bus, *dev;
+	struct dm_spi_slave_platdata *plat;
 	bool created = false;
 	int ret;
 
@@ -280,8 +281,6 @@ int spi_get_bus_and_cs(int busnum, int cs, int speed, int mode,
 	 * SPI flash chip - we will bind to the correct driver.
 	 */
 	if (ret == -ENODEV && drv_name) {
-		struct dm_spi_slave_platdata *plat;
-
 		debug("%s: Binding new device '%s', busnum=%d, cs=%d, driver=%s\n",
 		      __func__, dev_name, busnum, cs, drv_name);
 		ret = device_bind_driver(bus, drv_name, dev_name, &dev);
@@ -308,6 +307,11 @@ int spi_get_bus_and_cs(int busnum, int cs, int speed, int mode,
 		slave->dev = dev;
 	}
 
+	plat = dev_get_parent_platdata(dev);
+	if (!speed) {
+		speed = plat->max_hz;
+		mode = plat->mode;
+	}
 	ret = spi_set_speed_mode(bus, speed, mode);
 	if (ret)
 		goto err;
-- 
2.8.1

^ permalink raw reply related	[flat|nested] 17+ messages in thread

end of thread, other threads:[~2019-02-27 14:59 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-04-20  9:56 [U-Boot] [PATCH v3] dm: spi: Read default speed and mode values from DT Qianyu Gong
2016-04-20 10:46 ` Vignesh R
2016-04-21  3:50   ` Qianyu Gong
2016-04-21  4:30     ` Vignesh R
2016-04-21  7:14       ` Qianyu Gong
  -- strict thread matches above, loose matches on Subject: below --
2019-01-28  9:06 [U-Boot] [PATCH v3 0/1] " Patrick Delaunay
2019-01-28  9:06 ` [U-Boot] [PATCH v3] dm: spi: " Patrick Delaunay
2019-01-29 21:30   ` Petr Vorel
2019-02-09 16:21   ` Jagan Teki
2019-02-12 13:44     ` Patrick DELAUNAY
2019-02-14 17:05       ` Jagan Teki
2019-02-19 12:28         ` Patrick DELAUNAY
2019-02-27 14:59         ` Patrick DELAUNAY
2016-04-13 10:10 Vignesh R
2016-04-20 14:41 ` Simon Glass
2016-04-22  5:12 ` Mugunthan V N
2016-05-09 14:45 ` Jagan Teki
2016-05-10  6:29   ` Vignesh R

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox