Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1460619 > unrolled thread
| Started by | Aleksey Makarov <aleksey.makarov@linaro.org> |
|---|---|
| First post | 2016-08-11 17:40 +0200 |
| Last post | 2016-08-15 16:00 +0200 |
| Articles | 10 — 2 participants |
Back to article view | Back to linux.kernel
[PATCH v9 0/4] ACPI: parse the SPCR table Aleksey Makarov <aleksey.makarov@linaro.org> - 2016-08-11 17:40 +0200
[PATCH v9 3/4] ARM64: ACPI: enable ACPI_SPCR_TABLE Aleksey Makarov <aleksey.makarov@linaro.org> - 2016-08-11 17:40 +0200
[PATCH v9 2/4] ACPI: parse SPCR and enable matching console Aleksey Makarov <aleksey.makarov@linaro.org> - 2016-08-11 17:40 +0200
[PATCH v9 4/4] serial: pl011: add console matching function Aleksey Makarov <aleksey.makarov@linaro.org> - 2016-08-11 17:40 +0200
Re: [PATCH v9 4/4] serial: pl011: add console matching function Aleksey Makarov <aleksey.makarov@linaro.org> - 2016-08-15 13:20 +0200
Re: [PATCH v9 4/4] serial: pl011: add console matching function Russell King - ARM Linux <linux@armlinux.org.uk> - 2016-08-15 14:50 +0200
Re: [PATCH v9 4/4] serial: pl011: add console matching function Aleksey Makarov <aleksey.makarov@linaro.org> - 2016-08-15 15:20 +0200
[PATCH v9 4/4] serial: pl011: add console matching function Aleksey Makarov <aleksey.makarov@linaro.org> - 2016-08-15 15:40 +0200
Re: [PATCH v9 4/4] serial: pl011: add console matching function Russell King - ARM Linux <linux@armlinux.org.uk> - 2016-08-15 15:50 +0200
Re: [PATCH v9 0/4] ACPI: parse the SPCR table Aleksey Makarov <aleksey.makarov@linaro.org> - 2016-08-15 16:00 +0200
| From | Aleksey Makarov <aleksey.makarov@linaro.org> |
|---|---|
| Date | 2016-08-11 17:40 +0200 |
| Subject | [PATCH v9 0/4] ACPI: parse the SPCR table |
| Message-ID | <s50fo-5Dk-19@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. Move "earlycon" early_param handling to earlycon.c to parse this option once Parse SPCR table, setup earlycon and register specified console. Enable parsing this table on ARM64. Earlycon should be set up as early as possible. ACPI boot tables are mapped in arch/arm64/kernel/acpi.c:acpi_boot_table_init() called from setup_arch() and that's where we parse spcr. So it has to be opted-in per-arch. When ACPI_SPCR_TABLE is defined initialization of DT earlycon is deferred until the DT/ACPI decision is done. Implement console_match() for pl011. Based on the work by Leif Lindholm [3] Thanks to Peter Hurley for explaining how this should work. Should be applied to v4.8-rc1 Tested on QEMU and ThunderX. SPCR support is included in QEMU's ARM64 mach-virt since 2.4 release. v9: - rebase to v4.8-rc1 - fix compilation for !CONFIG_SERIAL_EARLYCON case - add Acked-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> for ACPI part - move constant check out of loop (Yury Norov) - add '\n' to info message v8: - rebase to next-20160520 - remove the patch "ACPICA: Headers: Add new constants for the DBG2 ACPI table" as it have got to linux-next - add Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>, Reviewed-by: Peter Hurley <peter@hurleysoftware.com> (but see below) - fix the patch "serial: pl011: add console matching function". The patch by Christopher Covington [4] specifies that SBSA uart does 32-bit access to registers and this breaks the match function. In this series the function was changed to match when SPCR specifies both mmio32 and mmio access. I removed Acked-by: Greg from this patch because of these changes. v7: https://lkml.kernel.org/g/1459431629-27934-1-git-send-email-aleksey.makarov@linaro.org - add Acked-by: Rob Herring for "of/serial: move earlycon early_param handling to serial" - call DT earlycon initialization from the arch ACPI code, not from parse_spcr() (Rafael J. Wysocki) - fix a few minor issues (Rafael J. Wysocki) v6: https://lkml.kernel.org/g/1458823925-19560-1-git-send-email-aleksey.makarov@linaro.org - add documentation for parse_spcr() functioin (Yury Norov) - don't initialize err variable (Yury Norov) - add __initdata for the earlycon_init_is_deferred flag variable - rename the function exported in "of/serial: move earlycon early_param handling to serial" to avoid clash with the function from arch/microblaze/kernel/prom.c - defer initialization of DT earlycon until DT/ACPI decision is made (Rob Herring, Peter Hurley) - use snprintf instead of sprintf (Andy Shevchenko) - drop patch that adds EARLYCON_DECLARE for pl011 as EARLYCON_DECLARE is equivalent to OF_EARLYCON_DECLARE for 4.6+ (Peter Hurley). This means that SPCR earlycon will not work on the kernels before 4.6 v5: https://lkml.kernel.org/g/1458643595-14719-1-git-send-email-aleksey.makarov@linaro.org - drop patch "serial: pl011: use ACPI SPCR to setup 32-bit access" because it is ugly. Also because Christopher Covington came with a better solution [4] - remove error message when the table is not provided by ACPI (Andy Shevchenko) - rewrite spcr.c following the suggestions by Peter Hurley - add console_match() for pl011 in a separate patch - add EARLYCON_DECLARE for pl011 in a separate patch - add patch "of/serial: move earlycon early_param handling to serial" from the GDB2 series v4: https://lkml.kernel.org/g/1456747355-15692-1-git-send-email-aleksey.makarov@linaro.org - 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 [4] https://lkml.kernel.org/g/1457415800-8799-1-git-send-email-cov@codeaurora.org Aleksey Makarov (3): ACPI: parse SPCR and enable matching console ARM64: ACPI: enable ACPI_SPCR_TABLE serial: pl011: add console matching function Leif Lindholm (1): of/serial: move earlycon early_param handling to serial arch/arm64/Kconfig | 1 + arch/arm64/kernel/acpi.c | 11 +++- drivers/acpi/Kconfig | 3 ++ drivers/acpi/Makefile | 1 + drivers/acpi/spcr.c | 111 ++++++++++++++++++++++++++++++++++++++++ drivers/of/fdt.c | 11 +--- drivers/tty/serial/amba-pl011.c | 56 ++++++++++++++++++++ drivers/tty/serial/earlycon.c | 19 ++++++- include/linux/acpi.h | 6 +++ include/linux/of_fdt.h | 2 + include/linux/serial_core.h | 9 +++- 11 files changed, 216 insertions(+), 14 deletions(-) create mode 100644 drivers/acpi/spcr.c -- 2.9.2
[toc] | [next] | [standalone]
| From | Aleksey Makarov <aleksey.makarov@linaro.org> |
|---|---|
| Date | 2016-08-11 17:40 +0200 |
| Subject | [PATCH v9 3/4] ARM64: ACPI: enable ACPI_SPCR_TABLE |
| Message-ID | <s50fo-5Dk-27@gated-at.bofh.it> |
| In reply to | #1460619 |
SBBR mentions SPCR as a mandatory ACPI table. So enable it for ARM64
Earlycon should be set up as early as possible. ACPI boot tables are
mapped in arch/arm64/kernel/acpi.c:acpi_boot_table_init() that
is called from setup_arch() and that's where we parse SPCR.
So it has to be opted-in per-arch.
When ACPI_SPCR_TABLE is defined initialization of DT earlycon is
deferred until the DT/ACPI decision is done. Initialize DT earlycon
if ACPI is disabled.
Signed-off-by: Aleksey Makarov <aleksey.makarov@linaro.org>
Tested-by: Kefeng Wang <wangkefeng.wang@huawei.com>
---
arch/arm64/Kconfig | 1 +
arch/arm64/kernel/acpi.c | 11 ++++++++++-
2 files changed, 11 insertions(+), 1 deletion(-)
diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig
index 69c8787..a54dfc0 100644
--- a/arch/arm64/Kconfig
+++ b/arch/arm64/Kconfig
@@ -4,6 +4,7 @@ config ARM64
select ACPI_GENERIC_GSI if ACPI
select ACPI_REDUCED_HARDWARE_ONLY if ACPI
select ACPI_MCFG if ACPI
+ select ACPI_SPCR_TABLE if ACPI
select ARCH_HAS_DEVMEM_IS_ALLOWED
select ARCH_HAS_ACPI_TABLE_UPGRADE if ACPI
select ARCH_HAS_ATOMIC64_DEC_IF_POSITIVE
diff --git a/arch/arm64/kernel/acpi.c b/arch/arm64/kernel/acpi.c
index 3e4f1a4..252a6d9 100644
--- a/arch/arm64/kernel/acpi.c
+++ b/arch/arm64/kernel/acpi.c
@@ -24,6 +24,7 @@
#include <linux/memblock.h>
#include <linux/of_fdt.h>
#include <linux/smp.h>
+#include <linux/serial_core.h>
#include <asm/cputype.h>
#include <asm/cpu_ops.h>
@@ -206,7 +207,7 @@ void __init acpi_boot_table_init(void)
if (param_acpi_off ||
(!param_acpi_on && !param_acpi_force &&
of_scan_flat_dt(dt_scan_depth1_nodes, NULL)))
- return;
+ goto done;
/*
* ACPI is disabled at this point. Enable it in order to parse
@@ -226,6 +227,14 @@ void __init acpi_boot_table_init(void)
if (!param_acpi_force)
disable_acpi();
}
+
+done:
+ if (acpi_disabled) {
+ if (earlycon_init_is_deferred)
+ early_init_dt_scan_chosen_stdout();
+ } else {
+ parse_spcr(earlycon_init_is_deferred);
+ }
}
#ifdef CONFIG_ACPI_APEI
--
2.9.2
[toc] | [prev] | [next] | [standalone]
| From | Aleksey Makarov <aleksey.makarov@linaro.org> |
|---|---|
| Date | 2016-08-11 17:40 +0200 |
| Subject | [PATCH v9 2/4] ACPI: parse SPCR and enable matching console |
| Message-ID | <s50fo-5Dk-29@gated-at.bofh.it> |
| In reply to | #1460619 |
'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.
Defer initialization of DT earlycon until ACPI/DT decision is made.
Parse the ACPI SPCR table, setup earlycon if required,
enable specified console.
Thanks to Peter Hurley for explaining how this should work.
[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
Signed-off-by: Aleksey Makarov <aleksey.makarov@linaro.org>
Reviewed-by: Peter Hurley <peter@hurleysoftware.com>
Tested-by: Kefeng Wang <wangkefeng.wang@huawei.com>
Acked-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
---
drivers/acpi/Kconfig | 3 ++
drivers/acpi/Makefile | 1 +
drivers/acpi/spcr.c | 111 ++++++++++++++++++++++++++++++++++++++++++
drivers/tty/serial/earlycon.c | 19 +++++++-
include/linux/acpi.h | 6 +++
include/linux/serial_core.h | 9 +++-
6 files changed, 146 insertions(+), 3 deletions(-)
create mode 100644 drivers/acpi/spcr.c
diff --git a/drivers/acpi/Kconfig b/drivers/acpi/Kconfig
index 6cef2d1..4a269f9 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 e5ada78..d799593 100644
--- a/drivers/acpi/Makefile
+++ b/drivers/acpi/Makefile
@@ -81,6 +81,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..e8d7bc7
--- /dev/null
+++ b/drivers/acpi/spcr.c
@@ -0,0 +1,111 @@
+/*
+ * 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>
+
+/**
+ * parse_spcr() - parse ACPI SPCR table and add preferred console
+ *
+ * @earlycon: set up earlycon for the console specified by the table
+ *
+ * For the architectures with support for ACPI, CONFIG_ACPI_SPCR_TABLE may be
+ * defined to parse ACPI SPCR table. As a result of the parsing preferred
+ * console is registered and if @earlycon is true, earlycon is set up.
+ *
+ * When CONFIG_ACPI_SPCR_TABLE is defined, this function should be called
+ * from arch inintialization code as soon as the DT/ACPI decision is made.
+ *
+ */
+int __init parse_spcr(bool earlycon)
+{
+ static char opts[64];
+ struct acpi_table_spcr *table;
+ acpi_size table_size;
+ acpi_status status;
+ char *uart;
+ char *iotype;
+ int baud_rate;
+ int err;
+
+ if (acpi_disabled)
+ return -ENODEV;
+
+ status = acpi_get_table_with_size(ACPI_SIG_SPCR, 0,
+ (struct acpi_table_header **)&table,
+ &table_size);
+
+ if (ACPI_FAILURE(status))
+ return -ENOENT;
+
+ if (table->header.revision < 2) {
+ err = -ENOENT;
+ pr_err("wrong table version\n");
+ goto done;
+ }
+
+ iotype = table->serial_port.space_id == ACPI_ADR_SPACE_SYSTEM_MEMORY ?
+ "mmio" : "io";
+
+ switch (table->interface_type) {
+ case ACPI_DBG2_ARM_SBSA_32BIT:
+ iotype = "mmio32";
+ /* fall through */
+ case ACPI_DBG2_ARM_PL011:
+ case ACPI_DBG2_ARM_SBSA_GENERIC:
+ case ACPI_DBG2_BCM2835:
+ uart = "pl011";
+ break;
+ case ACPI_DBG2_16550_COMPATIBLE:
+ case ACPI_DBG2_16550_SUBSET:
+ uart = "uart";
+ break;
+ default:
+ err = -ENOENT;
+ goto done;
+ }
+
+ switch (table->baud_rate) {
+ case 3:
+ baud_rate = 9600;
+ break;
+ case 4:
+ baud_rate = 19200;
+ break;
+ case 6:
+ baud_rate = 57600;
+ break;
+ case 7:
+ baud_rate = 115200;
+ break;
+ default:
+ err = -ENOENT;
+ goto done;
+ }
+
+ snprintf(opts, sizeof(opts), "%s,%s,0x%llx,%d", uart, iotype,
+ table->serial_port.address, baud_rate);
+
+ pr_info("console: %s\n", opts);
+
+ if (earlycon)
+ setup_earlycon(opts);
+
+ err = add_preferred_console(uart, 0, opts + strlen(uart) + 1);
+
+done:
+ early_acpi_os_unmap_memory((void __iomem *)table, table_size);
+ return err;
+}
diff --git a/drivers/tty/serial/earlycon.c b/drivers/tty/serial/earlycon.c
index 7aae655..ea00b9f 100644
--- a/drivers/tty/serial/earlycon.c
+++ b/drivers/tty/serial/earlycon.c
@@ -21,6 +21,7 @@
#include <linux/sizes.h>
#include <linux/of.h>
#include <linux/of_fdt.h>
+#include <linux/acpi.h>
#ifdef CONFIG_FIX_EARLYCON_MEM
#include <asm/fixmap.h>
@@ -199,6 +200,14 @@ int __init setup_earlycon(char *buf)
return -ENOENT;
}
+/*
+ * When CONFIG_ACPI_SPCR_TABLE is defined, "earlycon" without parameters in
+ * command line does not start DT earlycon immediately, instead it defers
+ * starting it until DT/ACPI decision is made. At that time if ACPI is enabled
+ * call parse_spcr(), else call early_init_dt_scan_chosen_stdout()
+ */
+bool earlycon_init_is_deferred __initdata;
+
/* early_param wrapper for setup_earlycon() */
static int __init param_setup_earlycon(char *buf)
{
@@ -208,8 +217,14 @@ static int __init param_setup_earlycon(char *buf)
* Just 'earlycon' is a valid param for devicetree earlycons;
* don't generate a warning from parse_early_params() in that case
*/
- if (!buf || !buf[0])
- return early_init_dt_scan_chosen_stdout();
+ if (!buf || !buf[0]) {
+ if (IS_ENABLED(CONFIG_ACPI_SPCR_TABLE)) {
+ earlycon_init_is_deferred = true;
+ return 0;
+ } else {
+ return early_init_dt_scan_chosen_stdout();
+ }
+ }
err = setup_earlycon(buf);
if (err == -ENOENT || err == -EALREADY)
diff --git a/include/linux/acpi.h b/include/linux/acpi.h
index 4d8452c..32407e4 100644
--- a/include/linux/acpi.h
+++ b/include/linux/acpi.h
@@ -1074,4 +1074,10 @@ void acpi_table_upgrade(void);
static inline void acpi_table_upgrade(void) { }
#endif
+#ifdef CONFIG_ACPI_SPCR_TABLE
+int parse_spcr(bool earlycon);
+#else
+static inline int parse_spcr(bool earlycon) { return 0; }
+#endif
+
#endif /*_LINUX_ACPI_H*/
diff --git a/include/linux/serial_core.h b/include/linux/serial_core.h
index 2f44e20..04b8cfb 100644
--- a/include/linux/serial_core.h
+++ b/include/linux/serial_core.h
@@ -367,11 +367,18 @@ extern const struct earlycon_id __earlycon_table_end[];
#define EARLYCON_DECLARE(_name, fn) OF_EARLYCON_DECLARE(_name, "", fn)
-extern int setup_earlycon(char *buf);
extern int of_setup_earlycon(const struct earlycon_id *match,
unsigned long node,
const char *options);
+#ifdef CONFIG_SERIAL_EARLYCON
+extern bool earlycon_init_is_deferred __initdata;
+extern int setup_earlycon(char *buf);
+#else
+static const bool earlycon_init_is_deferred;
+static inline int setup_earlycon(char *buf) { return 0; }
+#endif
+
struct uart_port *uart_get_console(struct uart_port *ports, int nr,
struct console *c);
int uart_parse_earlycon(char *p, unsigned char *iotype, unsigned long *addr,
--
2.9.2
[toc] | [prev] | [next] | [standalone]
| From | Aleksey Makarov <aleksey.makarov@linaro.org> |
|---|---|
| Date | 2016-08-11 17:40 +0200 |
| Subject | [PATCH v9 4/4] serial: pl011: add console matching function |
| Message-ID | <s50fo-5Dk-31@gated-at.bofh.it> |
| In reply to | #1460619 |
This patch adds function pl011_console_match() that implements
method match of struct console. It allows to match consoles against
data specified in a string, for example taken from command line or
compiled by ACPI SPCR table handler.
Signed-off-by: Aleksey Makarov <aleksey.makarov@linaro.org>
Reviewed-by: Peter Hurley <peter@hurleysoftware.com>
---
drivers/tty/serial/amba-pl011.c | 56 +++++++++++++++++++++++++++++++++++++++++
1 file changed, 56 insertions(+)
diff --git a/drivers/tty/serial/amba-pl011.c b/drivers/tty/serial/amba-pl011.c
index 8a9e213..d6a51cb 100644
--- a/drivers/tty/serial/amba-pl011.c
+++ b/drivers/tty/serial/amba-pl011.c
@@ -2288,12 +2288,68 @@ static int __init pl011_console_setup(struct console *co, char *options)
return uart_set_options(&uap->port, co, baud, parity, bits, flow);
}
+/**
+ * pl011_console_match - non-standard console matching
+ * @co: registering console
+ * @name: name from console command line
+ * @idx: index from console command line
+ * @options: ptr to option string from console command line
+ *
+ * Only attempts to match console command lines of the form:
+ * console=pl011,mmio|mmio32,<addr>[,<options>]
+ * console=pl011,0x<addr>[,<options>]
+ * This form is used to register an initial earlycon boot console and
+ * replace it with the amba_console at pl011 driver init.
+ *
+ * Performs console setup for a match (as required by interface)
+ * If no <options> are specified, then assume the h/w is already setup.
+ *
+ * Returns 0 if console matches; otherwise non-zero to use default matching
+ */
+static int __init pl011_console_match(struct console *co, char *name, int idx,
+ char *options)
+{
+ char match[] = "pl011"; /* pl011-specific earlycon name */
+ unsigned char iotype;
+ unsigned long addr;
+ int i;
+
+ if (strncmp(name, match, 5) != 0)
+ return -ENODEV;
+
+ if (uart_parse_earlycon(options, &iotype, &addr, &options))
+ return -ENODEV;
+
+ if (iotype != UPIO_MEM && iotype != UPIO_MEM32)
+ return -ENODEV;
+
+ /* try to match the port specified on the command line */
+ for (i = 0; i < ARRAY_SIZE(amba_ports); i++) {
+ struct uart_port *port;
+
+ if (!amba_ports[i])
+ continue;
+
+ port = &amba_ports[i]->port;
+
+ if (port->mapbase != addr)
+ continue;
+
+ co->index = i;
+ port->cons = co;
+ return pl011_console_setup(co, options);
+ }
+
+ return -ENODEV;
+}
+
static struct uart_driver amba_reg;
static struct console amba_console = {
.name = "ttyAMA",
.write = pl011_console_write,
.device = uart_console_device,
.setup = pl011_console_setup,
+ .match = pl011_console_match,
.flags = CON_PRINTBUFFER,
.index = -1,
.data = &amba_reg,
--
2.9.2
[toc] | [prev] | [next] | [standalone]
| From | Aleksey Makarov <aleksey.makarov@linaro.org> |
|---|---|
| Date | 2016-08-15 13:20 +0200 |
| Subject | Re: [PATCH v9 4/4] serial: pl011: add console matching function |
| Message-ID | <s6o5Y-4S0-5@gated-at.bofh.it> |
| In reply to | #1460623 |
On 08/11/2016 06:31 PM, Aleksey Makarov wrote:
> This patch adds function pl011_console_match() that implements
> method match of struct console. It allows to match consoles against
> data specified in a string, for example taken from command line or
> compiled by ACPI SPCR table handler.
Hi Greg,
Can you review this new version of the patch and consider ACKing it please?
It had your ACK for v7 but I had to make some changes:
The patch by Christopher Covington [1] specifies that SBSA uart
does 32-bit access to registers and this breaks the match function.
In this series the function was changed to match with both mmio32 and
mmio access. I removed Acked-by: Greg from this patch because of these
changes.
The difference between v7 and v9:
@@ -2319,6 +2320,9 @@ static int __init pl011_console_match(struct
console *co, char *name, int idx,
if (uart_parse_earlycon(options, &iotype, &addr, &options))
return -ENODEV;
+ if (iotype != UPIO_MEM && iotype != UPIO_MEM32)
+ return -ENODEV;
+
/* try to match the port specified on the command line */
for (i = 0; i < ARRAY_SIZE(amba_ports); i++) {
struct uart_port *port;
@@ -2328,10 +2332,7 @@ static int __init pl011_console_match(struct
console *co, char *name, int idx,
port = &amba_ports[i]->port;
- if (port->iotype != iotype)
- continue;
- if ((iotype == UPIO_MEM || iotype == UPIO_MEM32) &&
- (port->mapbase != addr))
+ if (port->mapbase != addr)
continue;
co->index = i;
[1]
https://lkml.kernel.org/g/1457415800-8799-1-git-send-email-cov@codeaurora.org
Thank you
Aleksey Makarov
> Signed-off-by: Aleksey Makarov <aleksey.makarov@linaro.org>
> Reviewed-by: Peter Hurley <peter@hurleysoftware.com>
> ---
> drivers/tty/serial/amba-pl011.c | 56 +++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 56 insertions(+)
>
> diff --git a/drivers/tty/serial/amba-pl011.c b/drivers/tty/serial/amba-pl011.c
> index 8a9e213..d6a51cb 100644
> --- a/drivers/tty/serial/amba-pl011.c
> +++ b/drivers/tty/serial/amba-pl011.c
> @@ -2288,12 +2288,68 @@ static int __init pl011_console_setup(struct console *co, char *options)
> return uart_set_options(&uap->port, co, baud, parity, bits, flow);
> }
>
> +/**
> + * pl011_console_match - non-standard console matching
> + * @co: registering console
> + * @name: name from console command line
> + * @idx: index from console command line
> + * @options: ptr to option string from console command line
> + *
> + * Only attempts to match console command lines of the form:
> + * console=pl011,mmio|mmio32,<addr>[,<options>]
> + * console=pl011,0x<addr>[,<options>]
> + * This form is used to register an initial earlycon boot console and
> + * replace it with the amba_console at pl011 driver init.
> + *
> + * Performs console setup for a match (as required by interface)
> + * If no <options> are specified, then assume the h/w is already setup.
> + *
> + * Returns 0 if console matches; otherwise non-zero to use default matching
> + */
> +static int __init pl011_console_match(struct console *co, char *name, int idx,
> + char *options)
> +{
> + char match[] = "pl011"; /* pl011-specific earlycon name */
> + unsigned char iotype;
> + unsigned long addr;
> + int i;
> +
> + if (strncmp(name, match, 5) != 0)
> + return -ENODEV;
> +
> + if (uart_parse_earlycon(options, &iotype, &addr, &options))
> + return -ENODEV;
> +
> + if (iotype != UPIO_MEM && iotype != UPIO_MEM32)
> + return -ENODEV;
> +
> + /* try to match the port specified on the command line */
> + for (i = 0; i < ARRAY_SIZE(amba_ports); i++) {
> + struct uart_port *port;
> +
> + if (!amba_ports[i])
> + continue;
> +
> + port = &amba_ports[i]->port;
> +
> + if (port->mapbase != addr)
> + continue;
> +
> + co->index = i;
> + port->cons = co;
> + return pl011_console_setup(co, options);
> + }
> +
> + return -ENODEV;
> +}
> +
> static struct uart_driver amba_reg;
> static struct console amba_console = {
> .name = "ttyAMA",
> .write = pl011_console_write,
> .device = uart_console_device,
> .setup = pl011_console_setup,
> + .match = pl011_console_match,
> .flags = CON_PRINTBUFFER,
> .index = -1,
> .data = &amba_reg,
>
[toc] | [prev] | [next] | [standalone]
| From | Russell King - ARM Linux <linux@armlinux.org.uk> |
|---|---|
| Date | 2016-08-15 14:50 +0200 |
| Subject | Re: [PATCH v9 4/4] serial: pl011: add console matching function |
| Message-ID | <s6pv3-5Eh-5@gated-at.bofh.it> |
| In reply to | #1460623 |
On Thu, Aug 11, 2016 at 06:31:41PM +0300, Aleksey Makarov wrote:
> +/**
> + * pl011_console_match - non-standard console matching
> + * @co: registering console
> + * @name: name from console command line
> + * @idx: index from console command line
> + * @options: ptr to option string from console command line
> + *
> + * Only attempts to match console command lines of the form:
> + * console=pl011,mmio|mmio32,<addr>[,<options>]
> + * console=pl011,0x<addr>[,<options>]
> + * This form is used to register an initial earlycon boot console and
> + * replace it with the amba_console at pl011 driver init.
> + *
> + * Performs console setup for a match (as required by interface)
> + * If no <options> are specified, then assume the h/w is already setup.
> + *
> + * Returns 0 if console matches; otherwise non-zero to use default matching
> + */
> +static int __init pl011_console_match(struct console *co, char *name, int idx,
> + char *options)
> +{
> + char match[] = "pl011"; /* pl011-specific earlycon name */
This is inefficient - the compiler will probably store "pl011" in the
rodata section, then allocate an array on the stack, and them memcpy()
it onto the stack. This is really a false optimisation.
> + unsigned char iotype;
> + unsigned long addr;
> + int i;
> +
> + if (strncmp(name, match, 5) != 0)
Just do:
if (strncmp(name, "pl011", 5) != 0)
here, and let the compiler work it out - it'll probably place "pl011"
in the rodata section, and use a pointer to it rather than messing around
with the stack.
What if "console=pl011x,..." is passed? Should this be matched too?
Maybe this should compare with "pl011," to ensure that the name is
correctly terminated?
--
RMK's Patch system: http://www.armlinux.org.uk/developer/patches/
FTTC broadband for 0.8mile line: currently at 9.6Mbps down 400kbps up
according to speedtest.net.
[toc] | [prev] | [next] | [standalone]
| From | Aleksey Makarov <aleksey.makarov@linaro.org> |
|---|---|
| Date | 2016-08-15 15:20 +0200 |
| Subject | Re: [PATCH v9 4/4] serial: pl011: add console matching function |
| Message-ID | <s6pY6-65c-19@gated-at.bofh.it> |
| In reply to | #1462757 |
On 08/15/2016 03:39 PM, Russell King - ARM Linux wrote:
> On Thu, Aug 11, 2016 at 06:31:41PM +0300, Aleksey Makarov wrote:
>> +/**
>> + * pl011_console_match - non-standard console matching
>> + * @co: registering console
>> + * @name: name from console command line
>> + * @idx: index from console command line
>> + * @options: ptr to option string from console command line
>> + *
>> + * Only attempts to match console command lines of the form:
>> + * console=pl011,mmio|mmio32,<addr>[,<options>]
>> + * console=pl011,0x<addr>[,<options>]
>> + * This form is used to register an initial earlycon boot console and
>> + * replace it with the amba_console at pl011 driver init.
>> + *
>> + * Performs console setup for a match (as required by interface)
>> + * If no <options> are specified, then assume the h/w is already setup.
>> + *
>> + * Returns 0 if console matches; otherwise non-zero to use default matching
>> + */
>> +static int __init pl011_console_match(struct console *co, char *name, int idx,
>> + char *options)
>> +{
>> + char match[] = "pl011"; /* pl011-specific earlycon name */
>
> This is inefficient - the compiler will probably store "pl011" in the
> rodata section, then allocate an array on the stack, and them memcpy()
> it onto the stack. This is really a false optimisation.
>
>> + unsigned char iotype;
>> + unsigned long addr;
>> + int i;
>> +
>> + if (strncmp(name, match, 5) != 0)
>
> Just do:
>
> if (strncmp(name, "pl011", 5) != 0)
>
> here, and let the compiler work it out - it'll probably place "pl011"
> in the rodata section, and use a pointer to it rather than messing around
> with the stack.
Thank you, I will change it.
> What if "console=pl011x,..." is passed? Should this be matched too?
> Maybe this should compare with "pl011," to ensure that the name is
> correctly terminated?
You are right, if the argument 'name' is longer than just "pl011" it
will wrongly match. But note that it's always just name of the console
without ',' and parameters that is passed in the 'name' argument. So I
think we should just use strcmp() here.
BTW, the function univ8250_console_match() from
drivers/tty/serial/8250/8250_core.c probably has the same issue.
Thank you
Aleksey Makarov
[toc] | [prev] | [next] | [standalone]
| From | Aleksey Makarov <aleksey.makarov@linaro.org> |
|---|---|
| Date | 2016-08-15 15:40 +0200 |
| Subject | [PATCH v9 4/4] serial: pl011: add console matching function |
| Message-ID | <s6qhr-6cc-7@gated-at.bofh.it> |
| In reply to | #1462757 |
This patch adds function pl011_console_match() that implements
method match of struct console. It allows to match consoles against
data specified in a string, for example taken from command line or
compiled by ACPI SPCR table handler.
Signed-off-by: Aleksey Makarov <aleksey.makarov@linaro.org>
Reviewed-by: Peter Hurley <peter@hurleysoftware.com>
---
drivers/tty/serial/amba-pl011.c | 55 +++++++++++++++++++++++++++++++++++++++++
1 file changed, 55 insertions(+)
diff --git a/drivers/tty/serial/amba-pl011.c b/drivers/tty/serial/amba-pl011.c
index 8a9e213..2f9af8a 100644
--- a/drivers/tty/serial/amba-pl011.c
+++ b/drivers/tty/serial/amba-pl011.c
@@ -2288,12 +2288,67 @@ static int __init pl011_console_setup(struct console *co, char *options)
return uart_set_options(&uap->port, co, baud, parity, bits, flow);
}
+/**
+ * pl011_console_match - non-standard console matching
+ * @co: registering console
+ * @name: name from console command line
+ * @idx: index from console command line
+ * @options: ptr to option string from console command line
+ *
+ * Only attempts to match console command lines of the form:
+ * console=pl011,mmio|mmio32,<addr>[,<options>]
+ * console=pl011,0x<addr>[,<options>]
+ * This form is used to register an initial earlycon boot console and
+ * replace it with the amba_console at pl011 driver init.
+ *
+ * Performs console setup for a match (as required by interface)
+ * If no <options> are specified, then assume the h/w is already setup.
+ *
+ * Returns 0 if console matches; otherwise non-zero to use default matching
+ */
+static int __init pl011_console_match(struct console *co, char *name, int idx,
+ char *options)
+{
+ unsigned char iotype;
+ unsigned long addr;
+ int i;
+
+ if (strcmp(name, "pl011") != 0)
+ return -ENODEV;
+
+ if (uart_parse_earlycon(options, &iotype, &addr, &options))
+ return -ENODEV;
+
+ if (iotype != UPIO_MEM && iotype != UPIO_MEM32)
+ return -ENODEV;
+
+ /* try to match the port specified on the command line */
+ for (i = 0; i < ARRAY_SIZE(amba_ports); i++) {
+ struct uart_port *port;
+
+ if (!amba_ports[i])
+ continue;
+
+ port = &amba_ports[i]->port;
+
+ if (port->mapbase != addr)
+ continue;
+
+ co->index = i;
+ port->cons = co;
+ return pl011_console_setup(co, options);
+ }
+
+ return -ENODEV;
+}
+
static struct uart_driver amba_reg;
static struct console amba_console = {
.name = "ttyAMA",
.write = pl011_console_write,
.device = uart_console_device,
.setup = pl011_console_setup,
+ .match = pl011_console_match,
.flags = CON_PRINTBUFFER,
.index = -1,
.data = &amba_reg,
--
2.9.2
[toc] | [prev] | [next] | [standalone]
| From | Russell King - ARM Linux <linux@armlinux.org.uk> |
|---|---|
| Date | 2016-08-15 15:50 +0200 |
| Subject | Re: [PATCH v9 4/4] serial: pl011: add console matching function |
| Message-ID | <s6qr7-6fG-9@gated-at.bofh.it> |
| In reply to | #1462782 |
On Mon, Aug 15, 2016 at 04:35:03PM +0300, Aleksey Makarov wrote:
> This patch adds function pl011_console_match() that implements
> method match of struct console. It allows to match consoles against
> data specified in a string, for example taken from command line or
> compiled by ACPI SPCR table handler.
>
> Signed-off-by: Aleksey Makarov <aleksey.makarov@linaro.org>
> Reviewed-by: Peter Hurley <peter@hurleysoftware.com>
Acked-by: Russell King <rmk+kernel@armlinux.org.uk>
Thanks.
> ---
> drivers/tty/serial/amba-pl011.c | 55 +++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 55 insertions(+)
>
> diff --git a/drivers/tty/serial/amba-pl011.c b/drivers/tty/serial/amba-pl011.c
> index 8a9e213..2f9af8a 100644
> --- a/drivers/tty/serial/amba-pl011.c
> +++ b/drivers/tty/serial/amba-pl011.c
> @@ -2288,12 +2288,67 @@ static int __init pl011_console_setup(struct console *co, char *options)
> return uart_set_options(&uap->port, co, baud, parity, bits, flow);
> }
>
> +/**
> + * pl011_console_match - non-standard console matching
> + * @co: registering console
> + * @name: name from console command line
> + * @idx: index from console command line
> + * @options: ptr to option string from console command line
> + *
> + * Only attempts to match console command lines of the form:
> + * console=pl011,mmio|mmio32,<addr>[,<options>]
> + * console=pl011,0x<addr>[,<options>]
> + * This form is used to register an initial earlycon boot console and
> + * replace it with the amba_console at pl011 driver init.
> + *
> + * Performs console setup for a match (as required by interface)
> + * If no <options> are specified, then assume the h/w is already setup.
> + *
> + * Returns 0 if console matches; otherwise non-zero to use default matching
> + */
> +static int __init pl011_console_match(struct console *co, char *name, int idx,
> + char *options)
> +{
> + unsigned char iotype;
> + unsigned long addr;
> + int i;
> +
> + if (strcmp(name, "pl011") != 0)
> + return -ENODEV;
> +
> + if (uart_parse_earlycon(options, &iotype, &addr, &options))
> + return -ENODEV;
> +
> + if (iotype != UPIO_MEM && iotype != UPIO_MEM32)
> + return -ENODEV;
> +
> + /* try to match the port specified on the command line */
> + for (i = 0; i < ARRAY_SIZE(amba_ports); i++) {
> + struct uart_port *port;
> +
> + if (!amba_ports[i])
> + continue;
> +
> + port = &amba_ports[i]->port;
> +
> + if (port->mapbase != addr)
> + continue;
> +
> + co->index = i;
> + port->cons = co;
> + return pl011_console_setup(co, options);
> + }
> +
> + return -ENODEV;
> +}
> +
> static struct uart_driver amba_reg;
> static struct console amba_console = {
> .name = "ttyAMA",
> .write = pl011_console_write,
> .device = uart_console_device,
> .setup = pl011_console_setup,
> + .match = pl011_console_match,
> .flags = CON_PRINTBUFFER,
> .index = -1,
> .data = &amba_reg,
> --
> 2.9.2
>
--
RMK's Patch system: http://www.armlinux.org.uk/developer/patches/
FTTC broadband for 0.8mile line: currently at 9.6Mbps down 400kbps up
according to speedtest.net.
[toc] | [prev] | [next] | [standalone]
| From | Aleksey Makarov <aleksey.makarov@linaro.org> |
|---|---|
| Date | 2016-08-15 16:00 +0200 |
| Message-ID | <s6qAN-6iP-5@gated-at.bofh.it> |
| In reply to | #1460619 |
On 08/11/2016 06:31 PM, 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. Hi Rafael, The 4/4 patch just got an ACK from Russell. Can you consider to merge this patchset please? Thank you Aleksey Makarov > > Move "earlycon" early_param handling to earlycon.c to parse this option once > > Parse SPCR table, setup earlycon and register specified console. > > Enable parsing this table on ARM64. Earlycon should be set up as early as > possible. ACPI boot tables are mapped in > arch/arm64/kernel/acpi.c:acpi_boot_table_init() called from setup_arch() and > that's where we parse spcr. So it has to be opted-in per-arch. When > ACPI_SPCR_TABLE is defined initialization of DT earlycon is deferred until the > DT/ACPI decision is done. > > Implement console_match() for pl011. > > Based on the work by Leif Lindholm [3] > Thanks to Peter Hurley for explaining how this should work. > > Should be applied to v4.8-rc1 > Tested on QEMU and ThunderX. > SPCR support is included in QEMU's ARM64 mach-virt since 2.4 release. > > v9: > - rebase to v4.8-rc1 > - fix compilation for !CONFIG_SERIAL_EARLYCON case > - add Acked-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> for ACPI part > - move constant check out of loop (Yury Norov) > - add '\n' to info message > > v8: > - rebase to next-20160520 > - remove the patch "ACPICA: Headers: Add new constants for the DBG2 ACPI table" > as it have got to linux-next > - add Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>, Reviewed-by: > Peter Hurley <peter@hurleysoftware.com> (but see below) > - fix the patch "serial: pl011: add console matching function". The patch by > Christopher Covington [4] specifies that SBSA uart does 32-bit access to > registers and this breaks the match function. In this series the function > was changed to match when SPCR specifies both mmio32 and mmio access. > I removed Acked-by: Greg from this patch because of these changes. > > v7: > https://lkml.kernel.org/g/1459431629-27934-1-git-send-email-aleksey.makarov@linaro.org > - add Acked-by: Rob Herring for "of/serial: move earlycon early_param handling > to serial" > - call DT earlycon initialization from the arch ACPI code, not from parse_spcr() > (Rafael J. Wysocki) > - fix a few minor issues (Rafael J. Wysocki) > > v6: > https://lkml.kernel.org/g/1458823925-19560-1-git-send-email-aleksey.makarov@linaro.org > - add documentation for parse_spcr() functioin (Yury Norov) > - don't initialize err variable (Yury Norov) > - add __initdata for the earlycon_init_is_deferred flag variable > - rename the function exported in "of/serial: move earlycon early_param handling > to serial" to avoid clash with the function from arch/microblaze/kernel/prom.c > - defer initialization of DT earlycon until DT/ACPI decision is made > (Rob Herring, Peter Hurley) > - use snprintf instead of sprintf (Andy Shevchenko) > - drop patch that adds EARLYCON_DECLARE for pl011 as EARLYCON_DECLARE is > equivalent to OF_EARLYCON_DECLARE for 4.6+ (Peter Hurley). This means that > SPCR earlycon will not work on the kernels before 4.6 > > v5: > https://lkml.kernel.org/g/1458643595-14719-1-git-send-email-aleksey.makarov@linaro.org > - drop patch "serial: pl011: use ACPI SPCR to setup 32-bit access" because > it is ugly. Also because Christopher Covington came with a better solution [4] > - remove error message when the table is not provided by ACPI (Andy Shevchenko) > - rewrite spcr.c following the suggestions by Peter Hurley > - add console_match() for pl011 in a separate patch > - add EARLYCON_DECLARE for pl011 in a separate patch > - add patch "of/serial: move earlycon early_param handling to serial" from > the GDB2 series > > v4: > https://lkml.kernel.org/g/1456747355-15692-1-git-send-email-aleksey.makarov@linaro.org > - 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 > [4] https://lkml.kernel.org/g/1457415800-8799-1-git-send-email-cov@codeaurora.org > > Aleksey Makarov (3): > ACPI: parse SPCR and enable matching console > ARM64: ACPI: enable ACPI_SPCR_TABLE > serial: pl011: add console matching function > > Leif Lindholm (1): > of/serial: move earlycon early_param handling to serial > > arch/arm64/Kconfig | 1 + > arch/arm64/kernel/acpi.c | 11 +++- > drivers/acpi/Kconfig | 3 ++ > drivers/acpi/Makefile | 1 + > drivers/acpi/spcr.c | 111 ++++++++++++++++++++++++++++++++++++++++ > drivers/of/fdt.c | 11 +--- > drivers/tty/serial/amba-pl011.c | 56 ++++++++++++++++++++ > drivers/tty/serial/earlycon.c | 19 ++++++- > include/linux/acpi.h | 6 +++ > include/linux/of_fdt.h | 2 + > include/linux/serial_core.h | 9 +++- > 11 files changed, 216 insertions(+), 14 deletions(-) > create mode 100644 drivers/acpi/spcr.c >
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web