mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-30 19:51:31 -04:00
ACPI: SPCR: Make SPCR available to x86
SPCR is currently only enabled or ARM64 and x86 can use SPCR to setup an early console. General fixes include updating Documentation & Kconfig (for x86), updating comments, and changing parse_spcr() to acpi_parse_spcr(), and earlycon_init_is_deferred to earlycon_acpi_spcr_enable to be more descriptive. On x86, many systems have a valid SPCR table but the table version is not 2 so the table version check must be a warning. On ARM64 when the kernel parameter earlycon is used both the early console and console are enabled. On x86, only the earlycon should be enabled by by default. Modify acpi_parse_spcr() to allow options for initializing the early console and console separately. Signed-off-by: Prarit Bhargava <[email protected]> Acked-by: Ingo Molnar <[email protected]> Reviewed-by: Mark Salter <[email protected]> Tested-by: Mark Salter <[email protected]> Signed-off-by: Rafael J. Wysocki <[email protected]>
This commit is contained in:
parent
890674343b
commit
0231d00082
8 changed files with 44 additions and 34 deletions
|
|
@ -79,7 +79,12 @@ config ACPI_DEBUGGER_USER
|
|||
endif
|
||||
|
||||
config ACPI_SPCR_TABLE
|
||||
bool
|
||||
bool "ACPI Serial Port Console Redirection Support"
|
||||
default y if X86
|
||||
help
|
||||
Enable support for Serial Port Console Redirection (SPCR) Table.
|
||||
This table provides information about the configuration of the
|
||||
earlycon console.
|
||||
|
||||
config ACPI_LPIT
|
||||
bool
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@
|
|||
* occasionally getting stuck as 1. To avoid the potential for a hang, check
|
||||
* TXFE == 0 instead of BUSY == 1. This may not be suitable for all UART
|
||||
* implementations, so only do so if an affected platform is detected in
|
||||
* parse_spcr().
|
||||
* acpi_parse_spcr().
|
||||
*/
|
||||
bool qdf2400_e44_present;
|
||||
EXPORT_SYMBOL(qdf2400_e44_present);
|
||||
|
|
@ -74,19 +74,21 @@ static bool xgene_8250_erratum_present(struct acpi_table_spcr *tb)
|
|||
}
|
||||
|
||||
/**
|
||||
* parse_spcr() - parse ACPI SPCR table and add preferred console
|
||||
* acpi_parse_spcr() - parse ACPI SPCR table and add preferred console
|
||||
*
|
||||
* @earlycon: set up earlycon for the console specified by the table
|
||||
* @enable_earlycon: set up earlycon for the console specified by the table
|
||||
* @enable_console: setup 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.
|
||||
* console is registered and if @enable_earlycon is true, earlycon is set up.
|
||||
* If @enable_console is true the system console is also configured.
|
||||
*
|
||||
* When CONFIG_ACPI_SPCR_TABLE is defined, this function should be called
|
||||
* from arch initialization code as soon as the DT/ACPI decision is made.
|
||||
*
|
||||
*/
|
||||
int __init parse_spcr(bool earlycon)
|
||||
int __init acpi_parse_spcr(bool enable_earlycon, bool enable_console)
|
||||
{
|
||||
static char opts[64];
|
||||
struct acpi_table_spcr *table;
|
||||
|
|
@ -105,11 +107,8 @@ int __init parse_spcr(bool earlycon)
|
|||
if (ACPI_FAILURE(status))
|
||||
return -ENOENT;
|
||||
|
||||
if (table->header.revision < 2) {
|
||||
err = -ENOENT;
|
||||
pr_err("wrong table version\n");
|
||||
goto done;
|
||||
}
|
||||
if (table->header.revision < 2)
|
||||
pr_info("SPCR table version %d\n", table->header.revision);
|
||||
|
||||
if (table->serial_port.space_id == ACPI_ADR_SPACE_SYSTEM_MEMORY) {
|
||||
switch (ACPI_ACCESS_BIT_WIDTH((
|
||||
|
|
@ -185,7 +184,7 @@ int __init parse_spcr(bool earlycon)
|
|||
*/
|
||||
if (qdf2400_erratum_44_present(&table->header)) {
|
||||
qdf2400_e44_present = true;
|
||||
if (earlycon)
|
||||
if (enable_earlycon)
|
||||
uart = "qdf2400_e44";
|
||||
}
|
||||
|
||||
|
|
@ -205,11 +204,13 @@ int __init parse_spcr(bool earlycon)
|
|||
|
||||
pr_info("console: %s\n", opts);
|
||||
|
||||
if (earlycon)
|
||||
if (enable_earlycon)
|
||||
setup_earlycon(opts);
|
||||
|
||||
err = add_preferred_console(uart, 0, opts + strlen(uart) + 1);
|
||||
|
||||
if (enable_console)
|
||||
err = add_preferred_console(uart, 0, opts + strlen(uart) + 1);
|
||||
else
|
||||
err = 0;
|
||||
done:
|
||||
acpi_put_table((struct acpi_table_header *)table);
|
||||
return err;
|
||||
|
|
|
|||
Loading…
Reference in a new issue