cmd: enable: Add support for enable command
authorLokesh Vutla <lokeshvutla@ti.com>
Fri, 23 Aug 2019 11:09:37 +0000 (16:39 +0530)
committerLokesh Vutla <lokeshvutla@ti.com>
Mon, 26 Aug 2019 03:55:11 +0000 (09:25 +0530)
Adds support for enable commads that allows for enabling a device
or a clock.

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

index 8ba687589289f3152bf9234df3b522f26aa2786d..91c5ba2b6962832d91d05da481fe7350bd362fff 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -67,7 +67,8 @@ COMMONSOURCES=\
                common/tisci/tisci_clock.c \
                common/autoadjust_table.c \
                common/cmd_show.c \
-               common/cmd_dump.c
+               common/cmd_dump.c \
+               common/cmd_enable.c
 
 AM65XSOURCES =\
              soc/am65x/am65x_host_info.c \
diff --git a/common/cmd_enable.c b/common/cmd_enable.c
new file mode 100644 (file)
index 0000000..c5c1689
--- /dev/null
@@ -0,0 +1,118 @@
+/*
+ * K3CONF Command Enable
+ *
+ * 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 <string.h>
+#include <stdio.h>
+#include <tisci.h>
+#include <socinfo.h>
+#include <help.h>
+#include <k3conf.h>
+
+static int enable_device(int argc, char *argv[])
+{
+       uint32_t dev_id, ret;
+
+       if (argc < 1)
+               return -1;
+
+       ret = sscanf(argv[0], "%u", &dev_id);
+       if (ret != 1)
+               return -1;
+
+       ret = ti_sci_cmd_enable_device(dev_id);
+       if (ret)
+               return ret;
+
+       return dump_devices_info(argc, argv);
+}
+
+static int enable_clock(int argc, char *argv[])
+{
+       uint32_t dev_id, clk_id, ret;
+
+       if (argc < 2)
+               return -1;
+
+       ret = sscanf(argv[0], "%u", &dev_id);
+       if (ret != 1)
+               return -1;
+
+       ret = sscanf(argv[1], "%u", &clk_id);
+       if (ret != 1)
+               return -1;
+
+       ret = ti_sci_cmd_get_clk(dev_id, clk_id);
+       if (ret)
+               return ret;
+
+       return dump_clocks_info(argc, argv);
+}
+
+int process_enable_command(int argc, char *argv[])
+{
+       int ret;
+
+       if (argc < 1) {
+               help(HELP_ENABLE);
+               return -1;
+       }
+
+       if (!strncmp(argv[0], "device", 6)) {
+               argc--;
+               argv++;
+               ret = enable_device(argc, argv);
+               if (ret) {
+                       fprintf(stderr, "Invalid device arguments\n");
+                       help(HELP_ENABLE_DEVICE);
+               }
+       } else if (!strncmp(argv[0], "clock", 5)) {
+               argc--;
+               argv++;
+               ret = enable_clock(argc, argv);
+               if (ret) {
+                       fprintf(stderr, "Invalid clock arguments\n");
+                       help(HELP_ENABLE_CLOCK);
+               }
+       } else if (!strcmp(argv[0], "--help")) {
+               help(HELP_ENABLE);
+               return 0;
+       } else {
+               fprintf(stderr, "Invalid argument %s\n", argv[1]);
+               help(HELP_ENABLE);
+               return -1;
+       }
+       return ret;
+}
index e1bbfed5280bcefef49ae870de7d786fd840f77e..a78cf37f8d59b3190e5a4c5dcc898b9ed8aa6dd3 100644 (file)
@@ -131,4 +131,14 @@ void help(help_category cat)
                printf("\n\tk3conf dump processor <proc_id>\n");
                printf("\t      Prints status of the given TISCI processors\n");
        }
+       if ((cat == HELP_ALL) || (cat == HELP_ENABLE) ||
+           (cat == HELP_ENABLE_DEVICE)) {
+               printf("\n\tk3conf enable device <dev_id>\n");
+               printf("\t      Enables the TISCI device and prints the status\n");
+       }
+       if ((cat == HELP_ALL) || (cat == HELP_ENABLE) ||
+           (cat == HELP_ENABLE_CLOCK)) {
+               printf("\n\tk3conf enable clock <dev_id> <clk_id>\n");
+               printf("\t      Enables the TISCI clock and prints the status\n");
+       }
 }
index af57dfb7a84480d3ad076f410f530fda2c359cd7..b20c02985f97d791ffaaf33bd073d85323fe6291 100644 (file)
@@ -120,6 +120,11 @@ int main(int argc, char *argv[])
                argv++;
                k3conf_print_version(stdout);
                return process_dump_command(argc, argv);
+       } else if (!strcmp(argv[0], "enable")) {
+               argc--;
+               argv++;
+               k3conf_print_version(stdout);
+               return process_enable_command(argc, argv);
        } else {
                fprintf(stderr, "Invalid argument %s", argv[0]);
                help(HELP_USAGE);
index 9af9541422fc0ca1ca1071b2f33769b03b40148d..018c5f7f1bd2f84c52e350c9db124b47bf11fcb2 100644 (file)
@@ -48,6 +48,9 @@ typedef enum {
        HELP_DUMP_DEVICE,
        HELP_DUMP_CLOCK,
        HELP_DUMP_PROCESSOR,
+       HELP_ENABLE,
+       HELP_ENABLE_DEVICE,
+       HELP_ENABLE_CLOCK,
        HELP_ALL,
        HELP_CATEGORY_MAX,
 } help_category;
index 03c66cfbdb6ab867686e6c392ec66ca869d4bfa6..f81dcfeff7a55055ad04c90307baef3c50310ce4 100644 (file)
@@ -48,4 +48,5 @@ int process_dump_command(int argc, char *argv[]);
 int dump_clocks_info(int argc, char *argv[]);
 int dump_devices_info(int argc, char *argv[]);
 int dump_cpu_info(void);
+int process_enable_command(int argc, char *argv[]);
 #endif