All of lore.kernel.org
 help / color / mirror / Atom feed
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: Thu, 21 Apr 2016 10:00:22 +0530	[thread overview]
Message-ID: <5718575E.6030601@ti.com> (raw)
In-Reply-To: <AM2PR04MB0964C5E6C2D766EB3BDAC164E76E0@AM2PR04MB0964.eurprd04.prod.outlook.com>

Hi Qianyu,

[...]

>>>> @@ -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
> 
> Yes. Actually I'm thinking that the second spi_set_speed_mode()(called from
> spi_get_bus_and_cs()) could just be removed from the end of the function.
> 

If second call to spi_set_speed_mode() is removed then how would you
override default speed/mode specified via DT with that of cmd line args
passed to sf probe. (else we need to change the definition of sf probe
to not accept speed/mode in case of DT)

>> _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.
>>
> 
> Yes. But notice that the speed and mode will only be replaced by 
> CONFIG_SF_DEFAULT_SPEED/MODE at the end of the calling. Every time 'sf probe' is
> called, the device will be removed(if active) and thus it'll always call device_probe()
> to set the speed&mode from DT. Then the driver will use them in the actual transfer.

True, I see the first call and speed/mode is set to DT values
accordingly. But, that's not the final spi_set_speed_mode() call to the
SPI driver.

> After the transfer is finished, the speed and mode are replaced by
> CONFIG_SF_DEFAULT_SPEED/MODE(or anything else) again but they wouldn't be used
> for the transfer at all.
> 

Sorry... I don't understand. What do you mean by transfer? sf probe does
not do any data transfer other than reading jedec id.
The values set by the SPI driver during device_probe() will be
overwritten by the last spi_set_speed_mode() call in
spi_get_bus_and_cs() which happens to pass CONFIG_SF_DEFAULT_SPEED/MODE.

Here is the call sequence:

sf probe()
---> device_probe()
  ---> spi_set_speed_mode(values from DT)
    ---> driver's pi_set_speed_mode() /* set to DT values */
---> spi_set_speed_mode(overridden values)
  ---> driver's spi_set_speed_mode() /* set to newer(not DT) values */

Now if sf read is called after sf probe. One would see
CONFIG_SF_DEFAULT_SPEED/MODE values in driver settings and data
transfers happen at DEFAULT_SPEED.


> And there may be another related issue in this case that I have reported to Simon.
> If you would like to test on your board, please remove the device_unbind() in
> do_spi_flash_probe(). The current SPI driver model will discard users' spi slave in DT from
> the second 'sf probe' and create a new one using CONFIG_SF_DEFAULT_SPEED/MODE. 
>  

Yes, I am aware of the problem with second sf probe discarding values
from DT. IIRC, Simon not just wanted to remove device_unbind() but also
do some more refactoring of messages in uclass drivers. Maybe Simon is
working on the fix.

-- 
Regards
Vignesh

  reply	other threads:[~2016-04-21  4:30 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
2016-04-21  3:50   ` Qianyu Gong
2016-04-21  4:30     ` Vignesh R [this message]
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=5718575E.6030601@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.