1 /*
2 * K3CONF Command Set
3 *
4 * Copyright (C) 2019 Texas Instruments Incorporated - http://www.ti.com/
5 * Lokesh Vutla <lokeshvutla@ti.com>
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
9 * are met:
10 *
11 * Redistributions of source code must retain the above copyright
12 * notice, this list of conditions and the following disclaimer.
13 *
14 * Redistributions in binary form must reproduce the above copyright
15 * notice, this list of conditions and the following disclaimer in the
16 * documentation and/or other materials provided with the
17 * distribution.
18 *
19 * Neither the name of Texas Instruments Incorporated nor the names of
20 * its contributors may be used to endorse or promote products derived
21 * from this software without specific prior written permission.
22 *
23 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
24 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
25 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
26 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
27 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
28 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
29 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
30 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
31 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
32 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
33 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34 */
36 #include <stdlib.h>
37 #include <string.h>
38 #include <stdio.h>
39 #include <tisci.h>
40 #include <socinfo.h>
41 #include <help.h>
42 #include <k3conf.h>
44 static int set_clock(int argc, char *argv[])
45 {
46 uint32_t dev_id, clk_id, ret;
47 uint64_t freq;
49 if (argc < 3)
50 return -1;
52 ret = sscanf(argv[0], "%u", &dev_id);
53 if (ret != 1)
54 return -1;
56 ret = sscanf(argv[1], "%u", &clk_id);
57 if (ret != 1)
58 return -1;
60 ret = sscanf(argv[2], "%lu", &freq);
61 if (ret != 1)
62 return -1;
64 ret = ti_sci_cmd_set_clk_freq(dev_id, clk_id, freq);
65 if (ret)
66 return ret;
68 return dump_clocks_info(argc, argv);
69 }
71 int process_set_command(int argc, char *argv[])
72 {
73 int ret;
75 if (argc < 1) {
76 help(HELP_SET);
77 return -1;
78 }
80 if (!strncmp(argv[0], "clock", 5)) {
81 argc--;
82 argv++;
83 ret = set_clock(argc, argv);
84 if (ret) {
85 fprintf(stderr, "Invalid clock arguments\n");
86 help(HELP_SET_CLOCK);
87 }
88 } else if (!strcmp(argv[0], "--help")) {
89 help(HELP_SET);
90 return 0;
91 } else {
92 fprintf(stderr, "Invalid argument %s\n", argv[1]);
93 help(HELP_SET);
94 return -1;
95 }
96 return ret;
97 }