[U-Boot] [PATCH v1] cmd/sf: probe flash with speed of last known flash or speed from devicetree

Vignesh R vigneshr at ti.com
Wed Aug 24 13:12:34 CEST 2016



On Wednesday 24 August 2016 04:21 PM, Hannes Schmelzer wrote:
> On 08/24/2016 12:35 PM, Vignesh R wrote:
>> Hi,
> Hi Vignesh,
>> On Wednesday 24 August 2016 03:35 PM, Hannes Schmelzer wrote:
>>> During probing flashes on the spi bus using the "sf probe" command, a
>>> maybe existing flash (from fdt) is unbound and removed to force the
>>> 'spi_flash_probe_bus_cs' really scanning the bus.
>>>
>>> Today the bus is probed with speed 0, this triggers several fall-back
>>> mechanism (mostly in the low-level drivers) to catch the impossible zero
>>> speed.
>>> Result of this is, that the spi-flash runs at very low speed depending
>>> on the minimum given by low-level driver/hardware.
>>>
>>> Values like 'spi-max-frequency' from devicetree are ignored totally
>>> today.
>>>
>>> This commit changes as following:
>>> - if there was already some flash binding in devicetree (having some
>>>    spi-max-frequency within) speed is taken from it
>>> - if no flash binding was present for speed the 'spi-max-frequency' from
>>>    the responsible spi node is taken.
>>>
>>> Signed-off-by: Hannes Schmelzer <oe5hpm at oevsv.at>
>>
>> With commit 96907c0fe50a8 ("dm: spi: Read default speed and mode values
>> from DT") sf probe picks spi-max-frequency from DT if not specified as
>> argument.
>>
>> But when sf probe is called second time, the command fails to pick up
>> speed from DT. This is because flash node is unbound from the SPI
>> controller children nodes. Below patch should fix this issue:
>> https://patchwork.ozlabs.org/patch/659979/
> 
> sry ... i didn't took notice about this patch at the beginning of mine.
> Just reviewed and tested it.
> 
> The named patch makes things a bit better but not good.
> Speed for flash still has no relationship to 'spi-max-frequency' from
> the spi-bus nor with a maybe defined flash in dts.
> 
> Rather the #define CONFIG_ENV_SPI_MAX_HZ is used.
> 

sf probe calls do_spi_flash_probe()
		-spi_flash_probe_bus_cs()
		 -spi_get_bus_and_cs()

In spi_get_bus_and_cs():
	if (!speed) {
                speed = plat->max_hz;
                mode = plat->mode;
        }
This should set speed to spi-max-frequency as per flash DT node.

AFAIU, saveenv() uses CONFIG_ENV_SPI_MAX_HZ only when
CONFIG_DM_SPI_FLASH is not defined. Could please explain how
CONFIG_ENV_SPI_MAX_HZ takes precedence over spi-max-frequency during sf
probe?


-- 
Regards
Vignesh


More information about the U-Boot mailing list