From patchwork Wed Oct 15 03:06:52 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: wangyijing X-Patchwork-Id: 38757 Return-Path: X-Original-To: linaro@patches.linaro.org Delivered-To: linaro@patches.linaro.org Received: from mail-lb0-f199.google.com (mail-lb0-f199.google.com [209.85.217.199]) by ip-10-151-82-157.ec2.internal (Postfix) with ESMTPS id 4FF1B20973 for ; Wed, 15 Oct 2014 02:34:40 +0000 (UTC) Received: by mail-lb0-f199.google.com with SMTP id w7sf143683lbi.10 for ; Tue, 14 Oct 2014 19:34:39 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:delivered-to:from:to:date:message-id:in-reply-to :references:mime-version:cc:subject:precedence:list-id :list-unsubscribe:list-post:list-help:list-subscribe:sender :errors-to:x-original-sender:x-original-authentication-results :mailing-list:list-archive:content-type:content-transfer-encoding; bh=pz1imCdbXLcJgFy3v3IOO9Vh0JUcaAR+5gf5WgOUOiQ=; b=ffn5TOrHsVg0WAjgyTciwAGgHf97C10rzKl4qjHRR4EUxeEVp5TE8Bsi0/smfb06tm pulgcHvKm+PsVOXvToioOjXwiU93/U8ksLjbVND5RAcYXXwvAs8YghaFyM89e+PRIrX8 HfZ6/fGxv20UMIJWcF0mfCV/A+x9D1K2wE2JEW527gbxkPAjLC1NVB9//hx2ZZf2EG3J qIF/hzyAZFEHjPyxzSqEJYRRe0Vdmr9h19FeL2gH9ri7j5D8l+Jo70FyqaQyEnjOBYyW 18TCoqxe+d5cqDfKasOPBXx07CeZqPcc0lhQzoH1AaBSnJUlISHRoFYYdo9ZeIYhUxzQ 93ww== X-Gm-Message-State: ALoCoQlfRCrLmPqPQLuITA+XFdNILh4Gp0Ncoa+UUjjBYPUOjUFTcoEcu07Fmc13NUNM1H7XOFc5 X-Received: by 10.194.100.98 with SMTP id ex2mr23149wjb.6.1413340479039; Tue, 14 Oct 2014 19:34:39 -0700 (PDT) X-BeenThere: patchwork-forward@linaro.org Received: by 10.152.23.133 with SMTP id m5ls7835laf.102.gmail; Tue, 14 Oct 2014 19:34:38 -0700 (PDT) X-Received: by 10.152.206.105 with SMTP id ln9mr9337088lac.8.1413340478760; Tue, 14 Oct 2014 19:34:38 -0700 (PDT) Received: from mail-la0-f43.google.com (mail-la0-f43.google.com [209.85.215.43]) by mx.google.com with ESMTPS id mr6si28529892lbb.137.2014.10.14.19.34.38 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Tue, 14 Oct 2014 19:34:38 -0700 (PDT) Received-SPF: pass (google.com: domain of patch+caf_=patchwork-forward=linaro.org@linaro.org designates 209.85.215.43 as permitted sender) client-ip=209.85.215.43; Received: by mail-la0-f43.google.com with SMTP id mc6so259575lab.16 for ; Tue, 14 Oct 2014 19:34:38 -0700 (PDT) X-Received: by 10.152.202.135 with SMTP id ki7mr9248400lac.40.1413340478338; Tue, 14 Oct 2014 19:34:38 -0700 (PDT) X-Forwarded-To: patchwork-forward@linaro.org X-Forwarded-For: patch@linaro.org patchwork-forward@linaro.org Delivered-To: patch@linaro.org Received: by 10.112.84.229 with SMTP id c5csp517964lbz; Tue, 14 Oct 2014 19:34:37 -0700 (PDT) X-Received: by 10.220.166.132 with SMTP id m4mr5706673vcy.50.1413340476708; Tue, 14 Oct 2014 19:34:36 -0700 (PDT) Received: from lists.xen.org (lists.xen.org. [50.57.142.19]) by mx.google.com with ESMTPS id yh13si13873245vdb.4.2014.10.14.19.34.36 for (version=TLSv1 cipher=RC4-SHA bits=128/128); Tue, 14 Oct 2014 19:34:36 -0700 (PDT) Received-SPF: none (google.com: xen-devel-bounces@lists.xen.org does not designate permitted sender hosts) client-ip=50.57.142.19; Received: from localhost ([127.0.0.1] helo=lists.xen.org) by lists.xen.org with esmtp (Exim 4.72) (envelope-from ) id 1XeEPM-0000bL-3I; Wed, 15 Oct 2014 02:33:48 +0000 Received: from mail6.bemta4.messagelabs.com ([85.158.143.247]) by lists.xen.org with esmtp (Exim 4.72) (envelope-from ) id 1XeEPK-0000ZN-MD for xen-devel@lists.xenproject.org; Wed, 15 Oct 2014 02:33:46 +0000 Received: from [85.158.143.35:39618] by server-1.bemta-4.messagelabs.com id 8E/88-05872-A0DDD345; Wed, 15 Oct 2014 02:33:46 +0000 X-Env-Sender: wangyijing@huawei.com X-Msg-Ref: server-3.tower-21.messagelabs.com!1413340421!12618299!1 X-Originating-IP: [119.145.14.65] X-SpamReason: No, hits=0.0 required=7.0 tests=sa_preprocessor: VHJ1c3RlZCBJUDogMTE5LjE0NS4xNC42NSA9PiA3NzQ2Mw==\n X-StarScan-Received: X-StarScan-Version: 6.12.3; banners=-,-,- X-VirusChecked: Checked Received: (qmail 5591 invoked from network); 15 Oct 2014 02:33:44 -0000 Received: from szxga02-in.huawei.com (HELO szxga02-in.huawei.com) (119.145.14.65) by server-3.tower-21.messagelabs.com with RC4-SHA encrypted SMTP; 15 Oct 2014 02:33:44 -0000 Received: from 172.24.2.119 (EHLO szxeml412-hub.china.huawei.com) ([172.24.2.119]) by szxrg02-dlp.huawei.com (MOS 4.3.7-GA FastPath queued) with ESMTP id CAT35324; Wed, 15 Oct 2014 10:25:25 +0800 (CST) Received: from localhost.localdomain (10.175.100.166) by szxeml412-hub.china.huawei.com (10.82.67.91) with Microsoft SMTP Server id 14.3.158.1; Wed, 15 Oct 2014 10:25:15 +0800 From: Yijing Wang To: Bjorn Helgaas Date: Wed, 15 Oct 2014 11:06:52 +0800 Message-ID: <1413342435-7876-5-git-send-email-wangyijing@huawei.com> X-Mailer: git-send-email 1.7.1 In-Reply-To: <1413342435-7876-1-git-send-email-wangyijing@huawei.com> References: <1413342435-7876-1-git-send-email-wangyijing@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.175.100.166] X-CFilter-Loop: Reflected Cc: linux-mips@linux-mips.org, linux-ia64@vger.kernel.org, linux-pci@vger.kernel.org, Bharat.Bhushan@freescale.com, Yijing Wang , Thierry Reding , sparclinux@vger.kernel.org, linux-arch@vger.kernel.org, linux-s390@vger.kernel.org, Russell King , Michael Ellerman , Joerg Roedel , x86@kernel.org, Sebastian Ott , Benjamin Herrenschmidt , xen-devel@lists.xenproject.org, arnab.basu@freescale.com, Liviu Dudau , Arnd Bergmann , Chris Metcalf , Thomas Gleixner , linux-arm-kernel@lists.infradead.org, Thomas Petazzoni , Xinwei Hu , Tony Luck , Sergei Shtylyov , linux-kernel@vger.kernel.org, Ralf Baechle , iommu@lists.linux-foundation.org, David Vrabel , Wuyun , linuxppc-dev@lists.ozlabs.org, "David S. Miller" , Lucas Stach Subject: [Xen-devel] [PATCH v3 04/27] arm/MSI: Save MSI chip in pci_sys_data X-BeenThere: xen-devel@lists.xen.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: List-Unsubscribe: , List-Post: , List-Help: , List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org X-Removed-Original-Auth: Dkim didn't pass. X-Original-Sender: wangyijing@huawei.com X-Original-Authentication-Results: mx.google.com; spf=pass (google.com: domain of patch+caf_=patchwork-forward=linaro.org@linaro.org designates 209.85.215.43 as permitted sender) smtp.mail=patch+caf_=patchwork-forward=linaro.org@linaro.org Mailing-list: list patchwork-forward@linaro.org; contact patchwork-forward+owners@linaro.org X-Google-Group-Id: 836684582541 List-Archive: Saving msi chip in pci_sys_data can make pci bus and devices don't need to know msi chip detail, it also make pci enumeration code be decoupled from msi chip. In fact, all pci devices under the same pci hostbridge share same msi chip. So msi chip should be seen as one of resources or attributes to be initialized in pci host bridge driver. Currently, pci hostbridge drivers create pci_host_bridge in pci_create_root_bus(), and pass arch specific pci sysdata to core pci scan functions. So pci arch sysdata is good place to save msi chip. Signed-off-by: Yijing Wang --- arch/arm/include/asm/mach/pci.h | 6 ++++++ arch/arm/include/asm/pci.h | 9 +++++++++ arch/arm/kernel/bios32.c | 3 +++ drivers/pci/msi.c | 6 ++++++ include/linux/pci.h | 9 +++++++++ 5 files changed, 33 insertions(+), 0 deletions(-) diff --git a/arch/arm/include/asm/mach/pci.h b/arch/arm/include/asm/mach/pci.h index 7fc4278..59b0d87 100644 --- a/arch/arm/include/asm/mach/pci.h +++ b/arch/arm/include/asm/mach/pci.h @@ -22,6 +22,9 @@ struct hw_pci { #ifdef CONFIG_PCI_DOMAINS int domain; #endif +#ifdef CONFIG_PCI_MSI + struct msi_chip *msi_chip; +#endif struct pci_ops *ops; int nr_controllers; void **private_data; @@ -47,6 +50,9 @@ struct pci_sys_data { #ifdef CONFIG_PCI_DOMAINS int domain; #endif +#ifdef CONFIG_PCI_MSI + struct msi_chip *msi_chip; +#endif struct list_head node; int busnr; /* primary bus number */ u64 mem_offset; /* bus->cpu memory mapping offset */ diff --git a/arch/arm/include/asm/pci.h b/arch/arm/include/asm/pci.h index 7e95d85..b562c09 100644 --- a/arch/arm/include/asm/pci.h +++ b/arch/arm/include/asm/pci.h @@ -31,6 +31,15 @@ static inline int pci_proc_domain(struct pci_bus *bus) } #endif /* CONFIG_PCI_DOMAINS */ +#ifdef CONFIG_PCI_MSI +static inline struct msi_chip *pci_msi_chip(struct pci_bus *bus) +{ + struct pci_sys_data *root = bus->sysdata; + + return root->msi_chip; +} +#endif + /* * The PCI address space does equal the physical memory address space. * The networking and block device layers use this boolean for bounce diff --git a/arch/arm/kernel/bios32.c b/arch/arm/kernel/bios32.c index 17a26c1..a19038d 100644 --- a/arch/arm/kernel/bios32.c +++ b/arch/arm/kernel/bios32.c @@ -471,6 +471,9 @@ static void pcibios_init_hw(struct device *parent, struct hw_pci *hw, #ifdef CONFIG_PCI_DOMAINS sys->domain = hw->domain; #endif +#ifdef CONFIG_PCI_MSI + sys->msi_chip = hw->msi_chip; +#endif sys->busnr = busnr; sys->swizzle = hw->swizzle; sys->map_irq = hw->map_irq; diff --git a/drivers/pci/msi.c b/drivers/pci/msi.c index 22e413c..f11108c 100644 --- a/drivers/pci/msi.c +++ b/drivers/pci/msi.c @@ -35,6 +35,9 @@ int __weak arch_setup_msi_irq(struct pci_dev *dev, struct msi_desc *desc) struct msi_chip *chip = dev->bus->msi; int err; + if (!chip) + chip = pci_msi_chip(dev->bus); + if (!chip || !chip->setup_irq) return -EINVAL; @@ -50,6 +53,9 @@ void __weak arch_teardown_msi_irq(unsigned int irq) struct msi_desc *entry = irq_get_msi_desc(irq); struct msi_chip *chip = entry->dev->bus->msi; + if (!chip) + chip = pci_msi_chip(entry->dev->bus); + if (!chip || !chip->teardown_irq) return; diff --git a/include/linux/pci.h b/include/linux/pci.h index 9cd2721..7a48b40 100644 --- a/include/linux/pci.h +++ b/include/linux/pci.h @@ -1433,6 +1433,15 @@ static inline int pci_get_new_domain_nr(void) { return -ENOSYS; } #include +/* Just avoid compile error, will be clean up later */ +#ifdef CONFIG_PCI_MSI + +#ifndef pci_msi_chip +#define pci_msi_chip(bus) NULL +#endif + +#endif + /* these helpers provide future and backwards compatibility * for accessing popular PCI BAR info */ #define pci_resource_start(dev, bar) ((dev)->resource[(bar)].start)