early_printk.c 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738
  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/serial_reg.h>
  13. #include <loongson.h>
  14. #include <machine.h>
  15. #define PORT(base, offset) (u8 *)(base + offset)
  16. static inline unsigned int serial_in(phys_addr_t base, int offset)
  17. {
  18. return readb(PORT(base, offset));
  19. }
  20. static inline void serial_out(phys_addr_t base, int offset, int value)
  21. {
  22. writeb(value, PORT(base, offset));
  23. }
  24. void prom_putchar(char c)
  25. {
  26. phys_addr_t uart_base =
  27. (phys_addr_t) ioremap_nocache(LOONGSON_UART_BASE, 8);
  28. while ((serial_in(uart_base, UART_LSR) & UART_LSR_THRE) == 0)
  29. ;
  30. serial_out(uart_base, UART_TX, c);
  31. }