Message ID | 06c2c36bd68b2534c757dc4087476e855253680a.1675163330.git.oleksii.kurochko@gmail.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | Basic early_printk and smoke test implementation | expand |
Hi Oleksii, On 31/01/2023 11:17, Oleksii Kurochko wrote: > Because printk() relies on a serial driver (like the ns16550 driver) > and drivers require working virtual memory (ioremap()) there is not > print functionality early in Xen boot. > > The patch introduces the basic stuff of early_printk functionality > which will be enough to print 'hello from C environment". > > Originally early_printk.{c,h} was introduced by Bobby Eshleman > (https://github.com/glg-rv/xen/commit/a3c9916bbdff7ad6030055bbee7e53d1aab71384) > but some functionality was changed: > early_printk() function was changed in comparison with the original as > common isn't being built now so there is no vscnprintf. > > This commit adds early printk implementation built on the putc SBI call. > > As sbi_console_putchar() is already being planned for deprecation > it is used temporarily now and will be removed or reworked after > real uart will be ready. > > Signed-off-by: Bobby Eshleman <bobby.eshleman@gmail.com> > Signed-off-by: Oleksii Kurochko <oleksii.kurochko@gmail.com> > Reviewed-by: Bobby Eshleman <bobby.eshleman@gmail.com> > --- > Changes in V8: > - Nothing was changed > --- > Changes in V7: > - Nothing was changed > --- > Changes in V6: > - Remove __riscv_cmodel_medany check from early_printk.c This discussion is still not resolved. I will echo Jan's point [1] and expand it. There is limited point to keep sending a new version for small changes if there main open points are not addressed. Can you please look at settling done on the issues first and then send a new version? Cheers, [1] 1d63dd9a-77df-4fca-e35b-886ba19fb35d@suse.com
Hi Julien, On Tue, 2023-01-31 at 11:42 +0000, Julien Grall wrote: > Hi Oleksii, > > On 31/01/2023 11:17, Oleksii Kurochko wrote: > > Because printk() relies on a serial driver (like the ns16550 > > driver) > > and drivers require working virtual memory (ioremap()) there is not > > print functionality early in Xen boot. > > > > The patch introduces the basic stuff of early_printk functionality > > which will be enough to print 'hello from C environment". > > > > Originally early_printk.{c,h} was introduced by Bobby Eshleman > > ( > > https://github.com/glg-rv/xen/commit/a3c9916bbdff7ad6030055bbee7e53d > > 1aab71384) > > but some functionality was changed: > > early_printk() function was changed in comparison with the original > > as > > common isn't being built now so there is no vscnprintf. > > > > This commit adds early printk implementation built on the putc SBI > > call. > > > > As sbi_console_putchar() is already being planned for deprecation > > it is used temporarily now and will be removed or reworked after > > real uart will be ready. > > > > Signed-off-by: Bobby Eshleman <bobby.eshleman@gmail.com> > > Signed-off-by: Oleksii Kurochko <oleksii.kurochko@gmail.com> > > Reviewed-by: Bobby Eshleman <bobby.eshleman@gmail.com> > > --- > > Changes in V8: > > - Nothing was changed > > --- > > Changes in V7: > > - Nothing was changed > > --- > > Changes in V6: > > - Remove __riscv_cmodel_medany check from early_printk.c > > This discussion is still not resolved. I will echo Jan's point [1] > and > expand it. There is limited point to keep sending a new version for > small changes if there main open points are not addressed. > > Can you please look at settling done on the issues first and then > send a > new version? Sure, I won't provide new patch series until the issue will be resolved. This patch series has been sent to resolve an issue with CI&CD which I missed after the renaming of task for RISC-V in build.yaml. ~ Oleksii > > Cheers, > > [1] 1d63dd9a-77df-4fca-e35b-886ba19fb35d@suse.com >
On Tue, 2023-01-31 at 14:37 +0200, Oleksii wrote: > Hi Julien, > > On Tue, 2023-01-31 at 11:42 +0000, Julien Grall wrote: > > Hi Oleksii, > > > > On 31/01/2023 11:17, Oleksii Kurochko wrote: > > > Because printk() relies on a serial driver (like the ns16550 > > > driver) > > > and drivers require working virtual memory (ioremap()) there is > > > not > > > print functionality early in Xen boot. > > > > > > The patch introduces the basic stuff of early_printk > > > functionality > > > which will be enough to print 'hello from C environment". > > > > > > Originally early_printk.{c,h} was introduced by Bobby Eshleman > > > ( > > > https://github.com/glg-rv/xen/commit/a3c9916bbdff7ad6030055bbee7e53d > > > 1aab71384) > > > but some functionality was changed: > > > early_printk() function was changed in comparison with the > > > original > > > as > > > common isn't being built now so there is no vscnprintf. > > > > > > This commit adds early printk implementation built on the putc > > > SBI > > > call. > > > > > > As sbi_console_putchar() is already being planned for deprecation > > > it is used temporarily now and will be removed or reworked after > > > real uart will be ready. > > > > > > Signed-off-by: Bobby Eshleman <bobby.eshleman@gmail.com> > > > Signed-off-by: Oleksii Kurochko <oleksii.kurochko@gmail.com> > > > Reviewed-by: Bobby Eshleman <bobby.eshleman@gmail.com> > > > --- > > > Changes in V8: > > > - Nothing was changed > > > --- > > > Changes in V7: > > > - Nothing was changed > > > --- > > > Changes in V6: > > > - Remove __riscv_cmodel_medany check from early_printk.c > > > > This discussion is still not resolved. I will echo Jan's point [1] > > and > > expand it. There is limited point to keep sending a new version for > > small changes if there main open points are not addressed. > > > > Can you please look at settling done on the issues first and then > > send a > > new version? > Sure, I won't provide new patch series until the issue will be > resolved. > Since Alistair and Bobby agreed that the check is needed I'll send a new version of the patch series. > This patch series has been sent to resolve an issue with CI&CD which > I > missed after the renaming of task for RISC-V in build.yaml. > > ~ Oleksii > > > > Cheers, > > > > [1] 1d63dd9a-77df-4fca-e35b-886ba19fb35d@suse.com > > > ~ Oleksii
diff --git a/xen/arch/riscv/Kconfig.debug b/xen/arch/riscv/Kconfig.debug index e69de29bb2..608c9ff832 100644 --- a/xen/arch/riscv/Kconfig.debug +++ b/xen/arch/riscv/Kconfig.debug @@ -0,0 +1,5 @@ +config EARLY_PRINTK + bool "Enable early printk" + default DEBUG + help + Enables early printk debug messages diff --git a/xen/arch/riscv/Makefile b/xen/arch/riscv/Makefile index fd916e1004..1a4f1a6015 100644 --- a/xen/arch/riscv/Makefile +++ b/xen/arch/riscv/Makefile @@ -1,3 +1,4 @@ +obj-$(CONFIG_EARLY_PRINTK) += early_printk.o obj-$(CONFIG_RISCV_64) += riscv64/ obj-y += sbi.o obj-y += setup.o diff --git a/xen/arch/riscv/early_printk.c b/xen/arch/riscv/early_printk.c new file mode 100644 index 0000000000..b66a11f1bc --- /dev/null +++ b/xen/arch/riscv/early_printk.c @@ -0,0 +1,33 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* + * RISC-V early printk using SBI + * + * Copyright (C) 2021 Bobby Eshleman <bobbyeshleman@gmail.com> + */ +#include <asm/early_printk.h> +#include <asm/sbi.h> + +/* + * TODO: + * sbi_console_putchar is already planned for deprecation + * so it should be reworked to use UART directly. +*/ +void early_puts(const char *s, size_t nr) +{ + while ( nr-- > 0 ) + { + if ( *s == '\n' ) + sbi_console_putchar('\r'); + sbi_console_putchar(*s); + s++; + } +} + +void early_printk(const char *str) +{ + while ( *str ) + { + early_puts(str, 1); + str++; + } +} diff --git a/xen/arch/riscv/include/asm/early_printk.h b/xen/arch/riscv/include/asm/early_printk.h new file mode 100644 index 0000000000..05106e160d --- /dev/null +++ b/xen/arch/riscv/include/asm/early_printk.h @@ -0,0 +1,12 @@ +#ifndef __EARLY_PRINTK_H__ +#define __EARLY_PRINTK_H__ + +#include <xen/early_printk.h> + +#ifdef CONFIG_EARLY_PRINTK +void early_printk(const char *str); +#else +static inline void early_printk(const char *s) {}; +#endif + +#endif /* __EARLY_PRINTK_H__ */ diff --git a/xen/arch/riscv/setup.c b/xen/arch/riscv/setup.c index 13e24e2fe1..d09ffe1454 100644 --- a/xen/arch/riscv/setup.c +++ b/xen/arch/riscv/setup.c @@ -1,12 +1,16 @@ #include <xen/compile.h> #include <xen/init.h> +#include <asm/early_printk.h> + /* Xen stack for bringing up the first CPU. */ unsigned char __initdata cpu0_boot_stack[STACK_SIZE] __aligned(STACK_SIZE); void __init noreturn start_xen(void) { + early_printk("Hello from C env\n"); + for ( ;; ) asm volatile ("wfi");