
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? The unbind would cause a series of free operations on the device list, correct?
Then if I probe a flash twice, at the second time the driver model will create a new flash named 'spi_flash@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.
=> dm tree Class Probed Name ---------------------------------------- root [ + ] root_driver simple_bus [ + ] `-- soc spi [ + ] |-- dspi@2100000 spi_flash [ ] | |-- n25q128a spi_flash [ + ] | |-- spi_flash@1:1 spi_flash [ + ] | `-- spi_flash@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@xx:xx in dm tree after several probes, I began to read something about driver model.:)
Regards, Qianyu