From: Rob Herring <robh@kernel.org>
To: Serge Semin <Sergey.Semin@baikalelectronics.ru>
Cc: "Bjorn Helgaas" <bhelgaas@google.com>,
"Lorenzo Pieralisi" <lorenzo.pieralisi@arm.com>,
"Jingoo Han" <jingoohan1@gmail.com>,
"Gustavo Pimentel" <gustavo.pimentel@synopsys.com>,
"Krzysztof Wilczyński" <kw@linux.com>,
"Pankaj Dubey" <pankaj.dubey@samsung.com>,
"Shradha Todi" <shradha.t@samsung.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>,
"Manivannan Sadhasivam" <manivannan.sadhasivam@linaro.org>,
linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v4 04/18] PCI: dwc: Set INCREASE_REGION_SIZE flag based on limit address
Date: Mon, 13 Jun 2022 14:07:51 -0600 [thread overview]
Message-ID: <20220613200751.GA4188875-robh@kernel.org> (raw)
In-Reply-To: <20220610082535.12802-5-Sergey.Semin@baikalelectronics.ru>
On Fri, Jun 10, 2022 at 11:25:20AM +0300, Serge Semin wrote:
> It was wrong to use the region size parameter in order to determine
> whether the INCREASE_REGION_SIZE flag needs to be set for the outbound
> iATU entry because in general there are cases when combining a region base
> address and size together produces the out of bounds upper range limit
> while upper_32_bits(size) still returns zero. So having a region size
> within the permitted values doesn't mean the region limit address will fit
> to the corresponding CSR. Here is the way iATU calculates the in- and
> outbound untranslated regions if the INCREASE_REGION_SIZE flag is cleared
> [1]:
>
> Start address: End address:
> 63 31 0 63 31 0
> +---------------+---------------+ +---------------+---------------+
> | | | 0s | | | | Fs |
> +---------------+---------------+ +---------------+---------------+
> upper base | lower base !upper! base | limit address
> address address address
>
> So the region start address is determined by the iATU lower and upper base
> address registers, while the region upper boundary is calculated based on
> the 32-bits limit address register and the upper part of the base address.
> In accordance with that logic for instance the range
> 0xf0000000 @ 0x20000000 does have the size smaller than 4GB, but the
> actual limit address turns to be invalid forming the untranslated address
> map as [0xf0000000; 0x1000FFFF], which isn't what the original range was.
> In order to fix that we need to check whether the size after being added
> to the lower part of the base address causes the 4GB range overflow. If it
> does then we need to set the INCREASE_REGION_SIZE flag thus activating the
> extended limit address by means of an additional iATU CSR (upper limit
> address register) [2]:
>
> Start address: End address:
> 63 31 0 63 x 31 0
> +---------------+---------------+ +---------------+---------------+
> | | | 0s | | | | | Fs |
> +---------------+---------------+ +---------------+---------------+
> upper base | lower base upper | upper | limit address
> address address base | limit |
> address|address|
>
> Otherwise there is enough room in the 32-bits wide limit address register,
> and the flag can be left unset.
>
> Note the case when the size-based flag setting approach is correct implies
> requiring to have the size-aligned base addresses only. But that
> constraint isn't relevant to the PCIe ranges accepted by the kernel.
> There is also no point in implementing it either seeing the problem can be
> easily fixed by checking the whole limit address instead of the region
> size.
>
> [1] DesignWare Cores PCI Express Controller Databook - DWC PCIe Root Port,
> v5.40a, March 2019, fig.3-36, p.175
> [2] DesignWare Cores PCI Express Controller Databook - DWC PCIe Root Port,
> v5.40a, March 2019, fig.3-37, p.176
>
> Fixes: 5b4cf0f65324 ("PCI: dwc: Add upper limit address for outbound iATU")
> Signed-off-by: Serge Semin <Sergey.Semin@baikalelectronics.ru>
> Reviewed-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
> Tested-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
>
> ---
>
> Changelog v2:
> - Fix the end address in the example of the patch log. It should be
> 0x1000FFFF and not 0x0000FFFF (@Manivannan).
> ---
> drivers/pci/controller/dwc/pcie-designware.c | 16 ++++++++++------
> 1 file changed, 10 insertions(+), 6 deletions(-)
Reviewed-by: Rob Herring <robh@kernel.org>
next prev parent reply other threads:[~2022-06-13 20:59 UTC|newest]
Thread overview: 47+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-06-10 8:25 [PATCH v4 00/18] PCI: dwc: Various fixes and cleanups Serge Semin
2022-06-10 8:25 ` [PATCH v4 01/18] PCI: dwc: Stop link in the host init error and de-initialization Serge Semin
2022-06-10 8:25 ` [PATCH v4 02/18] PCI: dwc: Add unroll iATU space support to the regions disable method Serge Semin
2022-06-13 20:00 ` Rob Herring
2022-06-10 8:25 ` [PATCH v4 03/18] PCI: dwc: Disable outbound windows for controllers with iATU Serge Semin
2022-06-13 20:03 ` Rob Herring
2022-06-10 8:25 ` [PATCH v4 04/18] PCI: dwc: Set INCREASE_REGION_SIZE flag based on limit address Serge Semin
2022-06-13 20:07 ` Rob Herring [this message]
2022-06-10 8:25 ` [PATCH v4 05/18] PCI: dwc: Deallocate EPC memory on EP init error Serge Semin
2022-06-13 20:09 ` Rob Herring
2022-06-10 8:25 ` [PATCH v4 06/18] PCI: dwc: Enable CDM-check independently from the num_lanes value Serge Semin
2022-06-13 8:02 ` Vidya Sagar
2022-06-13 20:49 ` Rob Herring
2022-06-10 8:25 ` [PATCH v4 07/18] PCI: dwc: Add braces to the multi-line if-else statements Serge Semin
2022-06-13 20:10 ` Rob Herring
2022-06-10 8:25 ` [PATCH v4 08/18] PCI: dwc: Add trailing new-line literals to the log messages Serge Semin
2022-06-13 20:15 ` Rob Herring
2022-06-10 8:25 ` [PATCH v4 09/18] PCI: dwc: Discard IP-core version checking on unrolled iATU detection Serge Semin
2022-06-13 20:20 ` Rob Herring
2022-06-14 20:14 ` Serge Semin
2022-06-10 8:25 ` [PATCH v4 10/18] PCI: dwc: Convert Link-up status method to using dw_pcie_readl_dbi() Serge Semin
2022-06-13 20:22 ` Rob Herring
2022-06-10 8:25 ` [PATCH v4 11/18] PCI: dwc: Organize local variables usage Serge Semin
2022-06-13 20:26 ` Rob Herring
2022-06-10 8:25 ` [PATCH v4 12/18] PCI: dwc: Re-use local pointer to the resource data Serge Semin
2022-06-13 20:28 ` Rob Herring
2022-06-10 8:25 ` [PATCH v4 13/18] PCI: dwc: Add start_link/stop_link inliners Serge Semin
2022-06-13 20:39 ` Rob Herring
2022-06-10 8:25 ` [PATCH v4 14/18] PCI: dwc: Move io_cfg_atu_shared to the Root Port descriptor Serge Semin
2022-06-13 20:42 ` Rob Herring
2022-06-10 8:25 ` [PATCH v4 15/18] PCI: dwc: Add dw_ prefix to the pcie_port structure name Serge Semin
2022-06-10 14:16 ` Jesper Nilsson
2022-06-10 21:42 ` Serge Semin
2022-06-13 20:48 ` Rob Herring
2022-06-10 8:25 ` [PATCH v4 16/18] PCI: dwc-plat: Simplify the probe method return value handling Serge Semin
2022-06-13 20:44 ` Rob Herring
2022-06-10 8:25 ` [PATCH v4 17/18] PCI: dwc-plat: Discard unused regmap pointer Serge Semin
2022-06-13 20:45 ` Rob Herring
2022-06-10 8:25 ` [PATCH v4 18/18] PCI: dwc-plat: Drop dw_plat_pcie_of_match forward declaration Serge Semin
2022-06-13 20:45 ` Rob Herring
2022-06-10 8:29 ` [PATCH v4 00/18] PCI: dwc: Various fixes and cleanups Serge Semin
2022-06-16 21:04 ` Manivannan Sadhasivam
2022-06-17 10:42 ` Serge Semin
2022-06-16 20:03 ` Bjorn Helgaas
2022-06-17 10:41 ` Serge Semin
2022-06-17 11:29 ` Bjorn Helgaas
2022-06-17 13:11 ` 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=20220613200751.GA4188875-robh@kernel.org \
--to=robh@kernel.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=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=manivannan.sadhasivam@linaro.org \
--cc=pankaj.dubey@samsung.com \
--cc=shradha.t@samsung.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox