From: Vlad Banea <montrealtango@gmail.com>
To: Yixun Lan <dlan@kernel.org>
Cc: troy.mitchell@linux.spacemit.com, wangruikang@iscas.ac.cn,
guodong.xu@oss.qualcomm.com, jyc0019@gmail.com, robh@kernel.org,
krzk+dt@kernel.org, conor+dt@kernel.org, pjw@kernel.org,
palmer@dabbelt.com, aou@eecs.berkeley.edu, alex@ghiti.fr,
devicetree@vger.kernel.org, linux-riscv@lists.infradead.org,
spacemit@lists.linux.dev, linux-kernel@vger.kernel.org
Subject: [RFC PATCH] riscv: dts: spacemit: k1: give each PCIe port its own DMA window
Date: Wed, 11 Nov 2026 20:51:47 -0500 [thread overview]
Message-ID: <20261112015148.3911178-1-montrealtango@gmail.com> (raw)
The dma-ranges of the shared pcie-bus skip bus addresses
0x8000_0000-0xb7ff_ffff, the union of the three ports' outbound memory
windows. CPU addresses 0x1_0000_0000-0x1_37ff_ffff are therefore
unreachable from all three ports.
SpacemiT's vendor device tree gives each port its own map that skips
only that port's window (dram_range2/6/7). Do the same here. On boards
with more than 4 GB of RAM, each port can then reach another 512-640 MB
without SWIOTLB bouncing.
Signed-off-by: Vlad Banea <montrealtango@gmail.com>
---
Notes:
RFC: the per-port maps come from SpacemiT's Bianbu kernel (linux-6.6,
k1-bl-v2.2.y, arch/riscv/boot/dts/spacemit/k1-x.dtsi). They imply that a
port's inbound DMA to another port's outbound window reaches memory. I
have not verified that on hardware. Yixun, Encrow, can SpacemiT confirm
that this is how the K1 routes inbound PCIe traffic?
On an OrangePi R2S (8 GB, RTL8125B NICs on pcie1 and pcie2), up to 87
SWIOTLB slots were in use under load with the shared bus, and none with
this patch. Receive pages were kept below 4 GB in that test, so only
transmit buffers could use the new ranges.
arch/riscv/boot/dts/spacemit/k1.dtsi | 27 +++++++++++++++++++++++++--
1 file changed, 25 insertions(+), 2 deletions(-)
diff --git a/arch/riscv/boot/dts/spacemit/k1.dtsi b/arch/riscv/boot/dts/spacemit/k1.dtsi
index 3fabfd34114b..949843bb7789 100644
--- a/arch/riscv/boot/dts/spacemit/k1.dtsi
+++ b/arch/riscv/boot/dts/spacemit/k1.dtsi
@@ -1152,13 +1152,14 @@ eth1: ethernet@cac81000 {
};
};
- pcie-bus {
+ pcie0-bus {
compatible = "simple-bus";
ranges;
#address-cells = <2>;
#size-cells = <2>;
+ /* skips pcie0's own window, bus 0x8000_0000-0x8fff_ffff */
dma-ranges = <0x0 0x00000000 0x0 0x00000000 0x0 0x80000000>,
- <0x0 0xb8000000 0x1 0x38000000 0x3 0x48000000>;
+ <0x0 0x90000000 0x1 0x10000000 0x3 0x70000000>;
pcie0: pcie@ca000000 {
device_type = "pci";
@@ -1203,6 +1204,17 @@ pcie0_port: pcie@0 {
ranges;
};
};
+ };
+
+ pcie1-bus {
+ compatible = "simple-bus";
+ ranges;
+ #address-cells = <2>;
+ #size-cells = <2>;
+ /* skips pcie1's own window, bus 0x9000_0000-0x9fff_ffff */
+ dma-ranges = <0x0 0x00000000 0x0 0x00000000 0x0 0x80000000>,
+ <0x0 0x80000000 0x1 0x00000000 0x0 0x10000000>,
+ <0x0 0xa0000000 0x1 0x20000000 0x3 0x60000000>;
pcie1: pcie@ca400000 {
device_type = "pci";
@@ -1247,6 +1259,17 @@ pcie1_port: pcie@0 {
ranges;
};
};
+ };
+
+ pcie2-bus {
+ compatible = "simple-bus";
+ ranges;
+ #address-cells = <2>;
+ #size-cells = <2>;
+ /* skips pcie2's own window, bus 0xa000_0000-0xb7ff_ffff */
+ dma-ranges = <0x0 0x00000000 0x0 0x00000000 0x0 0x80000000>,
+ <0x0 0x80000000 0x1 0x00000000 0x0 0x20000000>,
+ <0x0 0xb8000000 0x1 0x38000000 0x3 0x48000000>;
pcie2: pcie@ca800000 {
device_type = "pci";
base-commit: d05c6236496071916e19012cda7149465f15e66e
--
2.53.0
next reply other threads:[~2026-11-12 1:52 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-11-12 1:51 Vlad Banea [this message]
2026-11-12 6:34 ` [RFC PATCH] riscv: dts: spacemit: k1: give each PCIe port its own DMA window Troy Mitchell
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=20261112015148.3911178-1-montrealtango@gmail.com \
--to=montrealtango@gmail.com \
--cc=alex@ghiti.fr \
--cc=aou@eecs.berkeley.edu \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=dlan@kernel.org \
--cc=guodong.xu@oss.qualcomm.com \
--cc=jyc0019@gmail.com \
--cc=krzk+dt@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-riscv@lists.infradead.org \
--cc=palmer@dabbelt.com \
--cc=pjw@kernel.org \
--cc=robh@kernel.org \
--cc=spacemit@lists.linux.dev \
--cc=troy.mitchell@linux.spacemit.com \
--cc=wangruikang@iscas.ac.cn \
/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