diff options
author | Vadim Bendebury <vbendeb@chromium.org> | 2018-08-13 15:13:41 -0700 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2018-08-18 17:19:40 -0700 |
commit | 0ea75d24f26355dcc3186db9e58604c77fdd38c0 (patch) | |
tree | 903be6500062b900f22fc82ce55f7b52ea3e342a /util/stm32mon.c | |
parent | 1e4afe8c15de8a4ec60487967e3049e88be63caf (diff) | |
download | chrome-ec-0ea75d24f26355dcc3186db9e58604c77fdd38c0.tar.gz |
stm32mon: don't set UART attributes when programming over Cr50
When EC console is connected over a Cr50 UART to USB bridge, there is
no need to try setting up UART properties of the interface device as
in this case the settings will not propagate to the target.
BRANCH=none
BUG=b:62539385
TEST=connect a Scarlet device over SuzyQ to the host and source the
following script:
vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
echo gpioset EC_FLASH_SELECT 1 > /dev/ttyUSB0
echo bitbang 2 57600 even > /dev/ttyUSB0
echo ecrst pulse > /dev/ttyUSB0
sleep 2
<path to>/stm32mon -d /dev/ttyUSB2 -u -U -e -c -w <path to>/ec.bin
echo gpioset EC_FLASH_SELECT 0 > /dev/ttyUSB0
echo bitbang 2 disable > /dev/ttyUSB0
echo ecrst pulse > /dev/ttyUSB0
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Change-Id: I5feeaffbc25c029fe6b5d8fa712d5927d00e26ce
Signed-off-by: Vadim Bendebury <vbendeb@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/1175317
Reviewed-by: Mary Ruthven <mruthven@chromium.org>
Diffstat (limited to 'util/stm32mon.c')
-rw-r--r-- | util/stm32mon.c | 40 |
1 files changed, 26 insertions, 14 deletions
diff --git a/util/stm32mon.c b/util/stm32mon.c index d52bcf81d5..cdf8f74f58 100644 --- a/util/stm32mon.c +++ b/util/stm32mon.c @@ -133,6 +133,7 @@ enum { FLAG_ERASE = 0x02, FLAG_GO = 0x04, FLAG_READ_UNPROTECT = 0x08, + FLAG_CR50_MODE = 0x10, }; typedef struct { @@ -203,7 +204,7 @@ static ssize_t write_wrapper(int fd, const void *buf, size_t count) return rv; } -int open_serial(const char *port) +int open_serial(const char *port, int cr50_mode) { int fd, res; struct termios cfg, cfg_copy; @@ -222,9 +223,14 @@ int open_serial(const char *port) return -1; } cfmakeraw(&cfg); - cfsetspeed(&cfg, baudrate); - /* serial mode should be 8e1 */ - cfg.c_cflag |= PARENB; + + /* Don't bother setting speed and parity when programming over Cr50. */ + if (!cr50_mode) { + cfsetspeed(&cfg, baudrate); + /* serial mode should be 8e1 */ + cfg.c_cflag |= PARENB; + } + /* 200 ms timeout */ cfg.c_cc[VTIME] = 2; cfg.c_cc[VMIN] = 0; @@ -972,21 +978,22 @@ int write_flash(int fd, struct stm32_def *chip, const char *filename, } static const struct option longopts[] = { + {"adapter", 1, 0, 'a'}, + {"baudrate", 1, 0, 'b'}, + {"cr50", 0, 0, 'c'}, {"device", 1, 0, 'd'}, - {"read", 1, 0, 'r'}, - {"write", 1, 0, 'w'}, {"erase", 0, 0, 'e'}, {"go", 0, 0, 'g'}, {"help", 0, 0, 'h'}, - {"location", 1, 0, 'l'}, - {"unprotect", 0, 0, 'u'}, - {"baudrate", 1, 0, 'b'}, - {"adapter", 1, 0, 'a'}, - {"spi", 1, 0, 's'}, {"length", 1, 0, 'n'}, + {"location", 1, 0, 'l'}, {"logfile", 1, 0, 'L'}, {"offset", 1, 0, 'o'}, {"progressbar", 0, 0, 'p'}, + {"read", 1, 0, 'r'}, + {"spi", 1, 0, 's'}, + {"unprotect", 0, 0, 'u'}, + {"write", 1, 0, 'w'}, {NULL, 0, 0, 0} }; @@ -996,7 +1003,7 @@ void display_usage(char *program) "Usage: %s [-a <i2c_adapter> [-l address ]] | [-s]" " [-d <tty>] [-b <baudrate>]] [-u] [-e] [-U]" " [-r <file>] [-w <file>] [-o offset] [-n length] [-g] [-p]" - " [-L <log_file>]\n", + " [-L <log_file>] [-c]\n", program); fprintf(stderr, "Can access the controller via serial port or i2c\n"); fprintf(stderr, "Serial port mode:\n"); @@ -1022,6 +1029,8 @@ void display_usage(char *program) "the spinner\n"); fprintf(stderr, "-L[ogfile] <file> : save all communications exchange " "in a log file\n"); + fprintf(stderr, "-c[r50_mode] : consider device to be a Cr50 interface," + " no need to set UART port attributes\n"); exit(2); } @@ -1054,7 +1063,7 @@ int parse_parameters(int argc, char **argv) int flags = 0; const char *log_file_name = NULL; - while ((opt = getopt_long(argc, argv, "a:l:b:d:eghL:n:o:pr:s:w:uU?", + while ((opt = getopt_long(argc, argv, "a:l:b:cd:eghL:n:o:pr:s:w:uU?", longopts, &idx)) != -1) { switch (opt) { case 'a': @@ -1067,6 +1076,9 @@ int parse_parameters(int argc, char **argv) case 'b': baudrate = parse_baudrate(optarg); break; + case 'c': + flags |= FLAG_CR50_MODE; + break; case 'd': serial_port = optarg; mode = MODE_SERIAL; @@ -1143,7 +1155,7 @@ int main(int argc, char **argv) case MODE_SERIAL: default: /* Open the serial port tty */ - ser = open_serial(serial_port); + ser = open_serial(serial_port, !!(flags & FLAG_CR50_MODE)); } if (ser < 0) return 1; |