dm: spi: Read default speed and mode values from DT
PATCH v4 1/1 dm: spi: Read default speed and mode values from DT
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.
---
v4: Update env_sf.c as well
v3: Update commit message to mention SPI mode changes
v2: Initialize speed, mode to 0 instead of -1
cmd/sf.c | 2 ++ common/env_sf.c | 8 ++++---- drivers/spi/spi-uclass.c | 8 ++++++-- 3 files changed, 12 insertions(+), 6 deletions(-)
cmd/sf.c +2 -0
@@ -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
common/env_sf.c +4 -4
@@ -55,9 +55,9 @@ int saveenv(void)#ifdef CONFIG_DM_SPI_FLASH struct udevice *new; +/* speed and mode will be read from DT */ ret =spi_flash_probe_bus_cs (CONFIG_ENV_SPI_BUS ,CONFIG_ENV_SPI_CS , -CONFIG_ENV_SPI_MAX_HZ , -CONFIG_ENV_SPI_MODE , &new); +0 ,0 , &new);if (ret) {set_default_env ("!spi_flash_probe_bus_cs() failed" );return 1 ;
@@ -245,9 +245,9 @@ int saveenv(void)#ifdef CONFIG_DM_SPI_FLASH struct udevice *new; +/* speed and mode will be read from DT */ ret =spi_flash_probe_bus_cs (CONFIG_ENV_SPI_BUS ,CONFIG_ENV_SPI_CS , -CONFIG_ENV_SPI_MAX_HZ , -CONFIG_ENV_SPI_MODE , &new); +0 ,0 , &new);if (ret) {set_default_env ("!spi_flash_probe_bus_cs() failed" );return 1 ;
drivers/spi/spi-uclass.c +6 -2
@@ -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;
Signature · 1 line
2.8.2
PATCH v4 1/1 dm: spi: Read default speed and mode values from DT
Quoted 11 lines · Vignesh R
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 <[email protected]>Reviewed-by Simon Glass <[email protected]>Reviewed-by Mugunthan V N <[email protected]>---
Gentle ping...
Quoted 86 lines
v4: Update
env_sf.cas wellv3: Update commit message to mention SPI mode changes
v2: Initialize speed, mode to 0 instead of -1
cmd/sf.c | 2 ++ common/env_sf.c | 8 ++++---- drivers/spi/spi-uclass.c | 8 ++++++-- 3 files changed, 12 insertions(+), 6 deletions(-)cmd/sf.c +2
-0@@ -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 common/env_sf.c +4
-4@@ -55,9 +55,9 @@ int saveenv(void)#ifdef CONFIG_DM_SPI_FLASH struct udevice *new; +/* speed and mode will be read from DT */ ret =spi_flash_probe_bus_cs (CONFIG_ENV_SPI_BUS ,CONFIG_ENV_SPI_CS , -CONFIG_ENV_SPI_MAX_HZ , -CONFIG_ENV_SPI_MODE , &new); +0 ,0 , &new);if (ret) {set_default_env ("!spi_flash_probe_bus_cs() failed" );return 1 ;@@ -245,9 +245,9 @@ int saveenv(void)#ifdef CONFIG_DM_SPI_FLASH struct udevice *new; +/* speed and mode will be read from DT */ ret =spi_flash_probe_bus_cs (CONFIG_ENV_SPI_BUS ,CONFIG_ENV_SPI_CS , -CONFIG_ENV_SPI_MAX_HZ , -CONFIG_ENV_SPI_MODE , &new); +0 ,0 , &new);if (ret) {set_default_env ("!spi_flash_probe_bus_cs() failed" );return 1 ;drivers/spi/spi-uclass.c +6
-2@@ -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;
Signature · 2 lines
Regards Vignesh