Received: by 2002:a25:8b12:0:0:0:0:0 with SMTP id i18csp1827674ybl; Thu, 15 Aug 2019 01:49:36 -0700 (PDT) X-Google-Smtp-Source: APXvYqzXCaxT2GQ4XDPXmT40zLwV6GlEInjiipipflFc8Ec4TLO9d2kaR6MOXjSW0WrFz6rJBN2o X-Received: by 2002:a17:90a:b104:: with SMTP id z4mr1268138pjq.120.1565858976407; Thu, 15 Aug 2019 01:49:36 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1565858976; cv=none; d=google.com; s=arc-20160816; b=eOEIWjDH6nU1k6AM8V+iTbSJNoD31NWcwnB/IuTaB1WFJ7t5jJ28WV4f3P0B3jQz8b FkZs+3uvpcKp2Yn59i0qJih5l680GCOKircG4EOxejkrprFDLvqu3GvayRmCjL0ih0gX D2B5GRCa/fi+mSHnAm7Q0CDK2P7iEG90tBxwTvP8ACrXbuN6ZP0wEUUaNasVulYz1DjV yrMDwUQOlkPuNa35nHwCLM1xUSgjuCH2D7MYsNQzC5MyVjvVWFLExIYcvdgDXvvijJwK UWUTqhBvAl6uO4iLfM9vEpoBzpfsQrBiHGp1q4fjJk9Upww2Q/K8RY8cVe/22zgCSTHf JLoQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from; bh=kaDV9MSTBtSgpWuTmvowifPXSIBUc7qoADibboESJuM=; b=lPvrVOOZgoFfSTOM18vPNibBBJa3Fo2WJYHsdaszuKt265Gn5hIQOM1aMN4BEOmiBD de3rQE74HfzKOnmID6YR0Ts+BiQve2fzUR4VuE1dNHfoz19m+ZjiuuWi7KaZXei8RYju S0Cc2ruxmX2Q1DBrIOpBFi144TdO9AuffNgmVEqh5e2NeQutoEmkfip/2U1rNvTGIW/9 uMJM1zgGN30RIyvlTf3DksNZS71Z4pt0m/r2dG8mMf44s1IEOFCSMRFUeLfD2vJ6HROC IuZPC98fD02Ui2zgZizhnd6GC59Y6Zw825qzOjj1NYriB+8o9nFsJerWF+OHHze/A1fR Uk8g== ARC-Authentication-Results: i=1; mx.google.com; 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=fail (p=NONE sp=NONE dis=NONE) header.from=nxp.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id e10si611018pjw.30.2019.08.15.01.49.21; Thu, 15 Aug 2019 01:49:36 -0700 (PDT) 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; 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=fail (p=NONE sp=NONE dis=NONE) header.from=nxp.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731112AbfHOIry (ORCPT + 99 others); Thu, 15 Aug 2019 04:47:54 -0400 Received: from inva021.nxp.com ([92.121.34.21]:60502 "EHLO inva021.nxp.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730957AbfHOIrx (ORCPT ); Thu, 15 Aug 2019 04:47:53 -0400 Received: from inva021.nxp.com (localhost [127.0.0.1]) by inva021.eu-rdc02.nxp.com (Postfix) with ESMTP id 1C848200449; Thu, 15 Aug 2019 10:47:50 +0200 (CEST) Received: from invc005.ap-rdc01.nxp.com (invc005.ap-rdc01.nxp.com [165.114.16.14]) by inva021.eu-rdc02.nxp.com (Postfix) with ESMTP id 66C5C200440; Thu, 15 Aug 2019 10:47:41 +0200 (CEST) Received: from titan.ap.freescale.net (TITAN.ap.freescale.net [10.192.208.233]) by invc005.ap-rdc01.nxp.com (Postfix) with ESMTP id 0A0DF4031B; Thu, 15 Aug 2019 16:47:30 +0800 (SGT) From: Xiaowei Bao To: jingoohan1@gmail.com, gustavo.pimentel@synopsys.com, bhelgaas@google.com, robh+dt@kernel.org, mark.rutland@arm.com, shawnguo@kernel.org, leoyang.li@nxp.com, kishon@ti.com, lorenzo.pieralisi@arm.com, arnd@arndb.de, gregkh@linuxfoundation.org, minghuan.Lian@nxp.com, mingkai.hu@nxp.com, roy.zang@nxp.com, linux-pci@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linuxppc-dev@lists.ozlabs.org Cc: Xiaowei Bao Subject: [PATCH 05/10] PCI: layerscape: Modify the way of getting capability with different PEX Date: Thu, 15 Aug 2019 16:37:11 +0800 Message-Id: <20190815083716.4715-5-xiaowei.bao@nxp.com> X-Mailer: git-send-email 2.9.5 In-Reply-To: <20190815083716.4715-1-xiaowei.bao@nxp.com> References: <20190815083716.4715-1-xiaowei.bao@nxp.com> X-Virus-Scanned: ClamAV using ClamSMTP Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The different PCIe controller in one board may be have different capability of MSI or MSIX, so change the way of getting the MSI capability, make it more flexible. Signed-off-by: Xiaowei Bao --- drivers/pci/controller/dwc/pci-layerscape-ep.c | 28 +++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/drivers/pci/controller/dwc/pci-layerscape-ep.c b/drivers/pci/controller/dwc/pci-layerscape-ep.c index be61d96..9404ca0 100644 --- a/drivers/pci/controller/dwc/pci-layerscape-ep.c +++ b/drivers/pci/controller/dwc/pci-layerscape-ep.c @@ -22,6 +22,7 @@ struct ls_pcie_ep { struct dw_pcie *pci; + struct pci_epc_features *ls_epc; }; #define to_ls_pcie_ep(x) dev_get_drvdata((x)->dev) @@ -40,25 +41,26 @@ static const struct of_device_id ls_pcie_ep_of_match[] = { { }, }; -static const struct pci_epc_features ls_pcie_epc_features = { - .linkup_notifier = false, - .msi_capable = true, - .msix_capable = false, -}; - static const struct pci_epc_features* ls_pcie_ep_get_features(struct dw_pcie_ep *ep) { - return &ls_pcie_epc_features; + struct dw_pcie *pci = to_dw_pcie_from_ep(ep); + struct ls_pcie_ep *pcie = to_ls_pcie_ep(pci); + + return pcie->ls_epc; } static void ls_pcie_ep_init(struct dw_pcie_ep *ep) { struct dw_pcie *pci = to_dw_pcie_from_ep(ep); + struct ls_pcie_ep *pcie = to_ls_pcie_ep(pci); enum pci_barno bar; for (bar = BAR_0; bar <= BAR_5; bar++) dw_pcie_ep_reset_bar(pci, bar); + + pcie->ls_epc->msi_capable = ep->msi_cap ? true : false; + pcie->ls_epc->msix_capable = ep->msix_cap ? true : false; } static int ls_pcie_ep_raise_irq(struct dw_pcie_ep *ep, u8 func_no, @@ -118,6 +120,7 @@ static int __init ls_pcie_ep_probe(struct platform_device *pdev) struct device *dev = &pdev->dev; struct dw_pcie *pci; struct ls_pcie_ep *pcie; + struct pci_epc_features *ls_epc; struct resource *dbi_base; int ret; @@ -129,6 +132,10 @@ static int __init ls_pcie_ep_probe(struct platform_device *pdev) if (!pci) return -ENOMEM; + ls_epc = devm_kzalloc(dev, sizeof(*ls_epc), GFP_KERNEL); + if (!ls_epc) + return -ENOMEM; + dbi_base = platform_get_resource_byname(pdev, IORESOURCE_MEM, "regs"); pci->dbi_base = devm_pci_remap_cfg_resource(dev, dbi_base); if (IS_ERR(pci->dbi_base)) @@ -139,6 +146,13 @@ static int __init ls_pcie_ep_probe(struct platform_device *pdev) pci->ops = &ls_pcie_ep_ops; pcie->pci = pci; + ls_epc->linkup_notifier = false, + ls_epc->msi_capable = true, + ls_epc->msix_capable = true, + ls_epc->bar_fixed_64bit = (1 << BAR_2) | (1 << BAR_4), + + pcie->ls_epc = ls_epc; + platform_set_drvdata(pdev, pcie); ret = ls_add_pcie_ep(pcie, pdev); -- 2.9.5