From patchwork Wed Jan 11 15:06:31 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hanjun Guo X-Patchwork-Id: 90908 Delivered-To: patch@linaro.org Received: by 10.140.20.99 with SMTP id 90csp1166308qgi; Wed, 11 Jan 2017 07:08:44 -0800 (PST) X-Received: by 10.84.217.216 with SMTP id d24mr13986564plj.101.1484147323946; Wed, 11 Jan 2017 07:08:43 -0800 (PST) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id a184si6049863pgc.229.2017.01.11.07.08.43; Wed, 11 Jan 2017 07:08:43 -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=@linaro.org; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1764573AbdAKPIb (ORCPT + 25 others); Wed, 11 Jan 2017 10:08:31 -0500 Received: from mail-pg0-f52.google.com ([74.125.83.52]:36622 "EHLO mail-pg0-f52.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1764536AbdAKPI1 (ORCPT ); Wed, 11 Jan 2017 10:08:27 -0500 Received: by mail-pg0-f52.google.com with SMTP id f188so282341436pgc.3 for ; Wed, 11 Jan 2017 07:08:26 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=Qh05M9Q/2XeHsW48yRcvLNuqDeZ2DyBm4TjcQpQwnT4=; b=bqLoO9A54dqDGHTArPCGqWNpqX+hp++x4tdSRwNNijG+wDx76V54RFiskrzrf/pim2 L3KjPzW6AzC29E4RuNkDJVy5gDHm4lO6R9G7Ra9Cxh3FWQUkOWZybSqYOlfK3lXYRKhw BOYt2iJT9VuCmdD8ghhFLNP+N/0lS0Td1vG/Y= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=Qh05M9Q/2XeHsW48yRcvLNuqDeZ2DyBm4TjcQpQwnT4=; b=AAgH04bWi5OVENuqIlvK6CU9rZkZkREYrt5oXW9L99sd49y2ObyEva8lOu0MUydG+z aGZxYSr07TLygiRtVPcqvGtRFgvlTI7Q2CBlypU5jgd0zwn6L0+EpRIb3N2tX2II5B4a e2NFRR/vMrBWoA7akkLB5Z0yxKFDkR4MMYucWMXGyYkpIaWyzuaA0HMeBSMMNSYMxUw2 Ps6Z+t4BBin5d8OKGnX8KJIBpuuHlrPFMta+vHYNlkknEOFM7wF8q5qoskIjtReX7cX+ OlKiGf5tI3/HGLbGQC5LMoPVzvPPd+K7o2kClM8VMt+LT7Bwg1ZNHxPzfefm8EswPkSR qwgA== X-Gm-Message-State: AIkVDXKMJew85ZuBjD9sy+QyOfoq0JvoRzjZGU+DBZTMvlM41SOtXXcF/wOLLwQkF+tZmf+7 X-Received: by 10.98.94.129 with SMTP id s123mr10729898pfb.37.1484147306449; Wed, 11 Jan 2017 07:08:26 -0800 (PST) Received: from localhost ([104.237.91.103]) by smtp.googlemail.com with ESMTPSA id e127sm14597768pfh.89.2017.01.11.07.08.24 (version=TLS1_2 cipher=AES128-SHA bits=128/128); Wed, 11 Jan 2017 07:08:26 -0800 (PST) From: Hanjun Guo To: Marc Zyngier , "Rafael J. Wysocki" , Lorenzo Pieralisi Cc: linux-acpi@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linuxarm@huawei.com, Thomas Gleixner , Greg KH , Tomasz Nowicki , Ma Jun , Kefeng Wang , Agustin Vega-Frias , Sinan Kaya , huxinwei@huawei.com, yimin@huawei.com, Jon Masters , Matthias Brugger , Xinwei Kong , Hanjun Guo Subject: [PATCH v7 07/15] irqchip: gicv3-its: platform-msi: scan MADT to create platform msi domain Date: Wed, 11 Jan 2017 23:06:31 +0800 Message-Id: <1484147199-4267-8-git-send-email-hanjun.guo@linaro.org> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1484147199-4267-1-git-send-email-hanjun.guo@linaro.org> References: <1484147199-4267-1-git-send-email-hanjun.guo@linaro.org> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org With the introduction of its_pmsi_init_one(), we can add some code on top for ACPI support of platform MSI. We are scanning the MADT table to get the ITS entry(ies), then use the information to create the platform msi domain for devices connect to it, just like the PCI MSI for ITS did. Signed-off-by: Hanjun Guo Cc: Marc Zyngier Cc: Sinan Kaya Cc: Tomasz Nowicki Cc: Thomas Gleixner --- drivers/irqchip/irq-gic-v3-its-platform-msi.c | 36 +++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) -- 1.9.1 diff --git a/drivers/irqchip/irq-gic-v3-its-platform-msi.c b/drivers/irqchip/irq-gic-v3-its-platform-msi.c index 3d9efd1..ebe933e 100644 --- a/drivers/irqchip/irq-gic-v3-its-platform-msi.c +++ b/drivers/irqchip/irq-gic-v3-its-platform-msi.c @@ -103,6 +103,41 @@ static int __init its_pmsi_init_one(struct fwnode_handle *fwnode, return 0; } +#ifdef CONFIG_ACPI +static int __init +its_pmsi_parse_madt(struct acpi_subtable_header *header, + const unsigned long end) +{ + struct acpi_madt_generic_translator *its_entry; + struct fwnode_handle *domain_handle; + const char *node_name; + int err = -ENXIO; + + its_entry = (struct acpi_madt_generic_translator *)header; + node_name = kasprintf(GFP_KERNEL, "ITS@0x%lx", + (long)its_entry->base_address); + domain_handle = iort_find_domain_token(its_entry->translation_id); + if (!domain_handle) { + pr_err("%s: Unable to locate ITS domain handle\n", node_name); + goto out; + } + + err = its_pmsi_init_one(domain_handle, node_name); + +out: + kfree(node_name); + return err; +} + +static void __init its_pmsi_acpi_init(void) +{ + acpi_table_parse_madt(ACPI_MADT_TYPE_GENERIC_TRANSLATOR, + its_pmsi_parse_madt, 0); +} +#else +static inline void its_pmsi_acpi_init(void) { } +#endif + static void __init its_pmsi_of_init(void) { struct device_node *np; @@ -119,6 +154,7 @@ static void __init its_pmsi_of_init(void) static int __init its_pmsi_init(void) { its_pmsi_of_init(); + its_pmsi_acpi_init(); return 0; } early_initcall(its_pmsi_init);