earlycon-riscv-sbi.c 710 B

1234567891011121314151617181920212223242526272829303132
  1. // SPDX-License-Identifier: GPL-2.0
  2. /*
  3. * RISC-V SBI based earlycon
  4. *
  5. * Copyright (C) 2018 Anup Patel <anup@brainfault.org>
  6. */
  7. #include <linux/kernel.h>
  8. #include <linux/console.h>
  9. #include <linux/init.h>
  10. #include <linux/serial_core.h>
  11. #include <asm/sbi.h>
  12. static void sbi_putc(struct uart_port *port, int c)
  13. {
  14. sbi_console_putchar(c);
  15. }
  16. static void sbi_console_write(struct console *con,
  17. const char *s, unsigned n)
  18. {
  19. struct earlycon_device *dev = con->data;
  20. uart_console_write(&dev->port, s, n, sbi_putc);
  21. }
  22. static int __init early_sbi_setup(struct earlycon_device *device,
  23. const char *opt)
  24. {
  25. device->con->write = sbi_console_write;
  26. return 0;
  27. }
  28. EARLYCON_DECLARE(sbi, early_sbi_setup);