From: Vignesh R <vigneshr@ti.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH v3] dm: spi: Read default speed and mode values from DT
Date: Wed, 20 Apr 2016 16:16:46 +0530 [thread overview]
Message-ID: <57175E16.9060800@ti.com> (raw)
In-Reply-To: <AM2PR04MB0964E7B8515058647168B360E76D0@AM2PR04MB0964.eurprd04.prod.outlook.com>
On 04/20/2016 03:26 PM, Qianyu Gong wrote:
> 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@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.
>
It does (see below)...
> 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.
Yes, spi_set_speed_mode() is called from
spi_flash_probe_slave()->spi_claim_bus() as part of device_probe().
spi_claim_bus() in spi-uclass.c speed & mode are appropriately passed
based on DT data to spi_set_speed_mode(). But that's not the issue.
But in spi_get_bus_and_cs() (called from sf probe) there is a call to
spi_set_speed_mode() after device_probe() for inactive devices. This
call is to _override_ the speed set via DT with those passed as cmd line
args of sf probe. But, if no args are passed to sf probe, speed and mode
default to CONFIG_SF_DEFAULT_SPEED/MODE (see do_spi_flash_probe() in
cmd/sf.c) instead of using DT inputs.
--
Regards
Vignesh
next prev parent reply other threads:[~2016-04-20 10:46 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
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 [this message]
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
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=57175E16.9060800@ti.com \
--to=vigneshr@ti.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox