Thread (17 messages) 17 messages, 5 authors, 2016-03-17

[PATCH v4 1/4] ACPI: parse SPCR and enable matching console

From: Aleksey Makarov <hidden>
Date: 2016-02-29 13:49:59
Also in: linux-acpi, linux-serial, lkml

Hi Andy, 

Thank you for review.

On 02/29/2016 04:29 PM, Andy Shevchenko wrote:
On Mon, Feb 29, 2016 at 2:02 PM, Aleksey Makarov
[off-list ref] wrote:
quoted
'ARM Server Base Boot Requiremets' [1] mentions 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.

Introduce a new function acpi_console_check().  At the uart port
registration, this function checks if the ACPI SPCR table specifies
its argument of type struct uart_port to be a console
and if so calls add_preferred_console().
quoted
+       if (ACPI_FAILURE(status)) {
+               pr_err("could not get the table\n");
Is it worse to have on error level? Is it possible to have firmware
without this table? I think it would be a normal case for non-arm
world.
I'm also not sure if this message useful even on warn level.
I will delete the message in the next version, thank you.
quoted
+               return -ENOENT;
+       }
+
+       if (table->header.revision < 2) {
+               err = -EINVAL;
+               pr_err("wrong table version\n");
And this one quite good to have, indeed.
quoted
+ * acpi_console_check - Check if uart matches the console specified by SPCR.
+ *
+ * @uport:     uart port to check
+ *
Since you use sections, you may add:
+ * Description:
According to kernel-doc-nano-HOWTO.txt "Description: " is optional.
quoted
+ * This function checks if the ACPI SPCR table specifies @uport to be a console
+ * and if so calls add_preferred_console()
+ *
+ * Return: a non-error value if the console matches.
quoted
@@ -2654,8 +2655,17 @@ int uart_add_one_port(struct uart_driver *drv, struct uart_port *uport)
                spin_lock_init(&uport->lock);
                lockdep_set_class(&uport->lock, &port_lock_key);
        }
-       if (uport->cons && uport->dev)
-               of_console_check(uport->dev->of_node, uport->cons->name, uport->line);
+
+       /*
+        * Support both open FW and ACPI access to console definitions.
+        * Both of_console_check() and acpi_console_check() will call
+        * add_preferred_console() if a console definition is found.
+        */
+       if (uport->cons && uport->dev) {
+               if (!acpi_console_check(uport))
if (cond1) {
 if (cond2) {
...
 }
}

is equivalent to
if (cond1 && cond2) {
...
}
It is, but it's a style decision.  I would prefer to leave it as is because it emphasizes that
after meeting some condition we first call acpi_console_check() and then of_console_check().

Thank you
Aleksey Makarov
quoted
+                       of_console_check(uport->dev->of_node, uport->cons->name,
+                                        uport->line);
+       }
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help