[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[xen staging] ns16550: add the Amazon EC2 PCI serial device



commit 3c15013258ab7bbca93c6156244bddd151331160
Author:     Benjamin Leggett <benjamin@xxxxxxxx>
AuthorDate: Mon Sep 28 14:27:40 2026 +0200
Commit:     Jan Beulich <jbeulich@xxxxxxxx>
CommitDate: Mon Sep 28 14:27:40 2026 +0200

    ns16550: add the Amazon EC2 PCI serial device
    
    Amazon EC2 bare metal instances have no UART at the legacy I/O port
    0x3f8. Their only serial port is a 16550-compatible PCI device (vendor
    0x1d0f, device 0x8250) with its registers in the MMIO space of BAR 0.
    
    pci_uart_config() uses the default parameters for a device that is not
    in uart_config[], and those only accept an I/O BAR, so "com1=...,pci"
    cannot find this device. Add it, with the same layout that Linux uses
    (commit 3bfd1300abfe ("serial: 8250_pci: Add Amazon PCI serial device
    ID")): one port at the start of BAR 0, 1-byte registers, and the
    default 1.8432MHz clock.
    
    Assisted-by: Claude:claude-opus-5-5
    Signed-off-by: Benjamin Leggett <benjamin@xxxxxxxx>
    Acked-by: Jan Beulich <jbeulich@xxxxxxxx>
---
 xen/drivers/char/ns16550.c | 14 ++++++++++++++
 xen/include/xen/pci_ids.h  |  2 ++
 2 files changed, 16 insertions(+)

diff --git a/xen/drivers/char/ns16550.c b/xen/drivers/char/ns16550.c
index 120ac09d23..593d208483 100644
--- a/xen/drivers/char/ns16550.c
+++ b/xen/drivers/char/ns16550.c
@@ -98,6 +98,7 @@ struct ns16550_config {
         param_intel_lpss,
         param_wch_ch382,
         param_asix,
+        param_amazon,
     } param;
 };
 
@@ -909,6 +910,13 @@ static const struct ns16550_config_param __initconst 
uart_param[] = {
         .bar0 = true,
         .max_ports = 1,
     },
+    [param_amazon] = {
+        .reg_width = 1,
+        .lsr_mask = UART_LSR_THRE,
+        .bar0 = true,
+        .mmio = true,
+        .max_ports = 1,
+    },
 };
 
 static const struct ns16550_config __initconst uart_config[] =
@@ -1255,6 +1263,12 @@ static const struct ns16550_config __initconst 
uart_config[] =
         .dev_id = 0x9910,
         .param = param_asix
     },
+    /* Amazon EC2 bare metal UART */
+    {
+        .vendor_id = PCI_VENDOR_ID_AMAZON,
+        .dev_id = 0x8250,
+        .param = param_amazon
+    },
 };
 
 static int __init
diff --git a/xen/include/xen/pci_ids.h b/xen/include/xen/pci_ids.h
index fd424ef55d..a17c88dcf7 100644
--- a/xen/include/xen/pci_ids.h
+++ b/xen/include/xen/pci_ids.h
@@ -17,6 +17,8 @@
 
 #define PCI_VENDOR_ID_WCHIC              0x1c00
 
+#define PCI_VENDOR_ID_AMAZON             0x1d0f
+
 #define PCI_VENDOR_ID_INTEL              0x8086
 
 #endif /* XEN_PCI_IDS_H */
--
generated by git-patchbot for /home/xen/git/xen.git#staging



 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.