From patchwork Thu Feb 4 17:28:55 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tomasz Nowicki X-Patchwork-Id: 8226411 Return-Path: X-Original-To: patchwork-linux-arm@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork1.web.kernel.org (Postfix) with ESMTP id BC2829F1C0 for ; Thu, 4 Feb 2016 17:36:53 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id CF18720395 for ; Thu, 4 Feb 2016 17:36:52 +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 071052012E for ; Thu, 4 Feb 2016 17:36:51 +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 1aRNoF-0004ZL-Or; Thu, 04 Feb 2016 17:35:11 +0000 Received: from casper.infradead.org ([2001:770:15f::2]) by bombadil.infradead.org with esmtps (Exim 4.80.1 #2 (Red Hat Linux)) id 1aRNjB-00077W-Dg for linux-arm-kernel@bombadil.infradead.org; Thu, 04 Feb 2016 17:29:57 +0000 Received: from mail-wm0-x230.google.com ([2a00:1450:400c:c09::230]) by casper.infradead.org with esmtps (Exim 4.85 #2 (Red Hat Linux)) id 1aRNj7-00048U-Vo for linux-arm-kernel@lists.infradead.org; Thu, 04 Feb 2016 17:29:55 +0000 Received: by mail-wm0-x230.google.com with SMTP id p63so222670373wmp.1 for ; Thu, 04 Feb 2016 09:29:33 -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=dlsGg9qvVTpRYbFFAqVtChHMvgXjvVquUHYsywT9PuI=; b=nkLObLArkYMUochBW9jgnKqVdCR9n/sLokkSXtuMalwN8/weV7eOE9iEJIBcpKoVzW dnVNoLhqVkfHe4h5a5VP1ZRRdfJ4TwW+RlBkyYnj1YPQrGOnbqtrKixPKVCWWJhkuzH3 ylSUps9eoZYsns/gaiIjtqRTVqgstNMviklt3xgR53LE2C9LLKOcz4yTTaD1tN87ZirS UkUplKmGIlavVh3bqOjNFedaaJWAZXPYDNjIY2wvZALcaoGubivpDBb0sbvisckeZO9F 4XJ+ahLfLz1BOUk7qemPQQlzl6t9FfSKyRW6SQcGCUWXRO/Y8vXAriafjmnnV6tC6670 6apw== 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=dlsGg9qvVTpRYbFFAqVtChHMvgXjvVquUHYsywT9PuI=; b=LSzcU11uqYtRunyX2NDyCj/gwz/kIhBTxPZcTTolsMukumlnlEJCKfo0RpYhgySKZh z1P5Micrb2+G2bzns09bzN9BBhtlV6u/m2lnLi8cD2tOq1xGYBm+BlrbXOKjzi/WCgf1 4Y9Ois3qXTlK6kUoa8O4f/H+emJgWIJX/m5g2DYQAicXxLf2dg/wqjcSm7Aw5pXBV6sd kB9V77msg8ghMuVjBlGUsKYaDiYj1SqCAle9wNvGRDW5jXPvOx/sN9BM/Ab3oiA2Reft 7SB4/6gI4N5G5kNalZBC+YgUmiu3/SwXKe1OkvwQVxNR2GUFVHMcRzl8EjssnmkEM6QB 3HXA== X-Gm-Message-State: AG10YOTbLEyCEOb5MyOxHz8HfFhY/UoS/GlM4Ub0CamXE2JZRiuWJnP48GpRvu05cAmLLQ== X-Received: by 10.194.158.135 with SMTP id wu7mr9520790wjb.142.1454606972320; Thu, 04 Feb 2016 09:29:32 -0800 (PST) Received: from tn-HP-4.semihalf.local (cardhu.semihalf.com. [213.17.239.108]) by smtp.gmail.com with ESMTPSA id w8sm12238889wjx.21.2016.02.04.09.29.30 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Thu, 04 Feb 2016 09:29:31 -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 V4 17/23] acpi, mcfg: Add default PCI config accessors implementation and initial support for related quirks. Date: Thu, 4 Feb 2016 18:28:55 +0100 Message-Id: <1454606941-9523-18-git-send-email-tn@semihalf.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1454606941-9523-1-git-send-email-tn@semihalf.com> References: <1454606941-9523-1-git-send-email-tn@semihalf.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20160204_172954_054021_BD286002 X-CRM114-Status: GOOD ( 13.21 ) 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 , 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.5 required=5.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_MED,RP_MATCHES_RCVD,T_DKIM_INVALID,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 We use generic accessors from access.c by default. However, we already know platforms that need special handling while accessing to PCI config space. These platforms will need different accessors set matched against platform ID, domain, bus touple. Therefore we are going to add (in future) DECLARE_ACPI_MCFG_FIXUP which will register platform specific custom accessors. For now, we let pci_mcfg_get_ops to take acpi_pci_root structure as an arguments and left some space for quirk matching algorithm. Signed-off-by: Tomasz Nowicki Tested-by: Duc Dang Tested-by: Dongdong Liu Tested-by: Hanjun Guo Tested-by: Graeme Gregory Tested-by: Sinan Kaya --- drivers/acpi/mcfg.c | 30 ++++++++++++++++++++++++++++++ include/linux/pci-acpi.h | 8 ++++++++ 2 files changed, 38 insertions(+) diff --git a/drivers/acpi/mcfg.c b/drivers/acpi/mcfg.c index dca4c4e..dfc2d14 100644 --- a/drivers/acpi/mcfg.c +++ b/drivers/acpi/mcfg.c @@ -34,6 +34,36 @@ int __weak raw_pci_write(unsigned int domain, unsigned int bus, return PCIBIOS_DEVICE_NOT_FOUND; } +void __iomem * +pci_mcfg_dev_base(struct pci_bus *bus, unsigned int devfn, int offset) +{ + struct pci_mmcfg_region *cfg; + + cfg = pci_mmconfig_lookup(pci_domain_nr(bus), bus->number); + if (cfg && cfg->virt) + return cfg->virt + + (PCI_MMCFG_BUS_OFFSET(bus->number) | (devfn << 12)) + + offset; + return NULL; +} + +/* Default generic PCI config accessors */ +static struct pci_ops default_pci_mcfg_ops = { + .map_bus = pci_mcfg_dev_base, + .read = pci_generic_config_read, + .write = pci_generic_config_write, +}; + +struct pci_ops *pci_mcfg_get_ops(struct acpi_pci_root *root) +{ + /* + * TODO: Match against platform specific quirks and return + * corresponding PCI config space accessor set. + */ + + return &default_pci_mcfg_ops; +} + int __init acpi_parse_mcfg(struct acpi_table_header *header) { struct acpi_table_mcfg *mcfg; diff --git a/include/linux/pci-acpi.h b/include/linux/pci-acpi.h index 65b91f3..c974586 100644 --- a/include/linux/pci-acpi.h +++ b/include/linux/pci-acpi.h @@ -83,10 +83,18 @@ 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); +struct pci_ops *pci_mcfg_get_ops(struct acpi_pci_root *root); +void __iomem * +pci_mcfg_dev_base(struct pci_bus *bus, unsigned int devfn, int offset); #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) { } +static inline struct pci_ops *pci_mcfg_get_ops(struct acpi_pci_root *root) +{ return NULL; } +static inline void __iomem * +pci_mcfg_dev_base(struct pci_bus *bus, unsigned int devfn, int offset) +{ return NULL; } #endif #ifdef CONFIG_ACPI_PCI_SLOT