From patchwork Sat Jan 23 03:19:28 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shannon Zhao X-Patchwork-Id: 60229 Delivered-To: patch@linaro.org Received: by 10.112.130.2 with SMTP id oa2csp247939lbb; Fri, 22 Jan 2016 19:26:26 -0800 (PST) X-Received: by 10.98.8.194 with SMTP id 63mr9297904pfi.51.1453519586051; Fri, 22 Jan 2016 19:26:26 -0800 (PST) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id q74si13924957pfq.207.2016.01.22.19.26.25; Fri, 22 Jan 2016 19:26:26 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-acpi-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-acpi-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-acpi-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755681AbcAWD0Y (ORCPT + 6 others); Fri, 22 Jan 2016 22:26:24 -0500 Received: from szxga02-in.huawei.com ([119.145.14.65]:3407 "EHLO szxga02-in.huawei.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755481AbcAWD0X (ORCPT ); Fri, 22 Jan 2016 22:26:23 -0500 Received: from 172.24.1.49 (EHLO szxeml425-hub.china.huawei.com) ([172.24.1.49]) by szxrg02-dlp.huawei.com (MOS 4.3.7-GA FastPath queued) with ESMTP id DAK64418; Sat, 23 Jan 2016 11:20:37 +0800 (CST) Received: from HGHY1Z002260041.china.huawei.com (10.177.16.142) by szxeml425-hub.china.huawei.com (10.82.67.180) with Microsoft SMTP Server id 14.3.235.1; Sat, 23 Jan 2016 11:20:27 +0800 From: Shannon Zhao To: , , , , CC: , , , , , , , , , , "Rafael J. Wysocki" , Len Brown , "open list:ACPI" Subject: [PATCH v3 01/17] Xen: ACPI: Hide UART used by Xen Date: Sat, 23 Jan 2016 11:19:28 +0800 Message-ID: <1453519184-11908-2-git-send-email-zhaoshenglong@huawei.com> X-Mailer: git-send-email 1.9.0.msysgit.0 In-Reply-To: <1453519184-11908-1-git-send-email-zhaoshenglong@huawei.com> References: <1453519184-11908-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.0A020205.56A2F187.000D, 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: 01d6a4bd1668529dec8bcbeb2fb383c5 Sender: linux-acpi-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-acpi@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 | 36 +++++++++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) -- 2.0.4 -- To unsubscribe from this list: send the line "unsubscribe linux-acpi" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html diff --git a/drivers/acpi/bus.c b/drivers/acpi/bus.c index a212cef..7f85b54 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 @@ -105,6 +106,22 @@ acpi_status acpi_bus_get_status_handle(acpi_handle handle, return status; } +static bool acpi_check_device_is_ignored(acpi_handle handle) +{ + acpi_status status; + u64 addr; + + /* Check if it should ignore the UART device */ + if (spcr_uart_addr != 0) { + status = acpi_evaluate_integer(handle, METHOD_NAME__ADR, NULL, + &addr); + if (ACPI_SUCCESS(status) && addr == spcr_uart_addr) + return true; + } + + return false; +} + int acpi_bus_get_status(struct acpi_device *device) { acpi_status status; @@ -114,7 +131,8 @@ int acpi_bus_get_status(struct acpi_device *device) if (ACPI_FAILURE(status)) return -ENODEV; - acpi_set_device_status(device, sta); + if (!acpi_check_device_is_ignored(device->handle)) + acpi_set_device_status(device, sta); if (device->status.functional && !device->status.present) { ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Device [%s] status [%08x]: " @@ -1069,6 +1087,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 +1101,20 @@ 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. + */ + status = acpi_get_table(ACPI_SIG_STAO, 0, + (struct acpi_table_header **)&stao_ptr); + if (ACPI_SUCCESS(status) && stao_ptr->ignore_uart) { + struct acpi_table_spcr *spcr_ptr; + + status = acpi_get_table(ACPI_SIG_SPCR, 0, + (struct acpi_table_header **)&spcr_ptr); + if (ACPI_SUCCESS(status)) + spcr_uart_addr = spcr_ptr->serial_port.address; + } + init_acpi_device_notify(); result = acpi_bus_init(); if (result) {