Received: by 2002:ac0:b08d:0:0:0:0:0 with SMTP id l13csp4923201imc; Mon, 25 Feb 2019 13:43:41 -0800 (PST) X-Google-Smtp-Source: AHgI3Ib8qdnD66kJcyWDejJFfK5JWrx37hJHR9V1J/NY7wDwRk6+lujXm9hO4pmTHk4QmFdUPwti X-Received: by 2002:a63:a51a:: with SMTP id n26mr18050669pgf.215.1551131021182; Mon, 25 Feb 2019 13:43:41 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1551131021; cv=none; d=google.com; s=arc-20160816; b=K87ZHrR+C94/MM9cAO4JAMd6fa0prGG7eHZYlhwTIu+xb1qpLx8vrVTQaXTu7fyEnj EvtHT8vhGC653uS7wRVbQbbGC1JKoDdHswYGtba+L2S4LbNAia0ZQi6NvtW5cAiCR67b sHePF3MKZ4lLAzblk/C1Z6Q6C0J0BiohHu3echjSfFBIWvtjiX9AWbn5sZpmxqEVnXRh MDFKLwh98vlsRSTcLfYTBcUG4v/dRxCf3zX+UToH8JSLtnE21nffbtvrkM8k8/khoxMd tsxMWOCgNQQJaw7FZDI0+Q5yDD9+4fzjOcWPz7P7g09JOkYqqOjPvfFBn+OB/kUCibfJ NRBQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=wnz/zS+mVxj0OW9ljfxfvSzdIBvrXadIJ372iPuaxL0=; b=0W3aEFXmPNY6Z+8eIO27boSo9LcOr/MNQCQK1Ija07H4s9McawU3oBTK9WFe5kEgp/ FD/AylmyhJ90hmzq67u9vVy7/BalhY0m2mSd8sfNmypQDW3mg1MkTqMuiGNvyZTGUb/k E2xgg8AkIEacWdsvJtbYRblGpolSZmj7j4JkVbqJ+6OBENCeFhOKoQ/2D/Gk5eWXtmVK KVM90JNKaNcHIkyDiZSItcXG+UFwYActL/zz6izv1zDvwnJ0BNyxXYTXt4u0MWgGYnvr qg6QcVPLF+tmH+lwdV4G4OhieH7OKckM2CIVAote3R4lojgoUmkgSdnn8iac9BKO0pEu 65Og== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=bj0pR1pM; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id j13si10683587pgb.37.2019.02.25.13.43.26; Mon, 25 Feb 2019 13:43:41 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=bj0pR1pM; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1732563AbfBYVcx (ORCPT + 99 others); Mon, 25 Feb 2019 16:32:53 -0500 Received: from mail.kernel.org ([198.145.29.99]:38584 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731756AbfBYVcr (ORCPT ); Mon, 25 Feb 2019 16:32:47 -0500 Received: from localhost (5356596B.cm-6-7b.dynamic.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 5F77921841; Mon, 25 Feb 2019 21:32:45 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1551130365; bh=ZMBQxEgAyus4Sy/A7Rw2fGDfG+a+5wmJZia15ptR5xA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=bj0pR1pMEwJuHYGFaWdGiWUQoITTzE9f/qluf2hqb1ImmfDYpI3z232ER8rEnPqD6 j8RWk6G1vPDAqF9OkHJXoJ/7zoWyHRlCbfioecs+wmwvSfe5L2cjC4Zv1AJJo7TWEa 3m9LqtwGAsLIssirJQ1NQf4scMGkdrsbLBKyQCQk= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, step-ali , Charles Stanhope , Paulo Nascimento , David Purton , Adam Harvey , Zhang Rui , Jean-Marc Lenoir , "Rafael J. Wysocki" , Sasha Levin Subject: [PATCH 4.20 097/183] ACPI: EC: Look for ECDT EC after calling acpi_load_tables() Date: Mon, 25 Feb 2019 22:11:10 +0100 Message-Id: <20190225195111.035072053@linuxfoundation.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190225195054.748060397@linuxfoundation.org> References: <20190225195054.748060397@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review X-Patchwork-Hint: ignore MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 4.20-stable review patch. If anyone has any objections, please let me know. ------------------ [ Upstream commit b1c0330823fe842dbb34641f1410f0afa51c29d3 ] Some systems have had functional issues since commit 5a8361f7ecce (ACPICA: Integrate package handling with module-level code) that, among other things, changed the initial values of the acpi_gbl_group_module_level_code and acpi_gbl_parse_table_as_term_list global flags in ACPICA which implicitly caused acpi_ec_ecdt_probe() to be called before acpi_load_tables() on the vast majority of platforms. Namely, before commit 5a8361f7ecce, acpi_load_tables() was called from acpi_early_init() if acpi_gbl_parse_table_as_term_list was FALSE and acpi_gbl_group_module_level_code was TRUE, which almost always was the case as FALSE and TRUE were their initial values, respectively. The acpi_gbl_parse_table_as_term_list value would be changed to TRUE for a couple of platforms in acpi_quirks_dmi_table[], but it remained FALSE in the vast majority of cases. After commit 5a8361f7ecce, the initial values of the two flags have been reversed, so in effect acpi_load_tables() has not been called from acpi_early_init() any more. That, in turn, affects acpi_ec_ecdt_probe() which is invoked before acpi_load_tables() now and it is not possible to evaluate the _REG method for the EC address space handler installed by it. That effectively causes the EC address space to be inaccessible to AML on platforms with an ECDT matching the EC device definition in the DSDT and functional problems ensue in there. Because the default behavior before commit 5a8361f7ecce was to call acpi_ec_ecdt_probe() after acpi_load_tables(), it should be safe to do that again. Moreover, the EC address space handler installed by acpi_ec_ecdt_probe() is only needed for AML to be able to access the EC address space and the only AML that can run during acpi_load_tables() is module-level code which only is allowed to access address spaces with default handlers (memory, I/O and PCI config space). For this reason, move the acpi_ec_ecdt_probe() invocation back to acpi_bus_init(), from where it was taken away by commit d737f333b211 (ACPI: probe ECDT before loading AML tables regardless of module-level code flag), and put it after the invocation of acpi_load_tables() to restore the original code ordering from before commit 5a8361f7ecce. Fixes: 5a8361f7ecce ("ACPICA: Integrate package handling with module-level code") Link: https://bugzilla.kernel.org/show_bug.cgi?id=199981 Reported-by: step-ali Reported-by: Charles Stanhope Tested-by: Charles Stanhope Reported-by: Paulo Nascimento Reported-by: David Purton Reported-by: Adam Harvey Reported-by: Zhang Rui Tested-by: Zhang Rui Tested-by: Jean-Marc Lenoir Signed-off-by: Rafael J. Wysocki Signed-off-by: Sasha Levin --- drivers/acpi/bus.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/drivers/acpi/bus.c b/drivers/acpi/bus.c index bb3d96dea6dba..26d4164d394fb 100644 --- a/drivers/acpi/bus.c +++ b/drivers/acpi/bus.c @@ -1054,18 +1054,6 @@ void __init acpi_early_init(void) goto error0; } - /* - * ACPI 2.0 requires the EC driver to be loaded and work before - * the EC device is found in the namespace (i.e. before - * acpi_load_tables() is called). - * - * This is accomplished by looking for the ECDT table, and getting - * the EC parameters out of that. - * - * Ignore the result. Not having an ECDT is not fatal. - */ - status = acpi_ec_ecdt_probe(); - #ifdef CONFIG_X86 if (!acpi_ioapic) { /* compatible (0) means level (3) */ @@ -1142,6 +1130,18 @@ static int __init acpi_bus_init(void) goto error1; } + /* + * ACPI 2.0 requires the EC driver to be loaded and work before the EC + * device is found in the namespace. + * + * This is accomplished by looking for the ECDT table and getting the EC + * parameters out of that. + * + * Do that before calling acpi_initialize_objects() which may trigger EC + * address space accesses. + */ + acpi_ec_ecdt_probe(); + status = acpi_enable_subsystem(ACPI_NO_ACPI_ENABLE); if (ACPI_FAILURE(status)) { printk(KERN_ERR PREFIX -- 2.19.1