On 12/07/2017 01:43 PM, Timur Tabi wrote: > On Thu, Dec 7, 2017 at 11:29 AM, Prarit Bhargava <prarit@xxxxxxxxxx> wrote: >> 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. > >> +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. > >> + >> +/* >> + * 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. >> +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. -- To unsubscribe from this list: send the line "unsubscribe linux-acpi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html