}
 #endif
 
-#endif
+#elif defined(CONFIG_UART_MEM)
+
+char serial_logbuf[CONFIG_UART_MEM];
+char *serial_logbuf_head = serial_logbuf;
+
+int serial_mem_init(void)
+{
+       serial_logbuf_head = serial_logbuf;
+       return 0;
+}
+
+void serial_mem_setbrg(void)
+{
+}
+
+int serial_mem_tstc(void)
+{
+       return 0;
+}
+
+int serial_mem_getc(void)
+{
+       return 0;
+}
+
+void serial_mem_putc(const char c)
+{
+       *serial_logbuf_head = c;
+       if (++serial_logbuf_head == serial_logbuf + CONFIG_UART_MEM)
+               serial_logbuf_head = serial_logbuf;
+}
+
+void serial_mem_puts(const char *s)
+{
+       while (*s)
+               serial_putc(*s++);
+}
+
+struct serial_device bfin_serial_mem_device = {
+       .name   = "bfin_uart_mem",
+       .start  = serial_mem_init,
+       .setbrg = serial_mem_setbrg,
+       .getc   = serial_mem_getc,
+       .tstc   = serial_mem_tstc,
+       .putc   = serial_mem_putc,
+       .puts   = serial_mem_puts,
+};
+
+
+__weak struct serial_device *default_serial_console(void)
+{
+       return &bfin_serial_mem_device;
+}
+
+void bfin_serial_initialize(void)
+{
+       serial_register(&bfin_serial_mem_device);
+}
+#endif /* CONFIG_UART_MEM */