cmd: read/write: Add support for read and write operations
authorLokesh Vutla <lokeshvutla@ti.com>
Sat, 24 Aug 2019 14:56:31 +0000 (20:26 +0530)
committerLokesh Vutla <lokeshvutla@ti.com>
Mon, 26 Aug 2019 03:55:11 +0000 (09:25 +0530)
Add support for 32 bit read and write operations.

Signed-off-by: Lokesh Vutla <lokeshvutla@ti.com>
Makefile
common/cmd_rw.c [new file with mode: 0644]
common/help.c
common/k3conf.c
include/help.h
include/k3conf.h

index 5a2d1d0a5c82d5ef27d654188711e60552322f69..d08610da2c1b2eb37c62b988806ded9f36641753 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -70,7 +70,8 @@ COMMONSOURCES=\
                common/cmd_dump.c \
                common/cmd_enable.c \
                common/cmd_disable.c \
-               common/cmd_set.c
+               common/cmd_set.c \
+               common/cmd_rw.c
 
 AM65XSOURCES =\
              soc/am65x/am65x_host_info.c \
diff --git a/common/cmd_rw.c b/common/cmd_rw.c
new file mode 100644 (file)
index 0000000..ca2deef
--- /dev/null
@@ -0,0 +1,96 @@
+/*
+ * K3CONF Command Read and write
+ *
+ * Copyright (C) 2019 Texas Instruments Incorporated - http://www.ti.com/
+ *     Lokesh Vutla <lokeshvutla@ti.com>
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions
+ *  are met:
+ *
+ *    Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *
+ *    Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the
+ *    distribution.
+ *
+ *    Neither the name of Texas Instruments Incorporated nor the names of
+ *    its contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ *  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ *  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ *  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ *  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ *  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ *  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <stdlib.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <tisci.h>
+#include <socinfo.h>
+#include <help.h>
+#include <k3conf.h>
+#include <mmio.h>
+
+int process_read_command(int argc, char *argv[])
+{
+       uint64_t addr = 0;
+       unsigned int val;
+       int ret;
+
+       if (argc < 1) {
+               help(HELP_READ);
+               return -1;
+       }
+
+       ret = sscanf(argv[0], "%lx", &addr);
+       if (ret != 1) {
+               help(HELP_READ);
+               return -1;
+       }
+
+       val = mmio_read_64(addr);
+       fprintf(stdout, "Value at addr 0x%lx = 0x%x\n\n", addr, val);
+
+       return 0;
+}
+
+int process_write_command(int argc, char *argv[])
+{
+       unsigned int val;
+       uint64_t addr;
+       int ret;
+
+       if (argc < 2) {
+               help(HELP_WRITE);
+               return -1;
+       }
+
+       ret = sscanf(argv[0], "%lx", &addr);
+       if (ret != 1) {
+               help(HELP_WRITE);
+               return -1;
+       }
+
+       ret = sscanf(argv[1], "%x", &val);
+       if (ret != 1) {
+               help(HELP_WRITE);
+               return -1;
+       }
+
+       mmio_write_32(addr, val);
+       fprintf(stdout, "Value at addr 0x%lx = 0x%x\n\n", addr,
+               mmio_read_32(addr));
+
+       return 0;
+}
index 39055ece7f581cb10485d6b2863d62a84f56bac8..078f5a2ab1eb23aa303e88fab2a1b28779b762b3 100644 (file)
@@ -156,4 +156,12 @@ void help(help_category cat)
                printf("\n\tk3conf set clock <dev_id> <clk_id> <freq>\n");
                printf("\t      Sets the clock frequency and prints the status\n");
        }
+       if ((cat == HELP_ALL) || (cat == HELP_READ)) {
+               printf("\n\tk3conf read <addr>\n");
+               printf("\t      Prints the value at the specified io memory\n");
+       }
+       if ((cat == HELP_ALL) || (cat == HELP_WRITE)) {
+               printf("\n\tk3conf write <addr> <val>\n");
+               printf("\t      Writes the value at the specified io memory\n");
+       }
 }
index 898c1c41cb021fd4d2fd131a251353f3d5d667db..0e068c14cfc9993e1d4d9c095ec320509e1515d2 100644 (file)
@@ -135,6 +135,16 @@ int main(int argc, char *argv[])
                argv++;
                k3conf_print_version(stdout);
                return process_set_command(argc, argv);
+       } else if (!strcmp(argv[0], "read")) {
+               argc--;
+               argv++;
+               k3conf_print_version(stdout);
+               return process_read_command(argc, argv);
+       } else if (!strcmp(argv[0], "write")) {
+               argc--;
+               argv++;
+               k3conf_print_version(stdout);
+               return process_write_command(argc, argv);
        } else {
                fprintf(stderr, "Invalid argument %s", argv[0]);
                help(HELP_USAGE);
index 930d62816162cd0903445609fb172f7726a193af..aec24115e2dd376bcb8b7b617c3dae24dac1af52 100644 (file)
@@ -56,6 +56,8 @@ typedef enum {
        HELP_DISABLE_CLOCK,
        HELP_SET,
        HELP_SET_CLOCK,
+       HELP_READ,
+       HELP_WRITE,
        HELP_ALL,
        HELP_CATEGORY_MAX,
 } help_category;
index af34025cf0b9efb0806d1f6967151a50978f6cb8..4516f2a0cc80f347456febef33a44e6f1f4b2646 100644 (file)
@@ -51,4 +51,6 @@ int dump_cpu_info(void);
 int process_enable_command(int argc, char *argv[]);
 int process_disable_command(int argc, char *argv[]);
 int process_set_command(int argc, char *argv[]);
+int process_read_command(int argc, char *argv[]);
+int process_write_command(int argc, char *argv[]);
 #endif