-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
The RISC-V ISA defines a simple console that is availiable via SBI calls on all systems. The SBI console is designed to be availiable at all times, so while it's most natural to use this as an early printk target it's also possible to use this as the system console when there isn't a better one availiable. This patch adds support for the RISC-V SBI console via the HVC infastructure. It's entirely independent from our early printk support, which results in early boot messages appearing twice over the SBI console. As far as I can tell that's the fault of our early printk support (we should support earlycon) as opposed to this driver. There is one checkpatch.pl warning here: to check the MAINTAINERS file. They're all matched by the "K: riscv" line. Signed-off-by: Palmer Dabbelt <[email protected]> Signed-off-by: Greg Kroah-Hartman <[email protected]>
- Loading branch information
1 parent
6aed2a8
commit afa6b1c
Showing
3 changed files
with
71 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,60 @@ | ||
/* SPDX-License-Identifier: GPL-2.0 */ | ||
/* | ||
* Copyright (C) 2008 David Gibson, IBM Corporation | ||
* Copyright (C) 2012 Regents of the University of California | ||
* Copyright (C) 2017 SiFive | ||
*/ | ||
|
||
#include <linux/console.h> | ||
#include <linux/err.h> | ||
#include <linux/init.h> | ||
#include <linux/moduleparam.h> | ||
#include <linux/types.h> | ||
|
||
#include <asm/sbi.h> | ||
|
||
#include "hvc_console.h" | ||
|
||
static int hvc_sbi_tty_put(uint32_t vtermno, const char *buf, int count) | ||
{ | ||
int i; | ||
|
||
for (i = 0; i < count; i++) | ||
sbi_console_putchar(buf[i]); | ||
|
||
return i; | ||
} | ||
|
||
static int hvc_sbi_tty_get(uint32_t vtermno, char *buf, int count) | ||
{ | ||
int i, c; | ||
|
||
for (i = 0; i < count; i++) { | ||
c = sbi_console_getchar(); | ||
if (c < 0) | ||
break; | ||
buf[i] = c; | ||
} | ||
|
||
return i; | ||
} | ||
|
||
static const struct hv_ops hvc_sbi_ops = { | ||
.get_chars = hvc_sbi_tty_get, | ||
.put_chars = hvc_sbi_tty_put, | ||
}; | ||
|
||
static int __init hvc_sbi_init(void) | ||
{ | ||
return PTR_ERR_OR_ZERO(hvc_alloc(0, 0, &hvc_sbi_ops, 16)); | ||
} | ||
device_initcall(hvc_sbi_init); | ||
|
||
static int __init hvc_sbi_console_init(void) | ||
{ | ||
hvc_instantiate(0, 0, &hvc_sbi_ops); | ||
add_preferred_console("hvc", 0, NULL); | ||
|
||
return 0; | ||
} | ||
console_initcall(hvc_sbi_console_init); |