[PATCH 2/3] riscv: dts: spacemit: Move UARTs under dma-bus for K1

Vivian Wang posted 3 patches 3 months, 2 weeks ago
[PATCH 2/3] riscv: dts: spacemit: Move UARTs under dma-bus for K1
Posted by Vivian Wang 3 months, 2 weeks ago
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
Re: [PATCH 2/3] riscv: dts: spacemit: Move UARTs under dma-bus for K1
Posted by Guodong Xu 3 months, 2 weeks ago
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
Re: [PATCH 2/3] riscv: dts: spacemit: Move UARTs under dma-bus for K1
Posted by Vivian Wang 3 months, 2 weeks ago
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
Re: [PATCH 2/3] riscv: dts: spacemit: Move UARTs under dma-bus for K1
Posted by Guodong Xu 3 months, 2 weeks ago
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
>
Re: [PATCH 2/3] riscv: dts: spacemit: Move UARTs under dma-bus for K1
Posted by Vivian Wang 3 months, 2 weeks ago
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