All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 00/35] Introduce NS8250 UART emulator
@ 2024-12-06  4:41 ` Denis Mukhin via B4 Relay
  0 siblings, 0 replies; 218+ messages in thread
From: Denis Mukhin @ 2024-12-06  4:41 UTC (permalink / raw)
  To: xen-devel
  Cc: Andrew Cooper, Jan Beulich, Julien Grall, Stefano Stabellini,
	Denis Mukhin, Oleksii Kurochko

The patch series introduces initial in-hypervisor emulator for
NS8250/NS16x50-compatible UARTs under CONFIG_HAS_VUART_NS8250.

In parallel domain creation scenario (hyperlaunch), NS8520 emulator helps
early guest OS bringup debugging, because it eliminates dependency on the
external emulator being operational by the time domains are created. Also,
there's no early console facility similar to vpl011 to support x86 guest OS
bring up.

The NS8250 emulator is disabled by default.

Series
======
- patches 1-11: preparation fixes for xen console and NS8250 emulator.

- patches 12-27: xen console driver cleanup, fixes and preparation for enabling
  physical serial console focus assignment to the guest VM w/ virtual NS8250.

- patches 28-35: initial NS8250 emulator. That adds the I/O port emulator
  for legacy PC COM UARTs, Kconfig option, enabling emulator and libxl
  plumbing.

Limitations
===========
- Only x86;
- Only Linux guest tested so far;
- Only legacy COM{1,2,3,4} resources, no customization;
- Only Xen console as a backend, no inter-domain communication (similar to
  vpl011 on Arm);
- Only 8-bit characters;
- Baud rate is not emulated;
- FIFO-less mode is not emulated properly;
- RX FIFO interrupt moderation (FCR) is not emulated properly, TL16C750
  has special FCR handling;
- No integration w/ VM snapshotting (HVM_REGISTER_SAVE_RESTORE() and
  friends);
- Assumes no ISA-device IRQ sharing;
- MMIO-based UART is not supported.

Testing
=======

Gitlab CI:
  https://gitlab.com/xen-project/people/dmukhin/xen/-/pipelines/1576164352

I tested boot of HVM linux guest w/ OVMF as the virtual firmware.

The emulator, if enabled via CONFIG_HAS_VUART_NS8250=y, will use COM1 (0x3f8)
resources by default.

To test w/ virtual COM1, the guest kernel parameters should contain
  earlycon=uart,io,0x3f8,115200n8 console=uart,io,0x3f8,115200n8

Xen is able to forward physical console input to the domain w/ virtual NS8250.
To switch the console focus press Ctrl+aaa. If console= is given to the HVM
kernel, then the user shall be able to see the login prompt on xen console once
console focus is switched to the HVM guest.

Luca Fancellu helped big time w/ verifying the patch series on arm{32,64} w/
FVP Linux as a guest OS.

Signed-off-by: Denis Mukhin <dmukhin@ford.com>
---
Changes in v2:
- dropped kmalloc/kfree aliases
- fixed ECLAIR jobs (thanks Andrew Cooper)
- addressed console forwarding on arm32 and arm64 (thanks to Luca Fancellu)
- moved NS8250 debugging stubs into its own patch
- added fix for https://gitlab.com/xen-project/xen/-/issues/184
- Link to v1: https://lore.kernel.org/r/20241126-vuart-ns8250-v1-v1-0-87b9a8375b7a@ford.com

---
Denis Mukhin (35):
      xen: introduce resource.h
      xen/irq: introduce NO_IRQ
      xen/ctype: introduce isconsole()
      arm/vuart: use guest_printk()
      arm/vuart: make domain_has_vuart() public
      riscv/domain: introduce domain_has_vuart()
      ppc/domain: introduce domain_has_vuart()
      x86/domain: introduce domain_has_vuart()
      x86/domain: print emulation_flags
      xen/domain: add get_initial_domain_id()
      xen/domain: enable max_init_domid for all architectures
      xen/console: move vpl011-related code to vpl011 emulator
      xen/console: rename console_input_domain
      xen/console: rename switch_serial_input() to console_find_owner()
      xen/console: rename console_rx to console_owner
      xen/console: introduce printk_common()
      xen/console: introduce consoled_is_enabled()
      xen/console: introduce use of 'is_console' flag
      xen/console: introduce console_set_owner()
      xen/console: introduce console_owner_domid()
      xen/console: introduce console_init_owner()
      xen/console: introduce handle_keypress_in_domain()
      xen/console: introduce console_write()
      xen/console: introduce hwdom_crashconsole=
      xen/console: simplify console owner switch hint
      xen/console: make console buffer size configurable
      xen/console: flush console ring to physical console
      xen/8250-uart: add missing definitions
      x86/hvm: add HVM-specific Kconfig
      x86/hvm: add helpers for raising guest IRQs
      x86/hvm: introduce NS8250 UART emulator
      x86/hvm: add debugging facility to NS8250 UART emulator
      x86/domain: implement domain_has_vuart()
      xen/console: enable console owners w/ emulated NS8250
      docs/misc: update console documentation

 automation/eclair_analysis/ECLAIR/deviations.ecl |    2 +-
 docs/misc/console.txt                            |   50 +-
 docs/misc/xen-command-line.pandoc                |    5 +
 tools/libs/light/libxl_x86.c                     |    6 +-
 tools/ocaml/libs/xc/xenctrl.ml                   |    1 +
 tools/ocaml/libs/xc/xenctrl.mli                  |    1 +
 tools/python/xen/lowlevel/xc/xc.c                |    4 +-
 xen/arch/arm/dom0less-build.c                    |    4 +-
 xen/arch/arm/domain.c                            |   20 +-
 xen/arch/arm/domctl.c                            |    5 +-
 xen/arch/arm/include/asm/domain.h                |    9 +
 xen/arch/arm/include/asm/setup.h                 |    2 -
 xen/arch/arm/include/asm/vpl011.h                |    2 +-
 xen/arch/arm/setup.c                             |    2 -
 xen/arch/arm/vpl011.c                            |   19 +-
 xen/arch/arm/vuart.c                             |    7 +-
 xen/arch/ppc/include/asm/domain.h                |    2 +
 xen/arch/ppc/include/asm/setup.h                 |    2 -
 xen/arch/riscv/include/asm/domain.h              |    2 +
 xen/arch/riscv/include/asm/setup.h               |    2 -
 xen/arch/x86/Kconfig                             |   66 +-
 xen/arch/x86/dom0_build.c                        |    2 +
 xen/arch/x86/domain.c                            |   16 +-
 xen/arch/x86/hvm/Kconfig                         |   77 ++
 xen/arch/x86/hvm/Makefile                        |    1 +
 xen/arch/x86/hvm/hvm.c                           |   16 +-
 xen/arch/x86/hvm/irq.c                           |   24 +
 xen/arch/x86/hvm/vuart_ns8250.c                  | 1008 ++++++++++++++++++++++
 xen/arch/x86/include/asm/domain.h                |    8 +-
 xen/arch/x86/include/asm/hvm/domain.h            |    5 +
 xen/arch/x86/include/asm/hvm/irq.h               |    3 +
 xen/arch/x86/include/asm/hvm/vuart_ns8250.h      |   75 ++
 xen/arch/x86/include/asm/pv/shim.h               |    4 +-
 xen/arch/x86/include/asm/setup.h                 |    2 -
 xen/arch/x86/pv/shim.c                           |    6 +-
 xen/common/device-tree/device-tree.c             |   21 +-
 xen/common/domain.c                              |   35 +-
 xen/drivers/char/Kconfig                         |   23 +
 xen/drivers/char/console.c                       |  394 +++++----
 xen/drivers/char/consoled.c                      |   18 +-
 xen/drivers/passthrough/arm/smmu.c               |   15 +-
 xen/include/public/arch-x86/xen.h                |   14 +-
 xen/include/xen/8250-uart.h                      |   81 +-
 xen/include/xen/console.h                        |    4 +-
 xen/include/xen/consoled.h                       |   35 +-
 xen/include/xen/ctype.h                          |    3 +
 xen/include/xen/domain.h                         |    5 +
 xen/include/xen/irq.h                            |    1 +
 xen/include/xen/lib.h                            |    3 +
 xen/include/xen/resource.h                       |   40 +
 50 files changed, 1799 insertions(+), 353 deletions(-)
---
base-commit: dc8e1b33a525d31989c0d1ffe6ae7794484e1d99
change-id: 20241205-vuart-ns8250-45847bc04140

Best regards,
-- 
Denis Mukhin <dmukhin@ford.com>


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

end of thread, other threads:[~2025-01-10  1:39 UTC | newest]

Thread overview: 218+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-12-06  4:41 [PATCH v2 00/35] Introduce NS8250 UART emulator Denis Mukhin
2024-12-06  4:41 ` Denis Mukhin via B4 Relay
2024-12-06  4:41 ` [PATCH v2 01/35] xen: introduce resource.h Denis Mukhin
2024-12-06  4:41   ` Denis Mukhin via B4 Relay
2024-12-10 13:13   ` Jan Beulich
2025-01-04  2:23     ` Denis Mukhin
2024-12-11 11:01   ` Roger Pau Monné
2025-01-04  3:10     ` Denis Mukhin
2024-12-06  4:41 ` [PATCH v2 02/35] xen/irq: introduce NO_IRQ Denis Mukhin
2024-12-06  4:41   ` Denis Mukhin via B4 Relay
2024-12-10 13:17   ` Jan Beulich
2025-01-04  2:26     ` Denis Mukhin
2024-12-06  4:41 ` [PATCH v2 03/35] xen/ctype: introduce isconsole() Denis Mukhin
2024-12-06  4:41   ` Denis Mukhin via B4 Relay
2024-12-10 13:22   ` Jan Beulich
2025-01-04  2:31     ` Denis Mukhin
2025-01-06  8:55       ` Jan Beulich
2024-12-06  4:41 ` [PATCH v2 04/35] arm/vuart: use guest_printk() Denis Mukhin
2024-12-06  4:41   ` Denis Mukhin via B4 Relay
2024-12-06  4:41 ` [PATCH v2 05/35] arm/vuart: make domain_has_vuart() public Denis Mukhin
2024-12-06  4:41   ` Denis Mukhin via B4 Relay
2024-12-06  4:41 ` [PATCH v2 06/35] riscv/domain: introduce domain_has_vuart() Denis Mukhin
2024-12-06  4:41   ` Denis Mukhin via B4 Relay
2024-12-06  4:41 ` [PATCH v2 07/35] ppc/domain: " Denis Mukhin
2024-12-06  4:41   ` Denis Mukhin via B4 Relay
2024-12-10 13:24   ` Jan Beulich
2024-12-06  4:41 ` [PATCH v2 08/35] x86/domain: " Denis Mukhin
2024-12-06  4:41   ` Denis Mukhin via B4 Relay
2024-12-10 13:26   ` Jan Beulich
2025-01-04  2:34     ` Denis Mukhin
2024-12-11 15:13   ` Roger Pau Monné
2025-01-04  3:11     ` Denis Mukhin
2024-12-06  4:41 ` [PATCH v2 09/35] x86/domain: print emulation_flags Denis Mukhin
2024-12-06  4:41   ` Denis Mukhin via B4 Relay
2024-12-10 13:30   ` Jan Beulich
2025-01-04  3:55     ` Denis Mukhin
2024-12-11 15:19   ` Roger Pau Monné
2024-12-12 11:53     ` Jan Beulich
2024-12-12 12:11       ` Roger Pau Monné
2024-12-12 12:50         ` Jan Beulich
2025-01-04  3:56     ` Denis Mukhin
2024-12-06  4:41 ` [PATCH v2 10/35] xen/domain: add get_initial_domain_id() Denis Mukhin
2024-12-06  4:41   ` Denis Mukhin via B4 Relay
2024-12-10 13:50   ` Jan Beulich
2025-01-04  2:50     ` Denis Mukhin
2024-12-11 16:50   ` Roger Pau Monné
2025-01-04  4:44     ` Denis Mukhin
2024-12-06  4:41 ` [PATCH v2 11/35] xen/domain: enable max_init_domid for all architectures Denis Mukhin
2024-12-06  4:41   ` Denis Mukhin via B4 Relay
2024-12-10 13:57   ` Jan Beulich
2025-01-04  2:51     ` Denis Mukhin
2024-12-11 17:00   ` Roger Pau Monné
2025-01-04  3:13     ` Denis Mukhin
2024-12-06  4:41 ` [PATCH v2 12/35] xen/console: move vpl011-related code to vpl011 emulator Denis Mukhin
2024-12-06  4:41   ` Denis Mukhin via B4 Relay
2024-12-10 13:33   ` Jan Beulich
2025-01-04  2:49     ` Denis Mukhin
2024-12-06  4:41 ` [PATCH v2 13/35] xen/console: rename console_input_domain Denis Mukhin
2024-12-06  4:41   ` Denis Mukhin via B4 Relay
2024-12-10 14:01   ` Jan Beulich
2025-01-04  2:53     ` Denis Mukhin
2024-12-11 17:17   ` Roger Pau Monné
2025-01-04  3:13     ` Denis Mukhin
2024-12-06  4:41 ` [PATCH v2 14/35] xen/console: rename switch_serial_input() to console_find_owner() Denis Mukhin
2024-12-06  4:41   ` Denis Mukhin via B4 Relay
2024-12-10 14:13   ` Jan Beulich
2024-12-11 17:22     ` Roger Pau Monné
2025-01-04  3:14       ` Denis Mukhin
2025-01-04  2:54     ` Denis Mukhin
2024-12-06  4:41 ` [PATCH v2 15/35] xen/console: rename console_rx to console_owner Denis Mukhin
2024-12-06  4:41   ` Denis Mukhin via B4 Relay
2024-12-10 14:23   ` Jan Beulich
2024-12-12  8:58   ` Roger Pau Monné
2025-01-04  3:20     ` Denis Mukhin
2024-12-06  4:41 ` [PATCH v2 16/35] xen/console: introduce printk_common() Denis Mukhin
2024-12-06  4:41   ` Denis Mukhin via B4 Relay
2024-12-10 14:27   ` Jan Beulich
2025-01-04  2:57     ` Denis Mukhin
2025-01-06  9:04       ` Jan Beulich
2024-12-12  9:14   ` Roger Pau Monné
2024-12-12 11:57     ` Jan Beulich
2024-12-12 12:15       ` Roger Pau Monné
2024-12-12 12:52         ` Jan Beulich
2024-12-12 15:25           ` Roger Pau Monné
2024-12-13  1:03           ` Stefano Stabellini
2025-01-04  4:11             ` Denis Mukhin
2024-12-06  4:41 ` [PATCH v2 17/35] xen/console: introduce consoled_is_enabled() Denis Mukhin
2024-12-06  4:41   ` Denis Mukhin via B4 Relay
2024-12-10 14:31   ` Jan Beulich
2025-01-04  3:00     ` Denis Mukhin
2025-01-06  9:05       ` Jan Beulich
2024-12-12  9:31   ` Roger Pau Monné
2025-01-04  3:21     ` Denis Mukhin
2024-12-06  4:41 ` [PATCH v2 18/35] xen/console: introduce use of 'is_console' flag Denis Mukhin
2024-12-06  4:41   ` Denis Mukhin via B4 Relay
2024-12-10 14:52   ` Jan Beulich
2025-01-04  3:05     ` Denis Mukhin
2024-12-06  4:41 ` [PATCH v2 19/35] xen/console: introduce console_set_owner() Denis Mukhin
2024-12-06  4:41   ` Denis Mukhin via B4 Relay
2024-12-10 15:02   ` Jan Beulich
2025-01-04  3:07     ` Denis Mukhin
2025-01-06  9:08       ` Jan Beulich
2024-12-12 10:12   ` Roger Pau Monné
2024-12-12 11:59     ` Jan Beulich
2024-12-12 12:16       ` Roger Pau Monné
2025-01-04  3:31       ` Denis Mukhin
2025-01-04  3:30     ` Denis Mukhin
2025-01-06  9:58       ` Jan Beulich
2025-01-06 20:03         ` Denis Mukhin
2025-01-07  8:37           ` Jan Beulich
2024-12-06  4:41 ` [PATCH v2 20/35] xen/console: introduce console_owner_domid() Denis Mukhin
2024-12-06  4:41   ` Denis Mukhin via B4 Relay
2024-12-10 22:11   ` Jason Andryuk
2024-12-11  7:33     ` Jan Beulich
2025-01-04  4:16       ` Denis Mukhin
2025-01-04  4:12     ` Denis Mukhin
2024-12-11  7:28   ` Jan Beulich
2025-01-04  4:15     ` Denis Mukhin
2025-01-06  9:14       ` Jan Beulich
2025-01-06 18:48         ` Stefano Stabellini
2025-01-07  8:40           ` Jan Beulich
2025-01-07 23:40             ` Stefano Stabellini
2025-01-08  7:28               ` Jan Beulich
2025-01-08  8:04                 ` Roger Pau Monné
2025-01-08  8:13                   ` Jan Beulich
2025-01-08  8:35                     ` Roger Pau Monné
2025-01-08 22:15                       ` Denis Mukhin
2025-01-09  0:29                         ` Stefano Stabellini
2025-01-09  8:06                           ` Roger Pau Monné
2025-01-09 23:46                             ` Stefano Stabellini
2025-01-10  1:39                               ` Denis Mukhin
2025-01-09  8:25                           ` Jan Beulich
2025-01-09  8:27                         ` Jan Beulich
2025-01-10  1:34                           ` Denis Mukhin
2024-12-12 10:18   ` Roger Pau Monné
2025-01-04  4:11     ` Denis Mukhin
2024-12-06  4:41 ` [PATCH v2 21/35] xen/console: introduce console_init_owner() Denis Mukhin
2024-12-06  4:41   ` Denis Mukhin via B4 Relay
2024-12-10 22:30   ` Jason Andryuk
2024-12-11  7:31   ` Jan Beulich
2025-01-04  3:22     ` Denis Mukhin
2024-12-12 10:23   ` Roger Pau Monné
2025-01-04  3:23     ` Denis Mukhin
2024-12-06  4:41 ` [PATCH v2 22/35] xen/console: introduce handle_keypress_in_domain() Denis Mukhin
2024-12-06  4:41   ` Denis Mukhin via B4 Relay
2024-12-12 10:51   ` Roger Pau Monné
2025-01-04  3:25     ` Denis Mukhin
2024-12-06  4:41 ` [PATCH v2 23/35] xen/console: introduce console_write() Denis Mukhin
2024-12-06  4:41   ` Denis Mukhin via B4 Relay
2024-12-12 12:04   ` Roger Pau Monné
2025-01-04  3:50     ` Denis Mukhin
2024-12-06  4:41 ` [PATCH v2 24/35] xen/console: introduce hwdom_crashconsole= Denis Mukhin
2024-12-06  4:41   ` Denis Mukhin via B4 Relay
2024-12-12 12:29   ` Roger Pau Monné
2025-01-04  4:48     ` Denis Mukhin
2024-12-06  4:41 ` [PATCH v2 25/35] xen/console: simplify console owner switch hint Denis Mukhin
2024-12-06  4:41   ` Denis Mukhin via B4 Relay
2024-12-06  4:41 ` [PATCH v2 26/35] xen/console: make console buffer size configurable Denis Mukhin
2024-12-06  4:41   ` Denis Mukhin via B4 Relay
2024-12-12 12:47   ` Roger Pau Monné
2025-01-04  3:52     ` Denis Mukhin
2024-12-06  4:41 ` [PATCH v2 27/35] xen/console: flush console ring to physical console Denis Mukhin
2024-12-06  4:41   ` Denis Mukhin via B4 Relay
2024-12-12 14:21   ` Roger Pau Monné
2025-01-04  3:56     ` Denis Mukhin
2024-12-06  4:41 ` [PATCH v2 28/35] xen/8250-uart: add missing definitions Denis Mukhin
2024-12-06  4:41   ` Denis Mukhin via B4 Relay
2024-12-12 14:29   ` Roger Pau Monné
2025-01-04  4:01     ` Denis Mukhin
2024-12-12 15:07   ` Jan Beulich
2025-01-04  4:00     ` Denis Mukhin
2024-12-06  4:41 ` [PATCH v2 29/35] x86/hvm: add HVM-specific Kconfig Denis Mukhin
2024-12-06  4:41   ` Denis Mukhin via B4 Relay
2024-12-12 15:06   ` Roger Pau Monné
2025-01-04  3:58     ` Denis Mukhin
2024-12-06  4:42 ` [PATCH v2 30/35] x86/hvm: add helpers for raising guest IRQs Denis Mukhin
2024-12-06  4:42   ` Denis Mukhin via B4 Relay
2024-12-12 16:18   ` Roger Pau Monné
2025-01-04  4:02     ` Denis Mukhin
2024-12-06  4:42 ` [PATCH v2 31/35] x86/hvm: introduce NS8250 UART emulator Denis Mukhin
2024-12-06  4:42   ` Denis Mukhin via B4 Relay
2024-12-13 11:43   ` Roger Pau Monné
2025-01-04  6:28     ` Denis Mukhin
2024-12-16 15:04   ` Jan Beulich
2025-01-04  5:31     ` Denis Mukhin
2025-01-06  9:19       ` Jan Beulich
2025-01-06 20:16         ` Denis Mukhin
2025-01-07  8:43           ` Jan Beulich
2024-12-06  4:42 ` [PATCH v2 32/35] x86/hvm: add debugging facility to " Denis Mukhin
2024-12-06  4:42   ` Denis Mukhin via B4 Relay
2024-12-13 12:08   ` Roger Pau Monné
2025-01-04  4:31     ` Denis Mukhin
2024-12-16 15:08   ` Jan Beulich
2025-01-04  4:37     ` Denis Mukhin
2024-12-06  4:42 ` [PATCH v2 33/35] x86/domain: implement domain_has_vuart() Denis Mukhin
2024-12-06  4:42   ` Denis Mukhin via B4 Relay
2024-12-13 12:23   ` Roger Pau Monné
2024-12-13 20:45     ` Stefano Stabellini
2024-12-16  8:40       ` Roger Pau Monné
2025-01-04  5:26       ` Denis Mukhin
2025-01-04  5:19     ` Denis Mukhin
2025-01-07 15:16       ` Roger Pau Monné
2025-01-07 17:33         ` Denis Mukhin
2024-12-16 15:11   ` Jan Beulich
2025-01-04  5:26     ` Denis Mukhin
2024-12-06  4:42 ` [PATCH v2 34/35] xen/console: enable console owners w/ emulated NS8250 Denis Mukhin
2024-12-06  4:42   ` Denis Mukhin via B4 Relay
2024-12-10 22:46   ` Jason Andryuk
2024-12-11  7:35     ` Jan Beulich
2024-12-11  7:38     ` Jan Beulich
2025-01-04  3:12       ` Denis Mukhin
2025-01-04  3:08     ` Denis Mukhin
2024-12-06  4:42 ` [PATCH v2 35/35] docs/misc: update console documentation Denis Mukhin
2024-12-06  4:42   ` Denis Mukhin via B4 Relay
2024-12-14 18:05 ` [PATCH v2 00/35] Introduce NS8250 UART emulator Marek Marczykowski-Górecki
2024-12-16  9:04   ` Roger Pau Monné
2025-01-04  4:28     ` Denis Mukhin
2025-01-04  4:27   ` Denis Mukhin

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.