All of lore.kernel.org
 help / color / mirror / Atom feed
From: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
To: Serge Semin <Sergey.Semin@baikalelectronics.ru>
Cc: "Rob Herring" <robh@kernel.org>,
	"Bjorn Helgaas" <bhelgaas@google.com>,
	"Lorenzo Pieralisi" <lorenzo.pieralisi@arm.com>,
	"Jingoo Han" <jingoohan1@gmail.com>,
	"Gustavo Pimentel" <gustavo.pimentel@synopsys.com>,
	"Lorenzo Pieralisi" <lpieralisi@kernel.org>,
	"Krzysztof Wilczyński" <kw@linux.com>,
	"Serge Semin" <fancer.lancer@gmail.com>,
	"Alexey Malahov" <Alexey.Malahov@baikalelectronics.ru>,
	"Pavel Parkhomenko" <Pavel.Parkhomenko@baikalelectronics.ru>,
	"Frank Li" <Frank.Li@nxp.com>, "Rob Herring" <robh+dt@kernel.org>,
	linux-pci@vger.kernel.org, devicetree@vger.kernel.org,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH RESEND v4 12/15] PCI: dwc: Add iATU regions size detection procedure
Date: Mon, 1 Aug 2022 19:22:28 +0530	[thread overview]
Message-ID: <20220801135228.GL93763@thinkpad> (raw)
In-Reply-To: <20220624143947.8991-13-Sergey.Semin@baikalelectronics.ru>

On Fri, Jun 24, 2022 at 05:39:44PM +0300, Serge Semin wrote:
> Depending on the DWC PCIe RC/EP/DM IP-core configuration parameters the
> controllers can be equipped not only with various number of inbound and
> outbound iATU windows, but with varied regions settings like alignment
> (which is also the minimum window size), minimum and maximum sizes. So to
> speak if internal ATU is enabled for the denoted IP-cores then the former
> settings will be defined by the CX_ATU_MIN_REGION_SIZE parameter while the
> later one will be determined by the CX_ATU_MAX_REGION_SIZE configuration
> parameter. Anyway having these parameters used in the driver will help to
> verify whether the requested inbound or outbound memory mappings can be
> fully created. Currently the driver doesn't perform any corresponding
> checking.
> 
> Note 1. The extended iATU regions have been supported since DWC PCIe
> v4.60a. There is no need in testing the upper limit register availability
> for the older cores.
> 
> Note 2. The regions alignment is determined with using the fls() method
> since the lower four bits of the ATU Limit register can be occupied with
> the Circular Buffer Increment setting, which can be initialized with
> zeros.
> 
> The (dma-)ranges verification will be added a bit later in one of the next
> commits.
> 
> Signed-off-by: Serge Semin <Sergey.Semin@baikalelectronics.ru>

Reviewed-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>

Thanks,
Mani

> Reviewed-by: Rob Herring <robh@kernel.org>
> ---
>  drivers/pci/controller/dwc/pcie-designware.c | 33 +++++++++++++++++---
>  drivers/pci/controller/dwc/pcie-designware.h |  2 ++
>  2 files changed, 31 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/pci/controller/dwc/pcie-designware.c b/drivers/pci/controller/dwc/pcie-designware.c
> index f2aa65d02a6c..776752891d11 100644
> --- a/drivers/pci/controller/dwc/pcie-designware.c
> +++ b/drivers/pci/controller/dwc/pcie-designware.c
> @@ -8,9 +8,11 @@
>   * Author: Jingoo Han <jg1.han@samsung.com>
>   */
>  
> +#include <linux/bitops.h>
>  #include <linux/delay.h>
>  #include <linux/of.h>
>  #include <linux/of_platform.h>
> +#include <linux/sizes.h>
>  #include <linux/types.h>
>  
>  #include "../../pci.h"
> @@ -525,7 +527,8 @@ static bool dw_pcie_iatu_unroll_enabled(struct dw_pcie *pci)
>  static void dw_pcie_iatu_detect_regions(struct dw_pcie *pci)
>  {
>  	int max_region, ob, ib;
> -	u32 val;
> +	u32 val, min, dir;
> +	u64 max;
>  
>  	if (pci->iatu_unroll_enabled) {
>  		max_region = min((int)pci->atu_size / 512, 256);
> @@ -548,8 +551,29 @@ static void dw_pcie_iatu_detect_regions(struct dw_pcie *pci)
>  			break;
>  	}
>  
> -	pci->num_ib_windows = ib;
> +	if (ob) {
> +		dir = PCIE_ATU_REGION_DIR_OB;
> +	} else if (ib) {
> +		dir = PCIE_ATU_REGION_DIR_IB;
> +	} else {
> +		dev_err(pci->dev, "No iATU regions found\n");
> +		return;
> +	}
> +
> +	dw_pcie_writel_atu(pci, dir, 0, PCIE_ATU_LIMIT, 0x0);
> +	min = dw_pcie_readl_atu(pci, dir, 0, PCIE_ATU_LIMIT);
> +
> +	if (dw_pcie_ver_is_ge(pci, 460A)) {
> +		dw_pcie_writel_atu(pci, dir, 0, PCIE_ATU_UPPER_LIMIT, 0xFFFFFFFF);
> +		max = dw_pcie_readl_atu(pci, dir, 0, PCIE_ATU_UPPER_LIMIT);
> +	} else {
> +		max = 0;
> +	}
> +
>  	pci->num_ob_windows = ob;
> +	pci->num_ib_windows = ib;
> +	pci->region_align = 1 << fls(min);
> +	pci->region_limit = (max << 32) | (SZ_4G - 1);
>  }
>  
>  void dw_pcie_iatu_detect(struct dw_pcie *pci)
> @@ -582,8 +606,9 @@ void dw_pcie_iatu_detect(struct dw_pcie *pci)
>  	dev_info(pci->dev, "iATU unroll: %s\n", pci->iatu_unroll_enabled ?
>  		"enabled" : "disabled");
>  
> -	dev_info(pci->dev, "Detected iATU regions: %u outbound, %u inbound\n",
> -		 pci->num_ob_windows, pci->num_ib_windows);
> +	dev_info(pci->dev, "iATU regions: %u ob, %u ib, align %uK, limit %lluG\n",
> +		 pci->num_ob_windows, pci->num_ib_windows,
> +		 pci->region_align / SZ_1K, (pci->region_limit + 1) / SZ_1G);
>  }
>  
>  void dw_pcie_setup(struct dw_pcie *pci)
> diff --git a/drivers/pci/controller/dwc/pcie-designware.h b/drivers/pci/controller/dwc/pcie-designware.h
> index c18f0db09b31..25c86771c810 100644
> --- a/drivers/pci/controller/dwc/pcie-designware.h
> +++ b/drivers/pci/controller/dwc/pcie-designware.h
> @@ -272,6 +272,8 @@ struct dw_pcie {
>  	size_t			atu_size;
>  	u32			num_ib_windows;
>  	u32			num_ob_windows;
> +	u32			region_align;
> +	u64			region_limit;
>  	struct dw_pcie_rp	pp;
>  	struct dw_pcie_ep	ep;
>  	const struct dw_pcie_ops *ops;
> -- 
> 2.35.1
> 

-- 
மணிவண்ணன் சதாசிவம்

  reply	other threads:[~2022-08-01 13:52 UTC|newest]

Thread overview: 53+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-06-24 14:39 [PATCH RESEND v4 00/15] PCI: dwc: Add hw version and dma-ranges support Serge Semin
2022-06-24 14:39 ` [PATCH RESEND v4 01/15] PCI: dwc: Add more verbose link-up message Serge Semin
2022-08-01 12:59   ` Manivannan Sadhasivam
2022-06-24 14:39 ` [PATCH RESEND v4 02/15] PCI: dwc: Detect iATU settings after getting "addr_space" resource Serge Semin
2022-07-28 14:38   ` Bjorn Helgaas
2022-08-01 13:01   ` Manivannan Sadhasivam
2022-06-24 14:39 ` [PATCH RESEND v4 03/15] PCI: dwc: Convert to using native IP-core versions representation Serge Semin
2022-07-28 15:24   ` Bjorn Helgaas
2022-07-28 15:31     ` Ben Dooks
2022-07-28 16:34       ` Bjorn Helgaas
2022-07-28 18:53     ` Serge Semin
2022-08-01 13:07   ` Manivannan Sadhasivam
2022-06-24 14:39 ` [PATCH RESEND v4 04/15] PCI: dwc: Add IP-core version detection procedure Serge Semin
2022-08-01 13:12   ` Manivannan Sadhasivam
2022-08-01 20:06     ` Bjorn Helgaas
2022-08-02  7:31       ` Manivannan Sadhasivam
2022-06-24 14:39 ` [PATCH RESEND v4 05/15] PCI: dwc: Introduce Synopsys IP-core versions/types interface Serge Semin
2022-08-01 13:21   ` Manivannan Sadhasivam
2022-06-24 14:39 ` [PATCH RESEND v4 06/15] PCI: intel-gw: Drop manual DW PCIe controller version setup Serge Semin
2022-08-01 13:28   ` Manivannan Sadhasivam
2022-06-24 14:39 ` [PATCH RESEND v4 07/15] PCI: tegra194: " Serge Semin
2022-06-27  7:59   ` Vidya Sagar
2022-06-27 22:31     ` Serge Semin
2022-08-01 13:29   ` Manivannan Sadhasivam
2022-06-24 14:39 ` [PATCH RESEND v4 08/15] PCI: dwc: Add host de-initialization callback Serge Semin
2022-08-01 13:33   ` Manivannan Sadhasivam
2022-06-24 14:39 ` [PATCH RESEND v4 09/15] PCI: dwc: Drop inbound iATU types enumeration - dw_pcie_as_type Serge Semin
2022-08-01 13:36   ` Manivannan Sadhasivam
2022-06-24 14:39 ` [PATCH RESEND v4 10/15] PCI: dwc: Drop iATU regions enumeration - dw_pcie_region_type Serge Semin
2022-08-01 13:37   ` Manivannan Sadhasivam
2022-06-24 14:39 ` [PATCH RESEND v4 11/15] PCI: dwc: Simplify in/outbound iATU setup methods Serge Semin
2022-08-01 13:50   ` Manivannan Sadhasivam
2022-08-01 20:11     ` Bjorn Helgaas
2022-06-24 14:39 ` [PATCH RESEND v4 12/15] PCI: dwc: Add iATU regions size detection procedure Serge Semin
2022-08-01 13:52   ` Manivannan Sadhasivam [this message]
2022-06-24 14:39 ` [PATCH RESEND v4 13/15] PCI: dwc: Verify in/out regions against iATU constraints Serge Semin
2022-08-01 13:53   ` Manivannan Sadhasivam
2022-06-24 14:39 ` [PATCH RESEND v4 14/15] PCI: dwc: Check iATU in/outbound ranges setup methods status Serge Semin
2022-08-01 13:54   ` Manivannan Sadhasivam
2022-08-01 20:17     ` Bjorn Helgaas
2022-06-24 14:39 ` [PATCH RESEND v4 15/15] PCI: dwc: Introduce dma-ranges property support for RC-host Serge Semin
2022-07-28 22:11   ` Bjorn Helgaas
2022-07-29  4:52     ` Serge Semin
2022-07-29 11:33       ` Bjorn Helgaas
2022-07-29 14:38         ` Serge Semin
2022-08-01 14:00   ` Manivannan Sadhasivam
2022-08-09 20:07     ` Serge Semin
2022-07-11 18:48 ` [PATCH RESEND v4 00/15] PCI: dwc: Add hw version and dma-ranges support Serge Semin
2022-07-27 22:49 ` Bjorn Helgaas
2022-07-28 12:21   ` Serge Semin
2022-07-29  2:36 ` Bjorn Helgaas
2022-09-28  8:10   ` Lorenzo Pieralisi
2022-09-28 10:53     ` Serge Semin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220801135228.GL93763@thinkpad \
    --to=manivannan.sadhasivam@linaro.org \
    --cc=Alexey.Malahov@baikalelectronics.ru \
    --cc=Frank.Li@nxp.com \
    --cc=Pavel.Parkhomenko@baikalelectronics.ru \
    --cc=Sergey.Semin@baikalelectronics.ru \
    --cc=bhelgaas@google.com \
    --cc=devicetree@vger.kernel.org \
    --cc=fancer.lancer@gmail.com \
    --cc=gustavo.pimentel@synopsys.com \
    --cc=jingoohan1@gmail.com \
    --cc=kw@linux.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pci@vger.kernel.org \
    --cc=lorenzo.pieralisi@arm.com \
    --cc=lpieralisi@kernel.org \
    --cc=robh+dt@kernel.org \
    --cc=robh@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.