dm: spi: Read default speed and mode values from DT
authorPatrick Delaunay <patrick.delaunay@st.com>
Wed, 27 Feb 2019 14:36:44 +0000 (15:36 +0100)
committerJagan Teki <jagan@amarulasolutions.com>
Fri, 12 Apr 2019 06:24:50 +0000 (11:54 +0530)
This patch update the behavior introduced by
commit 96907c0fe50a ("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_* but 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.

Remove also use in boards of the value speed=0 (no more supported)
for ENV in SPI by using CONFIG_ENV_SPI_MAX_HZ=0.

DT values will be always used when available (full DM support of
SPI slave with available DT node) even if speed and mode are requested;
for example in splash screen support (in splash_sf_read_raw)
or in SPL boot (in spl_spi_load_image).
The caller of spi_get_bus_and_cs() no more need to force speed=0.

But the current behavior don't change if the SPI slave is not
present (device with generic driver is created automatically)
or if platdata is used (CONFIG_OF_PLATDATA).

Signed-off-by: Patrick Delaunay <patrick.delaunay@st.com>
Acked-by: Jagan Teki <jagan@amarulasolutions.com>
12 files changed:
cmd/sf.c
common/spl/spl_spi.c
configs/da850_am18xxevm_defconfig
configs/da850evm_defconfig
configs/mscc_jr2_defconfig
configs/mscc_luton_defconfig
configs/mscc_ocelot_defconfig
configs/mscc_serval_defconfig
configs/mscc_servalt_defconfig
drivers/mtd/spi/Kconfig
drivers/spi/spi-uclass.c
include/spi.h

index 738ef0e46dc14fde1ae1550b0873a2a818b7abb6..6ccf98ae512820192441c78132b6836169770137 100644 (file)
--- a/cmd/sf.c
+++ b/cmd/sf.c
@@ -81,14 +81,13 @@ static int do_spi_flash_probe(int argc, char * const argv[])
 {
        unsigned int bus = CONFIG_SF_DEFAULT_BUS;
        unsigned int cs = CONFIG_SF_DEFAULT_CS;
+       /* In DM mode, defaults speed and mode will be taken from DT */
        unsigned int speed = CONFIG_SF_DEFAULT_SPEED;
        unsigned int mode = CONFIG_SF_DEFAULT_MODE;
        char *endp;
 #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
index 8cd4830a39b89d747fb1e4cb6179cc4d2da2559f..9b74473377f36e4d88eb066d9e2b4d4a6bf6bdbf 100644 (file)
@@ -77,6 +77,8 @@ static int spl_spi_load_image(struct spl_image_info *spl_image,
 
        /*
         * Load U-Boot image from SPI flash into RAM
+        * In DM mode: defaults speed and mode will be
+        * taken from DT when available
         */
 
        flash = spi_flash_probe(CONFIG_SF_DEFAULT_BUS,
index b8c16baf9a9fb0c476e484633f46b095323e353f..419224104af4469b6eb99f634dda425f9069ade3 100644 (file)
@@ -39,10 +39,6 @@ CONFIG_SPL_OF_CONTROL=y
 CONFIG_DEFAULT_DEVICE_TREE="da850-evm"
 CONFIG_SPL_OF_PLATDATA=y
 CONFIG_ENV_IS_IN_SPI_FLASH=y
-CONFIG_USE_ENV_SPI_MAX_HZ=y
-CONFIG_ENV_SPI_MAX_HZ=0
-CONFIG_USE_ENV_SPI_MODE=y
-CONFIG_ENV_SPI_MODE=0
 CONFIG_DM=y
 CONFIG_SPL_DM=y
 CONFIG_DA8XX_GPIO=y
index 3ee79432ca8c6d69d337792fb8db6415fcc14916..41dae05fb904e5e446415c62ed2664a3c8227c4a 100644 (file)
@@ -41,10 +41,6 @@ CONFIG_SPL_OF_CONTROL=y
 CONFIG_DEFAULT_DEVICE_TREE="da850-evm"
 CONFIG_SPL_OF_PLATDATA=y
 CONFIG_ENV_IS_IN_SPI_FLASH=y
-CONFIG_USE_ENV_SPI_MAX_HZ=y
-CONFIG_ENV_SPI_MAX_HZ=0
-CONFIG_USE_ENV_SPI_MODE=y
-CONFIG_ENV_SPI_MODE=0
 CONFIG_DM=y
 CONFIG_SPL_DM=y
 CONFIG_DM_GPIO=y
index 95562b7cd85f1bf46083402aa768f33a52a458c8..9276df22a5a52f93eea6336d7c077eb8b7a3e48d 100644 (file)
@@ -38,10 +38,6 @@ CONFIG_OF_LIST="jr2_pcb110 jr2_pcb111 serval2_pcb112"
 CONFIG_DTB_RESELECT=y
 CONFIG_MULTI_DTB_FIT=y
 CONFIG_ENV_IS_IN_SPI_FLASH=y
-CONFIG_USE_ENV_SPI_MAX_HZ=y
-CONFIG_ENV_SPI_MAX_HZ=0
-CONFIG_USE_ENV_SPI_MODE=y
-CONFIG_ENV_SPI_MODE=0
 CONFIG_NET_RANDOM_ETHADDR=y
 CONFIG_CLK=y
 CONFIG_DM_GPIO=y
index 162a514248931e8b2f0d254623976bd32bc8ee42..0fdd9b8f3f7a6e59f61a7a658f3cde70157ad8c8 100644 (file)
@@ -44,10 +44,6 @@ CONFIG_OF_LIST="luton_pcb090 luton_pcb091"
 CONFIG_DTB_RESELECT=y
 CONFIG_MULTI_DTB_FIT=y
 CONFIG_ENV_IS_IN_SPI_FLASH=y
-CONFIG_USE_ENV_SPI_MAX_HZ=y
-CONFIG_ENV_SPI_MAX_HZ=0
-CONFIG_USE_ENV_SPI_MODE=y
-CONFIG_ENV_SPI_MODE=0
 CONFIG_NET_RANDOM_ETHADDR=y
 CONFIG_CLK=y
 CONFIG_DM_GPIO=y
index b0dcfaf2df8e59ad32b2c003276a4174c1be8ae3..edc476d143f59b4863bd670dfd1cf24faab8e84b 100644 (file)
@@ -43,10 +43,6 @@ CONFIG_OF_LIST="ocelot_pcb120 ocelot_pcb123"
 CONFIG_DTB_RESELECT=y
 CONFIG_MULTI_DTB_FIT=y
 CONFIG_ENV_IS_IN_SPI_FLASH=y
-CONFIG_USE_ENV_SPI_MAX_HZ=y
-CONFIG_ENV_SPI_MAX_HZ=0
-CONFIG_USE_ENV_SPI_MODE=y
-CONFIG_ENV_SPI_MODE=0
 CONFIG_NET_RANDOM_ETHADDR=y
 CONFIG_CLK=y
 CONFIG_DM_GPIO=y
index f2c95632bd0669c106d239498758a9e0fd94a844..146188bb0c90f73af7188e573681e3b1573165cf 100644 (file)
@@ -35,10 +35,6 @@ CONFIG_OF_LIST="serval_pcb106 serval_pcb105"
 CONFIG_DTB_RESELECT=y
 CONFIG_MULTI_DTB_FIT=y
 CONFIG_ENV_IS_IN_SPI_FLASH=y
-CONFIG_USE_ENV_SPI_MAX_HZ=y
-CONFIG_ENV_SPI_MAX_HZ=0
-CONFIG_USE_ENV_SPI_MODE=y
-CONFIG_ENV_SPI_MODE=0
 CONFIG_NET_RANDOM_ETHADDR=y
 CONFIG_CLK=y
 CONFIG_DM_GPIO=y
index 027aaa44d562fbb541ee0c9e747ae77381b7516c..a450f48018957ca8f6563462eab5057d1080f698 100644 (file)
@@ -33,10 +33,6 @@ CONFIG_DEFAULT_DEVICE_TREE="servalt_pcb116"
 CONFIG_DTB_RESELECT=y
 CONFIG_MULTI_DTB_FIT=y
 CONFIG_ENV_IS_IN_SPI_FLASH=y
-CONFIG_USE_ENV_SPI_MAX_HZ=y
-CONFIG_ENV_SPI_MAX_HZ=0
-CONFIG_USE_ENV_SPI_MODE=y
-CONFIG_ENV_SPI_MODE=0
 CONFIG_NET_RANDOM_ETHADDR=y
 CONFIG_CLK=y
 CONFIG_DM_GPIO=y
index 5671bca24a07e41200fd589ef31d4cc3a6acc462..d3b007a731dac0134beb13cecefe51657cca4d82 100644 (file)
@@ -62,6 +62,9 @@ config SF_DEFAULT_MODE
          The default mode may be provided by the platform
          to handle the common case when only a single serial
          flash is present on the system.
+         Not used for boot with device tree; the SPI driver reads
+         speed and mode from platdata values computed from
+         available node.
 
 config SF_DEFAULT_SPEED
        int "SPI Flash default speed in Hz"
@@ -71,6 +74,9 @@ config SF_DEFAULT_SPEED
          The default speed may be provided by the platform
          to handle the common case when only a single serial
          flash is present on the system.
+         Not used for boot with device tree; the SPI driver reads
+         speed and mode from platdata values computed from
+         available node.
 
 if SPI_FLASH
 
index 2bc289a74ccb57a28e4e27c22689bca85fdb1a4f..88cb2a126227156d18342796d4022f25c3aefbba 100644 (file)
@@ -328,7 +328,9 @@ int spi_get_bus_and_cs(int busnum, int cs, int speed, int mode,
        }
 
        plat = dev_get_parent_platdata(dev);
-       if (!speed) {
+
+       /* get speed and mode from platdata when available */
+       if (plat->max_hz) {
                speed = plat->max_hz;
                mode = plat->mode;
        }
index 92427e5f32953f37c67b0369cf6bb3b35cfa521c..378594163b874246e606a41edf6e404e81412f81 100644 (file)
@@ -496,14 +496,15 @@ int spi_find_bus_and_cs(int busnum, int cs, struct udevice **busp,
  * device and slave device.
  *
  * If no such slave exists, and drv_name is not NULL, then a new slave device
- * is automatically bound on this chip select.
+ * is automatically bound on this chip select with requested speed and mode.
  *
- * Ths new slave device is probed ready for use with the given speed and mode.
+ * Ths new slave device is probed ready for use with the speed and mode
+ * from platdata when available or the requested values.
  *
  * @busnum:    SPI bus number
  * @cs:                Chip select to look for
- * @speed:     SPI speed to use for this slave
- * @mode:      SPI mode to use for this slave
+ * @speed:     SPI speed to use for this slave when not available in platdata
+ * @mode:      SPI mode to use for this slave when not available in platdata
  * @drv_name:  Name of driver to attach to this chip select
  * @dev_name:  Name of the new device thus created
  * @busp:      Returns bus device