Received: by 2002:a25:8b12:0:0:0:0:0 with SMTP id i18csp1105656ybl; Thu, 22 Aug 2019 09:25:15 -0700 (PDT) X-Google-Smtp-Source: APXvYqyAGF2SstkzBNT3RUpuedsVLQTSuPq54ZuzutaOwjE4jYNOFOrPl11zih9keuU5m/wbNItH X-Received: by 2002:a65:64cf:: with SMTP id t15mr122358pgv.88.1566491115688; Thu, 22 Aug 2019 09:25:15 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1566491115; cv=none; d=google.com; s=arc-20160816; b=F17ItHr8al7aDVO+EDLa2Rn/hiXt4haMexuLatZsoTOtPomI8PtCq0FTq7BthhUMTE Zk3GnUwXND4jXKFtLkwGGRS0/TZ7T+0Z9EE3apyW9HJUgdMsC5nyqViZVZdNE66mWGct keGaJlmtgXo3hmJATzTzrNXldk+KZ9EXwu5FNb3jSMpFLlKp6dqx7Cc5/dDCRRP7MHln O9jJwTD7FsBThuudW0ASyygLUovzRmk/pqeJ7BJTUCLtQnGmNSiBAvd3dTktmWk2xfqD NuJiJp68PQUOnV1jxWFV1hjZPiOuZqKDilxj8RCBovSs/jukQODA0JfstR7aKyY5yui1 Kgig== 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=E5Z1akNd+DGXJr9pmKchytkhqioJmdgFtyQiFvIL10I=; b=o89wkimWG+0vO6EtyOqiTQywJaLfYRUZZF8xxG+YWvauySDBvLPOVvFxQWHof878jz FOnB88XuOJYKLHrk8Jvo8/dxNj9zMgrGe6oQKeN1W2LSS2YtfiNtQSLYpy/UwMMntwwI 8b0QPa7D85KQxBoknSPMvUeVcpnTDCSqrmCWTwmsKY5O7SbTqiAGPXZW62hu1qkNBUpT orUwnA5VigToDbpq7yYdJlY5sjv66qypVbIviKgd3LC+3Z/FDiXimfCxQMiCX+OmcM+f 0Fg9F0F9P5r6wiUoKb7gm1SCG7XVz8doM+bambADeL8YWLShOxplrNhvU3EuroW9HYT/ AoCg== 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 j63si16726694pgd.493.2019.08.22.09.24.59; Thu, 22 Aug 2019 09:25:15 -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 S2388247AbfHVLdR (ORCPT + 99 others); Thu, 22 Aug 2019 07:33:17 -0400 Received: from inva020.nxp.com ([92.121.34.13]:34924 "EHLO inva020.nxp.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2388216AbfHVLdE (ORCPT ); Thu, 22 Aug 2019 07:33:04 -0400 Received: from inva020.nxp.com (localhost [127.0.0.1]) by inva020.eu-rdc02.nxp.com (Postfix) with ESMTP id 8FE941A022F; Thu, 22 Aug 2019 13:33:01 +0200 (CEST) Received: from invc005.ap-rdc01.nxp.com (invc005.ap-rdc01.nxp.com [165.114.16.14]) by inva020.eu-rdc02.nxp.com (Postfix) with ESMTP id AF4BC1A00A2; Thu, 22 Aug 2019 13:32:51 +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 A02954031E; Thu, 22 Aug 2019 19:32:39 +0800 (SGT) From: Xiaowei Bao To: bhelgaas@google.com, robh+dt@kernel.org, mark.rutland@arm.com, shawnguo@kernel.org, leoyang.li@nxp.com, kishon@ti.com, lorenzo.pieralisi@arm.co, arnd@arndb.de, gregkh@linuxfoundation.org, minghuan.Lian@nxp.com, mingkai.hu@nxp.com, roy.zang@nxp.com, jingoohan1@gmail.com, gustavo.pimentel@synopsys.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, andrew.murray@arm.com Cc: Xiaowei Bao Subject: [PATCH v2 06/10] PCI: layerscape: Modify the way of getting capability with different PEX Date: Thu, 22 Aug 2019 19:22:38 +0800 Message-Id: <20190822112242.16309-6-xiaowei.bao@nxp.com> X-Mailer: git-send-email 2.9.5 In-Reply-To: <20190822112242.16309-1-xiaowei.bao@nxp.com> References: <20190822112242.16309-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 --- v2: - Remove the repeated assignment code. drivers/pci/controller/dwc/pci-layerscape-ep.c | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/drivers/pci/controller/dwc/pci-layerscape-ep.c b/drivers/pci/controller/dwc/pci-layerscape-ep.c index 4e92a95..8461f62 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,11 @@ 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->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