Received: by 2002:ab2:6203:0:b0:1f5:f2ab:c469 with SMTP id o3csp2330991lqt; Mon, 22 Apr 2024 07:59:52 -0700 (PDT) X-Forwarded-Encrypted: i=3; AJvYcCVEj9y3HyhLJsiX9xVUhDkmcOU1uJ8ejYTZ+s7qh1uukO4Ot2jC4YLE9rXUjys+LUekSzSl4wN8AiKcb86Py698NZbh0GP74xtR6FQB6A== X-Google-Smtp-Source: AGHT+IHZAsWXvTIts2CKkMYlyGhFOKJVD7+RCcrNHKw3TGne2yIIeUJQ6OgqgNnOTND63vg84c1Z X-Received: by 2002:a05:6a00:130e:b0:6f0:b53c:dfb4 with SMTP id j14-20020a056a00130e00b006f0b53cdfb4mr14880035pfu.22.1713797991831; Mon, 22 Apr 2024 07:59:51 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1713797991; cv=pass; d=google.com; s=arc-20160816; b=kqIt1T3axjdkjcp3DGqCyE+WuQYrzXfash7sozro9rkxiqf+iWtp16qcGvpzi67zWU 5KJ61ov+jFVZhf/Mtppg2V5HlVePJVGTZM4epfroIu4lBTGKjohN1CaFGol5gaoIe2Wb l3dTuAokt/p03Domphl67JmWBYj5orsoiNx6B7Wovmk5iyKIBNNgCsH8uujIYu+eAWQe pd6pw39LMEQIZC/U85DlPRdL31nk1hddCZ/jX8W1UyAbjzB1C7j+yQsobKSA/XZymX8f rnBLHPXsDxgwPkSZCiMMLKy5IEmAjD+MLpQH1DhnY9l20Kmo0hY0M6socP28cfd+/nER 5ktA== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:list-unsubscribe:list-subscribe:list-id:precedence :references:message-id:subject:cc:to:from:date:dkim-signature; bh=LMpCZ/c0pLNZIN/Wa3rBXC5qL9tdMPe4rTy3WYVisfI=; fh=679POoNafDBRDljd8UfhUwRjr53wPhO1a75SZRUCNo4=; b=QzNy5MBoFEhOgcDwqFZD+G4LuVYJCPm56dgdvQKc7a9fBTQm0PMcedXZvfOOJkKupB VYWu7LLEBt+HRKVyqwAqv06Rx7kOAkkn71diK0O+g9Co7SzyEYA9qWibEJc5Kx58inHg 5FPcU+s8EUllHq0JA/oteV4ESCtZKvQAwPAF8xpyh3BImdwhyjrhY1qrdH/jStcGu0AM 0EYzVEKcoxQBmD1AYudkkYlz9LgIgW89uieUpCYBDiG5ZZkRJJVDwWK9T37OwvxNPrk4 aUf8M/k22+5ctDI0Xd2QEPAEmmX19SSVMszj3HyhlmPakKBjJsvrBZy75N/9GT63caTU 06aA==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=on2WQfzX; arc=pass (i=1 dkim=pass dkdomain=kernel.org); spf=pass (google.com: domain of linux-kernel+bounces-153590-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45e3:2400::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-153590-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org. [2604:1380:45e3:2400::1]) by mx.google.com with ESMTPS id s2-20020a056a0008c200b006ed008652b5si8169621pfu.103.2024.04.22.07.59.51 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Apr 2024 07:59:51 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel+bounces-153590-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45e3:2400::1 as permitted sender) client-ip=2604:1380:45e3:2400::1; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=on2WQfzX; arc=pass (i=1 dkim=pass dkdomain=kernel.org); spf=pass (google.com: domain of linux-kernel+bounces-153590-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45e3:2400::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-153590-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sv.mirrors.kernel.org (Postfix) with ESMTPS id A3213285E5D for ; Mon, 22 Apr 2024 14:58:38 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 2426E15219D; Mon, 22 Apr 2024 14:58:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="on2WQfzX" Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 297151E49F; Mon, 22 Apr 2024 14:58:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713797910; cv=none; b=OFFmMI65DuGw/LQotW3ITgIWXRAAJ4fWDds+d45B+IAc+bMnnSkmcZAoIpbhrr0eQlyqyXaNQ+YmGt+wPAcY/VqRJx4+lK0e0hiMivsnRoSE5oMFx9fjoaRT7cksoKmmv+Id9phdiLktWf6VOSq+3IPTMDcrTwUvZ1LR8cYlmn0= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713797910; c=relaxed/simple; bh=Hnua4xCH7jRrOiIHSR0dvdKvoajbxDPeeOvhhIlqF+k=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=Ba2b/TxRYSbg1e5koIGa7kmKRLpzOBE/3Jt2yO6iGmVWhPFGUCPbEQmGOgGFHAKuYmfWLyfIIHqK3LKSvCZ6rr9DGziTSyfCuxFoBS6cyszMr2aaJKWBSd5fETuWu1vSMkxnCXOu4Z01zgzF8+NCg/RmYKrqKM6AeFKlUqvQnTg= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=on2WQfzX; arc=none smtp.client-ip=10.30.226.201 Received: by smtp.kernel.org (Postfix) with ESMTPSA id 6D660C113CC; Mon, 22 Apr 2024 14:58:22 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1713797909; bh=Hnua4xCH7jRrOiIHSR0dvdKvoajbxDPeeOvhhIlqF+k=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=on2WQfzXFwtAj6/BDOEjM2NhOBlHQAc3BaXxJAkYrMsEivJpgt4vUHxi81fVlOiH/ M//TZlW6sBgOTPPh3crrotNtNC9lp+a8JrvZgd/lKtcifxR6WlAmiCbx9vwIIGCQnQ tZveRR+5lW67TwLaYO9bQWUXKc+bnGuar/cI7+/bx1Pn5Ap0DkFi4D9kH2OhLambbV ok939lrJqZPulpRY+2ppygMq1AvdcwKPrquZuCI8E/nUvVhTkgsb1NRtRCoNiMv3Qp Tk0KcS8Q4ixV7KYkhWXMN5z3um30bkCSxRoVGeXSlGNwxO02jPSoVUmI/bhndcMnhf yh7Gp3ByNR4nw== Date: Mon, 22 Apr 2024 20:28:14 +0530 From: Manivannan Sadhasivam To: Shashank Babu Chinta Venkata Cc: agross@kernel.org, andersson@kernel.org, konrad.dybcio@linaro.org, quic_msarkar@quicinc.com, quic_kraravin@quicinc.com, Lorenzo Pieralisi , Krzysztof =?utf-8?Q?Wilczy=C5=84ski?= , Rob Herring , Bjorn Helgaas , Jingoo Han , Gustavo Pimentel , Manivannan Sadhasivam , Yoshihiro Shimoda , Serge Semin , Conor Dooley , linux-kernel@vger.kernel.org, linux-pci@vger.kernel.org, linux-arm-msm@vger.kernel.org Subject: Re: [PATCH v3 1/3] PCI: qcom: Refactor common code Message-ID: <20240422145814.GF9775@thinkpad> References: <20240419001013.28788-1-quic_schintav@quicinc.com> <20240419001013.28788-2-quic_schintav@quicinc.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20240419001013.28788-2-quic_schintav@quicinc.com> On Thu, Apr 18, 2024 at 05:09:34PM -0700, Shashank Babu Chinta Venkata wrote: > Refactor common code from RC(Root Complex) and EP(End Point) > drivers and move them to a common driver. This acts as placeholder > for common source code for both drivers, thus avoiding duplication. > > Signed-off-by: Shashank Babu Chinta Venkata > --- > drivers/pci/controller/dwc/Kconfig | 5 ++ > drivers/pci/controller/dwc/Makefile | 1 + > drivers/pci/controller/dwc/pcie-qcom-common.c | 75 +++++++++++++++++++ > drivers/pci/controller/dwc/pcie-qcom-common.h | 12 +++ > drivers/pci/controller/dwc/pcie-qcom-ep.c | 39 +--------- > drivers/pci/controller/dwc/pcie-qcom.c | 67 ++--------------- > 6 files changed, 105 insertions(+), 94 deletions(-) > create mode 100644 drivers/pci/controller/dwc/pcie-qcom-common.c > create mode 100644 drivers/pci/controller/dwc/pcie-qcom-common.h > > diff --git a/drivers/pci/controller/dwc/Kconfig b/drivers/pci/controller/dwc/Kconfig > index 8afacc90c63b..1599550cd628 100644 > --- a/drivers/pci/controller/dwc/Kconfig > +++ b/drivers/pci/controller/dwc/Kconfig > @@ -265,12 +265,16 @@ config PCIE_DW_PLAT_EP > order to enable device-specific features PCI_DW_PLAT_EP must be > selected. > > +config PCIE_QCOM_COMMON > + bool > + > config PCIE_QCOM > bool "Qualcomm PCIe controller (host mode)" > depends on OF && (ARCH_QCOM || COMPILE_TEST) > depends on PCI_MSI > select PCIE_DW_HOST > select CRC8 > + select PCIE_QCOM_COMMON > help > Say Y here to enable PCIe controller support on Qualcomm SoCs. The > PCIe controller uses the DesignWare core plus Qualcomm-specific > @@ -281,6 +285,7 @@ config PCIE_QCOM_EP > depends on OF && (ARCH_QCOM || COMPILE_TEST) > depends on PCI_ENDPOINT > select PCIE_DW_EP > + select PCIE_QCOM_COMMON > help > Say Y here to enable support for the PCIe controllers on Qualcomm SoCs > to work in endpoint mode. The PCIe controller uses the DesignWare core > diff --git a/drivers/pci/controller/dwc/Makefile b/drivers/pci/controller/dwc/Makefile > index bac103faa523..3f557dd60c38 100644 > --- a/drivers/pci/controller/dwc/Makefile > +++ b/drivers/pci/controller/dwc/Makefile > @@ -14,6 +14,7 @@ obj-$(CONFIG_PCI_LAYERSCAPE) += pci-layerscape.o > obj-$(CONFIG_PCI_LAYERSCAPE_EP) += pci-layerscape-ep.o > obj-$(CONFIG_PCIE_QCOM) += pcie-qcom.o > obj-$(CONFIG_PCIE_QCOM_EP) += pcie-qcom-ep.o > +obj-$(CONFIG_PCIE_QCOM_COMMON) += pcie-qcom-common.o > obj-$(CONFIG_PCIE_ARMADA_8K) += pcie-armada8k.o > obj-$(CONFIG_PCIE_ARTPEC6) += pcie-artpec6.o > obj-$(CONFIG_PCIE_ROCKCHIP_DW_HOST) += pcie-dw-rockchip.o > diff --git a/drivers/pci/controller/dwc/pcie-qcom-common.c b/drivers/pci/controller/dwc/pcie-qcom-common.c > new file mode 100644 > index 000000000000..dc2120ec5fef > --- /dev/null > +++ b/drivers/pci/controller/dwc/pcie-qcom-common.c > @@ -0,0 +1,75 @@ > +// SPDX-License-Identifier: GPL-2.0 > +/* > + * Copyright (c) 2014-2015, 2020 The Linux Foundation. All rights reserved. > + * Copyright (c) 2015, 2021 Linaro Limited. > + * Copyright (c) 2024 Qualcomm Innovation Center, Inc. All rights reserved. > + * > + */ > + > +#include > +#include Sort these alphabetically. > + > +#include "../../pci.h" > +#include "pcie-designware.h" > +#include "pcie-qcom-common.h" > + > +#define QCOM_PCIE_LINK_SPEED_TO_BW(speed) \ > + Mbps_to_icc(PCIE_SPEED2MBS_ENC(pcie_link_speed[speed])) > + > +int qcom_pcie_common_icc_get_resource(struct dw_pcie *pci, struct icc_path **icc_mem_p) This API can be used for other paths also in the future (like CPU-PCIe). So it should accept the path name and directly return the 'struct icc_path' pointer. > +{ > + *icc_mem_p = devm_of_icc_get(pci->dev, "pcie-mem"); > + if (IS_ERR_OR_NULL(icc_mem_p)) > + return PTR_ERR(icc_mem_p); > + > + return 0; > +} > +EXPORT_SYMBOL_GPL(qcom_pcie_common_icc_get_resource); > + > +int qcom_pcie_common_icc_init(struct dw_pcie *pci, struct icc_path *icc_mem) > +{ > + int ret; > + > + /* > + * Some Qualcomm platforms require interconnect bandwidth constraints > + * to be set before enabling interconnect clocks. > + * > + * Set an initial peak bandwidth corresponding to single-lane Gen 1 > + * for the pcie-mem path. > + */ > + ret = icc_set_bw(icc_mem, 0, QCOM_PCIE_LINK_SPEED_TO_BW(1)); > + if (ret) { > + dev_err(pci->dev, "failed to set interconnect bandwidth: %d\n", > + ret); > + return ret; > + } > + > + return 0; > +} > +EXPORT_SYMBOL_GPL(qcom_pcie_common_icc_init); > + > +void qcom_pcie_common_icc_update(struct dw_pcie *pci, struct icc_path *icc_mem) > +{ > + u32 offset, status; > + int speed, width; > + int ret; > + > + if (!icc_mem) > + return; > + > + offset = dw_pcie_find_capability(pci, PCI_CAP_ID_EXP); > + status = readw(pci->dbi_base + offset + PCI_EXP_LNKSTA); > + > + /* Only update constraints if link is up. */ > + if (!(status & PCI_EXP_LNKSTA_DLLLA)) > + return; > + > + speed = FIELD_GET(PCI_EXP_LNKSTA_CLS, status); > + width = FIELD_GET(PCI_EXP_LNKSTA_NLW, status); > + > + ret = icc_set_bw(icc_mem, 0, width * QCOM_PCIE_LINK_SPEED_TO_BW(speed)); > + if (ret) > + dev_err(pci->dev, "failed to set interconnect bandwidth: %d\n", 'Failed to set bandwidth for PCIe-MEM interconnect path: %d\n' - Mani -- மணிவண்ணன் சதாசிவம்