Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1270907

[PATCH v4 05/12] usb: xhci: dbc: add debug buffer

From Lu Baolu <baolu.lu@linux.intel.com>
Newsgroups linux.kernel
Subject [PATCH v4 05/12] usb: xhci: dbc: add debug buffer
Date 2015-11-17 07:40 +0100
Message-ID <qvI5Q-1mW-9@gated-at.bofh.it> (permalink)
References <qvI5P-1mW-3@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


"printk" is not suitable for dbc debugging especially when console
is in usage. This patch adds a debug buffer in dbc driver and puts
the debug messages in this local buffer. The debug buffer could be
dumped whenever the console is not in use. This part of code will
not be visible unless DBC_DEBUG is defined.

Signed-off-by: Lu Baolu <baolu.lu@linux.intel.com>
---
 drivers/usb/early/xhci-dbc.c | 62 ++++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 60 insertions(+), 2 deletions(-)

diff --git a/drivers/usb/early/xhci-dbc.c b/drivers/usb/early/xhci-dbc.c
index 6b23f09..b36a527 100644
--- a/drivers/usb/early/xhci-dbc.c
+++ b/drivers/usb/early/xhci-dbc.c
@@ -32,8 +32,64 @@ static struct xdbc_state xdbc_stat;
 static struct xdbc_state *xdbcp = &xdbc_stat;
 
 #ifdef DBC_DEBUG
-/* place holder */
-#define	xdbc_trace	printk
+#define	XDBC_DEBUG_BUF_SIZE	(PAGE_SIZE * 32)
+#define	MSG_MAX_LINE		128
+static char xdbc_debug_buf[XDBC_DEBUG_BUF_SIZE];
+static void xdbc_trace(const char *fmt, ...)
+{
+	int i, size;
+	va_list args;
+	static int pos;
+	char temp_buf[MSG_MAX_LINE];
+
+	if (pos >= XDBC_DEBUG_BUF_SIZE - 1)
+		return;
+
+	memset(temp_buf, 0, MSG_MAX_LINE);
+	va_start(args, fmt);
+	vsnprintf(temp_buf, MSG_MAX_LINE - 1, fmt, args);
+	va_end(args);
+
+	i = 0;
+	size = strlen(temp_buf);
+	while (i < size) {
+		xdbc_debug_buf[pos] = temp_buf[i];
+		pos++;
+		i++;
+
+		if (pos >= XDBC_DEBUG_BUF_SIZE - 1)
+			break;
+	}
+}
+
+static void xdbc_dump_debug_buffer(void)
+{
+	int index = 0;
+	int count = 0;
+	char dump_buf[MSG_MAX_LINE];
+
+	xdbc_trace("The end of DbC trace buffer\n");
+	pr_notice("DBC debug buffer:\n");
+	memset(dump_buf, 0, MSG_MAX_LINE);
+
+	while (index < XDBC_DEBUG_BUF_SIZE) {
+		if (!xdbc_debug_buf[index])
+			break;
+
+		if (xdbc_debug_buf[index] == '\n' ||
+				count >= MSG_MAX_LINE - 1) {
+			pr_notice("DBC: @%08x %s\n", index, dump_buf);
+			memset(dump_buf, 0, MSG_MAX_LINE);
+			count = 0;
+		} else {
+			dump_buf[count] = xdbc_debug_buf[index];
+			count++;
+		}
+
+		index++;
+	}
+}
+
 static void xdbc_dbg_dump_regs(char *str)
 {
 	if (!xdbcp->xdbc_reg) {
@@ -165,6 +221,7 @@ static void xdbc_dbg_dump_data(char *str)
 
 #else
 static inline void xdbc_trace(const char *fmt, ...) { }
+static inline void xdbc_dump_debug_buffer(void) { }
 static inline void xdbc_dbg_dump_regs(char *str) { }
 static inline void xdbc_dbg_dump_data(char *str) { }
 #endif	/* DBC_DEBUG */
@@ -832,6 +889,7 @@ int __init early_xdbc_init(char *s)
 		pr_notice("failed to setup xHCI DbC connection\n");
 		xdbcp->xhci_base = NULL;
 		xdbcp->xdbc_reg = NULL;
+		xdbc_dump_debug_buffer();
 		return ret;
 	}
 
-- 
2.1.4

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Back to linux.kernel | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

[PATCH v4 00/12] usb: early: add support for early printk through USB3 debug port Lu Baolu <baolu.lu@linux.intel.com> - 2015-11-17 07:40 +0100
  [PATCH v4 05/12] usb: xhci: dbc: add debug buffer Lu Baolu <baolu.lu@linux.intel.com> - 2015-11-17 07:40 +0100
  [PATCH v4 09/12] x86: early_printk: add USB3 debug port earlyprintk support Lu Baolu <baolu.lu@linux.intel.com> - 2015-11-17 07:50 +0100
  [PATCH v4 04/12] usb: xhci: dbc: add support for Intel xHCI dbc quirk Lu Baolu <baolu.lu@linux.intel.com> - 2015-11-17 07:50 +0100
  [PATCH v4 12/12] usb: doc: add document for xHCI DbC driver Lu Baolu <baolu.lu@linux.intel.com> - 2015-11-17 07:50 +0100
  [PATCH v4 03/12] usb: xhci: dbc: probe and setup xhci debug capability Lu Baolu <baolu.lu@linux.intel.com> - 2015-11-17 07:50 +0100
  [PATCH v4 02/12] x86: fixmap: add permanent fixmap for xhci debug port Lu Baolu <baolu.lu@linux.intel.com> - 2015-11-17 07:50 +0100
  [PATCH v4 10/12] usb: xhci: dbc: add handshake between debug target and host Lu Baolu <baolu.lu@linux.intel.com> - 2015-11-17 07:50 +0100
  [PATCH v4 01/12] usb: xhci: add sysfs file for xHCI debug port Lu Baolu <baolu.lu@linux.intel.com> - 2015-11-17 07:50 +0100
    Re: [PATCH v4 01/12] usb: xhci: add sysfs file for xHCI debug port Mathias Nyman <mathias.nyman@linux.intel.com> - 2015-11-20 15:30 +0100
      Re: [PATCH v4 01/12] usb: xhci: add sysfs file for xHCI debug port Lu Baolu <baolu.lu@linux.intel.com> - 2015-11-22 04:10 +0100
  [PATCH v4 11/12] usb: serial: usb_debug: add support for dbc debug device Lu Baolu <baolu.lu@linux.intel.com> - 2015-11-17 07:50 +0100
  [PATCH v4 06/12] usb: xhci: dbc: add bulk out and bulk in interfaces Lu Baolu <baolu.lu@linux.intel.com> - 2015-11-17 07:50 +0100
  [PATCH v4 07/12] usb: xhci: dbc: handle dbc-configured exit Lu Baolu <baolu.lu@linux.intel.com> - 2015-11-17 07:50 +0100
  [PATCH v4 08/12] usb: xhci: dbc: handle endpoint stall Lu Baolu <baolu.lu@linux.intel.com> - 2015-11-17 07:50 +0100

csiph-web