diff --git a/cpu/blackfin/jtag-console.c b/cpu/blackfin/jtag-console.c
index 44c0a839ecc518a347928d447904bcd7055c28c1..d58582f6e017f3391ec23fc83c42aea38702758d 100644
--- a/cpu/blackfin/jtag-console.c
+++ b/cpu/blackfin/jtag-console.c
@@ -54,16 +54,23 @@ static void jtag_puts(const char *s)
 	jtag_send(s, strlen(s));
 }
 
-static int jtag_tstc(void)
+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);
 }
 
+/* Higher layers want to know when any data is available */
+static int jtag_tstc(void)
+{
+	return jtag_tstc_dbg() || leftovers_len;
+}
+
 /* Receive a buffer.  The format is:
  * [32bit length][actual data]
  */
-static size_t inbound_len;
-static int leftovers_len;
 static uint32_t leftovers;
 static int jtag_getc(void)
 {
@@ -79,7 +86,7 @@ static int jtag_getc(void)
 	}
 
 	/* wait for new data ! */
-	while (!jtag_tstc())
+	while (!jtag_tstc_dbg())
 		continue;
 	__asm__("%0 = emudat;" : "=d"(emudat));