From: "Troy Mitchell" <troy.mitchell@linux.spacemit.com>
To: "Vlad Banea" <montrealtango@gmail.com>
Cc: "Yixun Lan" <dlan@kernel.org>,
"Encrow Thorne" <encrow.thorne@linux.spacemit.com>,
<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: Re: [RFC PATCH] riscv: dts: spacemit: k1: give each PCIe port its own DMA window
Date: Thu, 12 Nov 2026 06:34:13 +0000 [thread overview]
Message-ID: <DMT0UCZC4KST.24J0VPBF3OJFJ@linux.spacemit.com> (raw)
In-Reply-To: <20261112015148.3911178-1-montrealtango@gmail.com>
[-- Attachment #1: Type: text/plain, Size: 2456 bytes --]
On Wed, 11 Nov 2026 20:51:47 -0500, Vlad Banea wrote:
> 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.
This already applies above 2 GB: RAM past the first 2 GB starts at
0x1_0000_0000, so 4 GB boards hit this hole too. Please say "more
than 2 GB", give the hardware reason below instead of pointing at
the vendor tree, and drop the RFC tag.
> 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?
Yes, it reaches memory. On K1 a PCIe master only sees DDR: bus 0-2G
is CPU 0-2G and bus 2G-16G is CPU 4G-18G. The 2G-4G I/O region with
the outbound windows is not reachable from PCIe.
Only the port's own window has to be skipped: it falls inside the
root port's memory window, so the root port does not forward it
upstream.
[...]
> 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>;
The maps for all three ports are correct: each one skips only its
own window and maps the other two windows to DDR, which matches the
address map above.
--
Troy Mitchell
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 273 bytes --]
WARNING: multiple messages have this Message-ID (diff)
From: "Troy Mitchell" <troy.mitchell@linux.spacemit.com>
To: "Vlad Banea" <montrealtango@gmail.com>
Cc: "Yixun Lan" <dlan@kernel.org>,
"Encrow Thorne" <encrow.thorne@linux.spacemit.com>,
<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: Re: [RFC PATCH] riscv: dts: spacemit: k1: give each PCIe port its own DMA window
Date: Thu, 12 Nov 2026 06:34:13 +0000 [thread overview]
Message-ID: <DMT0UCZC4KST.24J0VPBF3OJFJ@linux.spacemit.com> (raw)
In-Reply-To: <20261112015148.3911178-1-montrealtango@gmail.com>
[-- Attachment #1.1: Type: text/plain, Size: 2456 bytes --]
On Wed, 11 Nov 2026 20:51:47 -0500, Vlad Banea wrote:
> 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.
This already applies above 2 GB: RAM past the first 2 GB starts at
0x1_0000_0000, so 4 GB boards hit this hole too. Please say "more
than 2 GB", give the hardware reason below instead of pointing at
the vendor tree, and drop the RFC tag.
> 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?
Yes, it reaches memory. On K1 a PCIe master only sees DDR: bus 0-2G
is CPU 0-2G and bus 2G-16G is CPU 4G-18G. The 2G-4G I/O region with
the outbound windows is not reachable from PCIe.
Only the port's own window has to be skipped: it falls inside the
root port's memory window, so the root port does not forward it
upstream.
[...]
> 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>;
The maps for all three ports are correct: each one skips only its
own window and maps the other two windows to DDR, which matches the
address map above.
--
Troy Mitchell
[-- Attachment #1.2: signature.asc --]
[-- Type: application/pgp-signature, Size: 273 bytes --]
[-- Attachment #2: Type: text/plain, Size: 161 bytes --]
_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv
next prev parent reply other threads:[~2026-11-12 6:34 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-11-12 1:51 [RFC PATCH] riscv: dts: spacemit: k1: give each PCIe port its own DMA window Vlad Banea
2026-11-12 1:51 ` Vlad Banea
2026-11-12 6:34 ` Troy Mitchell [this message]
2026-11-12 6:34 ` 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=DMT0UCZC4KST.24J0VPBF3OJFJ@linux.spacemit.com \
--to=troy.mitchell@linux.spacemit.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=encrow.thorne@linux.spacemit.com \
--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=montrealtango@gmail.com \
--cc=palmer@dabbelt.com \
--cc=pjw@kernel.org \
--cc=robh@kernel.org \
--cc=spacemit@lists.linux.dev \
--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 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.