|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v1 1/4] xen/ns16550: solve compilation error on ARM with CONFIG_HAS_PCI enabled.
Hello Stefano,
> On 27 Oct 2020, at 11:32 pm, Stefano Stabellini <sstabellini@xxxxxxxxxx>
> wrote:
>
> On Mon, 26 Oct 2020, Rahul Singh wrote:
>> ARM platforms does not support ns16550 PCI support. When CONFIG_HAS_PCI
> ^ do
Ok I will fix that in next version.
>
>> is enabled for ARM a compilation error is observed.
>>
>> Fixed compilation error after introducing new kconfig option
>> CONFIG_HAS_NS16550_PCI for x86 platforms to support ns16550 PCI.
>>
>> No functional change.
>
> Written like that it would seem that ARM platforms do not support
> NS16550 on the PCI bus, but actually, it would be theoretically possible
> to have an NS16550 card slotted in a PCI bus on ARM, right?
>
> The problem is the current limitation in terms of Xen internal
> plumbings, such as lack of MSI support. Is that correct?
>
> If so, I'd update the commit message to reflect the situation a bit
> better.
>
Yes you are right on ARM platforms PCI is not fully supported because of that
I decided to disable it for ARM. Once we have full support for PCI device we
can enable
it for ARM also. I will modify the commit msg to reflect the same.
>
>> Signed-off-by: Rahul Singh <rahul.singh@xxxxxxx>
>> ---
>> xen/drivers/char/Kconfig | 7 +++++++
>> xen/drivers/char/ns16550.c | 32 ++++++++++++++++----------------
>> 2 files changed, 23 insertions(+), 16 deletions(-)
>>
>> diff --git a/xen/drivers/char/Kconfig b/xen/drivers/char/Kconfig
>> index b572305657..8887e86afe 100644
>> --- a/xen/drivers/char/Kconfig
>> +++ b/xen/drivers/char/Kconfig
>> @@ -4,6 +4,13 @@ config HAS_NS16550
>> help
>> This selects the 16550-series UART support. For most systems, say Y.
>>
>> +config HAS_NS16550_PCI
>> + bool "NS16550 UART PCI support" if X86
>> + default y
>> + depends on X86 && HAS_NS16550 && HAS_PCI
>> + help
>> + This selects the 16550-series UART PCI support. For most systems, say
>> Y.
>
> I think that this should be a silent option:
> if HAS_NS16550 && HAS_PCI && X86 -> automatically enable
> otherwise -> automatically disable
>
> No need to show it to the user.
>
> The rest of course is fine.
Ok I will fix that. I will do the same as done for HAS_NS16550 ,
x86: silent option depend on HAS_NS16550 && HAS_PCI
ARM: user can decide to enable or disable via menuconfig depend on HAS_NS16550
&& HAS_PCI.
>
>
>> config HAS_CADENCE_UART
>> bool "Xilinx Cadence UART driver"
>> default y
>> diff --git a/xen/drivers/char/ns16550.c b/xen/drivers/char/ns16550.c
>> index d8b52eb813..bd1c2af956 100644
>> --- a/xen/drivers/char/ns16550.c
>> +++ b/xen/drivers/char/ns16550.c
>> @@ -16,7 +16,7 @@
>> #include <xen/timer.h>
>> #include <xen/serial.h>
>> #include <xen/iocap.h>
>> -#ifdef CONFIG_HAS_PCI
>> +#ifdef CONFIG_HAS_NS16550_PCI
>> #include <xen/pci.h>
>> #include <xen/pci_regs.h>
>> #include <xen/pci_ids.h>
>> @@ -54,7 +54,7 @@ enum serial_param_type {
>> reg_shift,
>> reg_width,
>> stop_bits,
>> -#ifdef CONFIG_HAS_PCI
>> +#ifdef CONFIG_HAS_NS16550_PCI
>> bridge_bdf,
>> device,
>> port_bdf,
>> @@ -83,7 +83,7 @@ static struct ns16550 {
>> unsigned int timeout_ms;
>> bool_t intr_works;
>> bool_t dw_usr_bsy;
>> -#ifdef CONFIG_HAS_PCI
>> +#ifdef CONFIG_HAS_NS16550_PCI
>> /* PCI card parameters. */
>> bool_t pb_bdf_enable; /* if =1, pb-bdf effective, port behind bridge */
>> bool_t ps_bdf_enable; /* if =1, ps_bdf effective, port on pci card */
>> @@ -117,14 +117,14 @@ static const struct serial_param_var __initconst
>> sp_vars[] = {
>> {"reg-shift", reg_shift},
>> {"reg-width", reg_width},
>> {"stop-bits", stop_bits},
>> -#ifdef CONFIG_HAS_PCI
>> +#ifdef CONFIG_HAS_NS16550_PCI
>> {"bridge", bridge_bdf},
>> {"dev", device},
>> {"port", port_bdf},
>> #endif
>> };
>>
>> -#ifdef CONFIG_HAS_PCI
>> +#ifdef CONFIG_HAS_NS16550_PCI
>> struct ns16550_config {
>> u16 vendor_id;
>> u16 dev_id;
>> @@ -620,7 +620,7 @@ static int ns16550_getc(struct serial_port *port, char
>> *pc)
>>
>> static void pci_serial_early_init(struct ns16550 *uart)
>> {
>> -#ifdef CONFIG_HAS_PCI
>> +#ifdef CONFIG_HAS_NS16550_PCI
>> if ( !uart->ps_bdf_enable || uart->io_base >= 0x10000 )
>> return;
>>
>> @@ -719,7 +719,7 @@ static void __init ns16550_init_preirq(struct
>> serial_port *port)
>>
>> static void __init ns16550_init_irq(struct serial_port *port)
>> {
>> -#ifdef CONFIG_HAS_PCI
>> +#ifdef CONFIG_HAS_NS16550_PCI
>> struct ns16550 *uart = port->uart;
>>
>> if ( uart->msi )
>> @@ -761,7 +761,7 @@ static void __init ns16550_init_postirq(struct
>> serial_port *port)
>> uart->timeout_ms = max_t(
>> unsigned int, 1, (bits * uart->fifo_size * 1000) / uart->baud);
>>
>> -#ifdef CONFIG_HAS_PCI
>> +#ifdef CONFIG_HAS_NS16550_PCI
>> if ( uart->bar || uart->ps_bdf_enable )
>> {
>> if ( uart->param && uart->param->mmio &&
>> @@ -841,7 +841,7 @@ static void ns16550_suspend(struct serial_port *port)
>>
>> stop_timer(&uart->timer);
>>
>> -#ifdef CONFIG_HAS_PCI
>> +#ifdef CONFIG_HAS_NS16550_PCI
>> if ( uart->bar )
>> uart->cr = pci_conf_read16(PCI_SBDF(0, uart->ps_bdf[0],
>> uart->ps_bdf[1],
>> uart->ps_bdf[2]), PCI_COMMAND);
>> @@ -850,7 +850,7 @@ static void ns16550_suspend(struct serial_port *port)
>>
>> static void _ns16550_resume(struct serial_port *port)
>> {
>> -#ifdef CONFIG_HAS_PCI
>> +#ifdef CONFIG_HAS_NS16550_PCI
>> struct ns16550 *uart = port->uart;
>>
>> if ( uart->bar )
>> @@ -1013,7 +1013,7 @@ static int __init check_existence(struct ns16550 *uart)
>> return 1; /* Everything is MMIO */
>> #endif
>>
>> -#ifdef CONFIG_HAS_PCI
>> +#ifdef CONFIG_HAS_NS16550_PCI
>> pci_serial_early_init(uart);
>> #endif
>>
>> @@ -1044,7 +1044,7 @@ static int __init check_existence(struct ns16550 *uart)
>> return (status == 0x90);
>> }
>>
>> -#ifdef CONFIG_HAS_PCI
>> +#ifdef CONFIG_HAS_NS16550_PCI
>> static int __init
>> pci_uart_config(struct ns16550 *uart, bool_t skip_amt, unsigned int idx)
>> {
>> @@ -1305,7 +1305,7 @@ static bool __init parse_positional(struct ns16550
>> *uart, char **str)
>>
>> if ( *conf == ',' && *++conf != ',' )
>> {
>> -#ifdef CONFIG_HAS_PCI
>> +#ifdef CONFIG_HAS_NS16550_PCI
>> if ( strncmp(conf, "pci", 3) == 0 )
>> {
>> if ( pci_uart_config(uart, 1/* skip AMT */, uart - ns16550_com) )
>> @@ -1327,7 +1327,7 @@ static bool __init parse_positional(struct ns16550
>> *uart, char **str)
>>
>> if ( *conf == ',' && *++conf != ',' )
>> {
>> -#ifdef CONFIG_HAS_PCI
>> +#ifdef CONFIG_HAS_NS16550_PCI
>> if ( strncmp(conf, "msi", 3) == 0 )
>> {
>> conf += 3;
>> @@ -1339,7 +1339,7 @@ static bool __init parse_positional(struct ns16550
>> *uart, char **str)
>> uart->irq = simple_strtol(conf, &conf, 10);
>> }
>>
>> -#ifdef CONFIG_HAS_PCI
>> +#ifdef CONFIG_HAS_NS16550_PCI
>> if ( *conf == ',' && *++conf != ',' )
>> {
>> conf = parse_pci(conf, NULL, &uart->ps_bdf[0],
>> @@ -1419,7 +1419,7 @@ static bool __init parse_namevalue_pairs(char *str,
>> struct ns16550 *uart)
>> uart->reg_width = simple_strtoul(param_value, NULL, 0);
>> break;
>>
>> -#ifdef CONFIG_HAS_PCI
>> +#ifdef CONFIG_HAS_NS16550_PCI
>> case bridge_bdf:
>> if ( !parse_pci(param_value, NULL, &uart->ps_bdf[0],
>> &uart->ps_bdf[1], &uart->ps_bdf[2]) )
>> --
>> 2.17.1
Regards,
Rahul
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |