All of lore.kernel.org
 help / color / mirror / Atom feed
* [U-Boot] [PATCH v1] cmd: sspi: Add an additional argument to set the bus frequency
@ 2017-02-17 17:27 Philipp Tomsich
  2017-02-17 17:36 ` Tom Rini
  0 siblings, 1 reply; 5+ messages in thread
From: Philipp Tomsich @ 2017-02-17 17:27 UTC (permalink / raw)
  To: u-boot

Signed-off-by: Philipp Tomsich <philipp.tomsich@theobroma-systems.com>
---
 cmd/spi.c | 18 +++++++++++-------
 1 file changed, 11 insertions(+), 7 deletions(-)

diff --git a/cmd/spi.c b/cmd/spi.c
index f16ef9a..b495b87 100644
--- a/cmd/spi.c
+++ b/cmd/spi.c
@@ -36,51 +36,52 @@
 static unsigned int	bus;
 static unsigned int	cs;
 static unsigned int	mode;
+static unsigned int     hz;
 static int   		bitlen;
 static uchar 		dout[MAX_SPI_BYTES];
 static uchar 		din[MAX_SPI_BYTES];
 
-static int do_spi_xfer(int bus, int cs)
+static int do_spi_xfer(int bus, int cs, unsigned int hz)
 {
 	struct spi_slave *slave;
 	int ret = 0;
 
 #ifdef CONFIG_DM_SPI
 	char name[30], *str;
 	struct udevice *dev;
 
 	snprintf(name, sizeof(name), "generic_%d:%d", bus, cs);
 	str = strdup(name);
 	if (!str)
 		return -ENOMEM;
-	ret = spi_get_bus_and_cs(bus, cs, 1000000, mode, "spi_generic_drv",
+	ret = spi_get_bus_and_cs(bus, cs, hz, mode, "spi_generic_drv",
 				 str, &dev, &slave);
 	if (ret)
 		return ret;
 #else
-	slave = spi_setup_slave(bus, cs, 1000000, mode);
+	slave = spi_setup_slave(bus, cs, hz, mode);
 	if (!slave) {
 		printf("Invalid device %d:%d\n", bus, cs);
 		return -EINVAL;
 	}
 #endif
 
 	ret = spi_claim_bus(slave);
 	if (ret)
 		goto done;
 	ret = spi_xfer(slave, bitlen, dout, din,
 		       SPI_XFER_BEGIN | SPI_XFER_END);
 #ifndef CONFIG_DM_SPI
 	/* We don't get an error code in this case */
 	if (ret)
 		ret = -EIO;
 #endif
 	if (ret) {
 		printf("Error %d during SPI transaction\n", ret);
 	} else {
 		int j;
 
 		for (j = 0; j < ((bitlen + 7) / 8); j++)
 			printf("%02X", din[j]);
 		printf("\n");
 	}
@@ -107,70 +108,73 @@ done:
 int do_spi (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 {
 	char  *cp = 0;
 	uchar tmp;
 	int   j;
 
 	/*
 	 * We use the last specified parameters, unless new ones are
 	 * entered.
 	 */
 
 	if ((flag & CMD_FLAG_REPEAT) == 0)
 	{
 		if (argc >= 2) {
 			mode = CONFIG_DEFAULT_SPI_MODE;
 			bus = simple_strtoul(argv[1], &cp, 10);
 			if (*cp == ':') {
 				cs = simple_strtoul(cp+1, &cp, 10);
 			} else {
 				cs = bus;
 				bus = CONFIG_DEFAULT_SPI_BUS;
 			}
 			if (*cp == '.')
 				mode = simple_strtoul(cp+1, NULL, 10);
 		}
 		if (argc >= 3)
 			bitlen = simple_strtoul(argv[2], NULL, 10);
 		if (argc >= 4) {
 			cp = argv[3];
 			for(j = 0; *cp; j++, cp++) {
 				tmp = *cp - '0';
 				if(tmp > 9)
 					tmp -= ('A' - '0') - 10;
 				if(tmp > 15)
 					tmp -= ('a' - 'A');
 				if(tmp > 15) {
 					printf("Hex conversion error on %c\n", *cp);
 					return 1;
 				}
 				if((j % 2) == 0)
 					dout[j / 2] = (tmp << 4);
 				else
 					dout[j / 2] |= tmp;
 			}
 		}
+		if (argc >= 5)
+			hz = simple_strtoul(argv[4], NULL, 10);
 	}
 
 	if ((bitlen < 0) || (bitlen >  (MAX_SPI_BYTES * 8))) {
 		printf("Invalid bitlen %d\n", bitlen);
 		return 1;
 	}
 
-	if (do_spi_xfer(bus, cs))
+	if (do_spi_xfer(bus, cs, hz))
 		return 1;
 
 	return 0;
 }
 
 /***************************************************/
 
 U_BOOT_CMD(
-	sspi,	5,	1,	do_spi,
+	sspi,	6,	1,	do_spi,
 	"SPI utility command",
-	"[<bus>:]<cs>[.<mode>] <bit_len> <dout> - Send and receive bits\n"
+	"[<bus>:]<cs>[.<mode>] <bit_len> <dout> [<hz>] - Send and receive bits\n"
 	"<bus>     - Identifies the SPI bus\n"
 	"<cs>      - Identifies the chip select\n"
 	"<mode>    - Identifies the SPI mode to use\n"
 	"<bit_len> - Number of bits to send (base 10)\n"
-	"<dout>    - Hexadecimal string that gets sent"
+	"<dout>    - Hexadecimal string that gets sent\n"
+	"[<clk>]   - Bus clock in Hz"
 );
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [U-Boot] [PATCH v1] cmd: sspi: Add an additional argument to set the bus frequency
  2017-02-17 17:27 [U-Boot] [PATCH v1] cmd: sspi: Add an additional argument to set the bus frequency Philipp Tomsich
@ 2017-02-17 17:36 ` Tom Rini
  2017-02-17 18:10   ` [U-Boot] [PATCH v2] " Philipp Tomsich
  0 siblings, 1 reply; 5+ messages in thread
From: Tom Rini @ 2017-02-17 17:36 UTC (permalink / raw)
  To: u-boot

On Fri, Feb 17, 2017 at 06:27:28PM +0100, Philipp Tomsich wrote:

> Signed-off-by: Philipp Tomsich <philipp.tomsich@theobroma-systems.com>

Please add a bit more information here as to why you need this, in the
commit message.

[snip]
> +		if (argc >= 5)
> +			hz = simple_strtoul(argv[4], NULL, 10);

You need an else here to set hz to the previously used value.  Thanks!

-- 
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20170217/ea1b3c5b/attachment.sig>

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [U-Boot] [PATCH v2] cmd: sspi: Add an additional argument to set the bus frequency
  2017-02-17 17:36 ` Tom Rini
@ 2017-02-17 18:10   ` Philipp Tomsich
  2017-02-17 22:56     ` Tom Rini
  2017-02-25  8:54     ` Jagan Teki
  0 siblings, 2 replies; 5+ messages in thread
From: Philipp Tomsich @ 2017-02-17 18:10 UTC (permalink / raw)
  To: u-boot

The spi command is rather useful for board verification, bring-up and
software testing.  One use in our lab is the testing of the clock
code, which requires the ability to send data at different SPI clocks.

The changeset adds an additional (optional) positional argument to the
'spi' command that allows the selection of a SPI clock for
communication (the previous default of 1MHz is retained, if the
argument is omitted).

Signed-off-by: Philipp Tomsich <philipp.tomsich@theobroma-systems.com>
---
 cmd/spi.c | 20 +++++++++++++-------
 1 file changed, 13 insertions(+), 7 deletions(-)

diff --git a/cmd/spi.c b/cmd/spi.c
index f16ef9a..1cd2ebc 100644
--- a/cmd/spi.c
+++ b/cmd/spi.c
@@ -30,6 +30,8 @@
 #   define CONFIG_DEFAULT_SPI_MODE	SPI_MODE_0
 #endif
 
+#define SSPI_DEFAULT_HZ  1000000
+
 /*
  * Values from last command.
  */
@@ -40,7 +42,7 @@ static int   		bitlen;
 static uchar 		dout[MAX_SPI_BYTES];
 static uchar 		din[MAX_SPI_BYTES];
 
-static int do_spi_xfer(int bus, int cs)
+static int do_spi_xfer(int bus, int cs, unsigned int hz)
 {
 	struct spi_slave *slave;
 	int ret = 0;
@@ -53,12 +55,12 @@ static int do_spi_xfer(int bus, int cs)
 	str = strdup(name);
 	if (!str)
 		return -ENOMEM;
-	ret = spi_get_bus_and_cs(bus, cs, 1000000, mode, "spi_generic_drv",
+	ret = spi_get_bus_and_cs(bus, cs, hz, mode, "spi_generic_drv",
 				 str, &dev, &slave);
 	if (ret)
 		return ret;
 #else
-	slave = spi_setup_slave(bus, cs, 1000000, mode);
+	slave = spi_setup_slave(bus, cs, hz, mode);
 	if (!slave) {
 		printf("Invalid device %d:%d\n", bus, cs);
 		return -EINVAL;
@@ -109,6 +111,7 @@ int do_spi (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 	char  *cp = 0;
 	uchar tmp;
 	int   j;
+	unsigned int hz = SSPI_DEFAULT_HZ;
 
 	/*
 	 * We use the last specified parameters, unless new ones are
@@ -149,6 +152,8 @@ int do_spi (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 					dout[j / 2] |= tmp;
 			}
 		}
+		if (argc >= 5)
+			hz = simple_strtoul(argv[4], NULL, 10);
 	}
 
 	if ((bitlen < 0) || (bitlen >  (MAX_SPI_BYTES * 8))) {
@@ -156,7 +161,7 @@ int do_spi (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 		return 1;
 	}
 
-	if (do_spi_xfer(bus, cs))
+	if (do_spi_xfer(bus, cs, hz))
 		return 1;
 
 	return 0;
@@ -165,12 +170,13 @@ int do_spi (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 /***************************************************/
 
 U_BOOT_CMD(
-	sspi,	5,	1,	do_spi,
+	sspi,	6,	1,	do_spi,
 	"SPI utility command",
-	"[<bus>:]<cs>[.<mode>] <bit_len> <dout> - Send and receive bits\n"
+	"[<bus>:]<cs>[.<mode>] <bit_len> <dout> [<hz>] - Send and receive bits\n"
 	"<bus>     - Identifies the SPI bus\n"
 	"<cs>      - Identifies the chip select\n"
 	"<mode>    - Identifies the SPI mode to use\n"
 	"<bit_len> - Number of bits to send (base 10)\n"
-	"<dout>    - Hexadecimal string that gets sent"
+	"<dout>    - Hexadecimal string that gets sent\n"
+	"[<clk>]   - Bus clock in Hz (defaults to 1 MHz)"
 );
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [U-Boot] [PATCH v2] cmd: sspi: Add an additional argument to set the bus frequency
  2017-02-17 18:10   ` [U-Boot] [PATCH v2] " Philipp Tomsich
@ 2017-02-17 22:56     ` Tom Rini
  2017-02-25  8:54     ` Jagan Teki
  1 sibling, 0 replies; 5+ messages in thread
From: Tom Rini @ 2017-02-17 22:56 UTC (permalink / raw)
  To: u-boot

On Fri, Feb 17, 2017 at 07:10:08PM +0100, Philipp Tomsich wrote:

> The spi command is rather useful for board verification, bring-up and
> software testing.  One use in our lab is the testing of the clock
> code, which requires the ability to send data at different SPI clocks.
> 
> The changeset adds an additional (optional) positional argument to the
> 'spi' command that allows the selection of a SPI clock for
> communication (the previous default of 1MHz is retained, if the
> argument is omitted).
> 
> Signed-off-by: Philipp Tomsich <philipp.tomsich@theobroma-systems.com>

Reviewed-by: Tom Rini <trini@konsulko.com>

-- 
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20170217/b3ce4766/attachment.sig>

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [U-Boot] [PATCH v2] cmd: sspi: Add an additional argument to set the bus frequency
  2017-02-17 18:10   ` [U-Boot] [PATCH v2] " Philipp Tomsich
  2017-02-17 22:56     ` Tom Rini
@ 2017-02-25  8:54     ` Jagan Teki
  1 sibling, 0 replies; 5+ messages in thread
From: Jagan Teki @ 2017-02-25  8:54 UTC (permalink / raw)
  To: u-boot

On Fri, Feb 17, 2017 at 11:40 PM, Philipp Tomsich
<philipp.tomsich@theobroma-systems.com> wrote:
> The spi command is rather useful for board verification, bring-up and
> software testing.  One use in our lab is the testing of the clock
> code, which requires the ability to send data at different SPI clocks.
>
> The changeset adds an additional (optional) positional argument to the
> 'spi' command that allows the selection of a SPI clock for
> communication (the previous default of 1MHz is retained, if the
> argument is omitted).
>
> Signed-off-by: Philipp Tomsich <philipp.tomsich@theobroma-systems.com>
> ---
>  cmd/spi.c | 20 +++++++++++++-------
>  1 file changed, 13 insertions(+), 7 deletions(-)
>
> diff --git a/cmd/spi.c b/cmd/spi.c
> index f16ef9a..1cd2ebc 100644
> --- a/cmd/spi.c
> +++ b/cmd/spi.c
> @@ -30,6 +30,8 @@
>  #   define CONFIG_DEFAULT_SPI_MODE     SPI_MODE_0
>  #endif
>
> +#define SSPI_DEFAULT_HZ  1000000
> +
>  /*
>   * Values from last command.
>   */
> @@ -40,7 +42,7 @@ static int            bitlen;
>  static uchar           dout[MAX_SPI_BYTES];
>  static uchar           din[MAX_SPI_BYTES];
>
> -static int do_spi_xfer(int bus, int cs)
> +static int do_spi_xfer(int bus, int cs, unsigned int hz)
>  {
>         struct spi_slave *slave;
>         int ret = 0;
> @@ -53,12 +55,12 @@ static int do_spi_xfer(int bus, int cs)
>         str = strdup(name);
>         if (!str)
>                 return -ENOMEM;
> -       ret = spi_get_bus_and_cs(bus, cs, 1000000, mode, "spi_generic_drv",
> +       ret = spi_get_bus_and_cs(bus, cs, hz, mode, "spi_generic_drv",
>                                  str, &dev, &slave);
>         if (ret)
>                 return ret;
>  #else
> -       slave = spi_setup_slave(bus, cs, 1000000, mode);
> +       slave = spi_setup_slave(bus, cs, hz, mode);
>         if (!slave) {
>                 printf("Invalid device %d:%d\n", bus, cs);
>                 return -EINVAL;
> @@ -109,6 +111,7 @@ int do_spi (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
>         char  *cp = 0;
>         uchar tmp;
>         int   j;
> +       unsigned int hz = SSPI_DEFAULT_HZ;

Default value for DM_SPI is from DT, so assign 0 for DM_SPI.

thanks!
-- 
Jagan Teki
Senior Linux Kernel Engineer | Amarula Solutions
U-Boot, Linux | Upstream Maintainer
Hyderabad, India.

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2017-02-25  8:54 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-02-17 17:27 [U-Boot] [PATCH v1] cmd: sspi: Add an additional argument to set the bus frequency Philipp Tomsich
2017-02-17 17:36 ` Tom Rini
2017-02-17 18:10   ` [U-Boot] [PATCH v2] " Philipp Tomsich
2017-02-17 22:56     ` Tom Rini
2017-02-25  8:54     ` Jagan Teki

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.