early_printk.c 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. /* early printk support
  2. *
  3. * Copyright (c) 2009 Philippe Vachon <philippe@cowpig.ca>
  4. * Copyright (C) 2009 Lemote Inc. & Insititute of Computing Technology
  5. * Author: Wu Zhangjin, wuzj@lemote.com
  6. *
  7. * This program is free software; you can redistribute it and/or modify it
  8. * under the terms of the GNU General Public License as published by the
  9. * Free Software Foundation; either version 2 of the License, or (at your
  10. * option) any later version.
  11. */
  12. #include <linux/io.h>
  13. #include <linux/init.h>
  14. #include <linux/serial_reg.h>
  15. #include <asm/mips-boards/bonito64.h>
  16. #define UART_BASE (BONITO_PCIIO_BASE + 0x3f8)
  17. #define PORT(base, offset) (u8 *)(base + offset)
  18. static inline unsigned int serial_in(phys_addr_t base, int offset)
  19. {
  20. return readb(PORT(base, offset));
  21. }
  22. static inline void serial_out(phys_addr_t base, int offset, int value)
  23. {
  24. writeb(value, PORT(base, offset));
  25. }
  26. void prom_putchar(char c)
  27. {
  28. phys_addr_t uart_base =
  29. (phys_addr_t) ioremap_nocache(UART_BASE, 8);
  30. while ((serial_in(uart_base, UART_LSR) & UART_LSR_THRE) == 0)
  31. ;
  32. serial_out(uart_base, UART_TX, c);
  33. }