ACPI: parse SPCR and enable matching console
'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> Acked-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> Reviewed-by: Peter Hurley <peter@hurleysoftware.com> Tested-by: Kefeng Wang <wangkefeng.wang@huawei.com> Tested-by: Christopher Covington <cov@codeaurora.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:

committed by
Greg Kroah-Hartman

parent
d503187b6c
commit
ad1696f6f0
@@ -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>
|
||||
@@ -198,6 +199,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)
|
||||
{
|
||||
@@ -207,8 +216,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)
|
||||
|
Reference in New Issue
Block a user