Thread (15 messages) 15 messages, 5 authors, 2017-12-11

[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.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help