diff options
-rw-r--r-- | board/ryu/board.c | 9 | ||||
-rw-r--r-- | board/ryu/board.h | 10 | ||||
-rw-r--r-- | chip/stm32/usb_console.c | 12 | ||||
-rw-r--r-- | common/case_closed_debug.c | 19 | ||||
-rw-r--r-- | include/usb_console.h | 11 |
5 files changed, 51 insertions, 10 deletions
diff --git a/board/ryu/board.c b/board/ryu/board.c index 65019c4d2d..fef69fe46a 100644 --- a/board/ryu/board.c +++ b/board/ryu/board.c @@ -43,10 +43,11 @@ void unhandled_evt(enum gpio_signal signal) #include "gpio_list.h" const void *const usb_strings[] = { - [USB_STR_DESC] = usb_string_desc, - [USB_STR_VENDOR] = USB_STRING_DESC("Google Inc."), - [USB_STR_PRODUCT] = USB_STRING_DESC("Ryu - Raiden debug"), - [USB_STR_VERSION] = USB_STRING_DESC(CROS_EC_VERSION32), + [USB_STR_DESC] = usb_string_desc, + [USB_STR_VENDOR] = USB_STRING_DESC("Google Inc."), + [USB_STR_PRODUCT] = USB_STRING_DESC("Ryu debug"), + [USB_STR_VERSION] = USB_STRING_DESC(CROS_EC_VERSION32), + [USB_STR_CONSOLE_NAME] = USB_STRING_DESC("EC_PD"), }; BUILD_ASSERT(ARRAY_SIZE(usb_strings) == USB_STR_COUNT); diff --git a/board/ryu/board.h b/board/ryu/board.h index 8c21e1b700..17d1796eaf 100644 --- a/board/ryu/board.h +++ b/board/ryu/board.h @@ -91,11 +91,16 @@ #define CONFIG_USB_INHIBIT_INIT /* USB interface indexes (use define rather than enum to expand them) */ -#define USB_IFACE_COUNT 0 +#define USB_IFACE_CONSOLE 0 +#define USB_IFACE_COUNT 1 /* USB endpoint indexes (use define rather than enum to expand them) */ #define USB_EP_CONTROL 0 -#define USB_EP_COUNT 1 +#define USB_EP_CONSOLE 1 +#define USB_EP_COUNT 2 + +/* Enable console over USB */ +#define CONFIG_USB_CONSOLE /* Enable Case Closed Debugging */ #define CONFIG_CASE_CLOSED_DEBUG @@ -133,6 +138,7 @@ enum usb_strings { USB_STR_VENDOR, USB_STR_PRODUCT, USB_STR_VERSION, + USB_STR_CONSOLE_NAME, USB_STR_COUNT }; diff --git a/chip/stm32/usb_console.c b/chip/stm32/usb_console.c index 1e3dc30fd4..cf7f6d7825 100644 --- a/chip/stm32/usb_console.c +++ b/chip/stm32/usb_console.c @@ -28,6 +28,7 @@ static volatile int rx_buf_tail; static int last_tx_ok = 1; static int is_reset; +static int is_enabled = 1; /* USB-Serial descriptors */ const struct usb_interface_descriptor USB_IFACE_DESC(USB_IFACE_CONSOLE) = { @@ -128,6 +129,9 @@ static int __tx_char(void *context, int c) static void usb_enable_tx(int len) { + if (!is_enabled) + return; + btable_ep[USB_EP_CONSOLE].tx_count = len; STM32_TOGGLE_EP(USB_EP_CONSOLE, EP_TX_MASK, EP_TX_VALID, 0); } @@ -182,6 +186,9 @@ int usb_getc(void) if (rx_buf_tail == rx_buf_head) return -1; + if (!is_enabled) + return -1; + c = rx_buf[rx_buf_tail]; rx_buf_tail = RX_BUF_NEXT(rx_buf_tail); return c; @@ -237,3 +244,8 @@ int usb_vprintf(const char *format, va_list args) usb_enable_tx(tx_idx); return ret; } + +void usb_console_enable(int enabled) +{ + is_enabled = enabled; +} diff --git a/common/case_closed_debug.c b/common/case_closed_debug.c index 08e5e8411d..270253b50e 100644 --- a/common/case_closed_debug.c +++ b/common/case_closed_debug.c @@ -9,15 +9,20 @@ #include "common.h" #include "usb_api.h" - -#if !defined(CONFIG_USB_INHIBIT_INIT) -#error "CONFIG_USB_INHIBIT_INIT must be defined to use Case Closed Debugging" -#endif +#include "usb_console.h" #if !defined(CONFIG_USB) #error "CONFIG_USB must be defined to use Case Closed Debugging" #endif +#if !defined(CONFIG_USB_CONSOLE) +#error "CONFIG_USB_CONSOLE must be defined to use Case Closed Debugging" +#endif + +#if !defined(CONFIG_USB_INHIBIT_INIT) +#error "CONFIG_USB_INHIBIT_INIT must be defined to use Case Closed Debugging" +#endif + static enum ccd_mode current_mode = CCD_MODE_DISABLED; void ccd_set_mode(enum ccd_mode new_mode) @@ -32,6 +37,12 @@ void ccd_set_mode(enum ccd_mode new_mode) current_mode = new_mode; + /* + * Only enable forwarding the local console over USB if we are now in + * the fully enabled mode. + */ + usb_console_enable(new_mode == CCD_MODE_ENABLED); + if (new_mode != CCD_MODE_DISABLED) { ccd_board_connect(); usb_init(); diff --git a/include/usb_console.h b/include/usb_console.h index 9666fa425a..18526cfd87 100644 --- a/include/usb_console.h +++ b/include/usb_console.h @@ -10,6 +10,8 @@ #ifdef CONFIG_USB_CONSOLE +#include <stdarg.h> + /** * Put a null-terminated string to the USB console, like fputs(). * @@ -41,6 +43,15 @@ int usb_putc(int c); */ int usb_getc(void); +/** + * Enable and Disable the USB console. + * + * By default the console is enabled, this should not be a problem since it + * is not accessible until the USB peripheral is also initialized, which can + * be delayed. + */ +void usb_console_enable(int enabled); + #define usb_va_start va_start #define usb_va_end va_end #else |