Hi, On 29 April 2015 at 04:40, Haikun Wang <haikun.w...@freescale.com> wrote: > Add command "sf info" to show the information of the current SPI flash device. > > Signed-off-by: Haikun Wang <haikun.w...@freescale.com> > --- > In current sf driver, we show the debug information during the flash probe > period. > > In case of without DM SPI, we need to run command "sf probe" to get the debug > information of the current SPI flash device. "sf probe" will re-identify the > device every time and it reduce the efficiency. We can get the debug > information > without any re-identify process using "sf info". > > In case of using DM SPI, if we disable CONFIG_DM_DEVICE_REMOVE "sf probe" will > only call the flash driver's probe function the first time you run it and no > information will show after the first. It is recommended that only call the > flash driver's probe function once during u-boot period. You can get the debug > information using "sf info" in this case. > > Changes in v1: None. > > common/cmd_sf.c | 43 ++++++++++++++++++++++++++++++++++++++++++- > 1 file changed, 42 insertions(+), 1 deletion(-)
I wonder if you should enable this command only when driver model is used? > > diff --git a/common/cmd_sf.c b/common/cmd_sf.c > index 6aabf39..38841fa 100644 > --- a/common/cmd_sf.c > +++ b/common/cmd_sf.c > @@ -503,6 +503,44 @@ static int do_spi_flash_test(int argc, char * const > argv[]) > } > #endif /* CONFIG_CMD_SF_TEST */ > > +static int do_spi_flash_info(struct spi_flash *flash, bool dm_column_style) > +{ > + if (dm_column_style) { > + struct udevice *bus; > + struct udevice *dev; > + struct dm_spi_slave_platdata *plat; > + > + dev = flash->dev; > + bus = dev->parent; > + plat = dev_get_parent_platdata(dev); > + > + printf("Device: %s\n", dev->name); > + printf("Chipselect: %d\n", plat->cs); > + printf("Bind Driver: %s\n", dev->driver->name); > + printf("SPI bus: %s\n", bus->name); > + printf("SPI bus number: %d\n", bus->seq); > + printf("Flash type: %s\n", flash->name); > + printf("Page size: "); > + print_size(flash->page_size, "\n"); > + printf("Erase size: "); > + print_size(flash->erase_size, "\n"); > + printf("Total size: "); > + print_size(flash->size, "\n"); > + if (flash->memory_map) > + printf("Mapped at %p\n", flash->memory_map); > + } else { > + printf("SF: Detected %s with page size ", flash->name); > + print_size(flash->page_size, ", erase size "); > + print_size(flash->erase_size, ", total "); > + print_size(flash->size, ""); > + if (flash->memory_map) > + printf(", mapped at %p", flash->memory_map); > + puts("\n"); > + } > + > + return 0; > +} > + > static int do_spi_flash(cmd_tbl_t *cmdtp, int flag, int argc, > char * const argv[]) > { > @@ -537,6 +575,8 @@ static int do_spi_flash(cmd_tbl_t *cmdtp, int flag, int > argc, > else if (!strcmp(cmd, "test")) > ret = do_spi_flash_test(argc, argv); > #endif > + else if (!strcmp(cmd, "info")) > + ret = do_spi_flash_info(flash, > IS_ENABLED(CONFIG_DM_SPI_FLASH)); > else > ret = -1; > > @@ -567,6 +607,7 @@ U_BOOT_CMD( > "sf erase offset [+]len - erase `len' bytes from `offset'\n" > " `+len' round up `len' to block > size\n" > "sf update addr offset len - erase and write `len' bytes from > memory\n" > - " at `addr' to flash at `offset'" > + " at `addr' to flash at `offset'\n" > + "sf info - display info of the current SPI Flash device\n" > SF_TEST_HELP > ); > -- > 2.1.0.27.g96db324 > Regards, Simon _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot