Message ID | 1328032330-20883-7-git-send-email-eric.nelson@boundarydevices.com |
---|---|
State | Accepted |
Delegated to: | Mike Frysinger |
Headers | show |
On Wed, Feb 1, 2012 at 1:52 AM, Eric Nelson <eric.nelson@boundarydevices.com> wrote: > This patch allows a board configuration file to provide default bus > and chip-selects for SPI flash so that first argument to the 'sf' command > is optional. > > On boards that use the mxc_spi driver and a GPIO for chip select, this allows > a much simpler command line: > U-Boot> sf probe > instead of > U-Boot> sf probe 0x5300 > Signed-off-by: Eric Nelson <eric.nelson@boundarydevices.com> > --- > common/cmd_sf.c | 37 +++++++++++++++++++++---------------- > 1 files changed, 21 insertions(+), 16 deletions(-) Acked-by: Jason Liu <jason.hui@linaro.org> Tested on i.mx6q sabre-lite board with sf command: MX6QSABRELITE U-Boot > sf probe SF: Detected SST25VF016B with page size 4 KiB, total 2 MiB Tested-by: Jason Liu <jason.hui@linaro.org> > > diff --git a/common/cmd_sf.c b/common/cmd_sf.c > index 612fd18..98e4162 100644 > --- a/common/cmd_sf.c > +++ b/common/cmd_sf.c > @@ -17,6 +17,12 @@ > #ifndef CONFIG_SF_DEFAULT_MODE > # define CONFIG_SF_DEFAULT_MODE SPI_MODE_3 > #endif > +#ifndef CONFIG_SF_DEFAULT_CS > +# define CONFIG_SF_DEFAULT_CS 0 > +#endif > +#ifndef CONFIG_SF_DEFAULT_BUS > +# define CONFIG_SF_DEFAULT_BUS 0 > +#endif > > static struct spi_flash *flash; > > @@ -63,27 +69,26 @@ static int sf_parse_len_arg(char *arg, ulong *len) > > static int do_spi_flash_probe(int argc, char * const argv[]) > { > - unsigned int bus = 0; > - unsigned int cs; > + unsigned int bus = CONFIG_SF_DEFAULT_BUS; > + unsigned int cs = CONFIG_SF_DEFAULT_CS; > unsigned int speed = CONFIG_SF_DEFAULT_SPEED; > unsigned int mode = CONFIG_SF_DEFAULT_MODE; > char *endp; > struct spi_flash *new; > > - if (argc < 2) > - return -1; > - > - cs = simple_strtoul(argv[1], &endp, 0); > - if (*argv[1] == 0 || (*endp != 0 && *endp != ':')) > - return -1; > - if (*endp == ':') { > - if (endp[1] == 0) > - return -1; > - > - bus = cs; > - cs = simple_strtoul(endp + 1, &endp, 0); > - if (*endp != 0) > + if (argc >= 2) { > + cs = simple_strtoul(argv[1], &endp, 0); > + if (*argv[1] == 0 || (*endp != 0 && *endp != ':')) > return -1; > + if (*endp == ':') { > + if (endp[1] == 0) > + return -1; > + > + bus = cs; > + cs = simple_strtoul(endp + 1, &endp, 0); > + if (*endp != 0) > + return -1; > + } > } > > if (argc >= 3) { > @@ -299,7 +304,7 @@ usage: > U_BOOT_CMD( > sf, 5, 1, do_spi_flash, > "SPI flash sub-system", > - "probe [bus:]cs [hz] [mode] - init flash device on given SPI bus\n" > + "probe [[bus:]cs] [hz] [mode] - init flash device on given SPI bus\n" > " and chip select\n" > "sf read addr offset len - read `len' bytes starting at\n" > " `offset' to memory at `addr'\n" > -- > 1.7.1 >
diff --git a/common/cmd_sf.c b/common/cmd_sf.c index 612fd18..98e4162 100644 --- a/common/cmd_sf.c +++ b/common/cmd_sf.c @@ -17,6 +17,12 @@ #ifndef CONFIG_SF_DEFAULT_MODE # define CONFIG_SF_DEFAULT_MODE SPI_MODE_3 #endif +#ifndef CONFIG_SF_DEFAULT_CS +# define CONFIG_SF_DEFAULT_CS 0 +#endif +#ifndef CONFIG_SF_DEFAULT_BUS +# define CONFIG_SF_DEFAULT_BUS 0 +#endif static struct spi_flash *flash; @@ -63,27 +69,26 @@ static int sf_parse_len_arg(char *arg, ulong *len) static int do_spi_flash_probe(int argc, char * const argv[]) { - unsigned int bus = 0; - unsigned int cs; + unsigned int bus = CONFIG_SF_DEFAULT_BUS; + unsigned int cs = CONFIG_SF_DEFAULT_CS; unsigned int speed = CONFIG_SF_DEFAULT_SPEED; unsigned int mode = CONFIG_SF_DEFAULT_MODE; char *endp; struct spi_flash *new; - if (argc < 2) - return -1; - - cs = simple_strtoul(argv[1], &endp, 0); - if (*argv[1] == 0 || (*endp != 0 && *endp != ':')) - return -1; - if (*endp == ':') { - if (endp[1] == 0) - return -1; - - bus = cs; - cs = simple_strtoul(endp + 1, &endp, 0); - if (*endp != 0) + if (argc >= 2) { + cs = simple_strtoul(argv[1], &endp, 0); + if (*argv[1] == 0 || (*endp != 0 && *endp != ':')) return -1; + if (*endp == ':') { + if (endp[1] == 0) + return -1; + + bus = cs; + cs = simple_strtoul(endp + 1, &endp, 0); + if (*endp != 0) + return -1; + } } if (argc >= 3) { @@ -299,7 +304,7 @@ usage: U_BOOT_CMD( sf, 5, 1, do_spi_flash, "SPI flash sub-system", - "probe [bus:]cs [hz] [mode] - init flash device on given SPI bus\n" + "probe [[bus:]cs] [hz] [mode] - init flash device on given SPI bus\n" " and chip select\n" "sf read addr offset len - read `len' bytes starting at\n" " `offset' to memory at `addr'\n"
This patch allows a board configuration file to provide default bus and chip-selects for SPI flash so that first argument to the 'sf' command is optional. On boards that use the mxc_spi driver and a GPIO for chip select, this allows a much simpler command line: U-Boot> sf probe instead of U-Boot> sf probe 0x5300 Signed-off-by: Eric Nelson <eric.nelson@boundarydevices.com> --- common/cmd_sf.c | 37 +++++++++++++++++++++---------------- 1 files changed, 21 insertions(+), 16 deletions(-)