From: <guo.ziliang@zte.com.cn>
To: <helgaas@kernel.org>
Cc: <bhelgaas@google.com>, <linux-pci@vger.kernel.org>,
<linux-kernel@vger.kernel.org>, <chen.lin5@zte.com.cn>
Subject: 答复: [PATCH] PCI: of: Warn if bridge base/limit region overlaps with system ram region
Date: Mon, 9 Jan 2023 16:35:25 +0800 (CST) [thread overview]
Message-ID: <202301091635256312056@zte.com.cn> (raw)
In-Reply-To: <20230106121845.GA1216249@bhelgaas>
bridge base/limit(memory behind in lspci info, outbound pcie address/size)
region is used to route outbound mem read/write transaction to ep. This
base/limit region also may filter out inbound transactions which will
result in inbound(eg: dma) transaction fail.
For example, if bridge base/limit is [0x20000000, 0x203fffff], system ram
is [0x20000000, 0x27ffffff]. The inbound mapping is usually 1:1 equal
mapping. When allocated system ram for inbound tansaction is 0x20004000
(any in bridge base/limit), this inbound transactions will be filter out.
AER may report 'UnsupReq' on inbound mem read/write transactions if address
is in this base/limit region, but not all pcie AER enabled or work well. We
warn it also in bridge pci address setting phase.
Signed-off-by: Chen Lin <chen.lin5@zte.com.cn>
---
drivers/pci/setup-bus.c | 20 ++++++++++++++++++++
1 file changed, 20 insertions(+)
diff --git a/drivers/pci/setup-bus.c b/drivers/pci/setup-bus.c
index b4096598dbcb..1a9f527d2317 100644
--- a/drivers/pci/setup-bus.c
+++ b/drivers/pci/setup-bus.c
@@ -608,6 +608,24 @@ static void pci_setup_bridge_io(struct pci_dev *bridge)
pci_write_config_dword(bridge, PCI_IO_BASE_UPPER16, io_upper16);
}
+static void check_bridge_region_overlaps_systemram(struct pci_dev *bridge,
+ struct pci_bus_region *region)
+{
+ int is_ram;
+
+ /*
+ * bridge base/limit(memory behind) region may filter out inbound
+ * transactions which will result in inbound(eg: dma) fail of ep.
+ * AER may report it if enabled, we warn it also.
+ */
+ is_ram = region_intersects(region->start, region->end - region->start + 1,
+ IORESOURCE_SYSTEM_RAM, IORES_DESC_NONE);
+ if (is_ram == REGION_INTERSECTS) {
+ pci_warn(bridge, "%#012llx..%#012llx bridge base/limit region overlaps with system ram, may result in inbound fail\n",
+ region->start, region->end);
+ }
+}
+
static void pci_setup_bridge_mmio(struct pci_dev *bridge)
{
struct resource *res;
@@ -621,6 +639,7 @@ static void pci_setup_bridge_mmio(struct pci_dev *bridge)
l = (region.start >> 16) & 0xfff0;
l |= region.end & 0xfff00000;
pci_info(bridge, " bridge window %pR\n", res);
+ check_bridge_region_overlaps_systemram(bridge, ®ion);
} else {
l = 0x0000fff0;
}
@@ -652,6 +671,7 @@ static void pci_setup_bridge_mmio_pref(struct pci_dev *bridge)
lu = upper_32_bits(region.end);
}
pci_info(bridge, " bridge window %pR\n", res);
+ check_bridge_region_overlaps_systemram(bridge, ®ion);
} else {
l = 0x0000fff0;
}
--
2.15.2
next prev parent reply other threads:[~2023-01-09 8:35 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-01-06 8:47 [PATCH] PCI: of: Warn if bridge base/limit region overlaps with system ram region guo.ziliang
2023-01-06 12:18 ` Bjorn Helgaas
2023-01-09 8:35 ` guo.ziliang [this message]
2023-01-09 12:26 ` 答复: " kernel test robot
2023-01-09 13:17 ` kernel test robot
2023-02-16 23:35 ` Bjorn Helgaas
2023-02-20 12:25 ` Robin Murphy
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=202301091635256312056@zte.com.cn \
--to=guo.ziliang@zte.com.cn \
--cc=bhelgaas@google.com \
--cc=chen.lin5@zte.com.cn \
--cc=helgaas@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@vger.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.