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

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



Hi Jan,

On 2020/1/21 19:13, Jan Beulich wrote:
> On 21.01.2020 04:44, Wei Xu wrote:
>> --- a/xen/drivers/char/ns16550.c
>> +++ b/xen/drivers/char/ns16550.c
>> @@ -1620,6 +1620,66 @@ DT_DEVICE_START(ns16550, "NS16550 UART", 
>> DEVICE_SERIAL)
>>   DT_DEVICE_END
>>   
>>   #endif /* HAS_DEVICE_TREE */
>> +#if defined(CONFIG_ACPI) && defined(CONFIG_ARM)
> 
> Blank line above here please.

OK.
I will add it.

> 
>> +#include <xen/acpi.h>
>> +
>> +static int __init ns16550_acpi_uart_init(const void *data)
>> +{
>> +    struct acpi_table_spcr *spcr;
>> +    acpi_status status;
>> +
>> +    /* Same as the DT part.
> 
> Comment style (again below). Also there shouldn't be a blank line
> until after _all_ declarations.

OK.
I will add a separate line leading with '*' as the comment beginning
and remove the blank line in the declarations.

> 
>> +     * 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,
>> +                            (struct acpi_table_header **)&spcr);
> 
> Please avoid casts like this. Use more type-safe constructs like
> container_of() instead.
> 
>> +    if ( ACPI_FAILURE(status) )
>> +    {
>> +        printk("ns16550: Failed to get SPCR table\n");
> 
> Is such a message warranted? I.e. wouldn't it trigger on all
> systems not having the table, which is hardly what you/we want?
> 
>> +        return -EINVAL;
> 
> Also, is it really an error if there's no such table?
> 
>> +    }
>> +
>> +    ns16550_init_common(uart);
>> +
>> +    /* The baud rate is pre-configured by the firmware.
>> +     * And currently the ACPI part is only targeting ARM so some fields
>> +     * like PCI, flow control and so on we do not care yet are ignored.
>> +     */
> 
> I'm no convinced though you can ignore some other fields. In
> particular on v1 I recall pointing out that the GAS structure
> has more fields you should look at. (Overall I'm not happy
> with "and so on" here - please list all fields you mean to
> ignore so that reviewers as well as future readers can judge
> whether this is appropriate.)
>

OK.
I will investigate and list all the ignore fields.

>> +    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 = 8;
>> +    uart->reg_shift = spcr->serial_port.bit_offset;
>> +    uart->reg_width = 1;
>> +
>> +    /* The trigger/polarity information is not available in spcr. */
>> +    irq_set_type(spcr->interrupt, IRQ_TYPE_LEVEL_HIGH);
>> +    uart->irq = spcr->interrupt;
>> +
>> +    uart->vuart.base_addr = uart->io_base;
>> +    uart->vuart.size = uart->io_size;
>> +    uart->vuart.data_off = UART_THR << uart->reg_shift;
>> +    uart->vuart.status_off = UART_LSR << uart->reg_shift;
>> +    uart->vuart.status = UART_LSR_THRE | UART_LSR_TEMT;
>> +
>> +    /*  Register with generic serial driver. */
> 
> Stray double blanks at the beginning of the comment.
>

Sorry, I will remove it.

>> +    serial_register_uart(uart - ns16550_com, &ns16550_driver, uart);
> 
> I guess it's fine this way, but with "uart = &ns16550_com[0]" above
> the construct looks more complicated than it needs to look.

Yes, I can change to use "SERHND_DTUART".
Thanks for you guidance!

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®.