[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v1 4/8] xen/riscv: introduce sbi call to putchar to console
On Fri, Jan 06, 2023 at 03:14:25PM +0200, Oleksii Kurochko wrote: > The patch introduce sbi_putchar() SBI call which is necessary > to implement initial early_printk > I think that it might be wise to start off with an alternative to sbi_putchar() since it is already planned for deprecation. I realize that this will require rework, but it is almost guaranteed that early_printk() will break on future SBI implementations if using this SBI call. IIRC, Xen/ARM's early printk looked like a reasonable analogy for how it could work on RISC-V, IMHO. > Signed-off-by: Oleksii Kurochko <oleksii.kurochko@xxxxxxxxx> > --- > xen/arch/riscv/Makefile | 1 + > xen/arch/riscv/include/asm/sbi.h | 34 ++++++++++++++++++++++++ > xen/arch/riscv/sbi.c | 44 ++++++++++++++++++++++++++++++++ > 3 files changed, 79 insertions(+) > create mode 100644 xen/arch/riscv/include/asm/sbi.h > create mode 100644 xen/arch/riscv/sbi.c > > diff --git a/xen/arch/riscv/Makefile b/xen/arch/riscv/Makefile > index 5a67a3f493..60db415654 100644 > --- a/xen/arch/riscv/Makefile > +++ b/xen/arch/riscv/Makefile > @@ -1,5 +1,6 @@ > obj-$(CONFIG_RISCV_64) += riscv64/ > obj-y += setup.o > +obj-y += sbi.o > > $(TARGET): $(TARGET)-syms > $(OBJCOPY) -O binary -S $< $@ > diff --git a/xen/arch/riscv/include/asm/sbi.h > b/xen/arch/riscv/include/asm/sbi.h > new file mode 100644 > index 0000000000..34b53f8eaf > --- /dev/null > +++ b/xen/arch/riscv/include/asm/sbi.h > @@ -0,0 +1,34 @@ > +/* SPDX-License-Identifier: (GPL-2.0-or-later) */ > +/* > + * Copyright (c) 2021 Vates SAS. > + * > + * Taken from xvisor, modified by Bobby Eshleman (bobby.eshleman@xxxxxxxxx). > + * > + * Taken/modified from Xvisor project with the following copyright: > + * > + * Copyright (c) 2019 Western Digital Corporation or its affiliates. > + */ > + > +#ifndef __CPU_SBI_H__ > +#define __CPU_SBI_H__ > + > +#define SBI_EXT_0_1_CONSOLE_PUTCHAR 0x1 > + > +struct sbiret { > + long error; > + long value; > +}; > + > +struct sbiret sbi_ecall(unsigned long ext, unsigned long fid, unsigned long > arg0, > + unsigned long arg1, unsigned long arg2, > + unsigned long arg3, unsigned long arg4, > + unsigned long arg5); > + > +/** > + * Writes given character to the console device. > + * > + * @param ch The data to be written to the console. > + */ > +void sbi_console_putchar(int ch); > + > +#endif // __CPU_SBI_H__ > diff --git a/xen/arch/riscv/sbi.c b/xen/arch/riscv/sbi.c > new file mode 100644 > index 0000000000..67cf5dd982 > --- /dev/null > +++ b/xen/arch/riscv/sbi.c > @@ -0,0 +1,44 @@ > +/* SPDX-License-Identifier: GPL-2.0-or-later */ > +/* > + * Taken and modified from the xvisor project with the copyright Copyright > (c) > + * 2019 Western Digital Corporation or its affiliates and author Anup Patel > + * (anup.patel@xxxxxxx). > + * > + * Modified by Bobby Eshleman (bobby.eshleman@xxxxxxxxx). > + * > + * Copyright (c) 2019 Western Digital Corporation or its affiliates. > + * Copyright (c) 2021 Vates SAS. > + */ > + > +#include <xen/errno.h> > +#include <asm/sbi.h> > + > +struct sbiret sbi_ecall(unsigned long ext, unsigned long fid, unsigned long > arg0, > + unsigned long arg1, unsigned long arg2, > + unsigned long arg3, unsigned long arg4, > + unsigned long arg5) > +{ > + struct sbiret ret; > + register unsigned long a0 asm ("a0") = arg0; > + register unsigned long a1 asm ("a1") = arg1; > + register unsigned long a2 asm ("a2") = arg2; > + register unsigned long a3 asm ("a3") = arg3; > + register unsigned long a4 asm ("a4") = arg4; > + register unsigned long a5 asm ("a5") = arg5; > + register unsigned long a6 asm ("a6") = fid; > + register unsigned long a7 asm ("a7") = ext; > + > + asm volatile ("ecall" > + : "+r" (a0), "+r" (a1) > + : "r" (a2), "r" (a3), "r" (a4), "r" (a5), "r" (a6), "r" (a7) > + : "memory"); > + ret.error = a0; > + ret.value = a1; > + > + return ret; > +} > + > +void sbi_console_putchar(int ch) > +{ > + sbi_ecall(SBI_EXT_0_1_CONSOLE_PUTCHAR, 0, ch, 0, 0, 0, 0, 0); > +} > -- > 2.38.1 > >
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |