[PATCH 1/2] acpi, spcr: Make SPCR avialable to other architectures
From: Prarit Bhargava <hidden>
Date: 2017-12-07 19:05:25
Also in:
linux-acpi, linux-pm, linux-serial, lkml
On 12/07/2017 01:43 PM, Timur Tabi wrote:
On Thu, Dec 7, 2017 at 11:29 AM, Prarit Bhargava [off-list ref] wrote:quoted
Other architectures can use SPCR to setup an early console or console but the current code is ARM64 specific. Change the name of parse_spcr() to acpi_parse_spcr(). Add a weak function acpi_arch_setup_console() that can be used for arch-specific setup. Move SPCR initialization flag into ACPI code. Update the Documention on the use of the SPCR earlycon. This patch does not change arm64 behaviour.Let's hope so. Our E44 erratum work-around has caused lots of problems in the past, so the code is a bit fragile.quoted
+static bool qdf2400_erratum_44_present(struct acpi_table_header *h) +{ + if (memcmp(h->oem_id, "QCOM ", ACPI_OEM_ID_SIZE)) + return false; + + if (!memcmp(h->oem_table_id, "QDF2432 ", ACPI_OEM_TABLE_ID_SIZE)) + return true; + + if (!memcmp(h->oem_table_id, "QDF2400 ", ACPI_OEM_TABLE_ID_SIZE) && + h->oem_revision == 1) + return true; + + return false; +}Please give us a chance to test this patch before merging. We've had a lot of problems with our E44 work-around, and we need to make sure that qdf2400_erratum_44_present function is called before the pl011 driver is probed.
Timor, do you know of a specific system that has this problem? If so, I could see if we have one @ Red Hat and test on it to verify the WAR.
quoted
+ +/* + * APM X-Gene v1 and v2 UART hardware is an 16550 like device but has its + * register aligned to 32-bit. In addition, the BIOS also encoded the + * access width to be 8 bits. This function detects this errata condition. + */ +static bool xgene_8250_erratum_present(struct acpi_table_spcr *tb) +{ + bool xgene_8250 = false; + + if (tb->interface_type != ACPI_DBG2_16550_COMPATIBLE) + return false; + + if (memcmp(tb->header.oem_id, "APMC0D", ACPI_OEM_ID_SIZE) && + memcmp(tb->header.oem_id, "HPE ", ACPI_OEM_ID_SIZE)) + return false; + + if (!memcmp(tb->header.oem_table_id, "XGENESPC", + ACPI_OEM_TABLE_ID_SIZE) && tb->header.oem_revision == 0) + xgene_8250 = true; + + if (!memcmp(tb->header.oem_table_id, "ProLiant", + ACPI_OEM_TABLE_ID_SIZE) && tb->header.oem_revision == 1) + xgene_8250 = true; + + return xgene_8250; +}I suspect that this function has the same issues as qdf2400_erratum_44_present().
Ditto.
quoted
+config ACPI_SPCR_TABLE + bool "ACPI Serial Port Console Redirection Support" + default y if ARM64 + help + Enable support for Serial Port Console Redirection (SPCR) Table. + This table provides information about the configuration of the + earlycon console. +So ACPI without SPCR has never been tested by us. Making it optional makes me a little nervous. We'll have to evaluate this change.
It is 'y' for ARM64? Maybe I have that wrong but I thought that would always build it for ARM64. P.