After DbC setup, debug target needs to wait until tty driver and application (e.g. mincom) on debug taget start. Otherwise, out messages might be ignored.
This patch adds a ping/pong mechanism between debug target and host. Debug target will be waiting there until user presses 'Y' or 'y' in the tty application. Signed-off-by: Lu Baolu <baolu...@linux.intel.com> --- drivers/usb/early/xhci-dbc.c | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/drivers/usb/early/xhci-dbc.c b/drivers/usb/early/xhci-dbc.c index 6c24ba0..37c5c87 100644 --- a/drivers/usb/early/xhci-dbc.c +++ b/drivers/usb/early/xhci-dbc.c @@ -32,6 +32,9 @@ static struct xdbc_state xdbc_stat; static struct xdbc_state *xdbcp = &xdbc_stat; +static int early_xdbc_read(struct console *con, char *str, unsigned n); +static void early_xdbc_write(struct console *con, const char *str, u32 n); + #ifdef DBC_DEBUG #define XDBC_DEBUG_BUF_SIZE (PAGE_SIZE * 32) #define MSG_MAX_LINE 128 @@ -860,8 +863,12 @@ int __init early_xdbc_init(char *s) { u32 bus = 0, dev = 0, func = 0; unsigned long dbgp_num = 0; + char *ping = "Press Y to continue...\n"; + char pong[64]; + size_t size; u32 offset; int ret; + int retry = 20; if (!early_pci_allowed()) return -EPERM; @@ -904,6 +911,21 @@ int __init early_xdbc_init(char *s) return ret; } + while (retry > 0) { + early_xdbc_write(NULL, ping, strlen(ping)); + size = early_xdbc_read(NULL, pong, 64); + if (size > 0) { + xdbc_trace("%s: pong message: %s\n", __func__, pong); + if (pong[0] == 'Y' || pong[0] == 'y') + break; + } else { + xdbc_trace("%s: pong message error %d\n", + __func__, size); + } + + retry--; + } + return 0; } @@ -1325,6 +1347,11 @@ int xdbc_bulk_write(const char *bytes, int size) * Start a bulk-in or bulk-out transfer, wait until transfer completion * or error. Return the count of actually transferred bytes or error. */ +static int early_xdbc_read(struct console *con, char *str, unsigned n) +{ + return xdbc_bulk_read(str, n, 0); +} + static void early_xdbc_write(struct console *con, const char *str, u32 n) { int chunk, ret; -- 2.1.4 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/