From: Oleksii <oleksii.kurochko@gmail.com>
To: xen-devel@lists.xenproject.org,
Bob Eshleman <bobbyeshleman@gmail.com>,
Alistair Francis <alistair.francis@wdc.com>,
Julien Grall <julien@xen.org>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>,
Jan Beulich <jbeulich@suse.com>,
Stefano Stabellini <sstabellini@kernel.org>,
Gianluca Guida <gianluca@rivosinc.com>,
Bob Eshleman <bobbyeshleman@gmail.com>,
Alistair Francis <alistair.francis@wdc.com>,
Connor Davis <connojdavis@gmail.com>,
Bobby Eshleman <bobby.eshleman@gmail.com>
Subject: Re: [PATCH v7 1/2] xen/riscv: introduce early_printk basic stuff
Date: Fri, 27 Jan 2023 16:15:00 +0200 [thread overview]
Message-ID: <f5cd1bfb116bfcc86fc2848df7eead05cd1a24c0.camel@gmail.com> (raw)
In-Reply-To: <06c2c36bd68b2534c757dc4087476e855253680a.1674819203.git.oleksii.kurochko@gmail.com>
Hi Alistair, Bobby and community,
I would like to ask your help with the following check:
+/*
+ * early_*() can be called from head.S with MMU-off.
+ *
+ * The following requiremets should be honoured for early_*() to
+ * work correctly:
+ * It should use PC-relative addressing for accessing symbols.
+ * To achieve that GCC cmodel=medany should be used.
+ */
+#ifndef __riscv_cmodel_medany
+#error "early_*() can be called from head.S with MMU-off"
+#endif
Please take a look at the following messages and help me to decide if
the check mentioned above should be in early_printk.c or not:
[1]
https://lore.kernel.org/xen-devel/599792fa-b08c-0b1e-10c1-0451519d9e4a@xen.org/
[2]
https://lore.kernel.org/xen-devel/0ec33871-96fa-bd9f-eb1b-eb37d3d7c982@xen.org/
Thanks in advance.
~ Oleksii
On Fri, 2023-01-27 at 13:39 +0200, 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/a3c9916bbdff7ad6030055bbee7e53d1a
> ab71384)
> 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 V7:
> - Nothing was changed
> ---
> Changes in V6:
> - Remove __riscv_cmodel_medany check from early_printk.c
> ---
> Changes in V5:
> - Code style fixes
> - Change an error message of #error in case of
> __riscv_cmodel_medany
> isn't defined
> ---
> Changes in V4:
> - Remove "depends on RISCV*" from Kconfig.debug as it is located
> in
> arch specific folder so by default RISCV configs should be
> ebabled.
> - Add "ifdef __riscv_cmodel_medany" to be sure that PC-relative
> addressing
> is used as early_*() functions can be called from head.S with
> MMU-off and
> before relocation (if it would be needed at all for RISC-V)
> - fix code style
> ---
> Changes in V3:
> - reorder headers in alphabetical order
> - merge changes related to start_xen() function from "[PATCH v2
> 7/8]
> xen/riscv: print hello message from C env" to this patch
> - remove unneeded parentheses in definition of STACK_SIZE
> ---
> Changes in V2:
> - introduce STACK_SIZE define.
> - use consistent padding between instruction mnemonic and
> operand(s)
> ---
> xen/arch/riscv/Kconfig.debug | 5 ++++
> xen/arch/riscv/Makefile | 1 +
> xen/arch/riscv/early_printk.c | 33
> +++++++++++++++++++++++
> xen/arch/riscv/include/asm/early_printk.h | 12 +++++++++
> xen/arch/riscv/setup.c | 4 +++
> 5 files changed, 55 insertions(+)
> create mode 100644 xen/arch/riscv/early_printk.c
> create mode 100644 xen/arch/riscv/include/asm/early_printk.h
>
> 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");
>
next prev parent reply other threads:[~2023-01-27 14:15 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-01-27 11:39 [PATCH v7 0/2] Basic early_printk and smoke test implementation Oleksii Kurochko
2023-01-27 11:39 ` [PATCH v7 1/2] xen/riscv: introduce early_printk basic stuff Oleksii Kurochko
2023-01-27 14:15 ` Oleksii [this message]
2023-01-31 11:44 ` Alistair Francis
2023-01-31 12:03 ` Julien Grall
2023-01-31 23:17 ` Alistair Francis
2023-02-01 0:21 ` Andrew Cooper
2023-02-01 9:06 ` Julien Grall
2023-02-01 9:10 ` Julien Grall
2023-02-01 17:33 ` Bobby Eshleman
2023-02-04 11:59 ` Alistair Francis
2023-02-06 17:30 ` Oleksii
2023-01-27 11:39 ` [PATCH v7 2/2] automation: add RISC-V smoke test Oleksii Kurochko
2023-01-27 18:14 ` Stefano Stabellini
2023-01-31 11:21 ` Oleksii
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=f5cd1bfb116bfcc86fc2848df7eead05cd1a24c0.camel@gmail.com \
--to=oleksii.kurochko@gmail.com \
--cc=alistair.francis@wdc.com \
--cc=andrew.cooper3@citrix.com \
--cc=bobby.eshleman@gmail.com \
--cc=bobbyeshleman@gmail.com \
--cc=connojdavis@gmail.com \
--cc=gianluca@rivosinc.com \
--cc=jbeulich@suse.com \
--cc=julien@xen.org \
--cc=sstabellini@kernel.org \
--cc=xen-devel@lists.xenproject.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.