* [PATCH v2 0/3] ns16550: #ifdef-ary
@ 2020-11-23 13:12 Jan Beulich
2020-11-23 13:14 ` [PATCH v2 1/3] ns16550: move PCI arrays next to the function using them Jan Beulich
` (2 more replies)
0 siblings, 3 replies; 10+ messages in thread
From: Jan Beulich @ 2020-11-23 13:12 UTC (permalink / raw)
To: xen-devel
Cc: Andrew Cooper, George Dunlap, Ian Jackson, Julien Grall,
Stefano Stabellini, Wei Liu, Rahul Singh
1: move PCI arrays next to the function using them
2: "com<N>=" command line options are x86-specific
3: drop stray "#ifdef CONFIG_HAS_PCI"
Jan
^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH v2 1/3] ns16550: move PCI arrays next to the function using them
2020-11-23 13:12 [PATCH v2 0/3] ns16550: #ifdef-ary Jan Beulich
@ 2020-11-23 13:14 ` Jan Beulich
2020-11-24 0:02 ` Stefano Stabellini
2020-11-23 13:14 ` [PATCH v2 2/3] ns16550: "com<N>=" command line options are x86-specific Jan Beulich
2020-11-23 13:15 ` [PATCH v2 3/3] ns16550: drop stray "#ifdef CONFIG_HAS_PCI" Jan Beulich
2 siblings, 1 reply; 10+ messages in thread
From: Jan Beulich @ 2020-11-23 13:14 UTC (permalink / raw)
To: xen-devel
Cc: Andrew Cooper, George Dunlap, Ian Jackson, Julien Grall,
Stefano Stabellini, Wei Liu, Rahul Singh
Pure code motion; no functional change intended.
Signed-off-by: Jan Beulich <jbeulich@suse.com>
---
v2: New.
--- a/xen/drivers/char/ns16550.c
+++ b/xen/drivers/char/ns16550.c
@@ -153,312 +153,6 @@ struct ns16550_config_param {
unsigned int uart_offset;
unsigned int first_offset;
};
-
-/*
- * Create lookup tables for specific devices. It is assumed that if
- * the device found is MMIO, then you have indexed it here. Else, the
- * driver does nothing for MMIO based devices.
- */
-static const struct ns16550_config_param __initconst uart_param[] = {
- [param_default] = {
- .reg_width = 1,
- .lsr_mask = UART_LSR_THRE,
- .max_ports = 1,
- },
- [param_trumanage] = {
- .reg_shift = 2,
- .reg_width = 1,
- .fifo_size = 16,
- .lsr_mask = (UART_LSR_THRE | UART_LSR_TEMT),
- .mmio = 1,
- .max_ports = 1,
- },
- [param_oxford] = {
- .base_baud = 4000000,
- .uart_offset = 0x200,
- .first_offset = 0x1000,
- .reg_width = 1,
- .fifo_size = 16,
- .lsr_mask = UART_LSR_THRE,
- .mmio = 1,
- .max_ports = 1, /* It can do more, but we would need more custom code.*/
- },
- [param_oxford_2port] = {
- .base_baud = 4000000,
- .uart_offset = 0x200,
- .first_offset = 0x1000,
- .reg_width = 1,
- .fifo_size = 16,
- .lsr_mask = UART_LSR_THRE,
- .mmio = 1,
- .max_ports = 2,
- },
- [param_pericom_1port] = {
- .base_baud = 921600,
- .uart_offset = 8,
- .reg_width = 1,
- .fifo_size = 16,
- .lsr_mask = UART_LSR_THRE,
- .bar0 = 1,
- .max_ports = 1,
- },
- [param_pericom_2port] = {
- .base_baud = 921600,
- .uart_offset = 8,
- .reg_width = 1,
- .fifo_size = 16,
- .lsr_mask = UART_LSR_THRE,
- .bar0 = 1,
- .max_ports = 2,
- },
- /*
- * Of the two following ones, we can't really use all of their ports,
- * unless ns16550_com[] would get grown.
- */
- [param_pericom_4port] = {
- .base_baud = 921600,
- .uart_offset = 8,
- .reg_width = 1,
- .fifo_size = 16,
- .lsr_mask = UART_LSR_THRE,
- .bar0 = 1,
- .max_ports = 4,
- },
- [param_pericom_8port] = {
- .base_baud = 921600,
- .uart_offset = 8,
- .reg_width = 1,
- .fifo_size = 16,
- .lsr_mask = UART_LSR_THRE,
- .bar0 = 1,
- .max_ports = 8,
- }
-};
-static const struct ns16550_config __initconst uart_config[] =
-{
- /* Broadcom TruManage device */
- {
- .vendor_id = PCI_VENDOR_ID_BROADCOM,
- .dev_id = 0x160a,
- .param = param_trumanage,
- },
- /* OXPCIe952 1 Native UART */
- {
- .vendor_id = PCI_VENDOR_ID_OXSEMI,
- .dev_id = 0xc11b,
- .param = param_oxford,
- },
- /* OXPCIe952 1 Native UART */
- {
- .vendor_id = PCI_VENDOR_ID_OXSEMI,
- .dev_id = 0xc11f,
- .param = param_oxford,
- },
- /* OXPCIe952 1 Native UART */
- {
- .vendor_id = PCI_VENDOR_ID_OXSEMI,
- .dev_id = 0xc138,
- .param = param_oxford,
- },
- /* OXPCIe952 2 Native UART */
- {
- .vendor_id = PCI_VENDOR_ID_OXSEMI,
- .dev_id = 0xc158,
- .param = param_oxford_2port,
- },
- /* OXPCIe952 1 Native UART */
- {
- .vendor_id = PCI_VENDOR_ID_OXSEMI,
- .dev_id = 0xc13d,
- .param = param_oxford,
- },
- /* OXPCIe952 2 Native UART */
- {
- .vendor_id = PCI_VENDOR_ID_OXSEMI,
- .dev_id = 0xc15d,
- .param = param_oxford_2port,
- },
- /* OXPCIe952 1 Native UART */
- {
- .vendor_id = PCI_VENDOR_ID_OXSEMI,
- .dev_id = 0xc40b,
- .param = param_oxford,
- },
- /* OXPCIe200 1 Native UART */
- {
- .vendor_id = PCI_VENDOR_ID_OXSEMI,
- .dev_id = 0xc40f,
- .param = param_oxford,
- },
- /* OXPCIe200 1 Native UART */
- {
- .vendor_id = PCI_VENDOR_ID_OXSEMI,
- .dev_id = 0xc41b,
- .param = param_oxford,
- },
- /* OXPCIe200 1 Native UART */
- {
- .vendor_id = PCI_VENDOR_ID_OXSEMI,
- .dev_id = 0xc41f,
- .param = param_oxford,
- },
- /* OXPCIe200 1 Native UART */
- {
- .vendor_id = PCI_VENDOR_ID_OXSEMI,
- .dev_id = 0xc42b,
- .param = param_oxford,
- },
- /* OXPCIe200 1 Native UART */
- {
- .vendor_id = PCI_VENDOR_ID_OXSEMI,
- .dev_id = 0xc42f,
- .param = param_oxford,
- },
- /* OXPCIe200 1 Native UART */
- {
- .vendor_id = PCI_VENDOR_ID_OXSEMI,
- .dev_id = 0xc43b,
- .param = param_oxford,
- },
- /* OXPCIe200 1 Native UART */
- {
- .vendor_id = PCI_VENDOR_ID_OXSEMI,
- .dev_id = 0xc43f,
- .param = param_oxford,
- },
- /* OXPCIe200 1 Native UART */
- {
- .vendor_id = PCI_VENDOR_ID_OXSEMI,
- .dev_id = 0xc44b,
- .param = param_oxford,
- },
- /* OXPCIe200 1 Native UART */
- {
- .vendor_id = PCI_VENDOR_ID_OXSEMI,
- .dev_id = 0xc44f,
- .param = param_oxford,
- },
- /* OXPCIe200 1 Native UART */
- {
- .vendor_id = PCI_VENDOR_ID_OXSEMI,
- .dev_id = 0xc45b,
- .param = param_oxford,
- },
- /* OXPCIe200 1 Native UART */
- {
- .vendor_id = PCI_VENDOR_ID_OXSEMI,
- .dev_id = 0xc45f,
- .param = param_oxford,
- },
- /* OXPCIe200 1 Native UART */
- {
- .vendor_id = PCI_VENDOR_ID_OXSEMI,
- .dev_id = 0xc46b,
- .param = param_oxford,
- },
- /* OXPCIe200 1 Native UART */
- {
- .vendor_id = PCI_VENDOR_ID_OXSEMI,
- .dev_id = 0xc46f,
- .param = param_oxford,
- },
- /* OXPCIe200 1 Native UART */
- {
- .vendor_id = PCI_VENDOR_ID_OXSEMI,
- .dev_id = 0xc47b,
- .param = param_oxford,
- },
- /* OXPCIe200 1 Native UART */
- {
- .vendor_id = PCI_VENDOR_ID_OXSEMI,
- .dev_id = 0xc47f,
- .param = param_oxford,
- },
- /* OXPCIe200 1 Native UART */
- {
- .vendor_id = PCI_VENDOR_ID_OXSEMI,
- .dev_id = 0xc48b,
- .param = param_oxford,
- },
- /* OXPCIe200 1 Native UART */
- {
- .vendor_id = PCI_VENDOR_ID_OXSEMI,
- .dev_id = 0xc48f,
- .param = param_oxford,
- },
- /* OXPCIe200 1 Native UART */
- {
- .vendor_id = PCI_VENDOR_ID_OXSEMI,
- .dev_id = 0xc49b,
- .param = param_oxford,
- },
- /* OXPCIe200 1 Native UART */
- {
- .vendor_id = PCI_VENDOR_ID_OXSEMI,
- .dev_id = 0xc49f,
- .param = param_oxford,
- },
- /* OXPCIe200 1 Native UART */
- {
- .vendor_id = PCI_VENDOR_ID_OXSEMI,
- .dev_id = 0xc4ab,
- .param = param_oxford,
- },
- /* OXPCIe200 1 Native UART */
- {
- .vendor_id = PCI_VENDOR_ID_OXSEMI,
- .dev_id = 0xc4af,
- .param = param_oxford,
- },
- /* OXPCIe200 1 Native UART */
- {
- .vendor_id = PCI_VENDOR_ID_OXSEMI,
- .dev_id = 0xc4bb,
- .param = param_oxford,
- },
- /* OXPCIe200 1 Native UART */
- {
- .vendor_id = PCI_VENDOR_ID_OXSEMI,
- .dev_id = 0xc4bf,
- .param = param_oxford,
- },
- /* OXPCIe200 1 Native UART */
- {
- .vendor_id = PCI_VENDOR_ID_OXSEMI,
- .dev_id = 0xc4cb,
- .param = param_oxford,
- },
- /* OXPCIe200 1 Native UART */
- {
- .vendor_id = PCI_VENDOR_ID_OXSEMI,
- .dev_id = 0xc4cf,
- .param = param_oxford,
- },
- /* Pericom PI7C9X7951 Uno UART */
- {
- .vendor_id = PCI_VENDOR_ID_PERICOM,
- .dev_id = 0x7951,
- .param = param_pericom_1port
- },
- /* Pericom PI7C9X7952 Duo UART */
- {
- .vendor_id = PCI_VENDOR_ID_PERICOM,
- .dev_id = 0x7952,
- .param = param_pericom_2port
- },
- /* Pericom PI7C9X7954 Quad UART */
- {
- .vendor_id = PCI_VENDOR_ID_PERICOM,
- .dev_id = 0x7954,
- .param = param_pericom_4port
- },
- /* Pericom PI7C9X7958 Octal UART */
- {
- .vendor_id = PCI_VENDOR_ID_PERICOM,
- .dev_id = 0x7958,
- .param = param_pericom_8port
- }
-};
#endif
static void ns16550_delayed_resume(void *data);
@@ -1045,6 +739,314 @@ static int __init check_existence(struct
}
#ifdef CONFIG_HAS_PCI
+
+/*
+ * Create lookup tables for specific devices. It is assumed that if
+ * the device found is MMIO, then you have indexed it here. Else, the
+ * driver does nothing for MMIO based devices.
+ */
+static const struct ns16550_config_param __initconst uart_param[] = {
+ [param_default] = {
+ .reg_width = 1,
+ .lsr_mask = UART_LSR_THRE,
+ .max_ports = 1,
+ },
+ [param_trumanage] = {
+ .reg_shift = 2,
+ .reg_width = 1,
+ .fifo_size = 16,
+ .lsr_mask = (UART_LSR_THRE | UART_LSR_TEMT),
+ .mmio = 1,
+ .max_ports = 1,
+ },
+ [param_oxford] = {
+ .base_baud = 4000000,
+ .uart_offset = 0x200,
+ .first_offset = 0x1000,
+ .reg_width = 1,
+ .fifo_size = 16,
+ .lsr_mask = UART_LSR_THRE,
+ .mmio = 1,
+ .max_ports = 1, /* It can do more, but we would need more custom code.*/
+ },
+ [param_oxford_2port] = {
+ .base_baud = 4000000,
+ .uart_offset = 0x200,
+ .first_offset = 0x1000,
+ .reg_width = 1,
+ .fifo_size = 16,
+ .lsr_mask = UART_LSR_THRE,
+ .mmio = 1,
+ .max_ports = 2,
+ },
+ [param_pericom_1port] = {
+ .base_baud = 921600,
+ .uart_offset = 8,
+ .reg_width = 1,
+ .fifo_size = 16,
+ .lsr_mask = UART_LSR_THRE,
+ .bar0 = 1,
+ .max_ports = 1,
+ },
+ [param_pericom_2port] = {
+ .base_baud = 921600,
+ .uart_offset = 8,
+ .reg_width = 1,
+ .fifo_size = 16,
+ .lsr_mask = UART_LSR_THRE,
+ .bar0 = 1,
+ .max_ports = 2,
+ },
+ /*
+ * Of the two following ones, we can't really use all of their ports,
+ * unless ns16550_com[] would get grown.
+ */
+ [param_pericom_4port] = {
+ .base_baud = 921600,
+ .uart_offset = 8,
+ .reg_width = 1,
+ .fifo_size = 16,
+ .lsr_mask = UART_LSR_THRE,
+ .bar0 = 1,
+ .max_ports = 4,
+ },
+ [param_pericom_8port] = {
+ .base_baud = 921600,
+ .uart_offset = 8,
+ .reg_width = 1,
+ .fifo_size = 16,
+ .lsr_mask = UART_LSR_THRE,
+ .bar0 = 1,
+ .max_ports = 8,
+ }
+};
+
+static const struct ns16550_config __initconst uart_config[] =
+{
+ /* Broadcom TruManage device */
+ {
+ .vendor_id = PCI_VENDOR_ID_BROADCOM,
+ .dev_id = 0x160a,
+ .param = param_trumanage,
+ },
+ /* OXPCIe952 1 Native UART */
+ {
+ .vendor_id = PCI_VENDOR_ID_OXSEMI,
+ .dev_id = 0xc11b,
+ .param = param_oxford,
+ },
+ /* OXPCIe952 1 Native UART */
+ {
+ .vendor_id = PCI_VENDOR_ID_OXSEMI,
+ .dev_id = 0xc11f,
+ .param = param_oxford,
+ },
+ /* OXPCIe952 1 Native UART */
+ {
+ .vendor_id = PCI_VENDOR_ID_OXSEMI,
+ .dev_id = 0xc138,
+ .param = param_oxford,
+ },
+ /* OXPCIe952 2 Native UART */
+ {
+ .vendor_id = PCI_VENDOR_ID_OXSEMI,
+ .dev_id = 0xc158,
+ .param = param_oxford_2port,
+ },
+ /* OXPCIe952 1 Native UART */
+ {
+ .vendor_id = PCI_VENDOR_ID_OXSEMI,
+ .dev_id = 0xc13d,
+ .param = param_oxford,
+ },
+ /* OXPCIe952 2 Native UART */
+ {
+ .vendor_id = PCI_VENDOR_ID_OXSEMI,
+ .dev_id = 0xc15d,
+ .param = param_oxford_2port,
+ },
+ /* OXPCIe952 1 Native UART */
+ {
+ .vendor_id = PCI_VENDOR_ID_OXSEMI,
+ .dev_id = 0xc40b,
+ .param = param_oxford,
+ },
+ /* OXPCIe200 1 Native UART */
+ {
+ .vendor_id = PCI_VENDOR_ID_OXSEMI,
+ .dev_id = 0xc40f,
+ .param = param_oxford,
+ },
+ /* OXPCIe200 1 Native UART */
+ {
+ .vendor_id = PCI_VENDOR_ID_OXSEMI,
+ .dev_id = 0xc41b,
+ .param = param_oxford,
+ },
+ /* OXPCIe200 1 Native UART */
+ {
+ .vendor_id = PCI_VENDOR_ID_OXSEMI,
+ .dev_id = 0xc41f,
+ .param = param_oxford,
+ },
+ /* OXPCIe200 1 Native UART */
+ {
+ .vendor_id = PCI_VENDOR_ID_OXSEMI,
+ .dev_id = 0xc42b,
+ .param = param_oxford,
+ },
+ /* OXPCIe200 1 Native UART */
+ {
+ .vendor_id = PCI_VENDOR_ID_OXSEMI,
+ .dev_id = 0xc42f,
+ .param = param_oxford,
+ },
+ /* OXPCIe200 1 Native UART */
+ {
+ .vendor_id = PCI_VENDOR_ID_OXSEMI,
+ .dev_id = 0xc43b,
+ .param = param_oxford,
+ },
+ /* OXPCIe200 1 Native UART */
+ {
+ .vendor_id = PCI_VENDOR_ID_OXSEMI,
+ .dev_id = 0xc43f,
+ .param = param_oxford,
+ },
+ /* OXPCIe200 1 Native UART */
+ {
+ .vendor_id = PCI_VENDOR_ID_OXSEMI,
+ .dev_id = 0xc44b,
+ .param = param_oxford,
+ },
+ /* OXPCIe200 1 Native UART */
+ {
+ .vendor_id = PCI_VENDOR_ID_OXSEMI,
+ .dev_id = 0xc44f,
+ .param = param_oxford,
+ },
+ /* OXPCIe200 1 Native UART */
+ {
+ .vendor_id = PCI_VENDOR_ID_OXSEMI,
+ .dev_id = 0xc45b,
+ .param = param_oxford,
+ },
+ /* OXPCIe200 1 Native UART */
+ {
+ .vendor_id = PCI_VENDOR_ID_OXSEMI,
+ .dev_id = 0xc45f,
+ .param = param_oxford,
+ },
+ /* OXPCIe200 1 Native UART */
+ {
+ .vendor_id = PCI_VENDOR_ID_OXSEMI,
+ .dev_id = 0xc46b,
+ .param = param_oxford,
+ },
+ /* OXPCIe200 1 Native UART */
+ {
+ .vendor_id = PCI_VENDOR_ID_OXSEMI,
+ .dev_id = 0xc46f,
+ .param = param_oxford,
+ },
+ /* OXPCIe200 1 Native UART */
+ {
+ .vendor_id = PCI_VENDOR_ID_OXSEMI,
+ .dev_id = 0xc47b,
+ .param = param_oxford,
+ },
+ /* OXPCIe200 1 Native UART */
+ {
+ .vendor_id = PCI_VENDOR_ID_OXSEMI,
+ .dev_id = 0xc47f,
+ .param = param_oxford,
+ },
+ /* OXPCIe200 1 Native UART */
+ {
+ .vendor_id = PCI_VENDOR_ID_OXSEMI,
+ .dev_id = 0xc48b,
+ .param = param_oxford,
+ },
+ /* OXPCIe200 1 Native UART */
+ {
+ .vendor_id = PCI_VENDOR_ID_OXSEMI,
+ .dev_id = 0xc48f,
+ .param = param_oxford,
+ },
+ /* OXPCIe200 1 Native UART */
+ {
+ .vendor_id = PCI_VENDOR_ID_OXSEMI,
+ .dev_id = 0xc49b,
+ .param = param_oxford,
+ },
+ /* OXPCIe200 1 Native UART */
+ {
+ .vendor_id = PCI_VENDOR_ID_OXSEMI,
+ .dev_id = 0xc49f,
+ .param = param_oxford,
+ },
+ /* OXPCIe200 1 Native UART */
+ {
+ .vendor_id = PCI_VENDOR_ID_OXSEMI,
+ .dev_id = 0xc4ab,
+ .param = param_oxford,
+ },
+ /* OXPCIe200 1 Native UART */
+ {
+ .vendor_id = PCI_VENDOR_ID_OXSEMI,
+ .dev_id = 0xc4af,
+ .param = param_oxford,
+ },
+ /* OXPCIe200 1 Native UART */
+ {
+ .vendor_id = PCI_VENDOR_ID_OXSEMI,
+ .dev_id = 0xc4bb,
+ .param = param_oxford,
+ },
+ /* OXPCIe200 1 Native UART */
+ {
+ .vendor_id = PCI_VENDOR_ID_OXSEMI,
+ .dev_id = 0xc4bf,
+ .param = param_oxford,
+ },
+ /* OXPCIe200 1 Native UART */
+ {
+ .vendor_id = PCI_VENDOR_ID_OXSEMI,
+ .dev_id = 0xc4cb,
+ .param = param_oxford,
+ },
+ /* OXPCIe200 1 Native UART */
+ {
+ .vendor_id = PCI_VENDOR_ID_OXSEMI,
+ .dev_id = 0xc4cf,
+ .param = param_oxford,
+ },
+ /* Pericom PI7C9X7951 Uno UART */
+ {
+ .vendor_id = PCI_VENDOR_ID_PERICOM,
+ .dev_id = 0x7951,
+ .param = param_pericom_1port
+ },
+ /* Pericom PI7C9X7952 Duo UART */
+ {
+ .vendor_id = PCI_VENDOR_ID_PERICOM,
+ .dev_id = 0x7952,
+ .param = param_pericom_2port
+ },
+ /* Pericom PI7C9X7954 Quad UART */
+ {
+ .vendor_id = PCI_VENDOR_ID_PERICOM,
+ .dev_id = 0x7954,
+ .param = param_pericom_4port
+ },
+ /* Pericom PI7C9X7958 Octal UART */
+ {
+ .vendor_id = PCI_VENDOR_ID_PERICOM,
+ .dev_id = 0x7958,
+ .param = param_pericom_8port
+ }
+};
+
static int __init
pci_uart_config(struct ns16550 *uart, bool_t skip_amt, unsigned int idx)
{
@@ -1211,7 +1213,8 @@ pci_uart_config(struct ns16550 *uart, bo
return 0;
}
-#endif
+
+#endif /* CONFIG_HAS_PCI */
/*
* Used to parse name value pairs and return which value it is along with
^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH v2 2/3] ns16550: "com<N>=" command line options are x86-specific
2020-11-23 13:12 [PATCH v2 0/3] ns16550: #ifdef-ary Jan Beulich
2020-11-23 13:14 ` [PATCH v2 1/3] ns16550: move PCI arrays next to the function using them Jan Beulich
@ 2020-11-23 13:14 ` Jan Beulich
2020-11-24 0:11 ` Stefano Stabellini
2020-11-23 13:15 ` [PATCH v2 3/3] ns16550: drop stray "#ifdef CONFIG_HAS_PCI" Jan Beulich
2 siblings, 1 reply; 10+ messages in thread
From: Jan Beulich @ 2020-11-23 13:14 UTC (permalink / raw)
To: xen-devel
Cc: Andrew Cooper, George Dunlap, Ian Jackson, Julien Grall,
Stefano Stabellini, Wei Liu, Rahul Singh
Pure code motion (plus the addition of "#ifdef CONFIG_X86); no
functional change intended.
Reported-by: Julien Grall <julien@xen.org>
Signed-off-by: Jan Beulich <jbeulich@suse.com>
---
v2: Re-base over new earlier patch.
--- a/docs/misc/xen-command-line.pandoc
+++ b/docs/misc/xen-command-line.pandoc
@@ -318,8 +318,8 @@ Interrupts. Specifying zero disables CM
Flag to indicate whether to probe for a CMOS Real Time Clock irrespective of
ACPI indicating none to be there.
-### com1
-### com2
+### com1 (x86)
+### com2 (x86)
> `= <baud>[/<base-baud>][,[DPS][,[<io-base>|pci|amt][,[<irq>|msi][,[<port-bdf>][,[<bridge-bdf>]]]]]]`
Both option `com1` and `com2` follow the same format.
--- a/xen/drivers/char/ns16550.c
+++ b/xen/drivers/char/ns16550.c
@@ -31,38 +31,6 @@
#include <asm/fixmap.h>
#endif
-/*
- * Configure serial port with a string:
- * <baud>[/<base_baud>][,DPS[,<io-base>[,<irq>[,<port-bdf>[,<bridge-bdf>]]]]].
- * The tail of the string can be omitted if platform defaults are sufficient.
- * If the baud rate is pre-configured, perhaps by a bootloader, then 'auto'
- * can be specified in place of a numeric baud rate. Polled mode is specified
- * by requesting irq 0.
- */
-static char __initdata opt_com1[128] = "";
-static char __initdata opt_com2[128] = "";
-string_param("com1", opt_com1);
-string_param("com2", opt_com2);
-
-enum serial_param_type {
- baud,
- clock_hz,
- data_bits,
- io_base,
- irq,
- parity,
- reg_shift,
- reg_width,
- stop_bits,
-#ifdef CONFIG_HAS_PCI
- bridge_bdf,
- device,
- port_bdf,
-#endif
- /* List all parameters before this line. */
- num_serial_params
-};
-
static struct ns16550 {
int baud, clock_hz, data_bits, parity, stop_bits, fifo_size, irq;
u64 io_base; /* I/O port or memory-mapped I/O address. */
@@ -98,32 +66,6 @@ static struct ns16550 {
#endif
} ns16550_com[2] = { { 0 } };
-struct serial_param_var {
- char name[12];
- enum serial_param_type type;
-};
-
-/*
- * Enum struct keeping a table of all accepted parameter names for parsing
- * com_console_options for serial port com1 and com2.
- */
-static const struct serial_param_var __initconst sp_vars[] = {
- {"baud", baud},
- {"clock-hz", clock_hz},
- {"data-bits", data_bits},
- {"io-base", io_base},
- {"irq", irq},
- {"parity", parity},
- {"reg-shift", reg_shift},
- {"reg-width", reg_width},
- {"stop-bits", stop_bits},
-#ifdef CONFIG_HAS_PCI
- {"bridge", bridge_bdf},
- {"dev", device},
- {"port", port_bdf},
-#endif
-};
-
#ifdef CONFIG_HAS_PCI
struct ns16550_config {
u16 vendor_id;
@@ -674,6 +616,19 @@ static struct uart_driver __read_mostly
#endif
};
+static void ns16550_init_common(struct ns16550 *uart)
+{
+ uart->clock_hz = UART_CLOCK_HZ;
+
+ /* Default is no transmit FIFO. */
+ uart->fifo_size = 1;
+
+ /* Default lsr_mask = UART_LSR_THRE */
+ uart->lsr_mask = UART_LSR_THRE;
+}
+
+#ifdef CONFIG_X86
+
static int __init parse_parity_char(int c)
{
switch ( c )
@@ -1217,6 +1172,64 @@ pci_uart_config(struct ns16550 *uart, bo
#endif /* CONFIG_HAS_PCI */
/*
+ * Configure serial port with a string:
+ * <baud>[/<base_baud>][,DPS[,<io-base>[,<irq>[,<port-bdf>[,<bridge-bdf>]]]]].
+ * The tail of the string can be omitted if platform defaults are sufficient.
+ * If the baud rate is pre-configured, perhaps by a bootloader, then 'auto'
+ * can be specified in place of a numeric baud rate. Polled mode is specified
+ * by requesting irq 0.
+ */
+static char __initdata opt_com1[128] = "";
+static char __initdata opt_com2[128] = "";
+string_param("com1", opt_com1);
+string_param("com2", opt_com2);
+
+enum serial_param_type {
+ baud,
+ clock_hz,
+ data_bits,
+ io_base,
+ irq,
+ parity,
+ reg_shift,
+ reg_width,
+ stop_bits,
+#ifdef CONFIG_HAS_PCI
+ bridge_bdf,
+ device,
+ port_bdf,
+#endif
+ /* List all parameters before this line. */
+ num_serial_params
+};
+
+struct serial_param_var {
+ char name[12];
+ enum serial_param_type type;
+};
+
+/*
+ * Enum struct keeping a table of all accepted parameter names for parsing
+ * com_console_options for serial port com1 and com2.
+ */
+static const struct serial_param_var __initconst sp_vars[] = {
+ {"baud", baud},
+ {"clock-hz", clock_hz},
+ {"data-bits", data_bits},
+ {"io-base", io_base},
+ {"irq", irq},
+ {"parity", parity},
+ {"reg-shift", reg_shift},
+ {"reg-width", reg_width},
+ {"stop-bits", stop_bits},
+#ifdef CONFIG_HAS_PCI
+ {"bridge", bridge_bdf},
+ {"dev", device},
+ {"port", port_bdf},
+#endif
+};
+
+/*
* Used to parse name value pairs and return which value it is along with
* pointer for the extracted value.
*/
@@ -1504,17 +1517,6 @@ static void __init ns16550_parse_port_co
serial_register_uart(uart - ns16550_com, &ns16550_driver, uart);
}
-static void ns16550_init_common(struct ns16550 *uart)
-{
- uart->clock_hz = UART_CLOCK_HZ;
-
- /* Default is no transmit FIFO. */
- uart->fifo_size = 1;
-
- /* Default lsr_mask = UART_LSR_THRE */
- uart->lsr_mask = UART_LSR_THRE;
-}
-
void __init ns16550_init(int index, struct ns16550_defaults *defaults)
{
struct ns16550 *uart;
@@ -1541,6 +1543,8 @@ void __init ns16550_init(int index, stru
ns16550_parse_port_config(uart, (index == 0) ? opt_com1 : opt_com2);
}
+#endif /* CONFIG_X86 */
+
#ifdef CONFIG_HAS_DEVICE_TREE
static int __init ns16550_uart_dt_init(struct dt_device_node *dev,
const void *data)
^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH v2 3/3] ns16550: drop stray "#ifdef CONFIG_HAS_PCI"
2020-11-23 13:12 [PATCH v2 0/3] ns16550: #ifdef-ary Jan Beulich
2020-11-23 13:14 ` [PATCH v2 1/3] ns16550: move PCI arrays next to the function using them Jan Beulich
2020-11-23 13:14 ` [PATCH v2 2/3] ns16550: "com<N>=" command line options are x86-specific Jan Beulich
@ 2020-11-23 13:15 ` Jan Beulich
2020-11-24 0:11 ` Stefano Stabellini
2 siblings, 1 reply; 10+ messages in thread
From: Jan Beulich @ 2020-11-23 13:15 UTC (permalink / raw)
To: xen-devel
Cc: Andrew Cooper, George Dunlap, Ian Jackson, Julien Grall,
Stefano Stabellini, Wei Liu, Rahul Singh
There's no point wrapping the function invocation when
- the function body is already suitably wrapped,
- the function itself is unconditionally available.
Reported-by: Julien Grall <julien@xen.org>
Signed-off-by: Jan Beulich <jbeulich@suse.com>
--- a/xen/drivers/char/ns16550.c
+++ b/xen/drivers/char/ns16550.c
@@ -662,9 +662,7 @@ static int __init check_existence(struct
return 1; /* Everything is MMIO */
#endif
-#ifdef CONFIG_HAS_PCI
pci_serial_early_init(uart);
-#endif
/*
* Do a simple existence test first; if we fail this,
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v2 1/3] ns16550: move PCI arrays next to the function using them
2020-11-23 13:14 ` [PATCH v2 1/3] ns16550: move PCI arrays next to the function using them Jan Beulich
@ 2020-11-24 0:02 ` Stefano Stabellini
2020-11-24 9:50 ` Rahul Singh
0 siblings, 1 reply; 10+ messages in thread
From: Stefano Stabellini @ 2020-11-24 0:02 UTC (permalink / raw)
To: Jan Beulich
Cc: xen-devel, Andrew Cooper, George Dunlap, Ian Jackson,
Julien Grall, Stefano Stabellini, Wei Liu, Rahul Singh
On Mon, 23 Nov 2020, Jan Beulich wrote:
> Pure code motion; no functional change intended.
>
> Signed-off-by: Jan Beulich <jbeulich@suse.com>
Reviewed-by: Stefano Stabellini <sstabellini@kernel.org>
> ---
> v2: New.
>
> --- a/xen/drivers/char/ns16550.c
> +++ b/xen/drivers/char/ns16550.c
> @@ -153,312 +153,6 @@ struct ns16550_config_param {
> unsigned int uart_offset;
> unsigned int first_offset;
> };
> -
> -/*
> - * Create lookup tables for specific devices. It is assumed that if
> - * the device found is MMIO, then you have indexed it here. Else, the
> - * driver does nothing for MMIO based devices.
> - */
> -static const struct ns16550_config_param __initconst uart_param[] = {
> - [param_default] = {
> - .reg_width = 1,
> - .lsr_mask = UART_LSR_THRE,
> - .max_ports = 1,
> - },
> - [param_trumanage] = {
> - .reg_shift = 2,
> - .reg_width = 1,
> - .fifo_size = 16,
> - .lsr_mask = (UART_LSR_THRE | UART_LSR_TEMT),
> - .mmio = 1,
> - .max_ports = 1,
> - },
> - [param_oxford] = {
> - .base_baud = 4000000,
> - .uart_offset = 0x200,
> - .first_offset = 0x1000,
> - .reg_width = 1,
> - .fifo_size = 16,
> - .lsr_mask = UART_LSR_THRE,
> - .mmio = 1,
> - .max_ports = 1, /* It can do more, but we would need more custom code.*/
> - },
> - [param_oxford_2port] = {
> - .base_baud = 4000000,
> - .uart_offset = 0x200,
> - .first_offset = 0x1000,
> - .reg_width = 1,
> - .fifo_size = 16,
> - .lsr_mask = UART_LSR_THRE,
> - .mmio = 1,
> - .max_ports = 2,
> - },
> - [param_pericom_1port] = {
> - .base_baud = 921600,
> - .uart_offset = 8,
> - .reg_width = 1,
> - .fifo_size = 16,
> - .lsr_mask = UART_LSR_THRE,
> - .bar0 = 1,
> - .max_ports = 1,
> - },
> - [param_pericom_2port] = {
> - .base_baud = 921600,
> - .uart_offset = 8,
> - .reg_width = 1,
> - .fifo_size = 16,
> - .lsr_mask = UART_LSR_THRE,
> - .bar0 = 1,
> - .max_ports = 2,
> - },
> - /*
> - * Of the two following ones, we can't really use all of their ports,
> - * unless ns16550_com[] would get grown.
> - */
> - [param_pericom_4port] = {
> - .base_baud = 921600,
> - .uart_offset = 8,
> - .reg_width = 1,
> - .fifo_size = 16,
> - .lsr_mask = UART_LSR_THRE,
> - .bar0 = 1,
> - .max_ports = 4,
> - },
> - [param_pericom_8port] = {
> - .base_baud = 921600,
> - .uart_offset = 8,
> - .reg_width = 1,
> - .fifo_size = 16,
> - .lsr_mask = UART_LSR_THRE,
> - .bar0 = 1,
> - .max_ports = 8,
> - }
> -};
> -static const struct ns16550_config __initconst uart_config[] =
> -{
> - /* Broadcom TruManage device */
> - {
> - .vendor_id = PCI_VENDOR_ID_BROADCOM,
> - .dev_id = 0x160a,
> - .param = param_trumanage,
> - },
> - /* OXPCIe952 1 Native UART */
> - {
> - .vendor_id = PCI_VENDOR_ID_OXSEMI,
> - .dev_id = 0xc11b,
> - .param = param_oxford,
> - },
> - /* OXPCIe952 1 Native UART */
> - {
> - .vendor_id = PCI_VENDOR_ID_OXSEMI,
> - .dev_id = 0xc11f,
> - .param = param_oxford,
> - },
> - /* OXPCIe952 1 Native UART */
> - {
> - .vendor_id = PCI_VENDOR_ID_OXSEMI,
> - .dev_id = 0xc138,
> - .param = param_oxford,
> - },
> - /* OXPCIe952 2 Native UART */
> - {
> - .vendor_id = PCI_VENDOR_ID_OXSEMI,
> - .dev_id = 0xc158,
> - .param = param_oxford_2port,
> - },
> - /* OXPCIe952 1 Native UART */
> - {
> - .vendor_id = PCI_VENDOR_ID_OXSEMI,
> - .dev_id = 0xc13d,
> - .param = param_oxford,
> - },
> - /* OXPCIe952 2 Native UART */
> - {
> - .vendor_id = PCI_VENDOR_ID_OXSEMI,
> - .dev_id = 0xc15d,
> - .param = param_oxford_2port,
> - },
> - /* OXPCIe952 1 Native UART */
> - {
> - .vendor_id = PCI_VENDOR_ID_OXSEMI,
> - .dev_id = 0xc40b,
> - .param = param_oxford,
> - },
> - /* OXPCIe200 1 Native UART */
> - {
> - .vendor_id = PCI_VENDOR_ID_OXSEMI,
> - .dev_id = 0xc40f,
> - .param = param_oxford,
> - },
> - /* OXPCIe200 1 Native UART */
> - {
> - .vendor_id = PCI_VENDOR_ID_OXSEMI,
> - .dev_id = 0xc41b,
> - .param = param_oxford,
> - },
> - /* OXPCIe200 1 Native UART */
> - {
> - .vendor_id = PCI_VENDOR_ID_OXSEMI,
> - .dev_id = 0xc41f,
> - .param = param_oxford,
> - },
> - /* OXPCIe200 1 Native UART */
> - {
> - .vendor_id = PCI_VENDOR_ID_OXSEMI,
> - .dev_id = 0xc42b,
> - .param = param_oxford,
> - },
> - /* OXPCIe200 1 Native UART */
> - {
> - .vendor_id = PCI_VENDOR_ID_OXSEMI,
> - .dev_id = 0xc42f,
> - .param = param_oxford,
> - },
> - /* OXPCIe200 1 Native UART */
> - {
> - .vendor_id = PCI_VENDOR_ID_OXSEMI,
> - .dev_id = 0xc43b,
> - .param = param_oxford,
> - },
> - /* OXPCIe200 1 Native UART */
> - {
> - .vendor_id = PCI_VENDOR_ID_OXSEMI,
> - .dev_id = 0xc43f,
> - .param = param_oxford,
> - },
> - /* OXPCIe200 1 Native UART */
> - {
> - .vendor_id = PCI_VENDOR_ID_OXSEMI,
> - .dev_id = 0xc44b,
> - .param = param_oxford,
> - },
> - /* OXPCIe200 1 Native UART */
> - {
> - .vendor_id = PCI_VENDOR_ID_OXSEMI,
> - .dev_id = 0xc44f,
> - .param = param_oxford,
> - },
> - /* OXPCIe200 1 Native UART */
> - {
> - .vendor_id = PCI_VENDOR_ID_OXSEMI,
> - .dev_id = 0xc45b,
> - .param = param_oxford,
> - },
> - /* OXPCIe200 1 Native UART */
> - {
> - .vendor_id = PCI_VENDOR_ID_OXSEMI,
> - .dev_id = 0xc45f,
> - .param = param_oxford,
> - },
> - /* OXPCIe200 1 Native UART */
> - {
> - .vendor_id = PCI_VENDOR_ID_OXSEMI,
> - .dev_id = 0xc46b,
> - .param = param_oxford,
> - },
> - /* OXPCIe200 1 Native UART */
> - {
> - .vendor_id = PCI_VENDOR_ID_OXSEMI,
> - .dev_id = 0xc46f,
> - .param = param_oxford,
> - },
> - /* OXPCIe200 1 Native UART */
> - {
> - .vendor_id = PCI_VENDOR_ID_OXSEMI,
> - .dev_id = 0xc47b,
> - .param = param_oxford,
> - },
> - /* OXPCIe200 1 Native UART */
> - {
> - .vendor_id = PCI_VENDOR_ID_OXSEMI,
> - .dev_id = 0xc47f,
> - .param = param_oxford,
> - },
> - /* OXPCIe200 1 Native UART */
> - {
> - .vendor_id = PCI_VENDOR_ID_OXSEMI,
> - .dev_id = 0xc48b,
> - .param = param_oxford,
> - },
> - /* OXPCIe200 1 Native UART */
> - {
> - .vendor_id = PCI_VENDOR_ID_OXSEMI,
> - .dev_id = 0xc48f,
> - .param = param_oxford,
> - },
> - /* OXPCIe200 1 Native UART */
> - {
> - .vendor_id = PCI_VENDOR_ID_OXSEMI,
> - .dev_id = 0xc49b,
> - .param = param_oxford,
> - },
> - /* OXPCIe200 1 Native UART */
> - {
> - .vendor_id = PCI_VENDOR_ID_OXSEMI,
> - .dev_id = 0xc49f,
> - .param = param_oxford,
> - },
> - /* OXPCIe200 1 Native UART */
> - {
> - .vendor_id = PCI_VENDOR_ID_OXSEMI,
> - .dev_id = 0xc4ab,
> - .param = param_oxford,
> - },
> - /* OXPCIe200 1 Native UART */
> - {
> - .vendor_id = PCI_VENDOR_ID_OXSEMI,
> - .dev_id = 0xc4af,
> - .param = param_oxford,
> - },
> - /* OXPCIe200 1 Native UART */
> - {
> - .vendor_id = PCI_VENDOR_ID_OXSEMI,
> - .dev_id = 0xc4bb,
> - .param = param_oxford,
> - },
> - /* OXPCIe200 1 Native UART */
> - {
> - .vendor_id = PCI_VENDOR_ID_OXSEMI,
> - .dev_id = 0xc4bf,
> - .param = param_oxford,
> - },
> - /* OXPCIe200 1 Native UART */
> - {
> - .vendor_id = PCI_VENDOR_ID_OXSEMI,
> - .dev_id = 0xc4cb,
> - .param = param_oxford,
> - },
> - /* OXPCIe200 1 Native UART */
> - {
> - .vendor_id = PCI_VENDOR_ID_OXSEMI,
> - .dev_id = 0xc4cf,
> - .param = param_oxford,
> - },
> - /* Pericom PI7C9X7951 Uno UART */
> - {
> - .vendor_id = PCI_VENDOR_ID_PERICOM,
> - .dev_id = 0x7951,
> - .param = param_pericom_1port
> - },
> - /* Pericom PI7C9X7952 Duo UART */
> - {
> - .vendor_id = PCI_VENDOR_ID_PERICOM,
> - .dev_id = 0x7952,
> - .param = param_pericom_2port
> - },
> - /* Pericom PI7C9X7954 Quad UART */
> - {
> - .vendor_id = PCI_VENDOR_ID_PERICOM,
> - .dev_id = 0x7954,
> - .param = param_pericom_4port
> - },
> - /* Pericom PI7C9X7958 Octal UART */
> - {
> - .vendor_id = PCI_VENDOR_ID_PERICOM,
> - .dev_id = 0x7958,
> - .param = param_pericom_8port
> - }
> -};
> #endif
>
> static void ns16550_delayed_resume(void *data);
> @@ -1045,6 +739,314 @@ static int __init check_existence(struct
> }
>
> #ifdef CONFIG_HAS_PCI
> +
> +/*
> + * Create lookup tables for specific devices. It is assumed that if
> + * the device found is MMIO, then you have indexed it here. Else, the
> + * driver does nothing for MMIO based devices.
> + */
> +static const struct ns16550_config_param __initconst uart_param[] = {
> + [param_default] = {
> + .reg_width = 1,
> + .lsr_mask = UART_LSR_THRE,
> + .max_ports = 1,
> + },
> + [param_trumanage] = {
> + .reg_shift = 2,
> + .reg_width = 1,
> + .fifo_size = 16,
> + .lsr_mask = (UART_LSR_THRE | UART_LSR_TEMT),
> + .mmio = 1,
> + .max_ports = 1,
> + },
> + [param_oxford] = {
> + .base_baud = 4000000,
> + .uart_offset = 0x200,
> + .first_offset = 0x1000,
> + .reg_width = 1,
> + .fifo_size = 16,
> + .lsr_mask = UART_LSR_THRE,
> + .mmio = 1,
> + .max_ports = 1, /* It can do more, but we would need more custom code.*/
> + },
> + [param_oxford_2port] = {
> + .base_baud = 4000000,
> + .uart_offset = 0x200,
> + .first_offset = 0x1000,
> + .reg_width = 1,
> + .fifo_size = 16,
> + .lsr_mask = UART_LSR_THRE,
> + .mmio = 1,
> + .max_ports = 2,
> + },
> + [param_pericom_1port] = {
> + .base_baud = 921600,
> + .uart_offset = 8,
> + .reg_width = 1,
> + .fifo_size = 16,
> + .lsr_mask = UART_LSR_THRE,
> + .bar0 = 1,
> + .max_ports = 1,
> + },
> + [param_pericom_2port] = {
> + .base_baud = 921600,
> + .uart_offset = 8,
> + .reg_width = 1,
> + .fifo_size = 16,
> + .lsr_mask = UART_LSR_THRE,
> + .bar0 = 1,
> + .max_ports = 2,
> + },
> + /*
> + * Of the two following ones, we can't really use all of their ports,
> + * unless ns16550_com[] would get grown.
> + */
> + [param_pericom_4port] = {
> + .base_baud = 921600,
> + .uart_offset = 8,
> + .reg_width = 1,
> + .fifo_size = 16,
> + .lsr_mask = UART_LSR_THRE,
> + .bar0 = 1,
> + .max_ports = 4,
> + },
> + [param_pericom_8port] = {
> + .base_baud = 921600,
> + .uart_offset = 8,
> + .reg_width = 1,
> + .fifo_size = 16,
> + .lsr_mask = UART_LSR_THRE,
> + .bar0 = 1,
> + .max_ports = 8,
> + }
> +};
> +
> +static const struct ns16550_config __initconst uart_config[] =
> +{
> + /* Broadcom TruManage device */
> + {
> + .vendor_id = PCI_VENDOR_ID_BROADCOM,
> + .dev_id = 0x160a,
> + .param = param_trumanage,
> + },
> + /* OXPCIe952 1 Native UART */
> + {
> + .vendor_id = PCI_VENDOR_ID_OXSEMI,
> + .dev_id = 0xc11b,
> + .param = param_oxford,
> + },
> + /* OXPCIe952 1 Native UART */
> + {
> + .vendor_id = PCI_VENDOR_ID_OXSEMI,
> + .dev_id = 0xc11f,
> + .param = param_oxford,
> + },
> + /* OXPCIe952 1 Native UART */
> + {
> + .vendor_id = PCI_VENDOR_ID_OXSEMI,
> + .dev_id = 0xc138,
> + .param = param_oxford,
> + },
> + /* OXPCIe952 2 Native UART */
> + {
> + .vendor_id = PCI_VENDOR_ID_OXSEMI,
> + .dev_id = 0xc158,
> + .param = param_oxford_2port,
> + },
> + /* OXPCIe952 1 Native UART */
> + {
> + .vendor_id = PCI_VENDOR_ID_OXSEMI,
> + .dev_id = 0xc13d,
> + .param = param_oxford,
> + },
> + /* OXPCIe952 2 Native UART */
> + {
> + .vendor_id = PCI_VENDOR_ID_OXSEMI,
> + .dev_id = 0xc15d,
> + .param = param_oxford_2port,
> + },
> + /* OXPCIe952 1 Native UART */
> + {
> + .vendor_id = PCI_VENDOR_ID_OXSEMI,
> + .dev_id = 0xc40b,
> + .param = param_oxford,
> + },
> + /* OXPCIe200 1 Native UART */
> + {
> + .vendor_id = PCI_VENDOR_ID_OXSEMI,
> + .dev_id = 0xc40f,
> + .param = param_oxford,
> + },
> + /* OXPCIe200 1 Native UART */
> + {
> + .vendor_id = PCI_VENDOR_ID_OXSEMI,
> + .dev_id = 0xc41b,
> + .param = param_oxford,
> + },
> + /* OXPCIe200 1 Native UART */
> + {
> + .vendor_id = PCI_VENDOR_ID_OXSEMI,
> + .dev_id = 0xc41f,
> + .param = param_oxford,
> + },
> + /* OXPCIe200 1 Native UART */
> + {
> + .vendor_id = PCI_VENDOR_ID_OXSEMI,
> + .dev_id = 0xc42b,
> + .param = param_oxford,
> + },
> + /* OXPCIe200 1 Native UART */
> + {
> + .vendor_id = PCI_VENDOR_ID_OXSEMI,
> + .dev_id = 0xc42f,
> + .param = param_oxford,
> + },
> + /* OXPCIe200 1 Native UART */
> + {
> + .vendor_id = PCI_VENDOR_ID_OXSEMI,
> + .dev_id = 0xc43b,
> + .param = param_oxford,
> + },
> + /* OXPCIe200 1 Native UART */
> + {
> + .vendor_id = PCI_VENDOR_ID_OXSEMI,
> + .dev_id = 0xc43f,
> + .param = param_oxford,
> + },
> + /* OXPCIe200 1 Native UART */
> + {
> + .vendor_id = PCI_VENDOR_ID_OXSEMI,
> + .dev_id = 0xc44b,
> + .param = param_oxford,
> + },
> + /* OXPCIe200 1 Native UART */
> + {
> + .vendor_id = PCI_VENDOR_ID_OXSEMI,
> + .dev_id = 0xc44f,
> + .param = param_oxford,
> + },
> + /* OXPCIe200 1 Native UART */
> + {
> + .vendor_id = PCI_VENDOR_ID_OXSEMI,
> + .dev_id = 0xc45b,
> + .param = param_oxford,
> + },
> + /* OXPCIe200 1 Native UART */
> + {
> + .vendor_id = PCI_VENDOR_ID_OXSEMI,
> + .dev_id = 0xc45f,
> + .param = param_oxford,
> + },
> + /* OXPCIe200 1 Native UART */
> + {
> + .vendor_id = PCI_VENDOR_ID_OXSEMI,
> + .dev_id = 0xc46b,
> + .param = param_oxford,
> + },
> + /* OXPCIe200 1 Native UART */
> + {
> + .vendor_id = PCI_VENDOR_ID_OXSEMI,
> + .dev_id = 0xc46f,
> + .param = param_oxford,
> + },
> + /* OXPCIe200 1 Native UART */
> + {
> + .vendor_id = PCI_VENDOR_ID_OXSEMI,
> + .dev_id = 0xc47b,
> + .param = param_oxford,
> + },
> + /* OXPCIe200 1 Native UART */
> + {
> + .vendor_id = PCI_VENDOR_ID_OXSEMI,
> + .dev_id = 0xc47f,
> + .param = param_oxford,
> + },
> + /* OXPCIe200 1 Native UART */
> + {
> + .vendor_id = PCI_VENDOR_ID_OXSEMI,
> + .dev_id = 0xc48b,
> + .param = param_oxford,
> + },
> + /* OXPCIe200 1 Native UART */
> + {
> + .vendor_id = PCI_VENDOR_ID_OXSEMI,
> + .dev_id = 0xc48f,
> + .param = param_oxford,
> + },
> + /* OXPCIe200 1 Native UART */
> + {
> + .vendor_id = PCI_VENDOR_ID_OXSEMI,
> + .dev_id = 0xc49b,
> + .param = param_oxford,
> + },
> + /* OXPCIe200 1 Native UART */
> + {
> + .vendor_id = PCI_VENDOR_ID_OXSEMI,
> + .dev_id = 0xc49f,
> + .param = param_oxford,
> + },
> + /* OXPCIe200 1 Native UART */
> + {
> + .vendor_id = PCI_VENDOR_ID_OXSEMI,
> + .dev_id = 0xc4ab,
> + .param = param_oxford,
> + },
> + /* OXPCIe200 1 Native UART */
> + {
> + .vendor_id = PCI_VENDOR_ID_OXSEMI,
> + .dev_id = 0xc4af,
> + .param = param_oxford,
> + },
> + /* OXPCIe200 1 Native UART */
> + {
> + .vendor_id = PCI_VENDOR_ID_OXSEMI,
> + .dev_id = 0xc4bb,
> + .param = param_oxford,
> + },
> + /* OXPCIe200 1 Native UART */
> + {
> + .vendor_id = PCI_VENDOR_ID_OXSEMI,
> + .dev_id = 0xc4bf,
> + .param = param_oxford,
> + },
> + /* OXPCIe200 1 Native UART */
> + {
> + .vendor_id = PCI_VENDOR_ID_OXSEMI,
> + .dev_id = 0xc4cb,
> + .param = param_oxford,
> + },
> + /* OXPCIe200 1 Native UART */
> + {
> + .vendor_id = PCI_VENDOR_ID_OXSEMI,
> + .dev_id = 0xc4cf,
> + .param = param_oxford,
> + },
> + /* Pericom PI7C9X7951 Uno UART */
> + {
> + .vendor_id = PCI_VENDOR_ID_PERICOM,
> + .dev_id = 0x7951,
> + .param = param_pericom_1port
> + },
> + /* Pericom PI7C9X7952 Duo UART */
> + {
> + .vendor_id = PCI_VENDOR_ID_PERICOM,
> + .dev_id = 0x7952,
> + .param = param_pericom_2port
> + },
> + /* Pericom PI7C9X7954 Quad UART */
> + {
> + .vendor_id = PCI_VENDOR_ID_PERICOM,
> + .dev_id = 0x7954,
> + .param = param_pericom_4port
> + },
> + /* Pericom PI7C9X7958 Octal UART */
> + {
> + .vendor_id = PCI_VENDOR_ID_PERICOM,
> + .dev_id = 0x7958,
> + .param = param_pericom_8port
> + }
> +};
> +
> static int __init
> pci_uart_config(struct ns16550 *uart, bool_t skip_amt, unsigned int idx)
> {
> @@ -1211,7 +1213,8 @@ pci_uart_config(struct ns16550 *uart, bo
>
> return 0;
> }
> -#endif
> +
> +#endif /* CONFIG_HAS_PCI */
>
> /*
> * Used to parse name value pairs and return which value it is along with
>
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v2 2/3] ns16550: "com<N>=" command line options are x86-specific
2020-11-23 13:14 ` [PATCH v2 2/3] ns16550: "com<N>=" command line options are x86-specific Jan Beulich
@ 2020-11-24 0:11 ` Stefano Stabellini
2020-11-24 9:50 ` Rahul Singh
0 siblings, 1 reply; 10+ messages in thread
From: Stefano Stabellini @ 2020-11-24 0:11 UTC (permalink / raw)
To: Jan Beulich
Cc: xen-devel, Andrew Cooper, George Dunlap, Ian Jackson,
Julien Grall, Stefano Stabellini, Wei Liu, Rahul Singh
On Mon, 23 Nov 2020, Jan Beulich wrote:
> Pure code motion (plus the addition of "#ifdef CONFIG_X86); no
> functional change intended.
>
> Reported-by: Julien Grall <julien@xen.org>
> Signed-off-by: Jan Beulich <jbeulich@suse.com>
Great cleanup
Reviewed-by: Stefano Stabellini <sstabellini@kernel.org>
> ---
> v2: Re-base over new earlier patch.
>
> --- a/docs/misc/xen-command-line.pandoc
> +++ b/docs/misc/xen-command-line.pandoc
> @@ -318,8 +318,8 @@ Interrupts. Specifying zero disables CM
> Flag to indicate whether to probe for a CMOS Real Time Clock irrespective of
> ACPI indicating none to be there.
>
> -### com1
> -### com2
> +### com1 (x86)
> +### com2 (x86)
> > `= <baud>[/<base-baud>][,[DPS][,[<io-base>|pci|amt][,[<irq>|msi][,[<port-bdf>][,[<bridge-bdf>]]]]]]`
>
> Both option `com1` and `com2` follow the same format.
> --- a/xen/drivers/char/ns16550.c
> +++ b/xen/drivers/char/ns16550.c
> @@ -31,38 +31,6 @@
> #include <asm/fixmap.h>
> #endif
>
> -/*
> - * Configure serial port with a string:
> - * <baud>[/<base_baud>][,DPS[,<io-base>[,<irq>[,<port-bdf>[,<bridge-bdf>]]]]].
> - * The tail of the string can be omitted if platform defaults are sufficient.
> - * If the baud rate is pre-configured, perhaps by a bootloader, then 'auto'
> - * can be specified in place of a numeric baud rate. Polled mode is specified
> - * by requesting irq 0.
> - */
> -static char __initdata opt_com1[128] = "";
> -static char __initdata opt_com2[128] = "";
> -string_param("com1", opt_com1);
> -string_param("com2", opt_com2);
> -
> -enum serial_param_type {
> - baud,
> - clock_hz,
> - data_bits,
> - io_base,
> - irq,
> - parity,
> - reg_shift,
> - reg_width,
> - stop_bits,
> -#ifdef CONFIG_HAS_PCI
> - bridge_bdf,
> - device,
> - port_bdf,
> -#endif
> - /* List all parameters before this line. */
> - num_serial_params
> -};
> -
> static struct ns16550 {
> int baud, clock_hz, data_bits, parity, stop_bits, fifo_size, irq;
> u64 io_base; /* I/O port or memory-mapped I/O address. */
> @@ -98,32 +66,6 @@ static struct ns16550 {
> #endif
> } ns16550_com[2] = { { 0 } };
>
> -struct serial_param_var {
> - char name[12];
> - enum serial_param_type type;
> -};
> -
> -/*
> - * Enum struct keeping a table of all accepted parameter names for parsing
> - * com_console_options for serial port com1 and com2.
> - */
> -static const struct serial_param_var __initconst sp_vars[] = {
> - {"baud", baud},
> - {"clock-hz", clock_hz},
> - {"data-bits", data_bits},
> - {"io-base", io_base},
> - {"irq", irq},
> - {"parity", parity},
> - {"reg-shift", reg_shift},
> - {"reg-width", reg_width},
> - {"stop-bits", stop_bits},
> -#ifdef CONFIG_HAS_PCI
> - {"bridge", bridge_bdf},
> - {"dev", device},
> - {"port", port_bdf},
> -#endif
> -};
> -
> #ifdef CONFIG_HAS_PCI
> struct ns16550_config {
> u16 vendor_id;
> @@ -674,6 +616,19 @@ static struct uart_driver __read_mostly
> #endif
> };
>
> +static void ns16550_init_common(struct ns16550 *uart)
> +{
> + uart->clock_hz = UART_CLOCK_HZ;
> +
> + /* Default is no transmit FIFO. */
> + uart->fifo_size = 1;
> +
> + /* Default lsr_mask = UART_LSR_THRE */
> + uart->lsr_mask = UART_LSR_THRE;
> +}
> +
> +#ifdef CONFIG_X86
> +
> static int __init parse_parity_char(int c)
> {
> switch ( c )
> @@ -1217,6 +1172,64 @@ pci_uart_config(struct ns16550 *uart, bo
> #endif /* CONFIG_HAS_PCI */
>
> /*
> + * Configure serial port with a string:
> + * <baud>[/<base_baud>][,DPS[,<io-base>[,<irq>[,<port-bdf>[,<bridge-bdf>]]]]].
> + * The tail of the string can be omitted if platform defaults are sufficient.
> + * If the baud rate is pre-configured, perhaps by a bootloader, then 'auto'
> + * can be specified in place of a numeric baud rate. Polled mode is specified
> + * by requesting irq 0.
> + */
> +static char __initdata opt_com1[128] = "";
> +static char __initdata opt_com2[128] = "";
> +string_param("com1", opt_com1);
> +string_param("com2", opt_com2);
> +
> +enum serial_param_type {
> + baud,
> + clock_hz,
> + data_bits,
> + io_base,
> + irq,
> + parity,
> + reg_shift,
> + reg_width,
> + stop_bits,
> +#ifdef CONFIG_HAS_PCI
> + bridge_bdf,
> + device,
> + port_bdf,
> +#endif
> + /* List all parameters before this line. */
> + num_serial_params
> +};
> +
> +struct serial_param_var {
> + char name[12];
> + enum serial_param_type type;
> +};
> +
> +/*
> + * Enum struct keeping a table of all accepted parameter names for parsing
> + * com_console_options for serial port com1 and com2.
> + */
> +static const struct serial_param_var __initconst sp_vars[] = {
> + {"baud", baud},
> + {"clock-hz", clock_hz},
> + {"data-bits", data_bits},
> + {"io-base", io_base},
> + {"irq", irq},
> + {"parity", parity},
> + {"reg-shift", reg_shift},
> + {"reg-width", reg_width},
> + {"stop-bits", stop_bits},
> +#ifdef CONFIG_HAS_PCI
> + {"bridge", bridge_bdf},
> + {"dev", device},
> + {"port", port_bdf},
> +#endif
> +};
> +
> +/*
> * Used to parse name value pairs and return which value it is along with
> * pointer for the extracted value.
> */
> @@ -1504,17 +1517,6 @@ static void __init ns16550_parse_port_co
> serial_register_uart(uart - ns16550_com, &ns16550_driver, uart);
> }
>
> -static void ns16550_init_common(struct ns16550 *uart)
> -{
> - uart->clock_hz = UART_CLOCK_HZ;
> -
> - /* Default is no transmit FIFO. */
> - uart->fifo_size = 1;
> -
> - /* Default lsr_mask = UART_LSR_THRE */
> - uart->lsr_mask = UART_LSR_THRE;
> -}
> -
> void __init ns16550_init(int index, struct ns16550_defaults *defaults)
> {
> struct ns16550 *uart;
> @@ -1541,6 +1543,8 @@ void __init ns16550_init(int index, stru
> ns16550_parse_port_config(uart, (index == 0) ? opt_com1 : opt_com2);
> }
>
> +#endif /* CONFIG_X86 */
> +
> #ifdef CONFIG_HAS_DEVICE_TREE
> static int __init ns16550_uart_dt_init(struct dt_device_node *dev,
> const void *data)
>
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v2 3/3] ns16550: drop stray "#ifdef CONFIG_HAS_PCI"
2020-11-23 13:15 ` [PATCH v2 3/3] ns16550: drop stray "#ifdef CONFIG_HAS_PCI" Jan Beulich
@ 2020-11-24 0:11 ` Stefano Stabellini
2020-11-24 9:52 ` Rahul Singh
0 siblings, 1 reply; 10+ messages in thread
From: Stefano Stabellini @ 2020-11-24 0:11 UTC (permalink / raw)
To: Jan Beulich
Cc: xen-devel, Andrew Cooper, George Dunlap, Ian Jackson,
Julien Grall, Stefano Stabellini, Wei Liu, Rahul Singh
On Mon, 23 Nov 2020, Jan Beulich wrote:
> There's no point wrapping the function invocation when
> - the function body is already suitably wrapped,
> - the function itself is unconditionally available.
>
> Reported-by: Julien Grall <julien@xen.org>
> Signed-off-by: Jan Beulich <jbeulich@suse.com>
Reviewed-by: Stefano Stabellini <sstabellini@kernel.org>
> --- a/xen/drivers/char/ns16550.c
> +++ b/xen/drivers/char/ns16550.c
> @@ -662,9 +662,7 @@ static int __init check_existence(struct
> return 1; /* Everything is MMIO */
> #endif
>
> -#ifdef CONFIG_HAS_PCI
> pci_serial_early_init(uart);
> -#endif
>
> /*
> * Do a simple existence test first; if we fail this,
>
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v2 1/3] ns16550: move PCI arrays next to the function using them
2020-11-24 0:02 ` Stefano Stabellini
@ 2020-11-24 9:50 ` Rahul Singh
0 siblings, 0 replies; 10+ messages in thread
From: Rahul Singh @ 2020-11-24 9:50 UTC (permalink / raw)
To: Stefano Stabellini
Cc: Jan Beulich, xen-devel, Andrew Cooper, George Dunlap,
Ian Jackson, Julien Grall, Wei Liu
Hello ,
> On 24 Nov 2020, at 12:02 am, Stefano Stabellini <sstabellini@kernel.org> wrote:
>
> On Mon, 23 Nov 2020, Jan Beulich wrote:
>> Pure code motion; no functional change intended.
>>
>> Signed-off-by: Jan Beulich <jbeulich@suse.com>
>
> Reviewed-by: Stefano Stabellini <sstabellini@kernel.org>
>
Reviewed-by: Rahul Singh <rahul.singh@arm.com>
Regards,
Rahul
>
>> ---
>> v2: New.
>>
>> --- a/xen/drivers/char/ns16550.c
>> +++ b/xen/drivers/char/ns16550.c
>> @@ -153,312 +153,6 @@ struct ns16550_config_param {
>> unsigned int uart_offset;
>> unsigned int first_offset;
>> };
>> -
>> -/*
>> - * Create lookup tables for specific devices. It is assumed that if
>> - * the device found is MMIO, then you have indexed it here. Else, the
>> - * driver does nothing for MMIO based devices.
>> - */
>> -static const struct ns16550_config_param __initconst uart_param[] = {
>> - [param_default] = {
>> - .reg_width = 1,
>> - .lsr_mask = UART_LSR_THRE,
>> - .max_ports = 1,
>> - },
>> - [param_trumanage] = {
>> - .reg_shift = 2,
>> - .reg_width = 1,
>> - .fifo_size = 16,
>> - .lsr_mask = (UART_LSR_THRE | UART_LSR_TEMT),
>> - .mmio = 1,
>> - .max_ports = 1,
>> - },
>> - [param_oxford] = {
>> - .base_baud = 4000000,
>> - .uart_offset = 0x200,
>> - .first_offset = 0x1000,
>> - .reg_width = 1,
>> - .fifo_size = 16,
>> - .lsr_mask = UART_LSR_THRE,
>> - .mmio = 1,
>> - .max_ports = 1, /* It can do more, but we would need more custom code.*/
>> - },
>> - [param_oxford_2port] = {
>> - .base_baud = 4000000,
>> - .uart_offset = 0x200,
>> - .first_offset = 0x1000,
>> - .reg_width = 1,
>> - .fifo_size = 16,
>> - .lsr_mask = UART_LSR_THRE,
>> - .mmio = 1,
>> - .max_ports = 2,
>> - },
>> - [param_pericom_1port] = {
>> - .base_baud = 921600,
>> - .uart_offset = 8,
>> - .reg_width = 1,
>> - .fifo_size = 16,
>> - .lsr_mask = UART_LSR_THRE,
>> - .bar0 = 1,
>> - .max_ports = 1,
>> - },
>> - [param_pericom_2port] = {
>> - .base_baud = 921600,
>> - .uart_offset = 8,
>> - .reg_width = 1,
>> - .fifo_size = 16,
>> - .lsr_mask = UART_LSR_THRE,
>> - .bar0 = 1,
>> - .max_ports = 2,
>> - },
>> - /*
>> - * Of the two following ones, we can't really use all of their ports,
>> - * unless ns16550_com[] would get grown.
>> - */
>> - [param_pericom_4port] = {
>> - .base_baud = 921600,
>> - .uart_offset = 8,
>> - .reg_width = 1,
>> - .fifo_size = 16,
>> - .lsr_mask = UART_LSR_THRE,
>> - .bar0 = 1,
>> - .max_ports = 4,
>> - },
>> - [param_pericom_8port] = {
>> - .base_baud = 921600,
>> - .uart_offset = 8,
>> - .reg_width = 1,
>> - .fifo_size = 16,
>> - .lsr_mask = UART_LSR_THRE,
>> - .bar0 = 1,
>> - .max_ports = 8,
>> - }
>> -};
>> -static const struct ns16550_config __initconst uart_config[] =
>> -{
>> - /* Broadcom TruManage device */
>> - {
>> - .vendor_id = PCI_VENDOR_ID_BROADCOM,
>> - .dev_id = 0x160a,
>> - .param = param_trumanage,
>> - },
>> - /* OXPCIe952 1 Native UART */
>> - {
>> - .vendor_id = PCI_VENDOR_ID_OXSEMI,
>> - .dev_id = 0xc11b,
>> - .param = param_oxford,
>> - },
>> - /* OXPCIe952 1 Native UART */
>> - {
>> - .vendor_id = PCI_VENDOR_ID_OXSEMI,
>> - .dev_id = 0xc11f,
>> - .param = param_oxford,
>> - },
>> - /* OXPCIe952 1 Native UART */
>> - {
>> - .vendor_id = PCI_VENDOR_ID_OXSEMI,
>> - .dev_id = 0xc138,
>> - .param = param_oxford,
>> - },
>> - /* OXPCIe952 2 Native UART */
>> - {
>> - .vendor_id = PCI_VENDOR_ID_OXSEMI,
>> - .dev_id = 0xc158,
>> - .param = param_oxford_2port,
>> - },
>> - /* OXPCIe952 1 Native UART */
>> - {
>> - .vendor_id = PCI_VENDOR_ID_OXSEMI,
>> - .dev_id = 0xc13d,
>> - .param = param_oxford,
>> - },
>> - /* OXPCIe952 2 Native UART */
>> - {
>> - .vendor_id = PCI_VENDOR_ID_OXSEMI,
>> - .dev_id = 0xc15d,
>> - .param = param_oxford_2port,
>> - },
>> - /* OXPCIe952 1 Native UART */
>> - {
>> - .vendor_id = PCI_VENDOR_ID_OXSEMI,
>> - .dev_id = 0xc40b,
>> - .param = param_oxford,
>> - },
>> - /* OXPCIe200 1 Native UART */
>> - {
>> - .vendor_id = PCI_VENDOR_ID_OXSEMI,
>> - .dev_id = 0xc40f,
>> - .param = param_oxford,
>> - },
>> - /* OXPCIe200 1 Native UART */
>> - {
>> - .vendor_id = PCI_VENDOR_ID_OXSEMI,
>> - .dev_id = 0xc41b,
>> - .param = param_oxford,
>> - },
>> - /* OXPCIe200 1 Native UART */
>> - {
>> - .vendor_id = PCI_VENDOR_ID_OXSEMI,
>> - .dev_id = 0xc41f,
>> - .param = param_oxford,
>> - },
>> - /* OXPCIe200 1 Native UART */
>> - {
>> - .vendor_id = PCI_VENDOR_ID_OXSEMI,
>> - .dev_id = 0xc42b,
>> - .param = param_oxford,
>> - },
>> - /* OXPCIe200 1 Native UART */
>> - {
>> - .vendor_id = PCI_VENDOR_ID_OXSEMI,
>> - .dev_id = 0xc42f,
>> - .param = param_oxford,
>> - },
>> - /* OXPCIe200 1 Native UART */
>> - {
>> - .vendor_id = PCI_VENDOR_ID_OXSEMI,
>> - .dev_id = 0xc43b,
>> - .param = param_oxford,
>> - },
>> - /* OXPCIe200 1 Native UART */
>> - {
>> - .vendor_id = PCI_VENDOR_ID_OXSEMI,
>> - .dev_id = 0xc43f,
>> - .param = param_oxford,
>> - },
>> - /* OXPCIe200 1 Native UART */
>> - {
>> - .vendor_id = PCI_VENDOR_ID_OXSEMI,
>> - .dev_id = 0xc44b,
>> - .param = param_oxford,
>> - },
>> - /* OXPCIe200 1 Native UART */
>> - {
>> - .vendor_id = PCI_VENDOR_ID_OXSEMI,
>> - .dev_id = 0xc44f,
>> - .param = param_oxford,
>> - },
>> - /* OXPCIe200 1 Native UART */
>> - {
>> - .vendor_id = PCI_VENDOR_ID_OXSEMI,
>> - .dev_id = 0xc45b,
>> - .param = param_oxford,
>> - },
>> - /* OXPCIe200 1 Native UART */
>> - {
>> - .vendor_id = PCI_VENDOR_ID_OXSEMI,
>> - .dev_id = 0xc45f,
>> - .param = param_oxford,
>> - },
>> - /* OXPCIe200 1 Native UART */
>> - {
>> - .vendor_id = PCI_VENDOR_ID_OXSEMI,
>> - .dev_id = 0xc46b,
>> - .param = param_oxford,
>> - },
>> - /* OXPCIe200 1 Native UART */
>> - {
>> - .vendor_id = PCI_VENDOR_ID_OXSEMI,
>> - .dev_id = 0xc46f,
>> - .param = param_oxford,
>> - },
>> - /* OXPCIe200 1 Native UART */
>> - {
>> - .vendor_id = PCI_VENDOR_ID_OXSEMI,
>> - .dev_id = 0xc47b,
>> - .param = param_oxford,
>> - },
>> - /* OXPCIe200 1 Native UART */
>> - {
>> - .vendor_id = PCI_VENDOR_ID_OXSEMI,
>> - .dev_id = 0xc47f,
>> - .param = param_oxford,
>> - },
>> - /* OXPCIe200 1 Native UART */
>> - {
>> - .vendor_id = PCI_VENDOR_ID_OXSEMI,
>> - .dev_id = 0xc48b,
>> - .param = param_oxford,
>> - },
>> - /* OXPCIe200 1 Native UART */
>> - {
>> - .vendor_id = PCI_VENDOR_ID_OXSEMI,
>> - .dev_id = 0xc48f,
>> - .param = param_oxford,
>> - },
>> - /* OXPCIe200 1 Native UART */
>> - {
>> - .vendor_id = PCI_VENDOR_ID_OXSEMI,
>> - .dev_id = 0xc49b,
>> - .param = param_oxford,
>> - },
>> - /* OXPCIe200 1 Native UART */
>> - {
>> - .vendor_id = PCI_VENDOR_ID_OXSEMI,
>> - .dev_id = 0xc49f,
>> - .param = param_oxford,
>> - },
>> - /* OXPCIe200 1 Native UART */
>> - {
>> - .vendor_id = PCI_VENDOR_ID_OXSEMI,
>> - .dev_id = 0xc4ab,
>> - .param = param_oxford,
>> - },
>> - /* OXPCIe200 1 Native UART */
>> - {
>> - .vendor_id = PCI_VENDOR_ID_OXSEMI,
>> - .dev_id = 0xc4af,
>> - .param = param_oxford,
>> - },
>> - /* OXPCIe200 1 Native UART */
>> - {
>> - .vendor_id = PCI_VENDOR_ID_OXSEMI,
>> - .dev_id = 0xc4bb,
>> - .param = param_oxford,
>> - },
>> - /* OXPCIe200 1 Native UART */
>> - {
>> - .vendor_id = PCI_VENDOR_ID_OXSEMI,
>> - .dev_id = 0xc4bf,
>> - .param = param_oxford,
>> - },
>> - /* OXPCIe200 1 Native UART */
>> - {
>> - .vendor_id = PCI_VENDOR_ID_OXSEMI,
>> - .dev_id = 0xc4cb,
>> - .param = param_oxford,
>> - },
>> - /* OXPCIe200 1 Native UART */
>> - {
>> - .vendor_id = PCI_VENDOR_ID_OXSEMI,
>> - .dev_id = 0xc4cf,
>> - .param = param_oxford,
>> - },
>> - /* Pericom PI7C9X7951 Uno UART */
>> - {
>> - .vendor_id = PCI_VENDOR_ID_PERICOM,
>> - .dev_id = 0x7951,
>> - .param = param_pericom_1port
>> - },
>> - /* Pericom PI7C9X7952 Duo UART */
>> - {
>> - .vendor_id = PCI_VENDOR_ID_PERICOM,
>> - .dev_id = 0x7952,
>> - .param = param_pericom_2port
>> - },
>> - /* Pericom PI7C9X7954 Quad UART */
>> - {
>> - .vendor_id = PCI_VENDOR_ID_PERICOM,
>> - .dev_id = 0x7954,
>> - .param = param_pericom_4port
>> - },
>> - /* Pericom PI7C9X7958 Octal UART */
>> - {
>> - .vendor_id = PCI_VENDOR_ID_PERICOM,
>> - .dev_id = 0x7958,
>> - .param = param_pericom_8port
>> - }
>> -};
>> #endif
>>
>> static void ns16550_delayed_resume(void *data);
>> @@ -1045,6 +739,314 @@ static int __init check_existence(struct
>> }
>>
>> #ifdef CONFIG_HAS_PCI
>> +
>> +/*
>> + * Create lookup tables for specific devices. It is assumed that if
>> + * the device found is MMIO, then you have indexed it here. Else, the
>> + * driver does nothing for MMIO based devices.
>> + */
>> +static const struct ns16550_config_param __initconst uart_param[] = {
>> + [param_default] = {
>> + .reg_width = 1,
>> + .lsr_mask = UART_LSR_THRE,
>> + .max_ports = 1,
>> + },
>> + [param_trumanage] = {
>> + .reg_shift = 2,
>> + .reg_width = 1,
>> + .fifo_size = 16,
>> + .lsr_mask = (UART_LSR_THRE | UART_LSR_TEMT),
>> + .mmio = 1,
>> + .max_ports = 1,
>> + },
>> + [param_oxford] = {
>> + .base_baud = 4000000,
>> + .uart_offset = 0x200,
>> + .first_offset = 0x1000,
>> + .reg_width = 1,
>> + .fifo_size = 16,
>> + .lsr_mask = UART_LSR_THRE,
>> + .mmio = 1,
>> + .max_ports = 1, /* It can do more, but we would need more custom code.*/
>> + },
>> + [param_oxford_2port] = {
>> + .base_baud = 4000000,
>> + .uart_offset = 0x200,
>> + .first_offset = 0x1000,
>> + .reg_width = 1,
>> + .fifo_size = 16,
>> + .lsr_mask = UART_LSR_THRE,
>> + .mmio = 1,
>> + .max_ports = 2,
>> + },
>> + [param_pericom_1port] = {
>> + .base_baud = 921600,
>> + .uart_offset = 8,
>> + .reg_width = 1,
>> + .fifo_size = 16,
>> + .lsr_mask = UART_LSR_THRE,
>> + .bar0 = 1,
>> + .max_ports = 1,
>> + },
>> + [param_pericom_2port] = {
>> + .base_baud = 921600,
>> + .uart_offset = 8,
>> + .reg_width = 1,
>> + .fifo_size = 16,
>> + .lsr_mask = UART_LSR_THRE,
>> + .bar0 = 1,
>> + .max_ports = 2,
>> + },
>> + /*
>> + * Of the two following ones, we can't really use all of their ports,
>> + * unless ns16550_com[] would get grown.
>> + */
>> + [param_pericom_4port] = {
>> + .base_baud = 921600,
>> + .uart_offset = 8,
>> + .reg_width = 1,
>> + .fifo_size = 16,
>> + .lsr_mask = UART_LSR_THRE,
>> + .bar0 = 1,
>> + .max_ports = 4,
>> + },
>> + [param_pericom_8port] = {
>> + .base_baud = 921600,
>> + .uart_offset = 8,
>> + .reg_width = 1,
>> + .fifo_size = 16,
>> + .lsr_mask = UART_LSR_THRE,
>> + .bar0 = 1,
>> + .max_ports = 8,
>> + }
>> +};
>> +
>> +static const struct ns16550_config __initconst uart_config[] =
>> +{
>> + /* Broadcom TruManage device */
>> + {
>> + .vendor_id = PCI_VENDOR_ID_BROADCOM,
>> + .dev_id = 0x160a,
>> + .param = param_trumanage,
>> + },
>> + /* OXPCIe952 1 Native UART */
>> + {
>> + .vendor_id = PCI_VENDOR_ID_OXSEMI,
>> + .dev_id = 0xc11b,
>> + .param = param_oxford,
>> + },
>> + /* OXPCIe952 1 Native UART */
>> + {
>> + .vendor_id = PCI_VENDOR_ID_OXSEMI,
>> + .dev_id = 0xc11f,
>> + .param = param_oxford,
>> + },
>> + /* OXPCIe952 1 Native UART */
>> + {
>> + .vendor_id = PCI_VENDOR_ID_OXSEMI,
>> + .dev_id = 0xc138,
>> + .param = param_oxford,
>> + },
>> + /* OXPCIe952 2 Native UART */
>> + {
>> + .vendor_id = PCI_VENDOR_ID_OXSEMI,
>> + .dev_id = 0xc158,
>> + .param = param_oxford_2port,
>> + },
>> + /* OXPCIe952 1 Native UART */
>> + {
>> + .vendor_id = PCI_VENDOR_ID_OXSEMI,
>> + .dev_id = 0xc13d,
>> + .param = param_oxford,
>> + },
>> + /* OXPCIe952 2 Native UART */
>> + {
>> + .vendor_id = PCI_VENDOR_ID_OXSEMI,
>> + .dev_id = 0xc15d,
>> + .param = param_oxford_2port,
>> + },
>> + /* OXPCIe952 1 Native UART */
>> + {
>> + .vendor_id = PCI_VENDOR_ID_OXSEMI,
>> + .dev_id = 0xc40b,
>> + .param = param_oxford,
>> + },
>> + /* OXPCIe200 1 Native UART */
>> + {
>> + .vendor_id = PCI_VENDOR_ID_OXSEMI,
>> + .dev_id = 0xc40f,
>> + .param = param_oxford,
>> + },
>> + /* OXPCIe200 1 Native UART */
>> + {
>> + .vendor_id = PCI_VENDOR_ID_OXSEMI,
>> + .dev_id = 0xc41b,
>> + .param = param_oxford,
>> + },
>> + /* OXPCIe200 1 Native UART */
>> + {
>> + .vendor_id = PCI_VENDOR_ID_OXSEMI,
>> + .dev_id = 0xc41f,
>> + .param = param_oxford,
>> + },
>> + /* OXPCIe200 1 Native UART */
>> + {
>> + .vendor_id = PCI_VENDOR_ID_OXSEMI,
>> + .dev_id = 0xc42b,
>> + .param = param_oxford,
>> + },
>> + /* OXPCIe200 1 Native UART */
>> + {
>> + .vendor_id = PCI_VENDOR_ID_OXSEMI,
>> + .dev_id = 0xc42f,
>> + .param = param_oxford,
>> + },
>> + /* OXPCIe200 1 Native UART */
>> + {
>> + .vendor_id = PCI_VENDOR_ID_OXSEMI,
>> + .dev_id = 0xc43b,
>> + .param = param_oxford,
>> + },
>> + /* OXPCIe200 1 Native UART */
>> + {
>> + .vendor_id = PCI_VENDOR_ID_OXSEMI,
>> + .dev_id = 0xc43f,
>> + .param = param_oxford,
>> + },
>> + /* OXPCIe200 1 Native UART */
>> + {
>> + .vendor_id = PCI_VENDOR_ID_OXSEMI,
>> + .dev_id = 0xc44b,
>> + .param = param_oxford,
>> + },
>> + /* OXPCIe200 1 Native UART */
>> + {
>> + .vendor_id = PCI_VENDOR_ID_OXSEMI,
>> + .dev_id = 0xc44f,
>> + .param = param_oxford,
>> + },
>> + /* OXPCIe200 1 Native UART */
>> + {
>> + .vendor_id = PCI_VENDOR_ID_OXSEMI,
>> + .dev_id = 0xc45b,
>> + .param = param_oxford,
>> + },
>> + /* OXPCIe200 1 Native UART */
>> + {
>> + .vendor_id = PCI_VENDOR_ID_OXSEMI,
>> + .dev_id = 0xc45f,
>> + .param = param_oxford,
>> + },
>> + /* OXPCIe200 1 Native UART */
>> + {
>> + .vendor_id = PCI_VENDOR_ID_OXSEMI,
>> + .dev_id = 0xc46b,
>> + .param = param_oxford,
>> + },
>> + /* OXPCIe200 1 Native UART */
>> + {
>> + .vendor_id = PCI_VENDOR_ID_OXSEMI,
>> + .dev_id = 0xc46f,
>> + .param = param_oxford,
>> + },
>> + /* OXPCIe200 1 Native UART */
>> + {
>> + .vendor_id = PCI_VENDOR_ID_OXSEMI,
>> + .dev_id = 0xc47b,
>> + .param = param_oxford,
>> + },
>> + /* OXPCIe200 1 Native UART */
>> + {
>> + .vendor_id = PCI_VENDOR_ID_OXSEMI,
>> + .dev_id = 0xc47f,
>> + .param = param_oxford,
>> + },
>> + /* OXPCIe200 1 Native UART */
>> + {
>> + .vendor_id = PCI_VENDOR_ID_OXSEMI,
>> + .dev_id = 0xc48b,
>> + .param = param_oxford,
>> + },
>> + /* OXPCIe200 1 Native UART */
>> + {
>> + .vendor_id = PCI_VENDOR_ID_OXSEMI,
>> + .dev_id = 0xc48f,
>> + .param = param_oxford,
>> + },
>> + /* OXPCIe200 1 Native UART */
>> + {
>> + .vendor_id = PCI_VENDOR_ID_OXSEMI,
>> + .dev_id = 0xc49b,
>> + .param = param_oxford,
>> + },
>> + /* OXPCIe200 1 Native UART */
>> + {
>> + .vendor_id = PCI_VENDOR_ID_OXSEMI,
>> + .dev_id = 0xc49f,
>> + .param = param_oxford,
>> + },
>> + /* OXPCIe200 1 Native UART */
>> + {
>> + .vendor_id = PCI_VENDOR_ID_OXSEMI,
>> + .dev_id = 0xc4ab,
>> + .param = param_oxford,
>> + },
>> + /* OXPCIe200 1 Native UART */
>> + {
>> + .vendor_id = PCI_VENDOR_ID_OXSEMI,
>> + .dev_id = 0xc4af,
>> + .param = param_oxford,
>> + },
>> + /* OXPCIe200 1 Native UART */
>> + {
>> + .vendor_id = PCI_VENDOR_ID_OXSEMI,
>> + .dev_id = 0xc4bb,
>> + .param = param_oxford,
>> + },
>> + /* OXPCIe200 1 Native UART */
>> + {
>> + .vendor_id = PCI_VENDOR_ID_OXSEMI,
>> + .dev_id = 0xc4bf,
>> + .param = param_oxford,
>> + },
>> + /* OXPCIe200 1 Native UART */
>> + {
>> + .vendor_id = PCI_VENDOR_ID_OXSEMI,
>> + .dev_id = 0xc4cb,
>> + .param = param_oxford,
>> + },
>> + /* OXPCIe200 1 Native UART */
>> + {
>> + .vendor_id = PCI_VENDOR_ID_OXSEMI,
>> + .dev_id = 0xc4cf,
>> + .param = param_oxford,
>> + },
>> + /* Pericom PI7C9X7951 Uno UART */
>> + {
>> + .vendor_id = PCI_VENDOR_ID_PERICOM,
>> + .dev_id = 0x7951,
>> + .param = param_pericom_1port
>> + },
>> + /* Pericom PI7C9X7952 Duo UART */
>> + {
>> + .vendor_id = PCI_VENDOR_ID_PERICOM,
>> + .dev_id = 0x7952,
>> + .param = param_pericom_2port
>> + },
>> + /* Pericom PI7C9X7954 Quad UART */
>> + {
>> + .vendor_id = PCI_VENDOR_ID_PERICOM,
>> + .dev_id = 0x7954,
>> + .param = param_pericom_4port
>> + },
>> + /* Pericom PI7C9X7958 Octal UART */
>> + {
>> + .vendor_id = PCI_VENDOR_ID_PERICOM,
>> + .dev_id = 0x7958,
>> + .param = param_pericom_8port
>> + }
>> +};
>> +
>> static int __init
>> pci_uart_config(struct ns16550 *uart, bool_t skip_amt, unsigned int idx)
>> {
>> @@ -1211,7 +1213,8 @@ pci_uart_config(struct ns16550 *uart, bo
>>
>> return 0;
>> }
>> -#endif
>> +
>> +#endif /* CONFIG_HAS_PCI */
>>
>> /*
>> * Used to parse name value pairs and return which value it is along with
>>
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v2 2/3] ns16550: "com<N>=" command line options are x86-specific
2020-11-24 0:11 ` Stefano Stabellini
@ 2020-11-24 9:50 ` Rahul Singh
0 siblings, 0 replies; 10+ messages in thread
From: Rahul Singh @ 2020-11-24 9:50 UTC (permalink / raw)
To: Stefano Stabellini
Cc: Jan Beulich, xen-devel, Andrew Cooper, George Dunlap,
Ian Jackson, Julien Grall, Wei Liu
Hello Jan,
> On 24 Nov 2020, at 12:11 am, Stefano Stabellini <sstabellini@kernel.org> wrote:
>
> On Mon, 23 Nov 2020, Jan Beulich wrote:
>> Pure code motion (plus the addition of "#ifdef CONFIG_X86); no
>> functional change intended.
>>
>> Reported-by: Julien Grall <julien@xen.org>
>> Signed-off-by: Jan Beulich <jbeulich@suse.com>
>
> Great cleanup
>
> Reviewed-by: Stefano Stabellini <sstabellini@kernel.org>
Reviewed-by: Rahul Singh <rahul.singh@arm.com>
Regards,
Rahul
>
>
>> ---
>> v2: Re-base over new earlier patch.
>>
>> --- a/docs/misc/xen-command-line.pandoc
>> +++ b/docs/misc/xen-command-line.pandoc
>> @@ -318,8 +318,8 @@ Interrupts. Specifying zero disables CM
>> Flag to indicate whether to probe for a CMOS Real Time Clock irrespective of
>> ACPI indicating none to be there.
>>
>> -### com1
>> -### com2
>> +### com1 (x86)
>> +### com2 (x86)
>>> `= <baud>[/<base-baud>][,[DPS][,[<io-base>|pci|amt][,[<irq>|msi][,[<port-bdf>][,[<bridge-bdf>]]]]]]`
>>
>> Both option `com1` and `com2` follow the same format.
>> --- a/xen/drivers/char/ns16550.c
>> +++ b/xen/drivers/char/ns16550.c
>> @@ -31,38 +31,6 @@
>> #include <asm/fixmap.h>
>> #endif
>>
>> -/*
>> - * Configure serial port with a string:
>> - * <baud>[/<base_baud>][,DPS[,<io-base>[,<irq>[,<port-bdf>[,<bridge-bdf>]]]]].
>> - * The tail of the string can be omitted if platform defaults are sufficient.
>> - * If the baud rate is pre-configured, perhaps by a bootloader, then 'auto'
>> - * can be specified in place of a numeric baud rate. Polled mode is specified
>> - * by requesting irq 0.
>> - */
>> -static char __initdata opt_com1[128] = "";
>> -static char __initdata opt_com2[128] = "";
>> -string_param("com1", opt_com1);
>> -string_param("com2", opt_com2);
>> -
>> -enum serial_param_type {
>> - baud,
>> - clock_hz,
>> - data_bits,
>> - io_base,
>> - irq,
>> - parity,
>> - reg_shift,
>> - reg_width,
>> - stop_bits,
>> -#ifdef CONFIG_HAS_PCI
>> - bridge_bdf,
>> - device,
>> - port_bdf,
>> -#endif
>> - /* List all parameters before this line. */
>> - num_serial_params
>> -};
>> -
>> static struct ns16550 {
>> int baud, clock_hz, data_bits, parity, stop_bits, fifo_size, irq;
>> u64 io_base; /* I/O port or memory-mapped I/O address. */
>> @@ -98,32 +66,6 @@ static struct ns16550 {
>> #endif
>> } ns16550_com[2] = { { 0 } };
>>
>> -struct serial_param_var {
>> - char name[12];
>> - enum serial_param_type type;
>> -};
>> -
>> -/*
>> - * Enum struct keeping a table of all accepted parameter names for parsing
>> - * com_console_options for serial port com1 and com2.
>> - */
>> -static const struct serial_param_var __initconst sp_vars[] = {
>> - {"baud", baud},
>> - {"clock-hz", clock_hz},
>> - {"data-bits", data_bits},
>> - {"io-base", io_base},
>> - {"irq", irq},
>> - {"parity", parity},
>> - {"reg-shift", reg_shift},
>> - {"reg-width", reg_width},
>> - {"stop-bits", stop_bits},
>> -#ifdef CONFIG_HAS_PCI
>> - {"bridge", bridge_bdf},
>> - {"dev", device},
>> - {"port", port_bdf},
>> -#endif
>> -};
>> -
>> #ifdef CONFIG_HAS_PCI
>> struct ns16550_config {
>> u16 vendor_id;
>> @@ -674,6 +616,19 @@ static struct uart_driver __read_mostly
>> #endif
>> };
>>
>> +static void ns16550_init_common(struct ns16550 *uart)
>> +{
>> + uart->clock_hz = UART_CLOCK_HZ;
>> +
>> + /* Default is no transmit FIFO. */
>> + uart->fifo_size = 1;
>> +
>> + /* Default lsr_mask = UART_LSR_THRE */
>> + uart->lsr_mask = UART_LSR_THRE;
>> +}
>> +
>> +#ifdef CONFIG_X86
>> +
>> static int __init parse_parity_char(int c)
>> {
>> switch ( c )
>> @@ -1217,6 +1172,64 @@ pci_uart_config(struct ns16550 *uart, bo
>> #endif /* CONFIG_HAS_PCI */
>>
>> /*
>> + * Configure serial port with a string:
>> + * <baud>[/<base_baud>][,DPS[,<io-base>[,<irq>[,<port-bdf>[,<bridge-bdf>]]]]].
>> + * The tail of the string can be omitted if platform defaults are sufficient.
>> + * If the baud rate is pre-configured, perhaps by a bootloader, then 'auto'
>> + * can be specified in place of a numeric baud rate. Polled mode is specified
>> + * by requesting irq 0.
>> + */
>> +static char __initdata opt_com1[128] = "";
>> +static char __initdata opt_com2[128] = "";
>> +string_param("com1", opt_com1);
>> +string_param("com2", opt_com2);
>> +
>> +enum serial_param_type {
>> + baud,
>> + clock_hz,
>> + data_bits,
>> + io_base,
>> + irq,
>> + parity,
>> + reg_shift,
>> + reg_width,
>> + stop_bits,
>> +#ifdef CONFIG_HAS_PCI
>> + bridge_bdf,
>> + device,
>> + port_bdf,
>> +#endif
>> + /* List all parameters before this line. */
>> + num_serial_params
>> +};
>> +
>> +struct serial_param_var {
>> + char name[12];
>> + enum serial_param_type type;
>> +};
>> +
>> +/*
>> + * Enum struct keeping a table of all accepted parameter names for parsing
>> + * com_console_options for serial port com1 and com2.
>> + */
>> +static const struct serial_param_var __initconst sp_vars[] = {
>> + {"baud", baud},
>> + {"clock-hz", clock_hz},
>> + {"data-bits", data_bits},
>> + {"io-base", io_base},
>> + {"irq", irq},
>> + {"parity", parity},
>> + {"reg-shift", reg_shift},
>> + {"reg-width", reg_width},
>> + {"stop-bits", stop_bits},
>> +#ifdef CONFIG_HAS_PCI
>> + {"bridge", bridge_bdf},
>> + {"dev", device},
>> + {"port", port_bdf},
>> +#endif
>> +};
>> +
>> +/*
>> * Used to parse name value pairs and return which value it is along with
>> * pointer for the extracted value.
>> */
>> @@ -1504,17 +1517,6 @@ static void __init ns16550_parse_port_co
>> serial_register_uart(uart - ns16550_com, &ns16550_driver, uart);
>> }
>>
>> -static void ns16550_init_common(struct ns16550 *uart)
>> -{
>> - uart->clock_hz = UART_CLOCK_HZ;
>> -
>> - /* Default is no transmit FIFO. */
>> - uart->fifo_size = 1;
>> -
>> - /* Default lsr_mask = UART_LSR_THRE */
>> - uart->lsr_mask = UART_LSR_THRE;
>> -}
>> -
>> void __init ns16550_init(int index, struct ns16550_defaults *defaults)
>> {
>> struct ns16550 *uart;
>> @@ -1541,6 +1543,8 @@ void __init ns16550_init(int index, stru
>> ns16550_parse_port_config(uart, (index == 0) ? opt_com1 : opt_com2);
>> }
>>
>> +#endif /* CONFIG_X86 */
>> +
>> #ifdef CONFIG_HAS_DEVICE_TREE
>> static int __init ns16550_uart_dt_init(struct dt_device_node *dev,
>> const void *data)
>>
>
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v2 3/3] ns16550: drop stray "#ifdef CONFIG_HAS_PCI"
2020-11-24 0:11 ` Stefano Stabellini
@ 2020-11-24 9:52 ` Rahul Singh
0 siblings, 0 replies; 10+ messages in thread
From: Rahul Singh @ 2020-11-24 9:52 UTC (permalink / raw)
To: Stefano Stabellini
Cc: Jan Beulich, xen-devel, Andrew Cooper, George Dunlap,
Ian Jackson, Julien Grall, Wei Liu
Hello ,
> On 24 Nov 2020, at 12:11 am, Stefano Stabellini <sstabellini@kernel.org> wrote:
>
> On Mon, 23 Nov 2020, Jan Beulich wrote:
>> There's no point wrapping the function invocation when
>> - the function body is already suitably wrapped,
>> - the function itself is unconditionally available.
>>
>> Reported-by: Julien Grall <julien@xen.org>
>> Signed-off-by: Jan Beulich <jbeulich@suse.com>
>
> Reviewed-by: Stefano Stabellini <sstabellini@kernel.org>
>
Reviewed-by: Rahul Singh <rahul.singh@arm.com>
>
>> --- a/xen/drivers/char/ns16550.c
>> +++ b/xen/drivers/char/ns16550.c
>> @@ -662,9 +662,7 @@ static int __init check_existence(struct
>> return 1; /* Everything is MMIO */
>> #endif
>>
>> -#ifdef CONFIG_HAS_PCI
>> pci_serial_early_init(uart);
>> -#endif
>>
>> /*
>> * Do a simple existence test first; if we fail this,
>>
>
Regards,
Rahul
^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2020-11-24 9:52 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-11-23 13:12 [PATCH v2 0/3] ns16550: #ifdef-ary Jan Beulich
2020-11-23 13:14 ` [PATCH v2 1/3] ns16550: move PCI arrays next to the function using them Jan Beulich
2020-11-24 0:02 ` Stefano Stabellini
2020-11-24 9:50 ` Rahul Singh
2020-11-23 13:14 ` [PATCH v2 2/3] ns16550: "com<N>=" command line options are x86-specific Jan Beulich
2020-11-24 0:11 ` Stefano Stabellini
2020-11-24 9:50 ` Rahul Singh
2020-11-23 13:15 ` [PATCH v2 3/3] ns16550: drop stray "#ifdef CONFIG_HAS_PCI" Jan Beulich
2020-11-24 0:11 ` Stefano Stabellini
2020-11-24 9:52 ` Rahul Singh
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).