Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1345738 > unrolled thread
| Started by | Aleksey Makarov <aleksey.makarov@linaro.org> |
|---|---|
| First post | 2016-02-29 13:10 +0100 |
| Last post | 2016-03-03 16:40 +0100 |
| Articles | 9 — 4 participants |
Back to article view | Back to linux.kernel
[PATCH v4 0/4] ACPI: parse the SPCR table Aleksey Makarov <aleksey.makarov@linaro.org> - 2016-02-29 13:10 +0100
[PATCH v4 1/4] ACPI: parse SPCR and enable matching console Aleksey Makarov <aleksey.makarov@linaro.org> - 2016-02-29 13:10 +0100
Re: [PATCH v4 1/4] ACPI: parse SPCR and enable matching console Andy Shevchenko <andy.shevchenko@gmail.com> - 2016-02-29 14:40 +0100
Re: [PATCH v4 1/4] ACPI: parse SPCR and enable matching console Aleksey Makarov <aleksey.makarov@linaro.org> - 2016-02-29 15:00 +0100
[PATCH v4 3/4] ACPI: add definitions of DBG2 subtypes Aleksey Makarov <aleksey.makarov@linaro.org> - 2016-02-29 13:10 +0100
Re: [PATCH v4 0/4] ACPI: parse the SPCR table Peter Hurley <peter@hurleysoftware.com> - 2016-03-01 16:30 +0100
Re: [PATCH v4 0/4] ACPI: parse the SPCR table Peter Hurley <peter@hurleysoftware.com> - 2016-03-01 16:40 +0100
Re: [PATCH v4 0/4] ACPI: parse the SPCR table Aleksey Makarov <amakarov.linux@gmail.com> - 2016-03-03 13:10 +0100
Re: [PATCH v4 0/4] ACPI: parse the SPCR table Peter Hurley <peter@hurleysoftware.com> - 2016-03-03 16:40 +0100
| From | Aleksey Makarov <aleksey.makarov@linaro.org> |
|---|---|
| Date | 2016-02-29 13:10 +0100 |
| Subject | [PATCH v4 0/4] ACPI: parse the SPCR table |
| Message-ID | <r7uOd-2PD-5@gated-at.bofh.it> |
'ARM Server Base Boot Requirements' [1] mentions SPCR (Serial Port Console Redirection Table) [2] as a mandatory ACPI table that specifies the configuration of serial 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(). Use SPCR to tell if SBSA serial driver should use 32-bit access to registers. Based on the work by Leif Lindholm [3] Should be applied to next-20160229. Tested on QEMU. SPCR support is included in QEMU's ARM mach-virt since 2.4 release. v4: - drop patch "ACPI: change __init to __ref for early_acpi_os_unmap_memory()" ACPI developers work on a new API and asked not to do that. Instead, use acpi_get_table_with_size()/early_acpi_os_unmap_memory() once and cache the result. (Lv Zheng) - fix some style issues (Yury Norov) v3: https://lkml.kernel.org/g/1455559532-8305-1-git-send-email-aleksey.makarov@linaro.org Greg Kroah-Hartman did not like v2 so I have rewritten this patchset: - drop acpi_match() member of struct console - drop implementations of this member for pl011 and 8250 - drop the patch that renames some vars in printk.c as it is not needed anymore - drop patch that introduces system wide acpi_table_parse2(). Instead introduce a custom acpi_table_parse_spcr() in spcr.c Instead of introducing a new match_acpi() member of struct console, this patchset introduces a new function acpi_console_check(). This function is called when a new uart is registered at serial_core.c the same way OF code checks for console. If the registered uart is the console specified by SPCR table, this function calls add_preferred_console() The restrictions of this approach are: - only serial consoles can be set up - only consoles specified by the memory/io address can be set up (SPCR can specify devices by PCI id/PCI address) v2: https://lkml.kernel.org/g/1455299022-11641-1-git-send-email-aleksey.makarov@linaro.org - don't use SPCR if user specified console in command line - fix initialization order of newcon->index = 0 - rename some variables at printk.c (Joe Perches, Peter Hurley) - enable ACPI_SPCR_TABLE in a separate patch (Andy Shevchenko) - remove the retry loop for console registering (Peter Hurley). Instead, obtain SPCR with acpi_get_table(). That works after call to acpi_early_init() i. e. in any *_initcall() - describe design decision behind introducing acpi_match() (Peter Hurley) - fix compilation for x86 + ACPI (Graeme Gregory) - introduce DBG2 constants in a separate patch (Andy Shevchenko) - fix a typo in DBG2 constants (Andy Shevchenko) - add ACPI_DBG2_ARM_SBSA_32BIT constant (Christopher Covington) - add support for ACPI_DBG2_ARM_SBSA_* consoles (Christopher Covington) - add documentation for functions - add a patch that uses SPCR to find if SBSA serial driver should use 32-bit accessor functions (Christopher Covington) - change __init to __ref for early_acpi_os_unmap_memory() in a separate patch - introduce acpi_table_parse2() in a separate patch - fix fetching the SPCR table early (Mark Salter) - add a patch from Mark Salter that introduces support for matching 8250-based consoles v1: https://lkml.kernel.org/g/1453722324-22407-1-git-send-email-aleksey.makarov@linaro.org [1] http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.den0044a/index.html [2] https://msdn.microsoft.com/en-us/library/windows/hardware/dn639132(v=vs.85).aspx [3] https://lkml.kernel.org/g/1441716217-23786-1-git-send-email-leif.lindholm@linaro.org Aleksey Makarov (4): ACPI: parse SPCR and enable matching console ACPI: enable ACPI_SPCR_TABLE on ARM64 ACPI: add definitions of DBG2 subtypes serial: pl011: use ACPI SPCR to setup 32-bit access arch/arm64/Kconfig | 1 + drivers/acpi/Kconfig | 3 + drivers/acpi/Makefile | 1 + drivers/acpi/spcr.c | 138 +++++++++++++++++++++++++++++++++++++++ drivers/tty/serial/amba-pl011.c | 2 + drivers/tty/serial/serial_core.c | 14 +++- include/acpi/actbl2.h | 5 ++ include/linux/acpi.h | 15 +++++ 8 files changed, 177 insertions(+), 2 deletions(-) create mode 100644 drivers/acpi/spcr.c -- 2.7.1
[toc] | [next] | [standalone]
| From | Aleksey Makarov <aleksey.makarov@linaro.org> |
|---|---|
| Date | 2016-02-29 13:10 +0100 |
| Subject | [PATCH v4 1/4] ACPI: parse SPCR and enable matching console |
| Message-ID | <r7uOf-2PD-17@gated-at.bofh.it> |
| In reply to | #1345738 |
'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().
[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>
---
drivers/acpi/Kconfig | 3 +
drivers/acpi/Makefile | 1 +
drivers/acpi/spcr.c | 116 +++++++++++++++++++++++++++++++++++++++
drivers/tty/serial/serial_core.c | 14 ++++-
include/linux/acpi.h | 10 ++++
5 files changed, 142 insertions(+), 2 deletions(-)
create mode 100644 drivers/acpi/spcr.c
diff --git a/drivers/acpi/Kconfig b/drivers/acpi/Kconfig
index 65fb483..5611eb6 100644
--- a/drivers/acpi/Kconfig
+++ b/drivers/acpi/Kconfig
@@ -77,6 +77,9 @@ config ACPI_DEBUGGER_USER
endif
+config ACPI_SPCR_TABLE
+ bool
+
config ACPI_SLEEP
bool
depends on SUSPEND || HIBERNATION
diff --git a/drivers/acpi/Makefile b/drivers/acpi/Makefile
index 7395928..f70ae14 100644
--- a/drivers/acpi/Makefile
+++ b/drivers/acpi/Makefile
@@ -82,6 +82,7 @@ obj-$(CONFIG_ACPI_EC_DEBUGFS) += ec_sys.o
obj-$(CONFIG_ACPI_CUSTOM_METHOD)+= custom_method.o
obj-$(CONFIG_ACPI_BGRT) += bgrt.o
obj-$(CONFIG_ACPI_CPPC_LIB) += cppc_acpi.o
+obj-$(CONFIG_ACPI_SPCR_TABLE) += spcr.o
obj-$(CONFIG_ACPI_DEBUGGER_USER) += acpi_dbg.o
# processor has its own "processor." module_param namespace
diff --git a/drivers/acpi/spcr.c b/drivers/acpi/spcr.c
new file mode 100644
index 0000000..c460cb1
--- /dev/null
+++ b/drivers/acpi/spcr.c
@@ -0,0 +1,116 @@
+/*
+ * Copyright (c) 2012, Intel Corporation
+ * Copyright (c) 2015, Red Hat, Inc.
+ * Copyright (c) 2015, 2016 Linaro Ltd.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ */
+
+#define pr_fmt(fmt) "ACPI: SPCR: " fmt
+
+#include <linux/acpi.h>
+#include <linux/console.h>
+#include <linux/kernel.h>
+#include <linux/serial_core.h>
+
+static char *options;
+static struct acpi_generic_address address;
+
+static int __init parse_spcr_init(void)
+{
+ struct acpi_table_spcr *table;
+ acpi_size table_size;
+ acpi_status status;
+ int err = 0;
+
+ status = acpi_get_table_with_size(ACPI_SIG_SPCR, 0,
+ (struct acpi_table_header **)&table,
+ &table_size);
+
+ if (ACPI_FAILURE(status)) {
+ pr_err("could not get the table\n");
+ return -ENOENT;
+ }
+
+ if (table->header.revision < 2) {
+ err = -EINVAL;
+ pr_err("wrong table version\n");
+ goto done;
+ }
+
+ switch (table->baud_rate) {
+ case 3:
+ options = "9600";
+ break;
+ case 4:
+ options = "19200";
+ break;
+ case 6:
+ options = "57600";
+ break;
+ case 7:
+ options = "115200";
+ break;
+ default:
+ options = "";
+ break;
+ }
+
+ address = table->serial_port;
+
+done:
+ early_acpi_os_unmap_memory((void __iomem *)table, table_size);
+ return err;
+}
+
+/*
+ * This function calls __init parse_spcr_init() so it needs __ref.
+ * It is referenced by the arch_inicall() macros so it will be called
+ * at initialization and the 'parsed' variable will be set.
+ * So it's safe to make it __ref.
+ */
+static int __ref parse_spcr(void)
+{
+ static bool parsed;
+ static int parse_error;
+
+ if (!parsed) {
+ parse_error = parse_spcr_init();
+ parsed = true;
+ }
+
+ return parse_error;
+}
+
+arch_initcall(parse_spcr);
+
+/**
+ * acpi_console_check - Check if uart matches the console specified by SPCR.
+ *
+ * @uport: uart port to check
+ *
+ * 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.
+ */
+bool acpi_console_check(struct uart_port *uport)
+{
+ if (acpi_disabled || console_set_on_cmdline || parse_spcr() < 0)
+ return false;
+
+ if ((address.space_id == ACPI_ADR_SPACE_SYSTEM_MEMORY &&
+ address.address == (u64)uport->mapbase) ||
+ (address.space_id == ACPI_ADR_SPACE_SYSTEM_IO &&
+ address.address == (u64)uport->iobase)) {
+ pr_info("adding preferred console [%s%d]\n", uport->cons->name,
+ uport->line);
+ add_preferred_console(uport->cons->name, uport->line, options);
+ return true;
+ }
+
+ return false;
+}
diff --git a/drivers/tty/serial/serial_core.c b/drivers/tty/serial/serial_core.c
index a126a60..459ab54 100644
--- a/drivers/tty/serial/serial_core.c
+++ b/drivers/tty/serial/serial_core.c
@@ -34,6 +34,7 @@
#include <linux/serial_core.h>
#include <linux/delay.h>
#include <linux/mutex.h>
+#include <linux/acpi.h>
#include <asm/irq.h>
#include <asm/uaccess.h>
@@ -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))
+ of_console_check(uport->dev->of_node, uport->cons->name,
+ uport->line);
+ }
uart_configure_port(drv, state, uport);
diff --git a/include/linux/acpi.h b/include/linux/acpi.h
index 06ed7e5..ea0c297 100644
--- a/include/linux/acpi.h
+++ b/include/linux/acpi.h
@@ -1004,4 +1004,14 @@ static inline struct fwnode_handle *acpi_get_next_subnode(struct device *dev,
#define acpi_probe_device_table(t) ({ int __r = 0; __r;})
#endif
+struct uart_port;
+#ifdef CONFIG_ACPI_SPCR_TABLE
+bool acpi_console_check(struct uart_port *uport);
+#else
+static inline bool acpi_console_check(struct uart_port *uport)
+{
+ return FALSE;
+}
+#endif
+
#endif /*_LINUX_ACPI_H*/
--
2.7.1
[toc] | [prev] | [next] | [standalone]
| From | Andy Shevchenko <andy.shevchenko@gmail.com> |
|---|---|
| Date | 2016-02-29 14:40 +0100 |
| Subject | Re: [PATCH v4 1/4] ACPI: parse SPCR and enable matching console |
| Message-ID | <r7wdm-3Cq-31@gated-at.bofh.it> |
| In reply to | #1345739 |
On Mon, Feb 29, 2016 at 2:02 PM, Aleksey Makarov
<aleksey.makarov@linaro.org> wrote:
> '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().
> + 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.
> + return -ENOENT;
> + }
> +
> + if (table->header.revision < 2) {
> + err = -EINVAL;
> + pr_err("wrong table version\n");
And this one quite good to have, indeed.
> + * 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:
> + * 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.
> @@ -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) {
...
}
> + of_console_check(uport->dev->of_node, uport->cons->name,
> + uport->line);
> + }
--
With Best Regards,
Andy Shevchenko
[toc] | [prev] | [next] | [standalone]
| From | Aleksey Makarov <aleksey.makarov@linaro.org> |
|---|---|
| Date | 2016-02-29 15:00 +0100 |
| Subject | Re: [PATCH v4 1/4] ACPI: parse SPCR and enable matching console |
| Message-ID | <r7wwH-3Kx-21@gated-at.bofh.it> |
| In reply to | #1345825 |
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
> <aleksey.makarov@linaro.org> wrote:
>> '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().
>
>> + 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.
>> + return -ENOENT;
>> + }
>> +
>> + if (table->header.revision < 2) {
>> + err = -EINVAL;
>> + pr_err("wrong table version\n");
>
> And this one quite good to have, indeed.
>
>> + * 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.
>> + * 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.
>
>> @@ -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
>
>> + of_console_check(uport->dev->of_node, uport->cons->name,
>> + uport->line);
>> + }
>
>
>
[toc] | [prev] | [next] | [standalone]
| From | Aleksey Makarov <aleksey.makarov@linaro.org> |
|---|---|
| Date | 2016-02-29 13:10 +0100 |
| Subject | [PATCH v4 3/4] ACPI: add definitions of DBG2 subtypes |
| Message-ID | <r7uOf-2PD-29@gated-at.bofh.it> |
| In reply to | #1345738 |
The recent version of Microsoft Debug Port Table 2 (DBG2) [1]
specifies additional serial debug port subtypes. These constants
are also referred by Serial Port Console Redirection Table (SPCR) [2]
Add these constants.
[1] https://msdn.microsoft.com/en-us/library/windows/hardware/dn639131(v=vs.85).aspx
[2] https://msdn.microsoft.com/en-us/library/windows/hardware/dn639132(v=vs.85).aspx
Signed-off-by: Aleksey Makarov <aleksey.makarov@linaro.org>
---
include/acpi/actbl2.h | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/include/acpi/actbl2.h b/include/acpi/actbl2.h
index a4ef625..652f747 100644
--- a/include/acpi/actbl2.h
+++ b/include/acpi/actbl2.h
@@ -371,6 +371,11 @@ struct acpi_dbg2_device {
#define ACPI_DBG2_16550_COMPATIBLE 0x0000
#define ACPI_DBG2_16550_SUBSET 0x0001
+#define ACPI_DBG2_ARM_PL011 0x0003
+#define ACPI_DBG2_ARM_SBSA_32BIT 0x000D
+#define ACPI_DBG2_ARM_SBSA_GENERIC 0x000E
+#define ACPI_DBG2_ARM_DCC 0x000F
+#define ACPI_DBG2_BCM2835 0x0010
#define ACPI_DBG2_1394_STANDARD 0x0000
--
2.7.1
[toc] | [prev] | [next] | [standalone]
| From | Peter Hurley <peter@hurleysoftware.com> |
|---|---|
| Date | 2016-03-01 16:30 +0100 |
| Message-ID | <r7Upj-2rl-7@gated-at.bofh.it> |
| In reply to | #1345738 |
It's customary to cc reviewers of your previous series. Please review my comments to v3. Regards, Peter Hurley On 02/29/2016 04:02 AM, Aleksey Makarov wrote: > 'ARM Server Base Boot Requirements' [1] mentions SPCR (Serial Port > Console Redirection Table) [2] as a mandatory ACPI table that > specifies the configuration of serial 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(). > > Use SPCR to tell if SBSA serial driver should use 32-bit access to registers. > > Based on the work by Leif Lindholm [3] > > Should be applied to next-20160229. > > Tested on QEMU. SPCR support is included in QEMU's ARM mach-virt > since 2.4 release. > > v4: > - drop patch "ACPI: change __init to __ref for early_acpi_os_unmap_memory()" > ACPI developers work on a new API and asked not to do that. > Instead, use acpi_get_table_with_size()/early_acpi_os_unmap_memory() once > and cache the result. (Lv Zheng) > - fix some style issues (Yury Norov) > > v3: > https://lkml.kernel.org/g/1455559532-8305-1-git-send-email-aleksey.makarov@linaro.org > > Greg Kroah-Hartman did not like v2 so I have rewritten this patchset: > > - drop acpi_match() member of struct console > - drop implementations of this member for pl011 and 8250 > - drop the patch that renames some vars in printk.c as it is not needed anymore > - drop patch that introduces system wide acpi_table_parse2(). > Instead introduce a custom acpi_table_parse_spcr() in spcr.c > > Instead of introducing a new match_acpi() member of struct console, > this patchset introduces a new function acpi_console_check(). > This function is called when a new uart is registered at serial_core.c > the same way OF code checks for console. If the registered uart is the > console specified by SPCR table, this function calls add_preferred_console() > > The restrictions of this approach are: > > - only serial consoles can be set up > - only consoles specified by the memory/io address can be set up > (SPCR can specify devices by PCI id/PCI address) > > v2: > https://lkml.kernel.org/g/1455299022-11641-1-git-send-email-aleksey.makarov@linaro.org > - don't use SPCR if user specified console in command line > - fix initialization order of newcon->index = 0 > - rename some variables at printk.c (Joe Perches, Peter Hurley) > - enable ACPI_SPCR_TABLE in a separate patch (Andy Shevchenko) > - remove the retry loop for console registering (Peter Hurley). > Instead, obtain SPCR with acpi_get_table(). That works after > call to acpi_early_init() i. e. in any *_initcall() > - describe design decision behind introducing acpi_match() (Peter Hurley) > - fix compilation for x86 + ACPI (Graeme Gregory) > - introduce DBG2 constants in a separate patch (Andy Shevchenko) > - fix a typo in DBG2 constants (Andy Shevchenko) > - add ACPI_DBG2_ARM_SBSA_32BIT constant (Christopher Covington) > - add support for ACPI_DBG2_ARM_SBSA_* consoles (Christopher Covington) > - add documentation for functions > - add a patch that uses SPCR to find if SBSA serial driver should use 32-bit > accessor functions (Christopher Covington) > - change __init to __ref for early_acpi_os_unmap_memory() in a separate patch > - introduce acpi_table_parse2() in a separate patch > - fix fetching the SPCR table early (Mark Salter) > - add a patch from Mark Salter that introduces support for matching 8250-based > consoles > > v1: > https://lkml.kernel.org/g/1453722324-22407-1-git-send-email-aleksey.makarov@linaro.org > > [1] http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.den0044a/index.html > [2] https://msdn.microsoft.com/en-us/library/windows/hardware/dn639132(v=vs.85).aspx > [3] https://lkml.kernel.org/g/1441716217-23786-1-git-send-email-leif.lindholm@linaro.org > > Aleksey Makarov (4): > ACPI: parse SPCR and enable matching console > ACPI: enable ACPI_SPCR_TABLE on ARM64 > ACPI: add definitions of DBG2 subtypes > serial: pl011: use ACPI SPCR to setup 32-bit access > > arch/arm64/Kconfig | 1 + > drivers/acpi/Kconfig | 3 + > drivers/acpi/Makefile | 1 + > drivers/acpi/spcr.c | 138 +++++++++++++++++++++++++++++++++++++++ > drivers/tty/serial/amba-pl011.c | 2 + > drivers/tty/serial/serial_core.c | 14 +++- > include/acpi/actbl2.h | 5 ++ > include/linux/acpi.h | 15 +++++ > 8 files changed, 177 insertions(+), 2 deletions(-) > create mode 100644 drivers/acpi/spcr.c >
[toc] | [prev] | [next] | [standalone]
| From | Peter Hurley <peter@hurleysoftware.com> |
|---|---|
| Date | 2016-03-01 16:40 +0100 |
| Message-ID | <r7Uz0-2wf-5@gated-at.bofh.it> |
| In reply to | #1345738 |
On 02/29/2016 04:02 AM, Aleksey Makarov wrote: > 'ARM Server Base Boot Requirements' [1] mentions SPCR (Serial Port > Console Redirection Table) [2] as a mandatory ACPI table that > specifies the configuration of serial 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(). How will a user enable an earlycon on the same console as the SPCR console if there is no DBG2 table? > Use SPCR to tell if SBSA serial driver should use 32-bit access to registers. > > Based on the work by Leif Lindholm [3] > > Should be applied to next-20160229. > > Tested on QEMU. SPCR support is included in QEMU's ARM mach-virt > since 2.4 release. > > v4: > - drop patch "ACPI: change __init to __ref for early_acpi_os_unmap_memory()" > ACPI developers work on a new API and asked not to do that. > Instead, use acpi_get_table_with_size()/early_acpi_os_unmap_memory() once > and cache the result. (Lv Zheng) > - fix some style issues (Yury Norov) > > v3: > https://lkml.kernel.org/g/1455559532-8305-1-git-send-email-aleksey.makarov@linaro.org > > Greg Kroah-Hartman did not like v2 so I have rewritten this patchset: > > - drop acpi_match() member of struct console > - drop implementations of this member for pl011 and 8250 > - drop the patch that renames some vars in printk.c as it is not needed anymore > - drop patch that introduces system wide acpi_table_parse2(). > Instead introduce a custom acpi_table_parse_spcr() in spcr.c > > Instead of introducing a new match_acpi() member of struct console, > this patchset introduces a new function acpi_console_check(). > This function is called when a new uart is registered at serial_core.c > the same way OF code checks for console. If the registered uart is the > console specified by SPCR table, this function calls add_preferred_console() > > The restrictions of this approach are: > > - only serial consoles can be set up > - only consoles specified by the memory/io address can be set up > (SPCR can specify devices by PCI id/PCI address) > > v2: > https://lkml.kernel.org/g/1455299022-11641-1-git-send-email-aleksey.makarov@linaro.org > - don't use SPCR if user specified console in command line > - fix initialization order of newcon->index = 0 > - rename some variables at printk.c (Joe Perches, Peter Hurley) > - enable ACPI_SPCR_TABLE in a separate patch (Andy Shevchenko) > - remove the retry loop for console registering (Peter Hurley). > Instead, obtain SPCR with acpi_get_table(). That works after > call to acpi_early_init() i. e. in any *_initcall() > - describe design decision behind introducing acpi_match() (Peter Hurley) > - fix compilation for x86 + ACPI (Graeme Gregory) > - introduce DBG2 constants in a separate patch (Andy Shevchenko) > - fix a typo in DBG2 constants (Andy Shevchenko) > - add ACPI_DBG2_ARM_SBSA_32BIT constant (Christopher Covington) > - add support for ACPI_DBG2_ARM_SBSA_* consoles (Christopher Covington) > - add documentation for functions > - add a patch that uses SPCR to find if SBSA serial driver should use 32-bit > accessor functions (Christopher Covington) > - change __init to __ref for early_acpi_os_unmap_memory() in a separate patch > - introduce acpi_table_parse2() in a separate patch > - fix fetching the SPCR table early (Mark Salter) > - add a patch from Mark Salter that introduces support for matching 8250-based > consoles > > v1: > https://lkml.kernel.org/g/1453722324-22407-1-git-send-email-aleksey.makarov@linaro.org > > [1] http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.den0044a/index.html > [2] https://msdn.microsoft.com/en-us/library/windows/hardware/dn639132(v=vs.85).aspx > [3] https://lkml.kernel.org/g/1441716217-23786-1-git-send-email-leif.lindholm@linaro.org > > Aleksey Makarov (4): > ACPI: parse SPCR and enable matching console > ACPI: enable ACPI_SPCR_TABLE on ARM64 > ACPI: add definitions of DBG2 subtypes > serial: pl011: use ACPI SPCR to setup 32-bit access > > arch/arm64/Kconfig | 1 + > drivers/acpi/Kconfig | 3 + > drivers/acpi/Makefile | 1 + > drivers/acpi/spcr.c | 138 +++++++++++++++++++++++++++++++++++++++ > drivers/tty/serial/amba-pl011.c | 2 + > drivers/tty/serial/serial_core.c | 14 +++- > include/acpi/actbl2.h | 5 ++ > include/linux/acpi.h | 15 +++++ > 8 files changed, 177 insertions(+), 2 deletions(-) > create mode 100644 drivers/acpi/spcr.c >
[toc] | [prev] | [next] | [standalone]
| From | Aleksey Makarov <amakarov.linux@gmail.com> |
|---|---|
| Date | 2016-03-03 13:10 +0100 |
| Message-ID | <r8AeS-6Vw-11@gated-at.bofh.it> |
| In reply to | #1346699 |
On 03/01/2016 06:31 PM, Peter Hurley wrote: > On 02/29/2016 04:02 AM, Aleksey Makarov wrote: >> 'ARM Server Base Boot Requirements' [1] mentions SPCR (Serial Port >> Console Redirection Table) [2] as a mandatory ACPI table that >> specifies the configuration of serial 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(). > > How will a user enable an earlycon on the same console as the SPCR > console if there is no DBG2 table? ... [ 0.000000] earlycon: pl11 at MMIO 0x0000000009000000 (options '') [ 0.000000] bootconsole [pl11] enabled ... [ 0.000000] Kernel command line: root=/dev/vda1 rw systemd.show_status=no acpi=force earlycon=pl011,0x9000000 ... [ 0.318248] ACPI: SPCR: adding preferred console [ttyAMA0] [ 0.318736] ARMH0011:00: ttyAMA0 at MMIO 0x9000000 (irq = 5, base_baud = 0) is a SBSA [ 0.319502] console [ttyAMA0] enabled [ 0.319502] console [ttyAMA0] enabled [ 0.319933] bootconsole [pl11] disabled [ 0.319933] bootconsole [pl11] disabled ... Why? > > >> Use SPCR to tell if SBSA serial driver should use 32-bit access to registers. >> >> Based on the work by Leif Lindholm [3] >> >> Should be applied to next-20160229. >> >> Tested on QEMU. SPCR support is included in QEMU's ARM mach-virt >> since 2.4 release. >> >> v4: >> - drop patch "ACPI: change __init to __ref for early_acpi_os_unmap_memory()" >> ACPI developers work on a new API and asked not to do that. >> Instead, use acpi_get_table_with_size()/early_acpi_os_unmap_memory() once >> and cache the result. (Lv Zheng) >> - fix some style issues (Yury Norov) >> >> v3: >> https://lkml.kernel.org/g/1455559532-8305-1-git-send-email-aleksey.makarov@linaro.org >> >> Greg Kroah-Hartman did not like v2 so I have rewritten this patchset: >> >> - drop acpi_match() member of struct console >> - drop implementations of this member for pl011 and 8250 >> - drop the patch that renames some vars in printk.c as it is not needed anymore >> - drop patch that introduces system wide acpi_table_parse2(). >> Instead introduce a custom acpi_table_parse_spcr() in spcr.c >> >> Instead of introducing a new match_acpi() member of struct console, >> this patchset introduces a new function acpi_console_check(). >> This function is called when a new uart is registered at serial_core.c >> the same way OF code checks for console. If the registered uart is the >> console specified by SPCR table, this function calls add_preferred_console() >> >> The restrictions of this approach are: >> >> - only serial consoles can be set up >> - only consoles specified by the memory/io address can be set up >> (SPCR can specify devices by PCI id/PCI address) >> >> v2: >> https://lkml.kernel.org/g/1455299022-11641-1-git-send-email-aleksey.makarov@linaro.org >> - don't use SPCR if user specified console in command line >> - fix initialization order of newcon->index = 0 >> - rename some variables at printk.c (Joe Perches, Peter Hurley) >> - enable ACPI_SPCR_TABLE in a separate patch (Andy Shevchenko) >> - remove the retry loop for console registering (Peter Hurley). >> Instead, obtain SPCR with acpi_get_table(). That works after >> call to acpi_early_init() i. e. in any *_initcall() >> - describe design decision behind introducing acpi_match() (Peter Hurley) >> - fix compilation for x86 + ACPI (Graeme Gregory) >> - introduce DBG2 constants in a separate patch (Andy Shevchenko) >> - fix a typo in DBG2 constants (Andy Shevchenko) >> - add ACPI_DBG2_ARM_SBSA_32BIT constant (Christopher Covington) >> - add support for ACPI_DBG2_ARM_SBSA_* consoles (Christopher Covington) >> - add documentation for functions >> - add a patch that uses SPCR to find if SBSA serial driver should use 32-bit >> accessor functions (Christopher Covington) >> - change __init to __ref for early_acpi_os_unmap_memory() in a separate patch >> - introduce acpi_table_parse2() in a separate patch >> - fix fetching the SPCR table early (Mark Salter) >> - add a patch from Mark Salter that introduces support for matching 8250-based >> consoles >> >> v1: >> https://lkml.kernel.org/g/1453722324-22407-1-git-send-email-aleksey.makarov@linaro.org >> >> [1] http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.den0044a/index.html >> [2] https://msdn.microsoft.com/en-us/library/windows/hardware/dn639132(v=vs.85).aspx >> [3] https://lkml.kernel.org/g/1441716217-23786-1-git-send-email-leif.lindholm@linaro.org >> >> Aleksey Makarov (4): >> ACPI: parse SPCR and enable matching console >> ACPI: enable ACPI_SPCR_TABLE on ARM64 >> ACPI: add definitions of DBG2 subtypes >> serial: pl011: use ACPI SPCR to setup 32-bit access >> >> arch/arm64/Kconfig | 1 + >> drivers/acpi/Kconfig | 3 + >> drivers/acpi/Makefile | 1 + >> drivers/acpi/spcr.c | 138 +++++++++++++++++++++++++++++++++++++++ >> drivers/tty/serial/amba-pl011.c | 2 + >> drivers/tty/serial/serial_core.c | 14 +++- >> include/acpi/actbl2.h | 5 ++ >> include/linux/acpi.h | 15 +++++ >> 8 files changed, 177 insertions(+), 2 deletions(-) >> create mode 100644 drivers/acpi/spcr.c >> > > -- > To unsubscribe from this list: send the line "unsubscribe linux-acpi" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html >
[toc] | [prev] | [next] | [standalone]
| From | Peter Hurley <peter@hurleysoftware.com> |
|---|---|
| Date | 2016-03-03 16:40 +0100 |
| Message-ID | <r8Dw6-Di-7@gated-at.bofh.it> |
| In reply to | #1349073 |
On 03/03/2016 03:59 AM, Aleksey Makarov wrote: > > > On 03/01/2016 06:31 PM, Peter Hurley wrote: >> On 02/29/2016 04:02 AM, Aleksey Makarov wrote: >>> 'ARM Server Base Boot Requirements' [1] mentions SPCR (Serial Port >>> Console Redirection Table) [2] as a mandatory ACPI table that >>> specifies the configuration of serial 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(). >> >> How will a user enable an earlycon on the same console as the SPCR >> console if there is no DBG2 table? > > ... > [ 0.000000] earlycon: pl11 at MMIO 0x0000000009000000 (options '') > [ 0.000000] bootconsole [pl11] enabled > ... > [ 0.000000] Kernel command line: root=/dev/vda1 rw systemd.show_status=no acpi=force earlycon=pl011,0x9000000 > ... > [ 0.318248] ACPI: SPCR: adding preferred console [ttyAMA0] > [ 0.318736] ARMH0011:00: ttyAMA0 at MMIO 0x9000000 (irq = 5, base_baud = 0) is a SBSA > [ 0.319502] console [ttyAMA0] enabled > [ 0.319502] console [ttyAMA0] enabled > [ 0.319933] bootconsole [pl11] disabled > [ 0.319933] bootconsole [pl11] disabled > ... > > Why? That's pretty disingenuous; via command line? By that measure, none of your patches are required because a user can already start both console and earlycon without them. With the console location specified in the SPCR, earlycon should be opt-in on the command-line simply with "earlycon" command-line parameter.
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web