[U-Boot] A problem about 'sf probe' using DM_SPI

Qianyu Gong qianyu.gong at nxp.com
Wed Apr 13 05:13:20 CEST 2016


Hi Simon,

> -----Original Message-----
> From: sjg at google.com [mailto:sjg at google.com] On Behalf Of Simon Glass
> Sent: Saturday, April 09, 2016 3:13 AM
> To: Qianyu Gong <qianyu.gong at nxp.com>
> Cc: u-boot at lists.denx.de; Mingkai Hu <mingkai.hu at nxp.com>; Yao Yuan
> <yao.yuan at nxp.com>; jteki at openedev.com
> Subject: Re: A problem about 'sf probe' using DM_SPI
> 
> Hi Qianyu,
> 
> On 25 March 2016 at 03:34, Qianyu Gong <qianyu.gong at nxp.com> wrote:
> > Hi Simon,
> >
> >
> >
> > I think I’m not very clear with this code in common/cmd_sf.c:
> >
> > “
> >
> > # ifdef CONFIG_DM_SPI_FLASH
> >
> >        /* Remove the old device, otherwise probe will just be a nop */
> >
> >        ret = spi_find_bus_and_cs(bus, cs, &bus_dev, &new);
> >
> >        if (!ret) {
> >
> >               device_remove(new);
> >
> >              device_unbind(new);
> >
> >      }
> >
> > ”
> >
> > I may understand the remove but why need to unbind the device?
> 
> This is because otherwise 'sf probe' would be a nop if the device
> already existed. The spi_flash_probe_bus_cs() call will simply return
> the existing device. If something has changed on the bus, it would be
> ignored.
> 
> >
> > The unbind would cause a series of free operations on the device list,
> > correct?
> 
> Yes
> 
> >
> > Then if I probe a flash twice, at the second time the driver model will
> > create
> >
> > a new flash named ‘spi_flash at xx:xx’ using default settings because it
> > doesn’t
> >
> > find such a device in the device list and never probes it from the board’s
> > fdt again.
> 
> Yes.
> 
> >
> > => dm tree
> >
> > Class       Probed   Name
> >
> > ----------------------------------------
> >
> > root        [ + ]    root_driver
> >
> > simple_bus  [ + ]    `-- soc
> >
> > spi         [ + ]           |-- dspi at 2100000
> >
> > spi_flash   [   ]        |    |-- n25q128a
> >
> > spi_flash   [ + ]        |   |-- spi_flash at 1:1
> >
> > spi_flash   [ + ]        |   `-- spi_flash at 1:2
> >
> > Fortunately the default SPI mode set by U-Boot is SPI_MODE_3 so it doesn’t
> > cause
> >
> > issues on our boards. But if an SPI flash which only supports SPI_MODE_0 is
> > used,
> >
> > I think it wouldn’t work properly from the second probe.
> >
> > Sorry if there is something wrong with my understandings.
> > Just because I found my flash’s name was changed to spi-flash at xx:xx in dm
> > tree
> > after several probes, I began to read something about driver model.J
> 
> Yes I think removing the unbind would be OK, except that we need a way
> to show the messages at the end of spi_flash_scan().
> 
> Probably these messages should move out of the uclass and into a
> separate call. We could add a function like spi_flash_show(struct
> udevice *dev) and call it from do_spi_flash_probe() and perhaps
> saveenv().
> 
> Regards,
> Simon

Thanks for your explanation.
So you mean the flash messages? Seems that removing the unbind won't affect
reading ID from a real flash.
But would the unbind be needed if the dts node is modified at runtime?(I'm not sure if
it is necessary)

Regards,
Qianyu



More information about the U-Boot mailing list