diff --git a/arch/blackfin/cpu/jtag-console.c b/arch/blackfin/cpu/jtag-console.c
index 46b30a0f8c0b12137547947327ee734828d911f0..bde8beeca54a3864dabec9fae0df2e4d44b33337 100644
--- a/arch/blackfin/cpu/jtag-console.c
+++ b/arch/blackfin/cpu/jtag-console.c
@@ -10,6 +10,22 @@
 #include <stdio_dev.h>
 #include <asm/blackfin.h>
 
+#ifdef DEBUG
+# define dprintf(...) serial_printf(__VA_ARGS__)
+#else
+# define dprintf(...) do { if (0) printf(__VA_ARGS__); } while (0)
+#endif
+
+static inline void dprintf_decode(const char *s, uint32_t len)
+{
+	uint32_t i;
+	for (i = 0; i < len; ++i)
+		if (s[i] < 0x20 || s[i] >= 0x7f)
+			dprintf("\\%o", s[i]);
+		else
+			dprintf("%c", s[i]);
+}
+
 static inline uint32_t bfin_write_emudat(uint32_t emudat)
 {
 	__asm__ __volatile__("emudat = %0;" : : "d"(emudat));
@@ -52,6 +68,10 @@ static void jtag_send(const char *c, uint32_t len)
 	if (len == 0)
 		return;
 
+	dprintf("%s(\"", __func__);
+	dprintf_decode(c, len);
+	dprintf("\", %i)\n", len);
+
 	/* First send the length */
 	if (jtag_write_emudat(len))
 		return;
@@ -83,7 +103,10 @@ static size_t inbound_len, leftovers_len;
 /* Lower layers want to know when jtag has data */
 static int jtag_tstc_dbg(void)
 {
-	return (bfin_read_DBGSTAT() & 0x2);
+	int ret = (bfin_read_DBGSTAT() & 0x2);
+	if (ret)
+		dprintf("%s: ret:%i\n", __func__, ret);
+	return ret;
 }
 
 /* Higher layers want to know when any data is available */
@@ -101,6 +124,9 @@ static int jtag_getc(void)
 	int ret;
 	uint32_t emudat;
 
+	dprintf("%s: inlen:%zu leftlen:%zu left:%x\n", __func__,
+		inbound_len, leftovers_len, leftovers);
+
 	/* see if any data is left over */
 	if (leftovers_len) {
 		--leftovers_len;