diff mbox series

[U-Boot,v3] dm: spi: Read default speed and mode values from DT

Message ID 1548666406-15684-2-git-send-email-patrick.delaunay@st.com
State Changes Requested
Delegated to: Jagannadha Sutradharudu Teki
Headers show
Series [U-Boot,v3] dm: spi: Read default speed and mode values from DT | expand

Commit Message

Patrick DELAUNAY Jan. 28, 2019, 9:06 a.m. UTC
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.

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>
---

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

Changes in v2:
    - use variables to avoid duplicated code

 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(-)

Comments

Petr Vorel Jan. 29, 2019, 9:30 p.m. UTC | #1
Hi Patrick,

> This patch update the behavior introduced by
> commit 96907c0fe50a ("dm: spi: Read default speed and mode values from DT")
...

Reviewed-by: Petr Vorel <petr.vorel@gmail.com>

Nice idea.

Kind regards,
Petr
Jagan Teki Feb. 9, 2019, 4:21 p.m. UTC | #2
On Mon, Jan 28, 2019 at 2:37 PM Patrick Delaunay
<patrick.delaunay@st.com> wrote:
>
> 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.
>
> 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>
> ---
>
> Changes in v3:
>     - complete rework of the patch-set to avoid regression
>
> Changes in v2:
>     - use variables to avoid duplicated code
>
>  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(-)
>
> diff --git a/README b/README
> index 17d56b8..f7fe74f 100644
> --- a/README
> +++ b/README
> @@ -2184,6 +2184,9 @@ The following options need to be configured:
>                 CONFIG_SF_DEFAULT_MODE          (see include/spi.h)
>                 CONFIG_SF_DEFAULT_SPEED         in Hz
>
> +               In case of DT boot, SPI don't read default speed and mode
> +               from CONFIG_*, but from platdata values computed from available
> +               DT node

This has to update in Kconfig help info.
Patrick DELAUNAY Feb. 12, 2019, 1:44 p.m. UTC | #3
Hi Jagan

> From: Jagan Teki <jagan@amarulasolutions.com>
> Sent: samedi 9 février 2019 17:22
> Subject: Re: [PATCH v3] dm: spi: Read default speed and mode values from DT
> 
> On Mon, Jan 28, 2019 at 2:37 PM Patrick Delaunay <patrick.delaunay@st.com>
> wrote:
> >
> > 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.
> >
> > 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>
> > ---
> >
> > Changes in v3:
> >     - complete rework of the patch-set to avoid regression
> >
> > Changes in v2:
> >     - use variables to avoid duplicated code
> >
> >  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(-)
> >
> > diff --git a/README b/README
> > index 17d56b8..f7fe74f 100644
> > --- a/README
> > +++ b/README
> > @@ -2184,6 +2184,9 @@ The following options need to be configured:
> >                 CONFIG_SF_DEFAULT_MODE          (see include/spi.h)
> >                 CONFIG_SF_DEFAULT_SPEED         in Hz
> >
> > +               In case of DT boot, SPI don't read default speed and mode
> > +               from CONFIG_*, but from platdata values computed from available
> > +               DT node
> 
> This has to update in Kconfig help info.

Ok but witch Kconfig ? whitch config ?

drivers/mtd/spi/Kconfig
config DM_SPI_FLASH

PS: In master branch, these define are not in yet managed in  Kconfig, but they are still managed by defines:
       scripts/config_whitelist.txt:1713:CONFIG_SF_DEFAULT_MODE
      And so documentation is done in README not in Kconfig

some migration in Kconfig is pending (moveconfig) ?

Regards
Patrick
Jagan Teki Feb. 14, 2019, 5:05 p.m. UTC | #4
On Tue, Feb 12, 2019 at 7:14 PM Patrick DELAUNAY
<patrick.delaunay@st.com> wrote:
>
> Hi Jagan
>
> > From: Jagan Teki <jagan@amarulasolutions.com>
> > Sent: samedi 9 février 2019 17:22
> > Subject: Re: [PATCH v3] dm: spi: Read default speed and mode values from DT
> >
> > On Mon, Jan 28, 2019 at 2:37 PM Patrick Delaunay <patrick.delaunay@st.com>
> > wrote:
> > >
> > > 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.
> > >
> > > 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>
> > > ---
> > >
> > > Changes in v3:
> > >     - complete rework of the patch-set to avoid regression
> > >
> > > Changes in v2:
> > >     - use variables to avoid duplicated code
> > >
> > >  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(-)
> > >
> > > diff --git a/README b/README
> > > index 17d56b8..f7fe74f 100644
> > > --- a/README
> > > +++ b/README
> > > @@ -2184,6 +2184,9 @@ The following options need to be configured:
> > >                 CONFIG_SF_DEFAULT_MODE          (see include/spi.h)
> > >                 CONFIG_SF_DEFAULT_SPEED         in Hz
> > >
> > > +               In case of DT boot, SPI don't read default speed and mode
> > > +               from CONFIG_*, but from platdata values computed from available
> > > +               DT node
> >
> > This has to update in Kconfig help info.
>
> Ok but witch Kconfig ? whitch config ?
>
> drivers/mtd/spi/Kconfig
> config DM_SPI_FLASH
>
> PS: In master branch, these define are not in yet managed in  Kconfig, but they are still managed by defines:
>        scripts/config_whitelist.txt:1713:CONFIG_SF_DEFAULT_MODE
>       And so documentation is done in README not in Kconfig
>
> some migration in Kconfig is pending (moveconfig) ?

Yes, moving them and make changes on top would really nice to go. thanks!
Patrick DELAUNAY Feb. 19, 2019, 12:28 p.m. UTC | #5
Hi Jagan,

> From: Jagan Teki <jagan@amarulasolutions.com>
> Sent: jeudi 14 février 2019 18:05
> 
> On Tue, Feb 12, 2019 at 7:14 PM Patrick DELAUNAY <patrick.delaunay@st.com>
> wrote:
> >
> > Hi Jagan
> >
> > > From: Jagan Teki <jagan@amarulasolutions.com>
> > > Sent: samedi 9 février 2019 17:22
> > > Subject: Re: [PATCH v3] dm: spi: Read default speed and mode values
> > > from DT
> > >
> > > On Mon, Jan 28, 2019 at 2:37 PM Patrick Delaunay
> > > <patrick.delaunay@st.com>
> > > wrote:
> > > >
> > > > 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.
> > > >
> > > > 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>
> > > > ---
> > > >
> > > > Changes in v3:
> > > >     - complete rework of the patch-set to avoid regression
> > > >
> > > > Changes in v2:
> > > >     - use variables to avoid duplicated code
> > > >
> > > >  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(-)
> > > >
> > > > diff --git a/README b/README
> > > > index 17d56b8..f7fe74f 100644
> > > > --- a/README
> > > > +++ b/README
> > > > @@ -2184,6 +2184,9 @@ The following options need to be configured:
> > > >                 CONFIG_SF_DEFAULT_MODE          (see include/spi.h)
> > > >                 CONFIG_SF_DEFAULT_SPEED         in Hz
> > > >
> > > > +               In case of DT boot, SPI don't read default speed and mode
> > > > +               from CONFIG_*, but from platdata values computed from
> available
> > > > +               DT node
> > >
> > > This has to update in Kconfig help info.
> >
> > Ok but witch Kconfig ? whitch config ?
> >
> > drivers/mtd/spi/Kconfig
> > config DM_SPI_FLASH
> >
> > PS: In master branch, these define are not in yet managed in  Kconfig, but they
> are still managed by defines:
> >        scripts/config_whitelist.txt:1713:CONFIG_SF_DEFAULT_MODE
> >       And so documentation is done in README not in Kconfig
> >
> > some migration in Kconfig is pending (moveconfig) ?
> 
> Yes, moving them and make changes on top would really nice to go. thanks!

In fact it was a question... 
But I have my answer, no migration are pending on your side.

So I try yesterday and this morning to start migration in Kconfig 
but it is more difficult than expected initially (make defconfig freeze my PC for some board after my modificaitons).

So I don't expect to make the change on the top of the moving serie at a short term, 
but I will continue to work on that.

It is possible to inverse the proposed order... 
this patch first and after the Kconfig migration ?

Regards

Patrick
Patrick DELAUNAY Feb. 27, 2019, 2:59 p.m. UTC | #6
Hi Jagan,


> From: Patrick DELAUNAY
> Sent: mardi 19 février 2019 13:28
> Subject: RE: [PATCH v3] dm: spi: Read default speed and mode values from DT
> 
> Hi Jagan,
> 
> > From: Jagan Teki <jagan@amarulasolutions.com>
> > Sent: jeudi 14 février 2019 18:05
> >
> > On Tue, Feb 12, 2019 at 7:14 PM Patrick DELAUNAY
> > <patrick.delaunay@st.com>
> > wrote:
> > >
> > > Hi Jagan
> > >
> > > > From: Jagan Teki <jagan@amarulasolutions.com>
> > > > Sent: samedi 9 février 2019 17:22
> > > > Subject: Re: [PATCH v3] dm: spi: Read default speed and mode
> > > > values from DT
> > > >
> > > > On Mon, Jan 28, 2019 at 2:37 PM Patrick Delaunay
> > > > <patrick.delaunay@st.com>
> > > > wrote:
> > > > >
> > > > > 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.
> > > > >
> > > > > 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>
> > > > > ---
> > > > >
> > > > > Changes in v3:
> > > > >     - complete rework of the patch-set to avoid regression
> > > > >
> > > > > Changes in v2:
> > > > >     - use variables to avoid duplicated code
> > > > >
> > > > >  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(-)
> > > > >
> > > > > diff --git a/README b/README
> > > > > index 17d56b8..f7fe74f 100644
> > > > > --- a/README
> > > > > +++ b/README
> > > > > @@ -2184,6 +2184,9 @@ The following options need to be configured:
> > > > >                 CONFIG_SF_DEFAULT_MODE          (see include/spi.h)
> > > > >                 CONFIG_SF_DEFAULT_SPEED         in Hz
> > > > >
> > > > > +               In case of DT boot, SPI don't read default speed and mode
> > > > > +               from CONFIG_*, but from platdata values computed
> > > > > + from
> > available
> > > > > +               DT node
> > > >
> > > > This has to update in Kconfig help info.
> > >
> > > Ok but witch Kconfig ? whitch config ?
> > >
> > > drivers/mtd/spi/Kconfig
> > > config DM_SPI_FLASH
> > >
> > > PS: In master branch, these define are not in yet managed in
> > > Kconfig, but they
> > are still managed by defines:
> > >        scripts/config_whitelist.txt:1713:CONFIG_SF_DEFAULT_MODE
> > >       And so documentation is done in README not in Kconfig
> > >
> > > some migration in Kconfig is pending (moveconfig) ?
> >
> > Yes, moving them and make changes on top would really nice to go. thanks!
> 
> In fact it was a question...
> But I have my answer, no migration are pending on your side.
> 
> So I try yesterday and this morning to start migration in Kconfig but it is more
> difficult than expected initially (make defconfig freeze my PC for some board after
> my modificaitons).
> 
> So I don't expect to make the change on the top of the moving serie at a short
> term, but I will continue to work on that.
> 
> It is possible to inverse the proposed order...
> this patch first and after the Kconfig migration ?

Finally I found and solve the issue, So I push the 2 series :

SPI migration in Kconfig = http://patchwork.ozlabs.org/project/uboot/list/?series=94485
V4 = http://patchwork.ozlabs.org/project/uboot/list/?series=94490

Regards

Patrick
diff mbox series

Patch

diff --git a/README b/README
index 17d56b8..f7fe74f 100644
--- a/README
+++ b/README
@@ -2184,6 +2184,9 @@  The following options need to be configured:
 		CONFIG_SF_DEFAULT_MODE 		(see include/spi.h)
 		CONFIG_SF_DEFAULT_SPEED		in Hz
 
+		In case of DT boot, SPI don't read default speed and mode
+		from CONFIG_*, but from platdata values computed from available
+		DT node
 
 - TFTP Fixed UDP Port:
 		CONFIG_TFTP_PORT
diff --git a/cmd/sf.c b/cmd/sf.c
index 84bb057..f1811d2 100644
--- 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
diff --git a/common/spl/spl_spi.c b/common/spl/spl_spi.c
index 8cd4830..9b74473 100644
--- a/common/spl/spl_spi.c
+++ b/common/spl/spl_spi.c
@@ -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,
diff --git a/drivers/spi/spi-uclass.c b/drivers/spi/spi-uclass.c
index 2bc289a..88cb2a1 100644
--- a/drivers/spi/spi-uclass.c
+++ b/drivers/spi/spi-uclass.c
@@ -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;
 	}
diff --git a/include/spi.h b/include/spi.h
index 92427e5..3785941 100644
--- a/include/spi.h
+++ b/include/spi.h
@@ -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