From patchwork Fri Jan 15 06:55:14 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shannon Zhao X-Patchwork-Id: 59844 Delivered-To: patch@linaro.org Received: by 10.112.130.2 with SMTP id oa2csp357436lbb; Thu, 14 Jan 2016 22:58:58 -0800 (PST) X-Received: by 10.66.197.131 with SMTP id iu3mr12770175pac.57.1452841128598; Thu, 14 Jan 2016 22:58:48 -0800 (PST) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id ho3si14482851pac.224.2016.01.14.22.58.48; Thu, 14 Jan 2016 22:58:48 -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; 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 S1754374AbcAOG4e (ORCPT + 29 others); Fri, 15 Jan 2016 01:56:34 -0500 Received: from szxga02-in.huawei.com ([119.145.14.65]:49127 "EHLO szxga02-in.huawei.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750897AbcAOG4Z (ORCPT ); Fri, 15 Jan 2016 01:56:25 -0500 Received: from 172.24.1.47 (EHLO SZXEML429-HUB.china.huawei.com) ([172.24.1.47]) by szxrg02-dlp.huawei.com (MOS 4.3.7-GA FastPath queued) with ESMTP id CZX19404; Fri, 15 Jan 2016 14:56:19 +0800 (CST) Received: from HGHY1Z002260041.china.huawei.com (10.177.16.142) by SZXEML429-HUB.china.huawei.com (10.82.67.184) with Microsoft SMTP Server id 14.3.235.1; Fri, 15 Jan 2016 14:56:09 +0800 From: Shannon Zhao To: , , , CC: , , , , , , , , , , "Rafael J. Wysocki" , "Len Brown" , "open list:ACPI" Subject: [PATCH v2 01/16] Xen: ACPI: Hide UART used by Xen Date: Fri, 15 Jan 2016 14:55:14 +0800 Message-ID: <1452840929-19612-2-git-send-email-zhaoshenglong@huawei.com> X-Mailer: git-send-email 1.9.0.msysgit.0 In-Reply-To: <1452840929-19612-1-git-send-email-zhaoshenglong@huawei.com> References: <1452840929-19612-1-git-send-email-zhaoshenglong@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.177.16.142] X-CFilter-Loop: Reflected X-Mirapoint-Virus-RAPID-Raw: score=unknown(0), refid=str=0001.0A020202.56989815.00D5, ss=1, re=0.000, recu=0.000, reip=0.000, cl=1, cld=1, fgs=0, ip=0.0.0.0, so=2013-06-18 04:22:30, dmn=2013-03-21 17:37:32 X-Mirapoint-Loop-Id: 0bb5eb7603582033d18d71c2c0cf32ce Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Shannon Zhao ACPI 6.0 introduces a new table STAO to list the devices which are used by Xen and can't be used by Dom0. On Xen virtual platforms, the physical UART is used by Xen. So here it hides UART from Dom0. Signed-off-by: Shannon Zhao --- CC: "Rafael J. Wysocki" (supporter:ACPI) CC: Len Brown (supporter:ACPI) CC: linux-acpi@vger.kernel.org (open list:ACPI) --- drivers/acpi/bus.c | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) -- 2.0.4 diff --git a/drivers/acpi/bus.c b/drivers/acpi/bus.c index a212cef..d7a559f 100644 --- a/drivers/acpi/bus.c +++ b/drivers/acpi/bus.c @@ -46,6 +46,7 @@ ACPI_MODULE_NAME("bus"); struct acpi_device *acpi_root; struct proc_dir_entry *acpi_root_dir; EXPORT_SYMBOL(acpi_root_dir); +static u64 spcr_uart_addr; #ifdef CONFIG_X86 #ifdef CONFIG_ACPI_CUSTOM_DSDT @@ -93,6 +94,17 @@ acpi_status acpi_bus_get_status_handle(acpi_handle handle, { acpi_status status; + if (spcr_uart_addr != 0xffffffffffffffff) { + u64 addr; + + status = acpi_evaluate_integer(handle, METHOD_NAME__ADR, NULL, + &addr); + if (ACPI_SUCCESS(status) && (addr == spcr_uart_addr)) { + *sta = 0; + return AE_OK; + } + } + status = acpi_evaluate_integer(handle, "_STA", NULL, sta); if (ACPI_SUCCESS(status)) return AE_OK; @@ -1069,6 +1081,8 @@ EXPORT_SYMBOL_GPL(acpi_kobj); static int __init acpi_init(void) { int result; + acpi_status status; + struct acpi_table_stao *stao_ptr; if (acpi_disabled) { printk(KERN_INFO PREFIX "Interpreter disabled.\n"); @@ -1081,6 +1095,22 @@ static int __init acpi_init(void) acpi_kobj = NULL; } + /* If there is STAO table, check whether it needs to ignore the UART + * device in SPCR table. + */ + spcr_uart_addr = 0xffffffffffffffff; + status = acpi_get_table(ACPI_SIG_STAO, 0, + (struct acpi_table_header **)&stao_ptr); + if (ACPI_SUCCESS(status)) { + if (stao_ptr->ignore_uart) { + struct acpi_table_spcr *spcr_ptr; + + acpi_get_table(ACPI_SIG_SPCR, 0, + (struct acpi_table_header **)&spcr_ptr); + spcr_uart_addr = spcr_ptr->serial_port.address; + } + } + init_acpi_device_notify(); result = acpi_bus_init(); if (result) {