xen-devel.lists.xenproject.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v5 0/5]  Basic early_printk and smoke test implementation
@ 2023-01-19 14:07 Oleksii Kurochko
  2023-01-19 14:07 ` [PATCH v5 1/5] xen/include: Change <asm/types.h> to <xen/types.h> Oleksii Kurochko
                   ` (4 more replies)
  0 siblings, 5 replies; 12+ messages in thread
From: Oleksii Kurochko @ 2023-01-19 14:07 UTC (permalink / raw)
  To: xen-devel
  Cc: Jan Beulich, Julien Grall, Andrew Cooper, Stefano Stabellini,
	Gianluca Guida, Oleksii Kurochko, George Dunlap, Wei Liu,
	Bob Eshleman, Alistair Francis, Connor Davis, Doug Goldstein

The patch series introduces the following:
- the minimal set of headers and changes inside them.
- SBI (RISC-V Supervisor Binary Interface) things necessary for basic
  early_printk implementation.
- things needed to set up the stack.
- early_printk() function to print only strings.
- RISC-V smoke test which checks if  "Hello from C env" message is
  present in serial.tmp

The patch series is rebased on top of the patch "include/types: move
stddef.h-kind types to common header" [1]

[1] https://lore.kernel.org/xen-devel/5a0a9e2a-c116-21b5-8081-db75fe4178d7@suse.com/

---
Changes in V5:
  - Code style fixes
  - Remove size_t from asm/types after rebase on top of the patch
    "include/types: move stddef.h-kind types to common header". [1]

    All other types were back as they are used in <xen/types.h>
  - Update <xen/early_printk.h> after rebase on top of [1] as size_t was moved from
    <asm/types.h> to <xen/types.h>
  - Remove unneeded <xen/errno.h> from sbi.c
  - Change an error message of #error in case of __riscv_cmodel_medany isn't defined
---
Changes in V4:
    - Patches "xen/riscv: introduce dummy asm/init.h" and "xen/riscv: introduce
      stack stuff" were removed from the patch series as they were merged separately
      into staging.
    - Remove "depends on RISCV*" from Kconfig.debug as Kconfig.debug is located
      in arch specific folder.
    - fix code style.
    - Add "ifdef __riscv_cmodel_medany" to early_printk.c.  
---
Changes in V3:
    - Most of "[PATCH v2 7/8] xen/riscv: print hello message from C env"
      was merged with [PATCH v2 3/6] xen/riscv: introduce stack stuff.
    - "[PATCH v2 7/8] xen/riscv: print hello message from C env" was
      merged with "[PATCH v2 6/8] xen/riscv: introduce early_printk basic
      stuff".
    - "[PATCH v2 5/8] xen/include: include <asm/types.h> in
      <xen/early_printk.h>" was removed as it has been already merged to
      mainline staging.
    - code style fixes.
---
Changes in V2:
    - update commit patches commit messages according to the mailing
      list comments
    - Remove unneeded types in <asm/types.h>
    - Introduce definition of STACK_SIZE
    - order the files alphabetically in Makefile
    - Add license to early_printk.c
    - Add RISCV_32 dependecy to config EARLY_PRINTK in Kconfig.debug
    - Move dockerfile changes to separate config and sent them as
      separate patch to mailing list.
    - Update test.yaml to wire up smoke test
---

Bobby Eshleman (1):
  xen/riscv: introduce sbi call to putchar to console

Oleksii Kurochko (4):
  xen/include: Change <asm/types.h> to <xen/types.h>
  xen/riscv: introduce asm/types.h header file
  xen/riscv: introduce early_printk basic stuff
  automation: add RISC-V smoke test

 automation/gitlab-ci/test.yaml            | 20 +++++++
 automation/scripts/qemu-smoke-riscv64.sh  | 20 +++++++
 xen/arch/riscv/Kconfig.debug              |  5 ++
 xen/arch/riscv/Makefile                   |  2 +
 xen/arch/riscv/early_printk.c             | 45 +++++++++++++++
 xen/arch/riscv/include/asm/early_printk.h | 12 ++++
 xen/arch/riscv/include/asm/sbi.h          | 34 +++++++++++
 xen/arch/riscv/include/asm/types.h        | 70 +++++++++++++++++++++++
 xen/arch/riscv/sbi.c                      | 44 ++++++++++++++
 xen/arch/riscv/setup.c                    |  4 ++
 xen/include/xen/early_printk.h            |  2 +-
 11 files changed, 257 insertions(+), 1 deletion(-)
 create mode 100755 automation/scripts/qemu-smoke-riscv64.sh
 create mode 100644 xen/arch/riscv/early_printk.c
 create mode 100644 xen/arch/riscv/include/asm/early_printk.h
 create mode 100644 xen/arch/riscv/include/asm/sbi.h
 create mode 100644 xen/arch/riscv/include/asm/types.h
 create mode 100644 xen/arch/riscv/sbi.c

-- 
2.39.0



^ permalink raw reply	[flat|nested] 12+ messages in thread

* [PATCH v5 1/5] xen/include: Change <asm/types.h> to <xen/types.h>
  2023-01-19 14:07 [PATCH v5 0/5] Basic early_printk and smoke test implementation Oleksii Kurochko
@ 2023-01-19 14:07 ` Oleksii Kurochko
  2023-01-19 14:29   ` Jan Beulich
  2023-01-19 14:07 ` [PATCH v5 2/5] xen/riscv: introduce asm/types.h header file Oleksii Kurochko
                   ` (3 subsequent siblings)
  4 siblings, 1 reply; 12+ messages in thread
From: Oleksii Kurochko @ 2023-01-19 14:07 UTC (permalink / raw)
  To: xen-devel
  Cc: Jan Beulich, Julien Grall, Andrew Cooper, Stefano Stabellini,
	Gianluca Guida, Oleksii Kurochko, George Dunlap, Wei Liu

In the patch "include/types: move stddef.h-kind types to common
header" [1] size_t was moved from <asm/types.h> to <xen/types.h>
so early_printk should be updated correspondingly.

[1] https://lore.kernel.org/xen-devel/5a0a9e2a-c116-21b5-8081-db75fe4178d7@suse.com/

Signed-off-by: Oleksii Kurochko <oleksii.kurochko@gmail.com>
---
 xen/include/xen/early_printk.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/xen/include/xen/early_printk.h b/xen/include/xen/early_printk.h
index abb34687da..5d72293793 100644
--- a/xen/include/xen/early_printk.h
+++ b/xen/include/xen/early_printk.h
@@ -4,7 +4,7 @@
 #ifndef __XEN_EARLY_PRINTK_H__
 #define __XEN_EARLY_PRINTK_H__
 
-#include <asm/types.h>
+#include <xen/types.h>
 
 #ifdef CONFIG_EARLY_PRINTK
 void early_puts(const char *s, size_t nr);
-- 
2.39.0



^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH v5 2/5] xen/riscv: introduce asm/types.h header file
  2023-01-19 14:07 [PATCH v5 0/5] Basic early_printk and smoke test implementation Oleksii Kurochko
  2023-01-19 14:07 ` [PATCH v5 1/5] xen/include: Change <asm/types.h> to <xen/types.h> Oleksii Kurochko
@ 2023-01-19 14:07 ` Oleksii Kurochko
  2023-01-20  0:36   ` Alistair Francis
  2023-01-19 14:07 ` [PATCH v5 3/5] xen/riscv: introduce sbi call to putchar to console Oleksii Kurochko
                   ` (2 subsequent siblings)
  4 siblings, 1 reply; 12+ messages in thread
From: Oleksii Kurochko @ 2023-01-19 14:07 UTC (permalink / raw)
  To: xen-devel
  Cc: Jan Beulich, Julien Grall, Andrew Cooper, Stefano Stabellini,
	Gianluca Guida, Oleksii Kurochko, Bob Eshleman, Alistair Francis,
	Connor Davis

Signed-off-by: Oleksii Kurochko <oleksii.kurochko@gmail.com>
---
Changes in V5:
    - Remove size_t from asm/types after rebase on top of the patch
	  "include/types: move stddef.h-kind types to common header" [1].
	- All other types were back as they are used in <xen/types.h> and
      in xen/common.
---
Changes in V4:
    - Clean up types in <asm/types.h> and remain only necessary.
      The following types was removed as they are defined in <xen/types.h>:
      {__|}{u|s}{8|16|32|64}
---
Changes in V3:
    - Nothing changed
---
Changes in V2:
    - Remove unneeded now types from <asm/types.h>
---
 xen/arch/riscv/include/asm/types.h | 70 ++++++++++++++++++++++++++++++
 1 file changed, 70 insertions(+)
 create mode 100644 xen/arch/riscv/include/asm/types.h

diff --git a/xen/arch/riscv/include/asm/types.h b/xen/arch/riscv/include/asm/types.h
new file mode 100644
index 0000000000..64976f118d
--- /dev/null
+++ b/xen/arch/riscv/include/asm/types.h
@@ -0,0 +1,70 @@
+#ifndef __RISCV_TYPES_H__
+#define __RISCV_TYPES_H__
+
+#ifndef __ASSEMBLY__
+
+typedef __signed__ char __s8;
+typedef unsigned char __u8;
+
+typedef __signed__ short __s16;
+typedef unsigned short __u16;
+
+typedef __signed__ int __s32;
+typedef unsigned int __u32;
+
+#if defined(__GNUC__) && !defined(__STRICT_ANSI__)
+#if defined(CONFIG_RISCV_32)
+typedef __signed__ long long __s64;
+typedef unsigned long long __u64;
+#elif defined (CONFIG_RISCV_64)
+typedef __signed__ long __s64;
+typedef unsigned long __u64;
+#endif
+#endif
+
+typedef signed char s8;
+typedef unsigned char u8;
+
+typedef signed short s16;
+typedef unsigned short u16;
+
+typedef signed int s32;
+typedef unsigned int u32;
+
+#if defined(CONFIG_RISCV_32)
+
+typedef signed long long s64;
+typedef unsigned long long u64;
+typedef u32 vaddr_t;
+#define PRIvaddr PRIx32
+typedef u64 paddr_t;
+#define INVALID_PADDR (~0ULL)
+#define PRIpaddr "016llx"
+typedef u32 register_t;
+#define PRIregister "x"
+
+#elif defined (CONFIG_RISCV_64)
+
+typedef signed long s64;
+typedef unsigned long u64;
+typedef u64 vaddr_t;
+#define PRIvaddr PRIx64
+typedef u64 paddr_t;
+#define INVALID_PADDR (~0UL)
+#define PRIpaddr "016lx"
+typedef u64 register_t;
+#define PRIregister "lx"
+
+#endif
+
+#endif /* __ASSEMBLY__ */
+
+#endif /* __RISCV_TYPES_H__ */
+/*
+ * Local variables:
+ * mode: C
+ * c-file-style: "BSD"
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
-- 
2.39.0



^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH v5 3/5] xen/riscv: introduce sbi call to putchar to console
  2023-01-19 14:07 [PATCH v5 0/5] Basic early_printk and smoke test implementation Oleksii Kurochko
  2023-01-19 14:07 ` [PATCH v5 1/5] xen/include: Change <asm/types.h> to <xen/types.h> Oleksii Kurochko
  2023-01-19 14:07 ` [PATCH v5 2/5] xen/riscv: introduce asm/types.h header file Oleksii Kurochko
@ 2023-01-19 14:07 ` Oleksii Kurochko
  2023-01-19 14:07 ` [PATCH v5 4/5] xen/riscv: introduce early_printk basic stuff Oleksii Kurochko
  2023-01-19 14:07 ` [PATCH v5 5/5] automation: add RISC-V smoke test Oleksii Kurochko
  4 siblings, 0 replies; 12+ messages in thread
From: Oleksii Kurochko @ 2023-01-19 14:07 UTC (permalink / raw)
  To: xen-devel
  Cc: Jan Beulich, Julien Grall, Andrew Cooper, Stefano Stabellini,
	Gianluca Guida, Bobby Eshleman, Bob Eshleman, Alistair Francis,
	Connor Davis, Oleksii Kurochko

From: Bobby Eshleman <bobby.eshleman@gmail.com>

Originally SBI implementation for Xen was introduced by
Bobby Eshleman <bobby.eshleman@gmail.com> but it was removed
all the stuff for simplicity  except SBI call for putting
character to console.

The patch introduces sbi_putchar() SBI call which is necessary
to implement initial early_printk.

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>
Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
---
Changes in V5:
    - Nothing critical was changed
    - Code style fixes
    - Remove unneeded <xen/errno.h> from sbi.c
---
Changes in V4:
    - Nothing changed
---
Changes in V3:
    - update copyright's year
    - rename definition of __CPU_SBI_H__ to __ASM_RISCV_SBI_H__
    - fix identations
    - change an author of the commit
---
Changes in V2:
    - add an explanatory comment about sbi_console_putchar() function.
    - order the files alphabetically in Makefile
---
 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..fd916e1004 100644
--- a/xen/arch/riscv/Makefile
+++ b/xen/arch/riscv/Makefile
@@ -1,4 +1,5 @@
 obj-$(CONFIG_RISCV_64) += riscv64/
+obj-y += sbi.o
 obj-y += setup.o
 
 $(TARGET): $(TARGET)-syms
diff --git a/xen/arch/riscv/include/asm/sbi.h b/xen/arch/riscv/include/asm/sbi.h
new file mode 100644
index 0000000000..0e6820a4ed
--- /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-2023 Vates SAS.
+ *
+ * Taken from xvisor, modified by Bobby Eshleman (bobby.eshleman@gmail.com).
+ *
+ * Taken/modified from Xvisor project with the following copyright:
+ *
+ * Copyright (c) 2019 Western Digital Corporation or its affiliates.
+ */
+
+#ifndef __ASM_RISCV_SBI_H__
+#define __ASM_RISCV_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 /* __ASM_RISCV_SBI_H__ */
diff --git a/xen/arch/riscv/sbi.c b/xen/arch/riscv/sbi.c
new file mode 100644
index 0000000000..0ae166c861
--- /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@wdc.com).
+ *
+ * Modified by Bobby Eshleman (bobby.eshleman@gmail.com).
+ *
+ * Copyright (c) 2019 Western Digital Corporation or its affiliates.
+ * Copyright (c) 2021-2023 Vates SAS.
+ */
+
+#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.39.0



^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH v5 4/5] xen/riscv: introduce early_printk basic stuff
  2023-01-19 14:07 [PATCH v5 0/5] Basic early_printk and smoke test implementation Oleksii Kurochko
                   ` (2 preceding siblings ...)
  2023-01-19 14:07 ` [PATCH v5 3/5] xen/riscv: introduce sbi call to putchar to console Oleksii Kurochko
@ 2023-01-19 14:07 ` Oleksii Kurochko
  2023-01-20  0:48   ` Andrew Cooper
  2023-01-19 14:07 ` [PATCH v5 5/5] automation: add RISC-V smoke test Oleksii Kurochko
  4 siblings, 1 reply; 12+ messages in thread
From: Oleksii Kurochko @ 2023-01-19 14:07 UTC (permalink / raw)
  To: xen-devel
  Cc: Jan Beulich, Julien Grall, Andrew Cooper, Stefano Stabellini,
	Gianluca Guida, Oleksii Kurochko, Bob Eshleman, Alistair Francis,
	Connor Davis, Bobby Eshleman

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 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             | 45 +++++++++++++++++++++++
 xen/arch/riscv/include/asm/early_printk.h | 12 ++++++
 xen/arch/riscv/setup.c                    |  4 ++
 5 files changed, 67 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..6f590e712b
--- /dev/null
+++ b/xen/arch/riscv/early_printk.c
@@ -0,0 +1,45 @@
+/* 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>
+
+/*
+ * 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
+
+/*
+ * 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");
 
-- 
2.39.0



^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH v5 5/5] automation: add RISC-V smoke test
  2023-01-19 14:07 [PATCH v5 0/5] Basic early_printk and smoke test implementation Oleksii Kurochko
                   ` (3 preceding siblings ...)
  2023-01-19 14:07 ` [PATCH v5 4/5] xen/riscv: introduce early_printk basic stuff Oleksii Kurochko
@ 2023-01-19 14:07 ` Oleksii Kurochko
  4 siblings, 0 replies; 12+ messages in thread
From: Oleksii Kurochko @ 2023-01-19 14:07 UTC (permalink / raw)
  To: xen-devel
  Cc: Jan Beulich, Julien Grall, Andrew Cooper, Stefano Stabellini,
	Gianluca Guida, Oleksii Kurochko, Doug Goldstein,
	Alistair Francis

Add check if there is a message 'Hello from C env' presents
in log file to be sure that stack is set and C part of early printk
is working.

Signed-off-by: Oleksii Kurochko <oleksii.kurochko@gmail.com>
Acked-by: Stefano Stabellini <sstabellini@kernel.org>
Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
---
Changes in V5:
  - Nothing changed
---
Changes in V4:
  - Nothing changed
---
Changes in V3:
  - Nothing changed
  - All mentioned comments by Stefano in Xen mailing list will be
    fixed as a separate patch out of this patch series.
---
 automation/gitlab-ci/test.yaml           | 20 ++++++++++++++++++++
 automation/scripts/qemu-smoke-riscv64.sh | 20 ++++++++++++++++++++
 2 files changed, 40 insertions(+)
 create mode 100755 automation/scripts/qemu-smoke-riscv64.sh

diff --git a/automation/gitlab-ci/test.yaml b/automation/gitlab-ci/test.yaml
index afd80adfe1..64f47a0ab9 100644
--- a/automation/gitlab-ci/test.yaml
+++ b/automation/gitlab-ci/test.yaml
@@ -54,6 +54,19 @@
   tags:
     - x86_64
 
+.qemu-riscv64:
+  extends: .test-jobs-common
+  variables:
+    CONTAINER: archlinux:riscv64
+    LOGFILE: qemu-smoke-riscv64.log
+  artifacts:
+    paths:
+      - smoke.serial
+      - '*.log'
+    when: always
+  tags:
+    - x86_64
+
 .yocto-test:
   extends: .test-jobs-common
   script:
@@ -234,6 +247,13 @@ qemu-smoke-x86-64-clang-pvh:
   needs:
     - debian-unstable-clang-debug
 
+qemu-smoke-riscv64-gcc:
+  extends: .qemu-riscv64
+  script:
+    - ./automation/scripts/qemu-smoke-riscv64.sh 2>&1 | tee ${LOGFILE}
+  needs:
+    - riscv64-cross-gcc
+
 # Yocto test jobs
 yocto-qemuarm64:
   extends: .yocto-test-arm64
diff --git a/automation/scripts/qemu-smoke-riscv64.sh b/automation/scripts/qemu-smoke-riscv64.sh
new file mode 100755
index 0000000000..e0f06360bc
--- /dev/null
+++ b/automation/scripts/qemu-smoke-riscv64.sh
@@ -0,0 +1,20 @@
+#!/bin/bash
+
+set -ex
+
+# Run the test
+rm -f smoke.serial
+set +e
+
+timeout -k 1 2 \
+qemu-system-riscv64 \
+    -M virt \
+    -smp 1 \
+    -nographic \
+    -m 2g \
+    -kernel binaries/xen \
+    |& tee smoke.serial
+
+set -e
+(grep -q "Hello from C env" smoke.serial) || exit 1
+exit 0
-- 
2.39.0



^ permalink raw reply related	[flat|nested] 12+ messages in thread

* Re: [PATCH v5 1/5] xen/include: Change <asm/types.h> to <xen/types.h>
  2023-01-19 14:07 ` [PATCH v5 1/5] xen/include: Change <asm/types.h> to <xen/types.h> Oleksii Kurochko
@ 2023-01-19 14:29   ` Jan Beulich
  2023-01-19 15:43     ` Jan Beulich
  0 siblings, 1 reply; 12+ messages in thread
From: Jan Beulich @ 2023-01-19 14:29 UTC (permalink / raw)
  To: Oleksii Kurochko
  Cc: Julien Grall, Andrew Cooper, Stefano Stabellini, Gianluca Guida,
	George Dunlap, Wei Liu, xen-devel

On 19.01.2023 15:07, Oleksii Kurochko wrote:
> In the patch "include/types: move stddef.h-kind types to common
> header" [1] size_t was moved from <asm/types.h> to <xen/types.h>
> so early_printk should be updated correspondingly.

Hmm, this reads a little like that patch would introduce a build
issue (on Arm), but according to my testing it doesn't. If it did,
the change here would need to be part of that (not yet committed)
change. On the assumption that it really doesn't, ...

> [1] https://lore.kernel.org/xen-devel/5a0a9e2a-c116-21b5-8081-db75fe4178d7@suse.com/
> 
> Signed-off-by: Oleksii Kurochko <oleksii.kurochko@gmail.com>

Acked-by: Jan Beulich <jbeulich@suse.com>

Jan



^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH v5 1/5] xen/include: Change <asm/types.h> to <xen/types.h>
  2023-01-19 14:29   ` Jan Beulich
@ 2023-01-19 15:43     ` Jan Beulich
  2023-01-20 11:57       ` Oleksii
  0 siblings, 1 reply; 12+ messages in thread
From: Jan Beulich @ 2023-01-19 15:43 UTC (permalink / raw)
  To: Oleksii Kurochko
  Cc: Julien Grall, Andrew Cooper, Stefano Stabellini, Gianluca Guida,
	George Dunlap, Wei Liu, xen-devel

On 19.01.2023 15:29, Jan Beulich wrote:
> On 19.01.2023 15:07, Oleksii Kurochko wrote:
>> In the patch "include/types: move stddef.h-kind types to common
>> header" [1] size_t was moved from <asm/types.h> to <xen/types.h>
>> so early_printk should be updated correspondingly.
> 
> Hmm, this reads a little like that patch would introduce a build
> issue (on Arm), but according to my testing it doesn't. If it did,
> the change here would need to be part of that (not yet committed)
> change. On the assumption that it really doesn't, ...
> 
>> [1] https://lore.kernel.org/xen-devel/5a0a9e2a-c116-21b5-8081-db75fe4178d7@suse.com/
>>
>> Signed-off-by: Oleksii Kurochko <oleksii.kurochko@gmail.com>
> 
> Acked-by: Jan Beulich <jbeulich@suse.com>

Actually I notice we have more explicit uses of asm/types.h, and
hence the title of this change isn't really correct (with this
title I would expect all uses to go away underneath xen/include/xen).
I'll try to remember to adjust the title when committing.

Jan



^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH v5 2/5] xen/riscv: introduce asm/types.h header file
  2023-01-19 14:07 ` [PATCH v5 2/5] xen/riscv: introduce asm/types.h header file Oleksii Kurochko
@ 2023-01-20  0:36   ` Alistair Francis
  0 siblings, 0 replies; 12+ messages in thread
From: Alistair Francis @ 2023-01-20  0:36 UTC (permalink / raw)
  To: Oleksii Kurochko
  Cc: xen-devel, Jan Beulich, Julien Grall, Andrew Cooper,
	Stefano Stabellini, Gianluca Guida, Bob Eshleman,
	Alistair Francis, Connor Davis

On Fri, Jan 20, 2023 at 12:07 AM Oleksii Kurochko
<oleksii.kurochko@gmail.com> wrote:
>
> Signed-off-by: Oleksii Kurochko <oleksii.kurochko@gmail.com>

Reviewed-by: Alistair Francis <alistair.francis@wdc.com>

Alistair

> ---
> Changes in V5:
>     - Remove size_t from asm/types after rebase on top of the patch
>           "include/types: move stddef.h-kind types to common header" [1].
>         - All other types were back as they are used in <xen/types.h> and
>       in xen/common.
> ---
> Changes in V4:
>     - Clean up types in <asm/types.h> and remain only necessary.
>       The following types was removed as they are defined in <xen/types.h>:
>       {__|}{u|s}{8|16|32|64}
> ---
> Changes in V3:
>     - Nothing changed
> ---
> Changes in V2:
>     - Remove unneeded now types from <asm/types.h>
> ---
>  xen/arch/riscv/include/asm/types.h | 70 ++++++++++++++++++++++++++++++
>  1 file changed, 70 insertions(+)
>  create mode 100644 xen/arch/riscv/include/asm/types.h
>
> diff --git a/xen/arch/riscv/include/asm/types.h b/xen/arch/riscv/include/asm/types.h
> new file mode 100644
> index 0000000000..64976f118d
> --- /dev/null
> +++ b/xen/arch/riscv/include/asm/types.h
> @@ -0,0 +1,70 @@
> +#ifndef __RISCV_TYPES_H__
> +#define __RISCV_TYPES_H__
> +
> +#ifndef __ASSEMBLY__
> +
> +typedef __signed__ char __s8;
> +typedef unsigned char __u8;
> +
> +typedef __signed__ short __s16;
> +typedef unsigned short __u16;
> +
> +typedef __signed__ int __s32;
> +typedef unsigned int __u32;
> +
> +#if defined(__GNUC__) && !defined(__STRICT_ANSI__)
> +#if defined(CONFIG_RISCV_32)
> +typedef __signed__ long long __s64;
> +typedef unsigned long long __u64;
> +#elif defined (CONFIG_RISCV_64)
> +typedef __signed__ long __s64;
> +typedef unsigned long __u64;
> +#endif
> +#endif
> +
> +typedef signed char s8;
> +typedef unsigned char u8;
> +
> +typedef signed short s16;
> +typedef unsigned short u16;
> +
> +typedef signed int s32;
> +typedef unsigned int u32;
> +
> +#if defined(CONFIG_RISCV_32)
> +
> +typedef signed long long s64;
> +typedef unsigned long long u64;
> +typedef u32 vaddr_t;
> +#define PRIvaddr PRIx32
> +typedef u64 paddr_t;
> +#define INVALID_PADDR (~0ULL)
> +#define PRIpaddr "016llx"
> +typedef u32 register_t;
> +#define PRIregister "x"
> +
> +#elif defined (CONFIG_RISCV_64)
> +
> +typedef signed long s64;
> +typedef unsigned long u64;
> +typedef u64 vaddr_t;
> +#define PRIvaddr PRIx64
> +typedef u64 paddr_t;
> +#define INVALID_PADDR (~0UL)
> +#define PRIpaddr "016lx"
> +typedef u64 register_t;
> +#define PRIregister "lx"
> +
> +#endif
> +
> +#endif /* __ASSEMBLY__ */
> +
> +#endif /* __RISCV_TYPES_H__ */
> +/*
> + * Local variables:
> + * mode: C
> + * c-file-style: "BSD"
> + * c-basic-offset: 4
> + * indent-tabs-mode: nil
> + * End:
> + */
> --
> 2.39.0
>
>


^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH v5 4/5] xen/riscv: introduce early_printk basic stuff
  2023-01-19 14:07 ` [PATCH v5 4/5] xen/riscv: introduce early_printk basic stuff Oleksii Kurochko
@ 2023-01-20  0:48   ` Andrew Cooper
  2023-01-20  9:17     ` Julien Grall
  0 siblings, 1 reply; 12+ messages in thread
From: Andrew Cooper @ 2023-01-20  0:48 UTC (permalink / raw)
  To: Oleksii Kurochko, xen-devel
  Cc: Jan Beulich, Julien Grall, Stefano Stabellini, Gianluca Guida,
	Bob Eshleman, Alistair Francis, Connor Davis, Bobby Eshleman

On 19/01/2023 2:07 pm, Oleksii Kurochko wrote:
> diff --git a/xen/arch/riscv/early_printk.c b/xen/arch/riscv/early_printk.c
> new file mode 100644
> index 0000000000..6f590e712b
> --- /dev/null
> +++ b/xen/arch/riscv/early_printk.c
> @@ -0,0 +1,45 @@
> +/* 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>
> +
> +/*
> + * 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

This comment is false, and the check is bogus.

It needs deleting.

~Andrew

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH v5 4/5] xen/riscv: introduce early_printk basic stuff
  2023-01-20  0:48   ` Andrew Cooper
@ 2023-01-20  9:17     ` Julien Grall
  0 siblings, 0 replies; 12+ messages in thread
From: Julien Grall @ 2023-01-20  9:17 UTC (permalink / raw)
  To: Andrew Cooper, Oleksii Kurochko, xen-devel
  Cc: Jan Beulich, Stefano Stabellini, Gianluca Guida, Bob Eshleman,
	Alistair Francis, Connor Davis, Bobby Eshleman

Hi,

On 20/01/2023 00:48, Andrew Cooper wrote:
> On 19/01/2023 2:07 pm, Oleksii Kurochko wrote:
>> diff --git a/xen/arch/riscv/early_printk.c b/xen/arch/riscv/early_printk.c
>> new file mode 100644
>> index 0000000000..6f590e712b
>> --- /dev/null
>> +++ b/xen/arch/riscv/early_printk.c
>> @@ -0,0 +1,45 @@
>> +/* 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>
>> +
>> +/*
>> + * 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
> 
> This comment is false, and the check is bogus.

You are already said that in the previous version and ... I reply back 
explaining why I think this is correct (see [1]).

>  > It needs deleting.

That might be the second step. The first step is we settle down on the 
approach.

Cheers,

[1] 
https://lore.kernel.org/xen-devel/CAF3u54C2ewEfBN+ZT6VPaVu4vsqS_+12gr3YJ_jsg1sGHDhZ1A@mail.gmail.com/

-- 
Julien Grall


^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH v5 1/5] xen/include: Change <asm/types.h> to <xen/types.h>
  2023-01-19 15:43     ` Jan Beulich
@ 2023-01-20 11:57       ` Oleksii
  0 siblings, 0 replies; 12+ messages in thread
From: Oleksii @ 2023-01-20 11:57 UTC (permalink / raw)
  To: Jan Beulich
  Cc: Julien Grall, Andrew Cooper, Stefano Stabellini, Gianluca Guida,
	George Dunlap, Wei Liu, xen-devel

On Thu, 2023-01-19 at 16:43 +0100, Jan Beulich wrote:
> On 19.01.2023 15:29, Jan Beulich wrote:
> > On 19.01.2023 15:07, Oleksii Kurochko wrote:
> > > In the patch "include/types: move stddef.h-kind types to common
> > > header" [1] size_t was moved from <asm/types.h> to <xen/types.h>
> > > so early_printk should be updated correspondingly.
> > 
> > Hmm, this reads a little like that patch would introduce a build
> > issue (on Arm), but according to my testing it doesn't. If it did,
> > the change here would need to be part of that (not yet committed)
> > change. On the assumption that it really doesn't, ...
> > 
> > > [1]
> > > https://lore.kernel.org/xen-devel/5a0a9e2a-c116-21b5-8081-db75fe4178d7@suse.com/
> > > 
> > > Signed-off-by: Oleksii Kurochko <oleksii.kurochko@gmail.com>
> > 
> > Acked-by: Jan Beulich <jbeulich@suse.com>
> 
> Actually I notice we have more explicit uses of asm/types.h, and
> hence the title of this change isn't really correct (with this
It's really uncorrect. I was in a hurry, my fault.
I meant that change <asm/types.h> to <xen/types.h> only for
<xen/early_printk.h>.

> title I would expect all uses to go away underneath xen/include/xen).
> I'll try to remember to adjust the title when committing.
> 
Thanks for that.
> Jan
> 
~ Oleksii



^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2023-01-20 11:58 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-01-19 14:07 [PATCH v5 0/5] Basic early_printk and smoke test implementation Oleksii Kurochko
2023-01-19 14:07 ` [PATCH v5 1/5] xen/include: Change <asm/types.h> to <xen/types.h> Oleksii Kurochko
2023-01-19 14:29   ` Jan Beulich
2023-01-19 15:43     ` Jan Beulich
2023-01-20 11:57       ` Oleksii
2023-01-19 14:07 ` [PATCH v5 2/5] xen/riscv: introduce asm/types.h header file Oleksii Kurochko
2023-01-20  0:36   ` Alistair Francis
2023-01-19 14:07 ` [PATCH v5 3/5] xen/riscv: introduce sbi call to putchar to console Oleksii Kurochko
2023-01-19 14:07 ` [PATCH v5 4/5] xen/riscv: introduce early_printk basic stuff Oleksii Kurochko
2023-01-20  0:48   ` Andrew Cooper
2023-01-20  9:17     ` Julien Grall
2023-01-19 14:07 ` [PATCH v5 5/5] automation: add RISC-V smoke test Oleksii Kurochko

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).