* [v3 PATCH 1/1] PCI: of: fix non-prefetchable region address range check.
@ 2025-06-18 13:56 Wannes Bouwen (Nokia)
2025-06-18 16:13 ` Bjorn Helgaas
0 siblings, 1 reply; 3+ messages in thread
From: Wannes Bouwen (Nokia) @ 2025-06-18 13:56 UTC (permalink / raw)
To: Bjorn Helgaas, Manivannan Sadhasivam
Cc: Rob Herring, Vidya Sagar, lorenzo.pieralisi@arm.com,
linux-pci@vger.kernel.org
[v3 PATCH 1/1] PCI: of: fix non-prefetchable region address range check.
According to the PCIe spec (PCIe r6.3, sec 7.5.1.3.8), non-prefetchable
memory supports only 32-bit host bridge windows (both base address as
limit address).
In the kernel there is a check that prints a warning if a
non-prefetchable resource's size exceeds the 32-bit limit.
The check currently checks the size of the resource, while actually the
check should be done on the PCIe end address of the non-prefetchable
window.
Move the check to devm_of_pci_get_host_bridge_resources() where the PCIe
addresses are available and use the end address instead of the size of
the window.
Fixes: fede8526cc48 (PCI: of: Warn if non-prefetchable memory aperture
size is > 32-bit)
Signed-off-by: Wannes Bouwen <wannes.bouwen@nokia.com>
---
v3:
- Update subject and description + add changelog
v2:
- Use PCI address range instead of window size to check that window is
within a 32bit boundary.
---
drivers/pci/of.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/drivers/pci/of.c b/drivers/pci/of.c
index 3579265f1198..4fffa32c7c3d 100644
--- a/drivers/pci/of.c
+++ b/drivers/pci/of.c
@@ -400,6 +400,10 @@ static int devm_of_pci_get_host_bridge_resources(struct device *dev,
*io_base = range.cpu_addr;
} else if (resource_type(res) == IORESOURCE_MEM) {
res->flags &= ~IORESOURCE_MEM_64;
+
+ if (!(res->flags & IORESOURCE_PREFETCH))
+ if (upper_32_bits(range.pci_addr + range.size - 1))
+ dev_warn(dev, "Memory resource size exceeds max for 32 bits\n");
}
pci_add_resource_offset(resources, res, res->start - range.pci_addr);
@@ -622,10 +626,6 @@ static int pci_parse_request_of_pci_ranges(struct device *dev,
case IORESOURCE_MEM:
res_valid |= !(res->flags & IORESOURCE_PREFETCH);
- if (!(res->flags & IORESOURCE_PREFETCH))
- if (upper_32_bits(resource_size(res)))
- dev_warn(dev, "Memory resource size exceeds max for 32 bits\n");
-
break;
}
}
--
2.43.5
^ permalink raw reply related [flat|nested] 3+ messages in thread* Re: [v3 PATCH 1/1] PCI: of: fix non-prefetchable region address range check.
2025-06-18 13:56 [v3 PATCH 1/1] PCI: of: fix non-prefetchable region address range check Wannes Bouwen (Nokia)
@ 2025-06-18 16:13 ` Bjorn Helgaas
2025-06-20 7:27 ` Wannes Bouwen (Nokia)
0 siblings, 1 reply; 3+ messages in thread
From: Bjorn Helgaas @ 2025-06-18 16:13 UTC (permalink / raw)
To: Wannes Bouwen (Nokia)
Cc: Manivannan Sadhasivam, Rob Herring, Vidya Sagar,
lorenzo.pieralisi@arm.com, linux-pci@vger.kernel.org
On Wed, Jun 18, 2025 at 01:56:17PM +0000, Wannes Bouwen (Nokia) wrote:
> [v3 PATCH 1/1] PCI: of: fix non-prefetchable region address range check.
>
> According to the PCIe spec (PCIe r6.3, sec 7.5.1.3.8), non-prefetchable
> memory supports only 32-bit host bridge windows (both base address as
> limit address).
>
> In the kernel there is a check that prints a warning if a
> non-prefetchable resource's size exceeds the 32-bit limit.
>
> The check currently checks the size of the resource, while actually the
> check should be done on the PCIe end address of the non-prefetchable
> window.
>
> Move the check to devm_of_pci_get_host_bridge_resources() where the PCIe
> addresses are available and use the end address instead of the size of
> the window.
>
> Fixes: fede8526cc48 (PCI: of: Warn if non-prefetchable memory aperture
> size is > 32-bit)
> Signed-off-by: Wannes Bouwen <wannes.bouwen@nokia.com>
> ---
>
> v3:
> - Update subject and description + add changelog
>
> v2:
> - Use PCI address range instead of window size to check that window is
> within a 32bit boundary.
>
> ---
> drivers/pci/of.c | 8 ++++----
> 1 file changed, 4 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/pci/of.c b/drivers/pci/of.c
> index 3579265f1198..4fffa32c7c3d 100644
> --- a/drivers/pci/of.c
> +++ b/drivers/pci/of.c
> @@ -400,6 +400,10 @@ static int devm_of_pci_get_host_bridge_resources(struct device *dev,
> *io_base = range.cpu_addr;
> } else if (resource_type(res) == IORESOURCE_MEM) {
> res->flags &= ~IORESOURCE_MEM_64;
> +
> + if (!(res->flags & IORESOURCE_PREFETCH))
> + if (upper_32_bits(range.pci_addr + range.size - 1))
> + dev_warn(dev, "Memory resource size exceeds max for 32 bits\n");
Seems mostly right to me. I think we should update the message to
talk about the *address* instead of the size, since that's the real
problem. Also would be nice to include the resource (%pR) and the
corresponding bus addresses as we do in pci_register_host_bridge().
> }
>
> pci_add_resource_offset(resources, res, res->start - range.pci_addr);
> @@ -622,10 +626,6 @@ static int pci_parse_request_of_pci_ranges(struct device *dev,
> case IORESOURCE_MEM:
> res_valid |= !(res->flags & IORESOURCE_PREFETCH);
>
> - if (!(res->flags & IORESOURCE_PREFETCH))
> - if (upper_32_bits(resource_size(res)))
> - dev_warn(dev, "Memory resource size exceeds max for 32 bits\n");
> -
> break;
> }
> }
> --
> 2.43.5
>
^ permalink raw reply [flat|nested] 3+ messages in thread* RE: [v3 PATCH 1/1] PCI: of: fix non-prefetchable region address range check.
2025-06-18 16:13 ` Bjorn Helgaas
@ 2025-06-20 7:27 ` Wannes Bouwen (Nokia)
0 siblings, 0 replies; 3+ messages in thread
From: Wannes Bouwen (Nokia) @ 2025-06-20 7:27 UTC (permalink / raw)
To: Bjorn Helgaas
Cc: Manivannan Sadhasivam, Rob Herring, Vidya Sagar,
lorenzo.pieralisi@arm.com, linux-pci@vger.kernel.org
> > + if (!(res->flags & IORESOURCE_PREFETCH))
> > + if (upper_32_bits(range.pci_addr + range.size - 1))
> > + dev_warn(dev, "Memory resource
> > + size exceeds max for 32 bits\n");
>
> Seems mostly right to me. I think we should update the message to talk about
> the *address* instead of the size, since that's the real problem. Also would be
> nice to include the resource (%pR) and the corresponding bus addresses as we
> do in pci_register_host_bridge().
>
I agree. I will update the message and send out a new patch for review. Thanks for taking the time to have a look!
Kind regards
Wannes
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2025-06-20 7:27 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-06-18 13:56 [v3 PATCH 1/1] PCI: of: fix non-prefetchable region address range check Wannes Bouwen (Nokia)
2025-06-18 16:13 ` Bjorn Helgaas
2025-06-20 7:27 ` Wannes Bouwen (Nokia)
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox