From patchwork Wed Dec 16 15:16:27 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tomasz Nowicki X-Patchwork-Id: 7863291 Return-Path: X-Original-To: patchwork-linux-arm@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork2.web.kernel.org (Postfix) with ESMTP id 0940CBEEE5 for ; Wed, 16 Dec 2015 15:39:41 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 11E5C202D1 for ; Wed, 16 Dec 2015 15:39:40 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.9]) (using TLSv1.2 with cipher AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 2A251202F8 for ; Wed, 16 Dec 2015 15:39:38 +0000 (UTC) Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.80.1 #2 (Red Hat Linux)) id 1a9EA0-00032g-D0; Wed, 16 Dec 2015 15:38:36 +0000 Received: from mail-wm0-x22e.google.com ([2a00:1450:400c:c09::22e]) by bombadil.infradead.org with esmtps (Exim 4.80.1 #2 (Red Hat Linux)) id 1a9DqX-0000mA-Mn for linux-arm-kernel@lists.infradead.org; Wed, 16 Dec 2015 15:18:32 +0000 Received: by mail-wm0-x22e.google.com with SMTP id l126so42581734wml.1 for ; Wed, 16 Dec 2015 07:18:11 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=semihalf-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=hFmgiLOR2iir/bn5Yh+XvlgG9gvfl4dJ2JxQj2qsfN0=; b=NZ78mNMyHK3n2S5qUqbW9Alr1syr2Lq8acqDUkpCaNMI63ZFZNj3is1UoVs6CfOG4H nHl9d2XC2oVs3F1qdabvCncQAWiJ5o8RX1YArnqg1qcDXouEUfC+MW3k+yNn5uM+6Lk1 58jvJEvbE3k5JICsBW7fiKOKoxM3c4ZqL+qaSE4QCG2aR7msNIynl7j4sTECbfMOYQSV vegJGGg5oP+ax1Dpq9mG7i9E9zmqf0T58ixaZCAOgPHTKEiGnylzAoIci72bpnME2d27 fwJvv12hiJisXXvQhqWKz5LPbB9LneI0UXZsE4adlpOuz4vUeCPkdgxOvQP9vn6dLxOq BUBA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=hFmgiLOR2iir/bn5Yh+XvlgG9gvfl4dJ2JxQj2qsfN0=; b=GfzZ2faYsU2JvfKbBUktv9SVUcOas3vvw9NAg7q4MmacXTPfibTvjFxRL/P/l2nN1d lnpTJoMtfzUqbJwdx7N3knoB2NZG31pzs7soM+U6rThyDf1K+afTafyk+JIhCt2N1jwu rGoCRKJHRW9zooCB+Lmewaf8e5ONJh3D5z+iMQtsnHR2otfjQzvznhXXeIa+jHISmj88 85eCpJZtepReNKwwvTWsYlxfxbW54UYj54vTwb6khxOf9+zWqsYNRDVhHWxCSowBkE0L wBSkWIpRVe3ZCLCCz8CtCMIyd8/xQRY4QKnzmH4adF+rwXG2J999NdJln4Z6FOtR75+U 7GvA== X-Gm-Message-State: ALoCoQnPfzF45bm2VtB2rElxWHW9xciTG5M5ah3M268OFuvHQT3lAHyr7TnpaEbUQ1pLpjgIMhvRhW01BGSeV2qDkEe7pQ/u9w== X-Received: by 10.194.75.202 with SMTP id e10mr57249659wjw.160.1450279090027; Wed, 16 Dec 2015 07:18:10 -0800 (PST) Received: from tn-HP-4.semihalf.local ([80.82.22.190]) by smtp.gmail.com with ESMTPSA id z17sm6438761wjq.1.2015.12.16.07.18.08 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 16 Dec 2015 07:18:09 -0800 (PST) From: Tomasz Nowicki To: bhelgaas@google.com, arnd@arndb.de, will.deacon@arm.com, catalin.marinas@arm.com, rjw@rjwysocki.net, hanjun.guo@linaro.org, Lorenzo.Pieralisi@arm.com, okaya@codeaurora.org, jiang.liu@linux.intel.com, Stefano.Stabellini@eu.citrix.com Subject: [PATCH V2 17/23] acpi, mcfg: Implement two calls that might be used to inject/remove MCFG region. Date: Wed, 16 Dec 2015 16:16:27 +0100 Message-Id: <1450278993-12664-18-git-send-email-tn@semihalf.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1450278993-12664-1-git-send-email-tn@semihalf.com> References: <1450278993-12664-1-git-send-email-tn@semihalf.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20151216_071830_196104_AF69E6E1 X-CRM114-Status: GOOD ( 12.04 ) X-Spam-Score: -2.6 (--) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: jchandra@broadcom.com, jcm@redhat.com, linaro-acpi@lists.linaro.org, linux-pci@vger.kernel.org, Liviu.Dudau@arm.com, ddaney@caviumnetworks.com, linux-kernel@vger.kernel.org, linux-acpi@vger.kernel.org, robert.richter@caviumnetworks.com, Suravee.Suthikulpanit@amd.com, msalter@redhat.com, wangyijing@huawei.com, Tomasz Nowicki , tglx@linutronix.de, mw@semihalf.com, linux-arm-kernel@lists.infradead.org MIME-Version: 1.0 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org X-Spam-Status: No, score=-4.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_MED, T_DKIM_INVALID, T_RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Lets abstract two calls which allow to inject and remove MCFG regions which may come from DSDT table. These calls will be used for x86 and ARM64 PCI host bridge driver in the later patches. Signed-off-by: Tomasz Nowicki --- drivers/acpi/mcfg.c | 38 ++++++++++++++++++++++++++++++++++++++ include/linux/pci-acpi.h | 9 +++++++++ 2 files changed, 47 insertions(+) diff --git a/drivers/acpi/mcfg.c b/drivers/acpi/mcfg.c index 3e1e7be..dca4c4e 100644 --- a/drivers/acpi/mcfg.c +++ b/drivers/acpi/mcfg.c @@ -10,6 +10,7 @@ #include #include #include +#include #define PREFIX "MCFG: " @@ -77,6 +78,43 @@ int __init acpi_parse_mcfg(struct acpi_table_header *header) return 0; } +int pci_mmcfg_setup_map(struct acpi_pci_root_info *ci) +{ + struct pci_mmcfg_region *cfg; + struct acpi_pci_root *root; + int seg, start, end, err; + + root = ci->root; + seg = root->segment; + start = root->secondary.start; + end = root->secondary.end; + + cfg = pci_mmconfig_lookup(seg, start); + if (cfg) + return 0; + + cfg = pci_mmconfig_alloc(seg, start, end, root->mcfg_addr); + if (!cfg) + return -ENOMEM; + + err = pci_mmconfig_inject(cfg); + return err; +} + +void pci_mmcfg_teardown_map(struct acpi_pci_root_info *ci) +{ + struct acpi_pci_root *root = ci->root; + struct pci_mmcfg_region *cfg; + + cfg = pci_mmconfig_lookup(root->segment, root->secondary.start); + if (!cfg) + return; + + if (cfg->hot_added) + pci_mmconfig_delete(root->segment, root->secondary.start, + root->secondary.end); +} + int __init __weak acpi_mcfg_check_entry(struct acpi_table_mcfg *mcfg, struct acpi_mcfg_allocation *cfg) { diff --git a/include/linux/pci-acpi.h b/include/linux/pci-acpi.h index 89ab057..c277415 100644 --- a/include/linux/pci-acpi.h +++ b/include/linux/pci-acpi.h @@ -79,6 +79,15 @@ extern struct pci_bus *acpi_pci_root_create(struct acpi_pci_root *root, void acpi_pci_add_bus(struct pci_bus *bus); void acpi_pci_remove_bus(struct pci_bus *bus); +#ifdef CONFIG_PCI_MMCONFIG +int pci_mmcfg_setup_map(struct acpi_pci_root_info *ci); +void pci_mmcfg_teardown_map(struct acpi_pci_root_info *ci); +#else +static inline int pci_mmcfg_setup_map(struct acpi_pci_root_info *ci) +{ return 0; } +static inline void pci_mmcfg_teardown_map(struct acpi_pci_root_info *ci) { } +#endif + #ifdef CONFIG_ACPI_PCI_SLOT void acpi_pci_slot_init(void); void acpi_pci_slot_enumerate(struct pci_bus *bus);