UART devices in Spacemit K1 use dma-bus DMA translations. Move these
nodes under dma-bus to reflect this fact.
Signed-off-by: Vivian Wang <wangruikang@iscas.ac.cn>
---
arch/riscv/boot/dts/spacemit/k1.dtsi | 246 ++++++++++++++++++-----------------
1 file changed, 128 insertions(+), 118 deletions(-)
diff --git a/arch/riscv/boot/dts/spacemit/k1.dtsi b/arch/riscv/boot/dts/spacemit/k1.dtsi
index 99c76997b367f733c9dda2c30dd85817294ef9b7..0d41694699851e672a833601b62c2b2ad3daae79 100644
--- a/arch/riscv/boot/dts/spacemit/k1.dtsi
+++ b/arch/riscv/boot/dts/spacemit/k1.dtsi
@@ -357,114 +357,6 @@ syscon_apbc: system-controller@d4015000 {
#reset-cells = <1>;
};
- uart0: serial@d4017000 {
- compatible = "spacemit,k1-uart", "intel,xscale-uart";
- reg = <0x0 0xd4017000 0x0 0x100>;
- clocks = <&syscon_apbc CLK_UART0>,
- <&syscon_apbc CLK_UART0_BUS>;
- clock-names = "core", "bus";
- interrupts = <42>;
- reg-shift = <2>;
- reg-io-width = <4>;
- status = "disabled";
- };
-
- uart2: serial@d4017100 {
- compatible = "spacemit,k1-uart", "intel,xscale-uart";
- reg = <0x0 0xd4017100 0x0 0x100>;
- clocks = <&syscon_apbc CLK_UART2>,
- <&syscon_apbc CLK_UART2_BUS>;
- clock-names = "core", "bus";
- interrupts = <44>;
- reg-shift = <2>;
- reg-io-width = <4>;
- status = "disabled";
- };
-
- uart3: serial@d4017200 {
- compatible = "spacemit,k1-uart", "intel,xscale-uart";
- reg = <0x0 0xd4017200 0x0 0x100>;
- clocks = <&syscon_apbc CLK_UART3>,
- <&syscon_apbc CLK_UART3_BUS>;
- clock-names = "core", "bus";
- interrupts = <45>;
- reg-shift = <2>;
- reg-io-width = <4>;
- status = "disabled";
- };
-
- uart4: serial@d4017300 {
- compatible = "spacemit,k1-uart", "intel,xscale-uart";
- reg = <0x0 0xd4017300 0x0 0x100>;
- clocks = <&syscon_apbc CLK_UART4>,
- <&syscon_apbc CLK_UART4_BUS>;
- clock-names = "core", "bus";
- interrupts = <46>;
- reg-shift = <2>;
- reg-io-width = <4>;
- status = "disabled";
- };
-
- uart5: serial@d4017400 {
- compatible = "spacemit,k1-uart", "intel,xscale-uart";
- reg = <0x0 0xd4017400 0x0 0x100>;
- clocks = <&syscon_apbc CLK_UART5>,
- <&syscon_apbc CLK_UART5_BUS>;
- clock-names = "core", "bus";
- interrupts = <47>;
- reg-shift = <2>;
- reg-io-width = <4>;
- status = "disabled";
- };
-
- uart6: serial@d4017500 {
- compatible = "spacemit,k1-uart", "intel,xscale-uart";
- reg = <0x0 0xd4017500 0x0 0x100>;
- clocks = <&syscon_apbc CLK_UART6>,
- <&syscon_apbc CLK_UART6_BUS>;
- clock-names = "core", "bus";
- interrupts = <48>;
- reg-shift = <2>;
- reg-io-width = <4>;
- status = "disabled";
- };
-
- uart7: serial@d4017600 {
- compatible = "spacemit,k1-uart", "intel,xscale-uart";
- reg = <0x0 0xd4017600 0x0 0x100>;
- clocks = <&syscon_apbc CLK_UART7>,
- <&syscon_apbc CLK_UART7_BUS>;
- clock-names = "core", "bus";
- interrupts = <49>;
- reg-shift = <2>;
- reg-io-width = <4>;
- status = "disabled";
- };
-
- uart8: serial@d4017700 {
- compatible = "spacemit,k1-uart", "intel,xscale-uart";
- reg = <0x0 0xd4017700 0x0 0x100>;
- clocks = <&syscon_apbc CLK_UART8>,
- <&syscon_apbc CLK_UART8_BUS>;
- clock-names = "core", "bus";
- interrupts = <50>;
- reg-shift = <2>;
- reg-io-width = <4>;
- status = "disabled";
- };
-
- uart9: serial@d4017800 {
- compatible = "spacemit,k1-uart", "intel,xscale-uart";
- reg = <0x0 0xd4017800 0x0 0x100>;
- clocks = <&syscon_apbc CLK_UART9>,
- <&syscon_apbc CLK_UART9_BUS>;
- clock-names = "core", "bus";
- interrupts = <51>;
- reg-shift = <2>;
- reg-io-width = <4>;
- status = "disabled";
- };
-
gpio: gpio@d4019000 {
compatible = "spacemit,k1-gpio";
reg = <0x0 0xd4019000 0x0 0x100>;
@@ -562,16 +454,6 @@ clint: timer@e4000000 {
<&cpu7_intc 3>, <&cpu7_intc 7>;
};
- sec_uart1: serial@f0612000 {
- compatible = "spacemit,k1-uart", "intel,xscale-uart";
- reg = <0x0 0xf0612000 0x0 0x100>;
- interrupts = <43>;
- clock-frequency = <14857000>;
- reg-shift = <2>;
- reg-io-width = <4>;
- status = "reserved"; /* for TEE usage */
- };
-
camera-bus {
compatible = "simple-bus";
ranges;
@@ -588,6 +470,134 @@ dma-bus {
#size-cells = <2>;
dma-ranges = <0x0 0x00000000 0x0 0x00000000 0x0 0x80000000>,
<0x1 0x00000000 0x1 0x80000000 0x3 0x00000000>;
+
+ uart0: serial@d4017000 {
+ compatible = "spacemit,k1-uart",
+ "intel,xscale-uart";
+ reg = <0x0 0xd4017000 0x0 0x100>;
+ clocks = <&syscon_apbc CLK_UART0>,
+ <&syscon_apbc CLK_UART0_BUS>;
+ clock-names = "core", "bus";
+ interrupts = <42>;
+ reg-shift = <2>;
+ reg-io-width = <4>;
+ status = "disabled";
+ };
+
+ uart2: serial@d4017100 {
+ compatible = "spacemit,k1-uart",
+ "intel,xscale-uart";
+ reg = <0x0 0xd4017100 0x0 0x100>;
+ clocks = <&syscon_apbc CLK_UART2>,
+ <&syscon_apbc CLK_UART2_BUS>;
+ clock-names = "core", "bus";
+ interrupts = <44>;
+ reg-shift = <2>;
+ reg-io-width = <4>;
+ status = "disabled";
+ };
+
+ uart3: serial@d4017200 {
+ compatible = "spacemit,k1-uart",
+ "intel,xscale-uart";
+ reg = <0x0 0xd4017200 0x0 0x100>;
+ clocks = <&syscon_apbc CLK_UART3>,
+ <&syscon_apbc CLK_UART3_BUS>;
+ clock-names = "core", "bus";
+ interrupts = <45>;
+ reg-shift = <2>;
+ reg-io-width = <4>;
+ status = "disabled";
+ };
+
+ uart4: serial@d4017300 {
+ compatible = "spacemit,k1-uart",
+ "intel,xscale-uart";
+ reg = <0x0 0xd4017300 0x0 0x100>;
+ clocks = <&syscon_apbc CLK_UART4>,
+ <&syscon_apbc CLK_UART4_BUS>;
+ clock-names = "core", "bus";
+ interrupts = <46>;
+ reg-shift = <2>;
+ reg-io-width = <4>;
+ status = "disabled";
+ };
+
+ uart5: serial@d4017400 {
+ compatible = "spacemit,k1-uart",
+ "intel,xscale-uart";
+ reg = <0x0 0xd4017400 0x0 0x100>;
+ clocks = <&syscon_apbc CLK_UART5>,
+ <&syscon_apbc CLK_UART5_BUS>;
+ clock-names = "core", "bus";
+ interrupts = <47>;
+ reg-shift = <2>;
+ reg-io-width = <4>;
+ status = "disabled";
+ };
+
+ uart6: serial@d4017500 {
+ compatible = "spacemit,k1-uart",
+ "intel,xscale-uart";
+ reg = <0x0 0xd4017500 0x0 0x100>;
+ clocks = <&syscon_apbc CLK_UART6>,
+ <&syscon_apbc CLK_UART6_BUS>;
+ clock-names = "core", "bus";
+ interrupts = <48>;
+ reg-shift = <2>;
+ reg-io-width = <4>;
+ status = "disabled";
+ };
+
+ uart7: serial@d4017600 {
+ compatible = "spacemit,k1-uart",
+ "intel,xscale-uart";
+ reg = <0x0 0xd4017600 0x0 0x100>;
+ clocks = <&syscon_apbc CLK_UART7>,
+ <&syscon_apbc CLK_UART7_BUS>;
+ clock-names = "core", "bus";
+ interrupts = <49>;
+ reg-shift = <2>;
+ reg-io-width = <4>;
+ status = "disabled";
+ };
+
+ uart8: serial@d4017700 {
+ compatible = "spacemit,k1-uart",
+ "intel,xscale-uart";
+ reg = <0x0 0xd4017700 0x0 0x100>;
+ clocks = <&syscon_apbc CLK_UART8>,
+ <&syscon_apbc CLK_UART8_BUS>;
+ clock-names = "core", "bus";
+ interrupts = <50>;
+ reg-shift = <2>;
+ reg-io-width = <4>;
+ status = "disabled";
+ };
+
+ uart9: serial@d4017800 {
+ compatible = "spacemit,k1-uart",
+ "intel,xscale-uart";
+ reg = <0x0 0xd4017800 0x0 0x100>;
+ clocks = <&syscon_apbc CLK_UART9>,
+ <&syscon_apbc CLK_UART9_BUS>;
+ clock-names = "core", "bus";
+ interrupts = <51>;
+ reg-shift = <2>;
+ reg-io-width = <4>;
+ status = "disabled";
+ };
+
+ sec_uart1: serial@f0612000 {
+ compatible = "spacemit,k1-uart",
+ "intel,xscale-uart";
+ reg = <0x0 0xf0612000 0x0 0x100>;
+ interrupts = <43>;
+ clock-frequency = <14857000>;
+ reg-shift = <2>;
+ reg-io-width = <4>;
+ status = "reserved"; /* for TEE usage */
+ };
};
multimedia-bus {
--
2.49.0
On Mon, Jun 23, 2025 at 6:04 PM Vivian Wang <wangruikang@iscas.ac.cn> wrote: > > UART devices in Spacemit K1 use dma-bus DMA translations. Move these > nodes under dma-bus to reflect this fact. > > Signed-off-by: Vivian Wang <wangruikang@iscas.ac.cn> > --- > arch/riscv/boot/dts/spacemit/k1.dtsi | 246 ++++++++++++++++++----------------- > 1 file changed, 128 insertions(+), 118 deletions(-) > > diff --git a/arch/riscv/boot/dts/spacemit/k1.dtsi b/arch/riscv/boot/dts/spacemit/k1.dtsi > index 99c76997b367f733c9dda2c30dd85817294ef9b7..0d41694699851e672a833601b62c2b2ad3daae79 100644 > --- a/arch/riscv/boot/dts/spacemit/k1.dtsi > +++ b/arch/riscv/boot/dts/spacemit/k1.dtsi > @@ -357,114 +357,6 @@ syscon_apbc: system-controller@d4015000 { > #reset-cells = <1>; > }; > > - uart0: serial@d4017000 { > - compatible = "spacemit,k1-uart", "intel,xscale-uart"; > - reg = <0x0 0xd4017000 0x0 0x100>; > - clocks = <&syscon_apbc CLK_UART0>, > - <&syscon_apbc CLK_UART0_BUS>; > - clock-names = "core", "bus"; > - interrupts = <42>; > - reg-shift = <2>; > - reg-io-width = <4>; > - status = "disabled"; > - }; > - > - uart2: serial@d4017100 { > - compatible = "spacemit,k1-uart", "intel,xscale-uart"; > - reg = <0x0 0xd4017100 0x0 0x100>; > - clocks = <&syscon_apbc CLK_UART2>, > - <&syscon_apbc CLK_UART2_BUS>; > - clock-names = "core", "bus"; > - interrupts = <44>; > - reg-shift = <2>; > - reg-io-width = <4>; > - status = "disabled"; > - }; > - > - uart3: serial@d4017200 { > - compatible = "spacemit,k1-uart", "intel,xscale-uart"; > - reg = <0x0 0xd4017200 0x0 0x100>; > - clocks = <&syscon_apbc CLK_UART3>, > - <&syscon_apbc CLK_UART3_BUS>; > - clock-names = "core", "bus"; > - interrupts = <45>; > - reg-shift = <2>; > - reg-io-width = <4>; > - status = "disabled"; > - }; > - > - uart4: serial@d4017300 { > - compatible = "spacemit,k1-uart", "intel,xscale-uart"; > - reg = <0x0 0xd4017300 0x0 0x100>; > - clocks = <&syscon_apbc CLK_UART4>, > - <&syscon_apbc CLK_UART4_BUS>; > - clock-names = "core", "bus"; > - interrupts = <46>; > - reg-shift = <2>; > - reg-io-width = <4>; > - status = "disabled"; > - }; > - > - uart5: serial@d4017400 { > - compatible = "spacemit,k1-uart", "intel,xscale-uart"; > - reg = <0x0 0xd4017400 0x0 0x100>; > - clocks = <&syscon_apbc CLK_UART5>, > - <&syscon_apbc CLK_UART5_BUS>; > - clock-names = "core", "bus"; > - interrupts = <47>; > - reg-shift = <2>; > - reg-io-width = <4>; > - status = "disabled"; > - }; > - > - uart6: serial@d4017500 { > - compatible = "spacemit,k1-uart", "intel,xscale-uart"; > - reg = <0x0 0xd4017500 0x0 0x100>; > - clocks = <&syscon_apbc CLK_UART6>, > - <&syscon_apbc CLK_UART6_BUS>; > - clock-names = "core", "bus"; > - interrupts = <48>; > - reg-shift = <2>; > - reg-io-width = <4>; > - status = "disabled"; > - }; > - > - uart7: serial@d4017600 { > - compatible = "spacemit,k1-uart", "intel,xscale-uart"; > - reg = <0x0 0xd4017600 0x0 0x100>; > - clocks = <&syscon_apbc CLK_UART7>, > - <&syscon_apbc CLK_UART7_BUS>; > - clock-names = "core", "bus"; > - interrupts = <49>; > - reg-shift = <2>; > - reg-io-width = <4>; > - status = "disabled"; > - }; > - > - uart8: serial@d4017700 { > - compatible = "spacemit,k1-uart", "intel,xscale-uart"; > - reg = <0x0 0xd4017700 0x0 0x100>; > - clocks = <&syscon_apbc CLK_UART8>, > - <&syscon_apbc CLK_UART8_BUS>; > - clock-names = "core", "bus"; > - interrupts = <50>; > - reg-shift = <2>; > - reg-io-width = <4>; > - status = "disabled"; > - }; > - > - uart9: serial@d4017800 { > - compatible = "spacemit,k1-uart", "intel,xscale-uart"; > - reg = <0x0 0xd4017800 0x0 0x100>; > - clocks = <&syscon_apbc CLK_UART9>, > - <&syscon_apbc CLK_UART9_BUS>; > - clock-names = "core", "bus"; > - interrupts = <51>; > - reg-shift = <2>; > - reg-io-width = <4>; > - status = "disabled"; > - }; > - > gpio: gpio@d4019000 { > compatible = "spacemit,k1-gpio"; > reg = <0x0 0xd4019000 0x0 0x100>; > @@ -562,16 +454,6 @@ clint: timer@e4000000 { > <&cpu7_intc 3>, <&cpu7_intc 7>; > }; > > - sec_uart1: serial@f0612000 { > - compatible = "spacemit,k1-uart", "intel,xscale-uart"; > - reg = <0x0 0xf0612000 0x0 0x100>; > - interrupts = <43>; > - clock-frequency = <14857000>; > - reg-shift = <2>; > - reg-io-width = <4>; > - status = "reserved"; /* for TEE usage */ > - }; > - Are you sure sec_uart1 should be placed under the dma_bus? Please double check. If sec_uart1 and other peripherals supported by the secure DMA (base address: 0xF0600000) share the same address mapping as dma_bus, and if they can be accessed by the linux kernel in some cases (as saying 'reserved'), then that makes sense. If not, better not move them. -- Guodong
On 6/24/25 20:21, Guodong Xu wrote: > On Mon, Jun 23, 2025 at 6:04 PM Vivian Wang <wangruikang@iscas.ac.cn> wrote: >> UART devices in Spacemit K1 use dma-bus DMA translations. Move these >> nodes under dma-bus to reflect this fact. ... >> >> - sec_uart1: serial@f0612000 { >> - compatible = "spacemit,k1-uart", "intel,xscale-uart"; >> - reg = <0x0 0xf0612000 0x0 0x100>; >> - interrupts = <43>; >> - clock-frequency = <14857000>; >> - reg-shift = <2>; >> - reg-io-width = <4>; >> - status = "reserved"; /* for TEE usage */ >> - }; >> - > Are you sure sec_uart1 should be placed under the dma_bus? Please double > check. If sec_uart1 and other peripherals supported by the secure DMA > (base address: 0xF0600000) share the same address mapping as dma_bus, and > if they can be accessed by the linux kernel in some cases (as saying > 'reserved'), then that makes sense. If not, better not move them. Hi Guodong, I have confirmed with SpacemiT that sec_uart1 uses dram_range4, a.k.a. dma-bus, which is same as the rest of the UARTs. Also, sec_uart1 is usable in e.g. Linux, but only if no TEE is in use. Using status = "reserved" is the safe choice here. Platforms that do not run a TEE (or anything similar that would disable access to the 0xf000_0000 to 0xffff_ffff range) and wishing to enable use of sec_uart1 can change the status to "okay". Vivian "dramforever" Wang
On Wed, Jun 25, 2025 at 11:21 AM Vivian Wang <wangruikang@iscas.ac.cn> wrote: > > On 6/24/25 20:21, Guodong Xu wrote: > > On Mon, Jun 23, 2025 at 6:04 PM Vivian Wang <wangruikang@iscas.ac.cn> wrote: > >> UART devices in Spacemit K1 use dma-bus DMA translations. Move these > >> nodes under dma-bus to reflect this fact. > ... > >> > >> - sec_uart1: serial@f0612000 { > >> - compatible = "spacemit,k1-uart", "intel,xscale-uart"; > >> - reg = <0x0 0xf0612000 0x0 0x100>; > >> - interrupts = <43>; > >> - clock-frequency = <14857000>; > >> - reg-shift = <2>; > >> - reg-io-width = <4>; > >> - status = "reserved"; /* for TEE usage */ > >> - }; > >> - > > Are you sure sec_uart1 should be placed under the dma_bus? Please double > > check. If sec_uart1 and other peripherals supported by the secure DMA > > (base address: 0xF0600000) share the same address mapping as dma_bus, and > > if they can be accessed by the linux kernel in some cases (as saying > > 'reserved'), then that makes sense. If not, better not move them. > > Hi Guodong, > > I have confirmed with SpacemiT that sec_uart1 uses dram_range4, a.k.a. > dma-bus, which is same as the rest of the UARTs. > > Also, sec_uart1 is usable in e.g. Linux, but only if no TEE is in use. > Using status = "reserved" is the safe choice here. Platforms that do not > run a TEE (or anything similar that would disable access to the > 0xf000_0000 to 0xffff_ffff range) and wishing to enable use of sec_uart1 > can change the status to "okay". > Ok, with that confirmed, I'd say this patch looks good to me. Reviewed-by: Guodong Xu <guodong@riscstar.com> Thanks. > Vivian "dramforever" Wang >
On 6/24/25 20:21, Guodong Xu wrote: > On Mon, Jun 23, 2025 at 6:04 PM Vivian Wang <wangruikang@iscas.ac.cn> wrote: >> UART devices in Spacemit K1 use dma-bus DMA translations. Move these >> nodes under dma-bus to reflect this fact. ... >> >> - sec_uart1: serial@f0612000 { >> - compatible = "spacemit,k1-uart", "intel,xscale-uart"; >> - reg = <0x0 0xf0612000 0x0 0x100>; >> - interrupts = <43>; >> - clock-frequency = <14857000>; >> - reg-shift = <2>; >> - reg-io-width = <4>; >> - status = "reserved"; /* for TEE usage */ >> - }; >> - > Are you sure sec_uart1 should be placed under the dma_bus? Please double > check. If sec_uart1 and other peripherals supported by the secure DMA > (base address: 0xF0600000) share the same address mapping as dma_bus, and > if they can be accessed by the linux kernel in some cases (as saying > 'reserved'), then that makes sense. If not, better not move them. Bianbu's DT from SpacemiT [1] shows sec_uart1 using dram_range4, and it made sense to me. However just to be sure I will ask SpacemiT for confirmation. Vivian "dramforever" Wang [1]: https://gitee.com/bianbu-linux/linux-6.6/blob/k1-bl-v2.2.y/arch/riscv/boot/dts/spacemit/k1-x.dtsi > -- > Guodong
© 2016 - 2025 Red Hat, Inc.