From: Peter Hurley <peter@hurleysoftware.com>
To: Aleksey Makarov <aleksey.makarov@linaro.org>, linux-acpi@vger.kernel.org
Cc: linux-kernel@vger.kernel.org,
linux-arm-kernel@lists.infradead.org,
linux-serial@vger.kernel.org,
Graeme Gregory <graeme.gregory@linaro.org>,
Russell King <linux@arm.linux.org.uk>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
"Rafael J . Wysocki" <rjw@rjwysocki.net>,
Leif Lindholm <leif.lindholm@linaro.org>,
Catalin Marinas <catalin.marinas@arm.com>,
Will Deacon <will.deacon@arm.com>, Len Brown <lenb@kernel.org>
Subject: Re: [PATCH 2/3] ACPI: parse SPCR and enable matching console
Date: Wed, 27 Jan 2016 16:45:22 -0800 [thread overview]
Message-ID: <56A964A2.9040802@hurleysoftware.com> (raw)
In-Reply-To: <56A8CCCE.2080509@linaro.org>
On 01/27/2016 05:57 AM, Aleksey Makarov wrote:
>
>
> On 01/25/2016 07:32 PM, Peter Hurley wrote:
>> On 01/25/2016 03:45 AM, Aleksey Makarov wrote:
>>> 'ARM Server Base Boot Requiremets' [1] mention SPCR (Serial Port
>>> Console Redirection Table) [2] as a mandatory ACPI table that
>>> specifies the configuration of serial console.
>>>
>>> Parse this table and check if any registered console match the
>>> description. If it does, enable that console.
>>>
>>> To implement that, introduce a new member int (*acpi_match)(struct
>>> console *, struct acpi_table_spcr *) of struct console. It allows
>>> drivers to check if they provide a matching console device.
>>
>> Many, many platform proms with all sorts of binary table layout are
>> already supported by the existing console infrastructure. Why is ACPI
>> different, that requires extensive (and messy) changes to console
>> initialization?
>
> Without this patch, when linux calls register_console(), that function
> checks if any console has been enabled so far. 1) If not, it enables the
> console being registered. 2) If there exists any enabled console, it
> looks at the console_cmdline array. That array holds a list of
> consoles that user wishes to enable. There are two ways to append
> an item to that list: first is to pass "console=..." option in command
> line and second is to call add_preferred_console(char *name, int idx,
> char *options). As it is clear from the signature, the function
> requires the name of the driver (like "ttyS") and the line id. On the
> other hand, the SPCR ACPI table describes console by specifying the
> address of it's registers or PCI Device ID / PCI Vendor ID or PCI Bus
> Number / PCI Device Number. So to use this function we would need to
> have a method to translate this info to the name of terminal and line
> index. I could not figure out any way to do that.
I'm not sure how this answers my question.
Which existing drivers/arch setup have you studied to conclude that
the existing console mechanisms don't work? Have you actually looked
at the in-tree callers of add_preferred_console()?
> In the initial version of the patch after getting the reference to the
> SPCR ACPI table the full tree of ACPI devices was searched to find any
> device with the same address. When uart_add_one_port() was called
> to register a new serial port, the ACPI companion of this port was
> compared to the found device. If it was the same device, the code
> called add_preferred_console() (the terminal name and line index are
> known in uart_add_one_port()).
Yeah, I wasn't a fan of that.
But I think it was a bad choice to pick SPCR as table format, in the
first place. At least DBG2 has the actual ACPI device identifier :/
> This original approach had two problems:
>
> 1) It works with the SPCR tables that describe consoles only by
> the address of the registers. I do not think that consoles that are
> described by PCI info will appear in the near future, but decided to
> implement this in a generic way. I would like to discuss if this
> decision was good.
>
> 2) Wrong order of initialization. Many console drivers have already
> been registered by the time uart_add_one_port() adds an item to the
> console_cmdline array. There is a similar problem with my
> implementation, but having a dedicated acpi_match() callback I
> believe made it simpler to circumwent.
I don't see how the "wrong order of initialization" and the need for
acpi_match() correlate. What do you mean by "wrong order"? What is the
"right order"?
> That's why I believe we need to add a new funcion pointer to struct
> console. On the other hand, I do not understand which existing
> structure you are referring.
>
>> How is this going to work with earlycon?
>
> If an earlycon that matches SPCR is being registered, the code will enable it.
I think you should review how and when an earlycon is specified, initialized
and registered before you conclude that this will magically work.
> While it is harmless. Even so I will check for earlycon in the next version
> of the patch set, thank you.
>
>> This commit log is missing the reasoning behind adding locks,
>> refactoring into delete_from_console_list(), and retry loops.
>
> I will add this to the next verion of the series.
>
> Thank you
> Aleksey Makarov
>
>
>>> [1]
>>> http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.den0044a/index.html
>>>
>>> [2] http://msdn.microsoft.com/en-us/library/windows/hardware/dn639131(v=vs.85).aspx
>>>
>>> Signed-off-by: Aleksey Makarov <aleksey.makarov@linaro.org>
>
> [ .. ]
>
WARNING: multiple messages have this Message-ID (diff)
From: peter@hurleysoftware.com (Peter Hurley)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 2/3] ACPI: parse SPCR and enable matching console
Date: Wed, 27 Jan 2016 16:45:22 -0800 [thread overview]
Message-ID: <56A964A2.9040802@hurleysoftware.com> (raw)
In-Reply-To: <56A8CCCE.2080509@linaro.org>
On 01/27/2016 05:57 AM, Aleksey Makarov wrote:
>
>
> On 01/25/2016 07:32 PM, Peter Hurley wrote:
>> On 01/25/2016 03:45 AM, Aleksey Makarov wrote:
>>> 'ARM Server Base Boot Requiremets' [1] mention SPCR (Serial Port
>>> Console Redirection Table) [2] as a mandatory ACPI table that
>>> specifies the configuration of serial console.
>>>
>>> Parse this table and check if any registered console match the
>>> description. If it does, enable that console.
>>>
>>> To implement that, introduce a new member int (*acpi_match)(struct
>>> console *, struct acpi_table_spcr *) of struct console. It allows
>>> drivers to check if they provide a matching console device.
>>
>> Many, many platform proms with all sorts of binary table layout are
>> already supported by the existing console infrastructure. Why is ACPI
>> different, that requires extensive (and messy) changes to console
>> initialization?
>
> Without this patch, when linux calls register_console(), that function
> checks if any console has been enabled so far. 1) If not, it enables the
> console being registered. 2) If there exists any enabled console, it
> looks at the console_cmdline array. That array holds a list of
> consoles that user wishes to enable. There are two ways to append
> an item to that list: first is to pass "console=..." option in command
> line and second is to call add_preferred_console(char *name, int idx,
> char *options). As it is clear from the signature, the function
> requires the name of the driver (like "ttyS") and the line id. On the
> other hand, the SPCR ACPI table describes console by specifying the
> address of it's registers or PCI Device ID / PCI Vendor ID or PCI Bus
> Number / PCI Device Number. So to use this function we would need to
> have a method to translate this info to the name of terminal and line
> index. I could not figure out any way to do that.
I'm not sure how this answers my question.
Which existing drivers/arch setup have you studied to conclude that
the existing console mechanisms don't work? Have you actually looked
at the in-tree callers of add_preferred_console()?
> In the initial version of the patch after getting the reference to the
> SPCR ACPI table the full tree of ACPI devices was searched to find any
> device with the same address. When uart_add_one_port() was called
> to register a new serial port, the ACPI companion of this port was
> compared to the found device. If it was the same device, the code
> called add_preferred_console() (the terminal name and line index are
> known in uart_add_one_port()).
Yeah, I wasn't a fan of that.
But I think it was a bad choice to pick SPCR as table format, in the
first place. At least DBG2 has the actual ACPI device identifier :/
> This original approach had two problems:
>
> 1) It works with the SPCR tables that describe consoles only by
> the address of the registers. I do not think that consoles that are
> described by PCI info will appear in the near future, but decided to
> implement this in a generic way. I would like to discuss if this
> decision was good.
>
> 2) Wrong order of initialization. Many console drivers have already
> been registered by the time uart_add_one_port() adds an item to the
> console_cmdline array. There is a similar problem with my
> implementation, but having a dedicated acpi_match() callback I
> believe made it simpler to circumwent.
I don't see how the "wrong order of initialization" and the need for
acpi_match() correlate. What do you mean by "wrong order"? What is the
"right order"?
> That's why I believe we need to add a new funcion pointer to struct
> console. On the other hand, I do not understand which existing
> structure you are referring.
>
>> How is this going to work with earlycon?
>
> If an earlycon that matches SPCR is being registered, the code will enable it.
I think you should review how and when an earlycon is specified, initialized
and registered before you conclude that this will magically work.
> While it is harmless. Even so I will check for earlycon in the next version
> of the patch set, thank you.
>
>> This commit log is missing the reasoning behind adding locks,
>> refactoring into delete_from_console_list(), and retry loops.
>
> I will add this to the next verion of the series.
>
> Thank you
> Aleksey Makarov
>
>
>>> [1]
>>> http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.den0044a/index.html
>>>
>>> [2] http://msdn.microsoft.com/en-us/library/windows/hardware/dn639131(v=vs.85).aspx
>>>
>>> Signed-off-by: Aleksey Makarov <aleksey.makarov@linaro.org>
>
> [ .. ]
>
next prev parent reply other threads:[~2016-01-28 0:45 UTC|newest]
Thread overview: 69+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-01-25 11:45 [PATCH 0/3] ACPI: parse the SPCR table Aleksey Makarov
2016-01-25 11:45 ` Aleksey Makarov
2016-01-25 11:45 ` [PATCH 1/3] printk: make preferred_console local static bool Aleksey Makarov
2016-01-25 11:45 ` Aleksey Makarov
2016-01-25 12:45 ` Joe Perches
2016-01-25 12:45 ` Joe Perches
2016-01-25 12:45 ` Joe Perches
2016-01-25 12:51 ` Aleksey Makarov
2016-01-25 12:51 ` Aleksey Makarov
2016-01-25 13:23 ` Joe Perches
2016-01-25 13:23 ` Joe Perches
2016-01-25 13:23 ` Joe Perches
2016-01-25 13:28 ` Aleksey Makarov
2016-01-25 13:28 ` Aleksey Makarov
2016-01-25 16:14 ` Peter Hurley
2016-01-25 16:14 ` Peter Hurley
2016-01-25 14:24 ` Andy Shevchenko
2016-01-25 14:24 ` Andy Shevchenko
2016-01-25 14:55 ` Aleksey Makarov
2016-01-25 14:55 ` Aleksey Makarov
2016-01-25 11:45 ` [PATCH 2/3] ACPI: parse SPCR and enable matching console Aleksey Makarov
2016-01-25 11:45 ` Aleksey Makarov
2016-01-25 14:14 ` Andy Shevchenko
2016-01-25 14:14 ` Andy Shevchenko
2016-01-25 15:07 ` Aleksey Makarov
2016-01-25 15:07 ` Aleksey Makarov
2016-01-25 16:32 ` Peter Hurley
2016-01-25 16:32 ` Peter Hurley
2016-01-27 13:57 ` Aleksey Makarov
2016-01-27 13:57 ` Aleksey Makarov
2016-01-28 0:45 ` Peter Hurley [this message]
2016-01-28 0:45 ` Peter Hurley
2016-01-28 13:23 ` Aleksey Makarov
2016-01-28 13:23 ` Aleksey Makarov
2016-01-28 19:40 ` Peter Hurley
2016-01-28 19:40 ` Peter Hurley
2016-02-01 9:01 ` Graeme Gregory
2016-02-01 9:01 ` Graeme Gregory
2016-02-01 9:13 ` Graeme Gregory
2016-02-01 9:13 ` Graeme Gregory
2016-01-25 11:45 ` [PATCH 3/3] serial: pl011: add acpi_match for amba-pl011.c Aleksey Makarov
2016-01-25 11:45 ` Aleksey Makarov
2016-01-25 14:21 ` Andy Shevchenko
2016-01-25 14:21 ` Andy Shevchenko
2016-01-25 14:22 ` Andy Shevchenko
2016-01-25 14:22 ` Andy Shevchenko
2016-01-25 15:08 ` Aleksey Makarov
2016-01-25 15:08 ` Aleksey Makarov
2016-01-25 16:11 ` [PATCH 0/3] ACPI: parse the SPCR table Peter Hurley
2016-01-25 16:11 ` Peter Hurley
2016-01-27 12:17 ` Aleksey Makarov
2016-01-27 12:17 ` Aleksey Makarov
2016-01-27 12:17 ` Aleksey Makarov
2016-01-27 13:45 ` One Thousand Gnomes
2016-01-27 13:45 ` One Thousand Gnomes
2016-01-27 13:45 ` One Thousand Gnomes
2016-02-01 5:46 ` Jon Masters
2016-02-01 5:46 ` Jon Masters
2016-02-01 5:46 ` Jon Masters
2016-02-10 23:39 ` Al Stone
2016-02-10 23:39 ` Al Stone
2016-03-03 20:08 ` Peter Hurley
2016-03-03 20:08 ` Peter Hurley
2016-03-03 20:08 ` Peter Hurley
[not found] ` <67709E22-E82E-40BA-A271-2107608F4EF3@redhat.com>
2016-03-04 19:34 ` Peter Hurley
2016-03-04 19:34 ` Peter Hurley
2016-03-04 20:03 ` Peter Hurley
2016-03-04 20:03 ` Peter Hurley
2016-03-04 20:03 ` Peter Hurley
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=56A964A2.9040802@hurleysoftware.com \
--to=peter@hurleysoftware.com \
--cc=aleksey.makarov@linaro.org \
--cc=catalin.marinas@arm.com \
--cc=graeme.gregory@linaro.org \
--cc=gregkh@linuxfoundation.org \
--cc=leif.lindholm@linaro.org \
--cc=lenb@kernel.org \
--cc=linux-acpi@vger.kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-serial@vger.kernel.org \
--cc=linux@arm.linux.org.uk \
--cc=rjw@rjwysocki.net \
--cc=will.deacon@arm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.