[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v3] ns16550: add support for polling mode when device tree is used
On 24.07.2023 16:27, Oleksii Kurochko wrote: > --- a/xen/drivers/char/console.c > +++ b/xen/drivers/char/console.c > @@ -993,6 +993,8 @@ void __init console_init_preirq(void) > #endif > else if ( !strncmp(p, "none", 4) ) > continue; > + else if ( !strncmp(p, "polling", 7 ) > + continue; > else if ( (sh = serial_parse_handle(p)) >= 0 ) > { > sercon_handle = sh; Looks like you mean the new option to go under "console=". Besides this being guesswork because of you not updating the command line doc, this also is wrong, as the property then applies to all consoles. What you mean is a control for a specific instance of a 16550 console, which can only possibly go under "com<N>=". I would suggest to simply extend [<irq>|msi] there to [<irq>|msi|poll]. > @@ -595,7 +601,9 @@ static void __init cf_check ns16550_endboot(struct > serial_port *port) > static int __init cf_check ns16550_irq(struct serial_port *port) > { > struct ns16550 *uart = port->uart; > - return ((uart->irq > 0) ? uart->irq : -1); > + > + return ( uart->intr_works != polling ) ? > + uart->irq : -1; > } Please don't corrupt previously correct style. You can keep things almost like they were (albeit there's no strict need for any of the parentheses): return ((uart->intr_works != polling) ? uart->irq : -1); > @@ -1330,9 +1341,12 @@ pci_uart_config(struct ns16550 *uart, bool_t skip_amt, > unsigned int idx) > * as special only for X86. > */ > if ( uart->irq == 0xff ) > + { > uart->irq = 0; > + uart->intr_works = polling; > + } > #endif > - if ( !uart->irq ) > + if ( !uart->irq || (uart->intr_works == polling) ) > printk(XENLOG_INFO > "ns16550: %pp: no legacy IRQ, using poll mode\n", > &PCI_SBDF(0, b, d, f)); Message and code (after your addition) continue to be out of sync. As said before, any condition that leads to polling mode wants to find itself expressed by uart->intr_works set to "polling". > @@ -1552,6 +1566,7 @@ static bool __init parse_positional(struct ns16550 > *uart, char **str) > conf += 3; > uart->msi = true; > uart->irq = 0; > + uart->intr_works = polling; How that? "msi" is specifically asking for interrupt driven mode, just that the IRQ number isn't known yet. (Seeing this I notice that parse_namevalue_pairs() offers no way of selecting MSI mode. But that's not something you need to sort out.) Jan
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |