Re: [PATCH] SPCR: check bit width for the 16550 UART

From: Jon Masters
Date: Mon Dec 05 2016 - 18:27:22 EST


Duc, Aleksey, all,

I have a question about this...

On 12/05/2016 01:51 PM, Duc Dang wrote:
> On Mon, Dec 5, 2016 at 5:05 AM, Aleksey Makarov
> <aleksey.makarov@xxxxxxxxxx> wrote:
>> Check the 'Register Bit Width' field of the ACPI Generic Address
>> Structure that specifies the address of the UART registers to
>> decide if the driver should use "mmio32" access instead of "mmio".
>>
>> If the driver is other than 16550 the access with is defined
>> by the Interface Type field of the SPCR table.

I have two questions about this:

1). Why is this not a full 16550 (ACPI_DBG2_16550_COMPATIBLE)?

2). Why is it a ACPI_DBG2_16550_SUBSET you are assuming here?

The SPCR and DBG2 spec clearly state that the _SUBSET is intended
to represent a UART compatible with the earlier DGBP specification,
not that a UART is a "subset" of a full 16550 (which seems to be
the assumption in this patch). It's important we get this right.

I built a test kernel with this patch and updated ACPI tables earlier,
but it didn't boot with a console because I had left it a subtype 0,
but just changed the width to 32 bit, which is what I expected.

Further, I've heard back from Microsoft and they're looking at
adding a specific subtype for this. If they do, I'm inclined to
address existing designs with your patch (but I would favor this
check because against the full 16550) and then switch newer APM
based designs to the new subtype.

Jon.

--
Computer Architect | Sent from my Fedora powered laptop