mw_debug: Add -s frequency argument
authorMatt Johnston <matt@codeconstruct.com.au>
Fri, 26 Nov 2021 02:43:06 +0000 (10:43 +0800)
committerMatt Johnston <matt@codeconstruct.com.au>
Fri, 4 Feb 2022 08:09:28 +0000 (16:09 +0800)
Chose -s for speed, vs -f for --force

Signed-off-by: Matt Johnston <matt@codeconstruct.com.au>
scripts/mw_debug/mw_debug.c

index a2c04b0b219bccfc6c6a8f018070fa63c3b80937..4a7f6e18f177f2b977bac063857204efe1c60371 100644 (file)
@@ -49,7 +49,7 @@
 static bool debug;
 
 struct backend {
-       int (*init)(const char *target);
+       int (*init)(const char *target, int freq);
        int (*reset)(void);
        int (*command)(uint8_t op, uint8_t addr, uint64_t *data);
 };
@@ -67,13 +67,15 @@ static void check(int r, const char *failstr)
 
 static int sim_fd = -1;
 
-static int sim_init(const char *target)
+static int sim_init(const char *target, int freq)
 {
        struct sockaddr_in saddr;
        struct hostent *hp;
        const char *p, *host;
        int port, rc;
 
+       (void)freq;
+
        if (!target)
                target = "localhost:13245";
        p = strchr(target, ':');
@@ -210,7 +212,7 @@ static struct backend sim_backend = {
 
 static urj_chain_t *jc;
 
-static int jtag_init(const char *target)
+static int jtag_init(const char *target, int freq)
 {
        const char *sep;
        const char *cable;
@@ -266,6 +268,10 @@ static int jtag_init(const char *target)
                return -1;
        }
 
+       if (freq) {
+               urj_tap_cable_set_frequency(jc->cable, freq);
+       }
+
        /* XXX Hard wire part 0, that might need to change (use params and detect !) */
        rc = urj_tap_manual_add(jc, 6);
        if (rc < 0) {
@@ -720,7 +726,7 @@ int main(int argc, char *argv[])
 {
        const char *progname = argv[0];
        const char *target = NULL;
-       int rc, i = 1;
+       int rc, i = 1, freq = 0;
 
        b = NULL;
 
@@ -731,9 +737,10 @@ int main(int argc, char *argv[])
                        { "backend",    required_argument, 0, 'b' },
                        { "target",     required_argument, 0, 't' },
                        { "debug",      no_argument,       0, 'd' },
+                       { "frequency",  no_argument,       0, 's' },
                        { 0, 0, 0, 0 }
                };
-               c = getopt_long(argc, argv, "dhb:t:", lopts, &oindex);
+               c = getopt_long(argc, argv, "dhb:t:s:", lopts, &oindex);
                if (c < 0)
                        break;
                switch(c) {
@@ -753,6 +760,13 @@ int main(int argc, char *argv[])
                case 't':
                        target = optarg;
                        break;
+               case 's':
+                       freq = atoi(optarg);
+                       if (freq == 0) {
+                               fprintf(stderr, "Bad frequency %s\n", optarg);
+                               exit(1);
+                       }
+                       break;
                case 'd':
                        debug = true;
                }
@@ -761,7 +775,7 @@ int main(int argc, char *argv[])
        if (b == NULL)
                b = &jtag_backend;
 
-       rc = b->init(target);
+       rc = b->init(target, freq);
        if (rc < 0)
                exit(1);
        for (i = optind; i < argc; i++) {