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

Re: [Xen-devel] [PATCH v3] ns16550: Add ACPI support for ARM only



Hi Jan,

On 2020/2/17 21:53, Jan Beulich wrote:
> On 03.02.2020 12:21, Wei Xu wrote:
>> Parse the ACPI SPCR table and initialize the 16550 compatible serial port
>> for ARM only. Currently we only support one UART on ARM. Some fields
>> which we do not care yet on ARM are ignored.
>>
>> Signed-off-by: Wei Xu <xuwei5@xxxxxxxxxxxxx>
>>
>> ---
>> Changes in v3:
>> - address the code style comments from Jan
>> - use container_of to do cast
>> - list all fields we ignored
>> - check the console redirection is disabled or not before init the uart
>> - init the uart io_size and width via spcr->serial_port
>>
>> Changes in v2:
>> - improve commit message
>> - remove the spcr initialization
>> - add comments for the uart initialization and configuration
>> - adjust the code style issue
>> - limit the code only built on ACPI and ARM
>> ---
>>  xen/drivers/char/ns16550.c | 75 
>> ++++++++++++++++++++++++++++++++++++++++++++++
>>  1 file changed, 75 insertions(+)
>>
>> diff --git a/xen/drivers/char/ns16550.c b/xen/drivers/char/ns16550.c
>> index aa87c57..741b510 100644
>> --- a/xen/drivers/char/ns16550.c
>> +++ b/xen/drivers/char/ns16550.c
>> @@ -1620,6 +1620,81 @@ DT_DEVICE_START(ns16550, "NS16550 UART", 
>> DEVICE_SERIAL)
>>  DT_DEVICE_END
>>
>>  #endif /* HAS_DEVICE_TREE */
>> +
>> +#if defined(CONFIG_ACPI) && defined(CONFIG_ARM)
>> +#include <xen/acpi.h>
>> +
>> +static int __init ns16550_acpi_uart_init(const void *data)
>> +{
>> +    struct acpi_table_header *table;
>> +    struct acpi_table_spcr *spcr;
>> +    acpi_status status;
>> +    /*
>> +     * Same as the DT part.
>> +     * Only support one UART on ARM which happen to be ns16550_com[0].
>> +     */
>> +    struct ns16550 *uart = &ns16550_com[0];
>> +
>> +    status = acpi_get_table(ACPI_SIG_SPCR, 0, &table);
>> +    if ( ACPI_FAILURE(status) )
>> +    {
>> +        printk("ns16550: Failed to get SPCR table\n");
>> +        return -EINVAL;
>> +    }
>> +
>> +    spcr = container_of(table, struct acpi_table_spcr, header);
>> +
>> +    /*
>> +     * The serial port address may be 0 for example
>> +     * if the console redirection is disabled.
>> +     */
>> +    if ( unlikely(!spcr->serial_port.address) )
>> +    {
>> +        printk("ns16550: the serial port address is invalid\n");
> 
> Is zero really an invalid address, or is it rather a proper
> indicator of there not being any device?

I will change the msg to "The console redirection is disabled." following the 
description in the spcr.
Is that OK?

> 
>> +        return -EINVAL;
>> +    }
>> +
>> +    ns16550_init_common(uart);
>> +
>> +    /*
>> +     * The baud rate is pre-configured by the firmware.
> 
> But this isn't the same as BAUD_AUTO, is it? If firmware pre-configures
> the baud rate, isn't it this structure which it would use to communicate
> the information?
>

No, the comments of the BAUD_AUTO stated like that
and in fact the baud rate is not changed after the firmmware.
But I can add the baud setting if you prefer to.

>> +     * And currently the ACPI part is only targeting ARM so the following
>> +     * fields pc_interrupt, pci_device_id, pci_vendor_id, pci_bus, 
>> pci_device,
>> +     * pci_function, pci_flags, pci_segment and flow_control which we do not
>> +     * care yet are ignored.
> 
> How come flow control is of no interest?

There is no flow control in the DTS part and same for ACPI on ARM platform.

> 
> I'd also group all the pci_* fields into a simple "and all PCI related
> ones".

OK.

> 
>> +     */
>> +    uart->baud = BAUD_AUTO;
>> +    uart->data_bits = 8;
>> +    uart->parity = spcr->parity;
>> +    uart->stop_bits = spcr->stop_bits;
>> +    uart->io_base = spcr->serial_port.address;
>> +    uart->io_size = spcr->serial_port.bit_width;
> 
> Once again: You should not ignore the GAS address space indicator.

Sorry, I did not get the point.
Do you mean check the address is 0 or not?
Thanks!

Best Regards,
Wei

> 
> Jan
> 
> .
> 


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel

 


Rackspace

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