RISC-V SpacemiT DT changes for 7.1

For K3 SoC
 - Add I2C support
 - Add PMIC regulator tree
 - Add ethernet support
 - Add pinctrl/GPIO/Clock
 - Enable full UART support
 
 For K1 SoC
  On Milk-V Jupiter
 - Enable PCIe/USB on
 - Enable QSPI/SPI NOR
 - Enable EEPROM, LEDs
  Others
 - Fix PMIC supply properties
 - Fix PCIe missing power regulator
 -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v2
 
 iQKvBAABCgCZFiEEtbq4ycMbcRVnAiPcMarqR1lNu+0FAmnPsTYbFIAAAAAABAAO
 bWFudTIsMi41KzEuMTEsMiwyXxSAAAAAAC4AKGlzc3Vlci1mcHJAbm90YXRpb25z
 Lm9wZW5wZ3AuZmlmdGhob3JzZW1hbi5uZXRCNUJBQjhDOUMzMUI3MTE1NjcwMjIz
 REMzMUFBRUE0NzU5NERCQkVEAAoJEDGq6kdZTbvt9TsQAJAKQJ9rpVL7tRPCxkcE
 nM5txZGOY2NEcjIk/yuufaagXgD6NtoDSCz50T/TWHn3VSVxhZ/VFhIz7zCwJxq8
 Kl4TVmUwlAZi5US4NY93lQyBs4haL8VcTWoGPPZGfbbxdPRQw5/vfAYo1w2g7WTa
 w5F8zVYWuc2/aYq46YXddZLHfUD5zSEchNAoYPHazJ2EyYyjAQoeEa3ZB34/pMUH
 YmjuF7hEwXNT0FZXmONXv6LI8t4avg20vGln7fsupOfhuq50/ODrQbBggm6fijZN
 jaWWL+FXixVzI9FivMAptRFZzMkF0Ti9kH0V4TFt0sJBmbQh6wHoB8XtIVn2loRf
 hGzurQ6AtwwEk1GZRr/lP2NTc99ZEJARX2hf2WKxGJTm+XiMXE8s4C7bEVgAcF7m
 gQjXqfOUeOh44+l4J6rV4B6+D8xg8ZQ2Z0NPh7FewYxv6LSVZjo5xC0ljNwWnKvO
 UkCFMie9Ecpt/qMnAfGb3xjV1zofSTpqnsBloKlintzK80k7+VnKajYo7Jw7MrI4
 PVRENeLH3nIGso61qVc0HBkSKatzXlurZtLIl3wZk5WioftdzA81Gg0oV3YigCIK
 MSq1MZiBrUnIuGFtdSskmKcbWAGMaEkBJN4OVkFM+TjQw9t3PjpbYZnAoTlFEOwP
 ldbjXnK3ydzHJzQSbq/4Hs/S
 =wej0
 -----END PGP SIGNATURE-----

Merge tag 'spacemit-dt-for-7.1-1' of https://github.com/spacemit-com/linux into soc/dt

RISC-V SpacemiT DT changes for 7.1

For K3 SoC
- Add I2C support
- Add PMIC regulator tree
- Add ethernet support
- Add pinctrl/GPIO/Clock
- Enable full UART support

For K1 SoC
 On Milk-V Jupiter
- Enable PCIe/USB on
- Enable QSPI/SPI NOR
- Enable EEPROM, LEDs
 Others
- Fix PMIC supply properties
- Fix PCIe missing power regulator

* tag 'spacemit-dt-for-7.1-1' of https://github.com/spacemit-com/linux:
  dts: riscv: spacemit: k3: add P1 PMIC regulator tree
  dts: riscv: spacemit: k3: Add i2c nodes
  riscv: dts: spacemit: enable PCIe ports on Milk-V Jupiter
  riscv: dts: spacemit: enable USB 3 ports on Milk-V Jupiter
  riscv: dts: spacemit: enable QSPI and add SPI NOR on Milk-V Jupiter
  riscv: dts: spacemit: add i2c aliases on Milk-V Jupiter
  riscv: dts: spacemit: add 24c04 eeprom on Milk-V Jupiter
  riscv: dts: spacemit: add LEDs for Milk-V Jupiter board
  riscv: dts: spacemit: Add ethernet device for K3
  riscv: dts: spacemit: drop incorrect pinctrl for combo PHY
  riscv: dts: spacemit: reorder phy nodes for K1
  riscv: dts: spacemit: k3: add full resource to UART
  riscv: dts: spacemit: k3: add GPIO support
  riscv: dts: spacemit: k3: add pinctrl support
  riscv: dts: spacemit: k3: add clock tree
  dt-bindings: serial: 8250: spacemit: fix clock property for K3 SoC
  riscv: dts: spacemit: Add 'linux,pci-domain' to PCIe nodes for K1
  riscv: dts: spacemit: adapt regulator node name to preferred form
  riscv: dts: spacemit: Update PMIC supply properties for BPI-F3 and Jupiter
  riscv: dts: spacemit: pcie: fix missing power regulator

Signed-off-by: Linus Walleij <linusw@kernel.org>
This commit is contained in:
Linus Walleij 2026-04-10 23:52:26 +02:00
commit 0ba8e918c7
7 changed files with 876 additions and 79 deletions

View File

@ -63,7 +63,9 @@ allOf:
properties:
compatible:
contains:
const: spacemit,k1-uart
enum:
- spacemit,k1-uart
- spacemit,k3-uart
then:
properties:
clock-names:
@ -76,6 +78,7 @@ allOf:
contains:
enum:
- spacemit,k1-uart
- spacemit,k3-uart
- nxp,lpc1850-uart
then:
required:

View File

@ -33,7 +33,7 @@ led1 {
};
};
pcie_vcc_3v3: pcie-vcc3v3 {
pcie_vcc_3v3: regulator-pcie-vcc3v3 {
compatible = "regulator-fixed";
regulator-name = "PCIE_VCC3V3";
regulator-min-microvolt = <3300000>;
@ -41,7 +41,7 @@ pcie_vcc_3v3: pcie-vcc3v3 {
regulator-always-on;
};
reg_dc_in: dc-in-12v {
reg_dc_in: regulator-dc-in-12v {
compatible = "regulator-fixed";
regulator-name = "dc_in_12v";
regulator-min-microvolt = <12000000>;
@ -50,7 +50,7 @@ reg_dc_in: dc-in-12v {
regulator-always-on;
};
reg_vcc_4v: vcc-4v {
reg_vcc_4v: regulator-vcc-4v {
compatible = "regulator-fixed";
regulator-name = "vcc_4v";
regulator-min-microvolt = <4000000>;
@ -60,7 +60,7 @@ reg_vcc_4v: vcc-4v {
vin-supply = <&reg_dc_in>;
};
usb3-vbus-5v {
regulator-usb3-vbus-5v {
compatible = "regulator-fixed";
regulator-name = "USB30_VBUS";
regulator-min-microvolt = <5000000>;
@ -70,7 +70,7 @@ usb3-vbus-5v {
enable-active-high;
};
usb3_hub_5v: usb3-hub-5v {
usb3_hub_5v: regulator-usb3-hub-5v {
compatible = "regulator-fixed";
regulator-name = "USB30_HUB";
regulator-min-microvolt = <5000000>;
@ -81,8 +81,6 @@ usb3_hub_5v: usb3-hub-5v {
};
&combo_phy {
pinctrl-names = "default";
pinctrl-0 = <&pcie0_3_cfg>;
status = "okay";
};
@ -190,7 +188,15 @@ pmic@41 {
compatible = "spacemit,p1";
reg = <0x41>;
interrupts = <64>;
vin-supply = <&reg_vcc_4v>;
vin1-supply = <&reg_vcc_4v>;
vin2-supply = <&reg_vcc_4v>;
vin3-supply = <&reg_vcc_4v>;
vin4-supply = <&reg_vcc_4v>;
vin5-supply = <&reg_vcc_4v>;
vin6-supply = <&reg_vcc_4v>;
aldoin-supply = <&reg_vcc_4v>;
dldoin1-supply = <&buck5>;
dldoin2-supply = <&buck5>;
regulators {
buck1 {
@ -221,7 +227,7 @@ buck4 {
regulator-always-on;
};
buck5 {
buck5: buck5 {
regulator-min-microvolt = <500000>;
regulator-max-microvolt = <3450000>;
regulator-ramp-delay = <5000>;
@ -305,6 +311,7 @@ &pcie1_phy {
&pcie1_port {
phys = <&pcie1_phy>;
vpcie3v3-supply = <&pcie_vcc_3v3>;
};
&pcie1 {
@ -320,6 +327,7 @@ &pcie2_phy {
&pcie2_port {
phys = <&pcie2_phy>;
vpcie3v3-supply = <&pcie_vcc_3v3>;
};
&pcie2 {

View File

@ -15,13 +15,42 @@ aliases {
ethernet0 = &eth0;
ethernet1 = &eth1;
serial0 = &uart0;
i2c2 = &i2c2;
i2c8 = &i2c8;
};
chosen {
stdout-path = "serial0";
};
reg_dc_in: dc-in-12v {
leds {
compatible = "gpio-leds";
led1 {
label = "pwr-led";
gpios = <&gpio K1_GPIO(96) GPIO_ACTIVE_HIGH>;
linux,default-trigger = "default-on";
default-state = "on";
};
led2 {
label = "hdd-led";
gpios = <&gpio K1_GPIO(92) GPIO_ACTIVE_HIGH>;
linux,default-trigger = "disk-activity";
};
};
pcie_vcc_3v3: regulator-pcie-vcc3v3 {
compatible = "regulator-fixed";
regulator-name = "pcie_vcc3v3";
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
regulator-boot-on;
regulator-always-on;
vin-supply = <&reg_dc_in>;
};
reg_dc_in: regulator-dc-in-12v {
compatible = "regulator-fixed";
regulator-name = "dc_in_12v";
regulator-min-microvolt = <12000000>;
@ -30,7 +59,7 @@ reg_dc_in: dc-in-12v {
regulator-always-on;
};
reg_vcc_4v: vcc-4v {
reg_vcc_4v: regulator-vcc-4v {
compatible = "regulator-fixed";
regulator-name = "vcc_4v";
regulator-min-microvolt = <4000000>;
@ -39,6 +68,41 @@ reg_vcc_4v: vcc-4v {
regulator-always-on;
vin-supply = <&reg_dc_in>;
};
reg_vcc_5v: regulator-vcc-5v {
compatible = "regulator-fixed";
regulator-name = "vcc_5v";
regulator-min-microvolt = <5000000>;
regulator-max-microvolt = <5000000>;
regulator-boot-on;
regulator-always-on;
vin-supply = <&reg_dc_in>;
};
regulator-usb3-vbus-5v {
compatible = "regulator-fixed";
regulator-name = "USB30_VBUS";
regulator-min-microvolt = <5000000>;
regulator-max-microvolt = <5000000>;
regulator-always-on;
vin-supply = <&reg_vcc_5v>;
gpio = <&gpio K1_GPIO(97) GPIO_ACTIVE_HIGH>;
enable-active-high;
};
usb3_hub_5v: regulator-usb3-hub-5v {
compatible = "regulator-fixed";
regulator-name = "USB30_HUB";
regulator-min-microvolt = <5000000>;
regulator-max-microvolt = <5000000>;
vin-supply = <&reg_vcc_5v>;
gpio = <&gpio K1_GPIO(123) GPIO_ACTIVE_HIGH>;
enable-active-high;
};
};
&combo_phy {
status = "okay";
};
&eth0 {
@ -91,6 +155,28 @@ &pdma {
status = "okay";
};
&i2c2 {
pinctrl-0 = <&i2c2_0_cfg>;
pinctrl-names = "default";
status = "okay";
eeprom@50 {
compatible = "atmel,24c04";
reg = <0x50>;
vcc-supply = <&buck3_1v8>; /* EEPROM_VCC18 */
pagesize = <16>;
read-only;
size = <512>;
nvmem-layout {
compatible = "onie,tlv-layout";
product-name {
};
};
};
};
&i2c8 {
pinctrl-0 = <&i2c8_cfg>;
pinctrl-names = "default";
@ -100,7 +186,15 @@ pmic@41 {
compatible = "spacemit,p1";
reg = <0x41>;
interrupts = <64>;
vin-supply = <&reg_vcc_4v>;
vin1-supply = <&reg_vcc_4v>;
vin2-supply = <&reg_vcc_4v>;
vin3-supply = <&reg_vcc_4v>;
vin4-supply = <&reg_vcc_4v>;
vin5-supply = <&reg_vcc_4v>;
vin6-supply = <&reg_vcc_4v>;
aldoin-supply = <&reg_vcc_4v>;
dldoin1-supply = <&buck5>;
dldoin2-supply = <&buck5>;
regulators {
buck1 {
@ -124,14 +218,14 @@ buck3_1v8: buck3 {
regulator-always-on;
};
buck4 {
buck4_3v3: buck4 {
regulator-min-microvolt = <500000>;
regulator-max-microvolt = <3300000>;
regulator-ramp-delay = <5000>;
regulator-always-on;
};
buck5 {
buck5: buck5 {
regulator-min-microvolt = <500000>;
regulator-max-microvolt = <3450000>;
regulator-ramp-delay = <5000>;
@ -207,8 +301,108 @@ dldo7 {
};
};
&pcie1_phy {
pinctrl-names = "default";
pinctrl-0 = <&pcie1_3_cfg>;
status = "okay";
};
&pcie1_port {
phys = <&pcie1_phy>;
vpcie3v3-supply = <&pcie_vcc_3v3>;
};
&pcie1 {
vpcie3v3-supply = <&pcie_vcc_3v3>;
status = "okay";
};
&pcie2_phy {
pinctrl-names = "default";
pinctrl-0 = <&pcie2_4_cfg>;
status = "okay";
};
&pcie2_port {
phys = <&pcie2_phy>;
vpcie3v3-supply = <&pcie_vcc_3v3>;
};
&pcie2 {
vpcie3v3-supply = <&pcie_vcc_3v3>;
status = "okay";
};
&qspi {
pinctrl-names = "default";
pinctrl-0 = <&qspi_cfg>;
status = "okay";
flash@0 {
compatible = "jedec,spi-nor";
reg = <0>;
spi-max-frequency = <26500000>;
spi-rx-bus-width = <4>;
spi-tx-bus-width = <4>;
vcc-supply = <&buck4_3v3>; /* QSPI_VCC1833 */
m25p,fast-read;
partitions {
compatible = "fixed-partitions";
#address-cells = <1>;
#size-cells = <1>;
bootinfo@0 {
reg = <0x0 0x10000>;
};
private@10000 {
reg = <0x10000 0x10000>;
};
fsbl@20000 {
reg = <0x20000 0x40000>;
};
env@60000 {
reg = <0x60000 0x10000>;
};
opensbi@70000 {
reg = <0x70000 0x30000>;
};
uboot@a00000 {
reg = <0xa0000 0x760000>;
};
};
};
};
&uart0 {
pinctrl-names = "default";
pinctrl-0 = <&uart0_2_cfg>;
status = "okay";
};
&usbphy2 {
status = "okay";
};
&usb_dwc3 {
dr_mode = "host";
#address-cells = <1>;
#size-cells = <0>;
status = "okay";
hub_2_0: hub@1 {
compatible = "usb2109,2817";
reg = <0x1>;
vdd-supply = <&usb3_hub_5v>;
peer-hub = <&hub_3_0>;
reset-gpios = <&gpio K1_GPIO(124) GPIO_ACTIVE_LOW>;
};
hub_3_0: hub@2 {
compatible = "usb2109,817";
reg = <0x2>;
vdd-supply = <&usb3_hub_5v>;
peer-hub = <&hub_2_0>;
reset-gpios = <&gpio K1_GPIO(124) GPIO_ACTIVE_LOW>;
};
};

View File

@ -359,6 +359,60 @@ syscon_rcpu2: system-controller@c0888000 {
#reset-cells = <1>;
};
usbphy2: phy@c0a30000 {
compatible = "spacemit,k1-usb2-phy";
reg = <0x0 0xc0a30000 0x0 0x200>;
clocks = <&syscon_apmu CLK_USB30>;
#phy-cells = <0>;
status = "disabled";
};
combo_phy: phy@c0b10000 {
compatible = "spacemit,k1-combo-phy";
reg = <0x0 0xc0b10000 0x0 0x1000>;
clocks = <&vctcxo_24m>,
<&syscon_apmu CLK_PCIE0_DBI>,
<&syscon_apmu CLK_PCIE0_MASTER>,
<&syscon_apmu CLK_PCIE0_SLAVE>;
clock-names = "refclk",
"dbi",
"mstr",
"slv";
resets = <&syscon_apmu RESET_PCIE0_GLOBAL>,
<&syscon_apmu RESET_PCIE0_DBI>,
<&syscon_apmu RESET_PCIE0_MASTER>,
<&syscon_apmu RESET_PCIE0_SLAVE>;
reset-names = "phy",
"dbi",
"mstr",
"slv";
#phy-cells = <1>;
spacemit,apmu = <&syscon_apmu>;
status = "disabled";
};
pcie1_phy: phy@c0c10000 {
compatible = "spacemit,k1-pcie-phy";
reg = <0x0 0xc0c10000 0x0 0x1000>;
clocks = <&vctcxo_24m>;
clock-names = "refclk";
resets = <&syscon_apmu RESET_PCIE1_GLOBAL>;
reset-names = "phy";
#phy-cells = <0>;
status = "disabled";
};
pcie2_phy: phy@c0d10000 {
compatible = "spacemit,k1-pcie-phy";
reg = <0x0 0xc0d10000 0x0 0x1000>;
clocks = <&vctcxo_24m>;
clock-names = "refclk";
resets = <&syscon_apmu RESET_PCIE2_GLOBAL>;
reset-names = "phy";
#phy-cells = <0>;
status = "disabled";
};
i2c0: i2c@d4010800 {
compatible = "spacemit,k1-i2c";
reg = <0x0 0xd4010800 0x0 0x38>;
@ -429,60 +483,6 @@ i2c5: i2c@d4013800 {
status = "disabled";
};
usbphy2: phy@c0a30000 {
compatible = "spacemit,k1-usb2-phy";
reg = <0x0 0xc0a30000 0x0 0x200>;
clocks = <&syscon_apmu CLK_USB30>;
#phy-cells = <0>;
status = "disabled";
};
combo_phy: phy@c0b10000 {
compatible = "spacemit,k1-combo-phy";
reg = <0x0 0xc0b10000 0x0 0x1000>;
clocks = <&vctcxo_24m>,
<&syscon_apmu CLK_PCIE0_DBI>,
<&syscon_apmu CLK_PCIE0_MASTER>,
<&syscon_apmu CLK_PCIE0_SLAVE>;
clock-names = "refclk",
"dbi",
"mstr",
"slv";
resets = <&syscon_apmu RESET_PCIE0_GLOBAL>,
<&syscon_apmu RESET_PCIE0_DBI>,
<&syscon_apmu RESET_PCIE0_MASTER>,
<&syscon_apmu RESET_PCIE0_SLAVE>;
reset-names = "phy",
"dbi",
"mstr",
"slv";
#phy-cells = <1>;
spacemit,apmu = <&syscon_apmu>;
status = "disabled";
};
pcie1_phy: phy@c0c10000 {
compatible = "spacemit,k1-pcie-phy";
reg = <0x0 0xc0c10000 0x0 0x1000>;
clocks = <&vctcxo_24m>;
clock-names = "refclk";
resets = <&syscon_apmu RESET_PCIE1_GLOBAL>;
reset-names = "phy";
#phy-cells = <0>;
status = "disabled";
};
pcie2_phy: phy@c0d10000 {
compatible = "spacemit,k1-pcie-phy";
reg = <0x0 0xc0d10000 0x0 0x1000>;
clocks = <&vctcxo_24m>;
clock-names = "refclk";
resets = <&syscon_apmu RESET_PCIE2_GLOBAL>;
reset-names = "phy";
#phy-cells = <0>;
status = "disabled";
};
syscon_apbc: system-controller@d4015000 {
compatible = "spacemit,k1-syscon-apbc";
reg = <0x0 0xd4015000 0x0 0x1000>;
@ -1033,6 +1033,7 @@ pcie-bus {
#size-cells = <2>;
dma-ranges = <0x0 0x00000000 0x0 0x00000000 0x0 0x80000000>,
<0x0 0xb8000000 0x1 0x38000000 0x3 0x48000000>;
pcie0: pcie@ca000000 {
device_type = "pci";
compatible = "spacemit,k1-pcie";
@ -1044,6 +1045,7 @@ pcie0: pcie@ca000000 {
"atu",
"config",
"link";
linux,pci-domain = <0>;
#address-cells = <3>;
#size-cells = <2>;
ranges = <0x01000000 0x0 0x00000000 0x0 0x8f002000 0x0 0x00100000>,
@ -1087,6 +1089,7 @@ pcie1: pcie@ca400000 {
"atu",
"config",
"link";
linux,pci-domain = <1>;
#address-cells = <3>;
#size-cells = <2>;
ranges = <0x01000000 0x0 0x00000000 0x0 0x9f002000 0x0 0x00100000>,
@ -1130,6 +1133,7 @@ pcie2: pcie@ca800000 {
"atu",
"config",
"link";
linux,pci-domain = <2>;
#address-cells = <3>;
#size-cells = <2>;
ranges = <0x01000000 0x0 0x00000000 0x0 0xb7002000 0x0 0x00100000>,

View File

@ -3,14 +3,17 @@
* Copyright (c) 2026 SpacemiT (Hangzhou) Technology Co. Ltd
* Copyright (c) 2026 Guodong Xu <guodong@riscstar.com>
*/
#include <dt-bindings/gpio/gpio.h>
#include "k3.dtsi"
#include "k3-pinctrl.dtsi"
/ {
model = "SpacemiT K3 Pico-ITX";
compatible = "spacemit,k3-pico-itx", "spacemit,k3";
aliases {
ethernet0 = &eth0;
serial0 = &uart0;
};
@ -22,8 +25,175 @@ memory@100000000 {
device_type = "memory";
reg = <0x1 0x00000000 0x4 0x00000000>;
};
reg_aux_vcc5v: regulator-aux-vcc5v {
compatible = "regulator-fixed";
regulator-name = "AUX_VCC5V";
regulator-min-microvolt = <5000000>;
regulator-max-microvolt = <5000000>;
regulator-always-on;
};
};
&i2c8 {
pinctrl-names = "default";
pinctrl-0 = <&i2c8_cfg>;
status = "okay";
p1@41 {
compatible = "spacemit,p1";
reg = <0x41>;
interrupts = <64 IRQ_TYPE_LEVEL_HIGH>;
vin1-supply = <&reg_aux_vcc5v>;
vin2-supply = <&reg_aux_vcc5v>;
vin3-supply = <&reg_aux_vcc5v>;
vin4-supply = <&reg_aux_vcc5v>;
vin5-supply = <&reg_aux_vcc5v>;
vin6-supply = <&reg_aux_vcc5v>;
aldoin-supply = <&reg_aux_vcc5v>;
dldoin1-supply = <&buck4>;
dldoin2-supply = <&buck4>;
regulators {
buck1: buck1 {
regulator-min-microvolt = <1050000>;
regulator-max-microvolt = <1050000>;
regulator-ramp-delay = <5000>;
regulator-always-on;
};
buck2: buck2 {
regulator-min-microvolt = <1050000>;
regulator-max-microvolt = <1050000>;
regulator-ramp-delay = <5000>;
regulator-always-on;
};
buck3: buck3 {
regulator-min-microvolt = <800000>;
regulator-max-microvolt = <800000>;
regulator-ramp-delay = <5000>;
regulator-always-on;
};
buck4: buck4 {
regulator-min-microvolt = <2100000>;
regulator-max-microvolt = <2100000>;
regulator-ramp-delay = <5000>;
regulator-always-on;
};
buck5: buck5 {
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
regulator-ramp-delay = <5000>;
regulator-always-on;
};
buck6: buck6 {
regulator-min-microvolt = <500000>;
regulator-max-microvolt = <500000>;
regulator-ramp-delay = <5000>;
regulator-always-on;
};
aldo1: aldo1 {
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <3300000>;
regulator-always-on;
regulator-boot-on;
};
aldo2: aldo2 {
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
regulator-always-on;
regulator-boot-on;
};
aldo3: aldo3 {
regulator-min-microvolt = <500000>;
regulator-max-microvolt = <3400000>;
};
aldo4: aldo4 {
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
regulator-always-on;
regulator-boot-on;
};
dldo1: dldo1 {
regulator-min-microvolt = <1200000>;
regulator-max-microvolt = <1200000>;
regulator-always-on;
regulator-boot-on;
};
dldo2: dldo2 {
regulator-min-microvolt = <900000>;
regulator-max-microvolt = <900000>;
regulator-always-on;
regulator-boot-on;
};
dldo3: dldo3 {
regulator-min-microvolt = <800000>;
regulator-max-microvolt = <800000>;
regulator-always-on;
regulator-boot-on;
};
dldo4: dldo4 {
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
regulator-boot-on;
};
dldo5: dldo5 {
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
regulator-always-on;
regulator-boot-on;
};
dldo6: dldo6 {
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
regulator-always-on;
regulator-boot-on;
};
dldo7: dldo7 {
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
regulator-always-on;
regulator-boot-on;
};
};
};
};
&eth0 {
pinctrl-names = "default";
pinctrl-0 = <&gmac0_rgmii_0_cfg>, <&gmac0_phy_0_cfg>;
phy-mode = "rgmii-id";
phy-handle = <&phy0>;
status = "okay";
mdio {
phy0: phy@1 {
compatible = "ethernet-phy-ieee802.3-c22";
reg = <1>;
reset-gpios = <&gpio 0 15 GPIO_ACTIVE_LOW>;
reset-assert-us = <10000>;
reset-deassert-us = <10000>;
};
};
};
&uart0 {
pinctrl-names = "default";
pinctrl-0 = <&uart0_0_cfg>;
status = "okay";
};

View File

@ -0,0 +1,69 @@
// SPDX-License-Identifier: GPL-2.0 OR MIT
/*
* Copyright (c) 2026 Yixun Lan <dlan@kernel.org>
*/
#include <dt-bindings/gpio/gpio.h>
#define K3_PADCONF(pin, func) (((pin) << 16) | (func))
/* Map GPIO pin to each bank's <index, offset> */
#define K3_GPIO(x) (x / 32) (x % 32)
&pinctrl {
gmac0_rgmii_0_cfg: gmac0-rgmii-0-cfg {
gmac0-rgmii-0-pins {
pinmux = <K3_PADCONF(0, 1)>, /* gmac0_rxdv */
<K3_PADCONF(1, 1)>, /* gmac0_rx_d0 */
<K3_PADCONF(2, 1)>, /* gmac0_rx_d1 */
<K3_PADCONF(3, 1)>, /* gmac0_rx_clk */
<K3_PADCONF(4, 1)>, /* gmac0_rx_d2 */
<K3_PADCONF(5, 1)>, /* gmac0_rx_d3 */
<K3_PADCONF(6, 1)>, /* gmac0_tx_d0 */
<K3_PADCONF(7, 1)>, /* gmac0_tx_d1 */
<K3_PADCONF(8, 1)>, /* gmac0_tx_clk */
<K3_PADCONF(9, 1)>, /* gmac0_tx_d2 */
<K3_PADCONF(10, 1)>, /* gmac0_tx_d3 */
<K3_PADCONF(11, 1)>, /* gmac0_tx_en */
<K3_PADCONF(12, 1)>, /* gmac0_mdc */
<K3_PADCONF(13, 1)>; /* gmac0_mdio */
bias-disable;
drive-strength = <25>;
power-source = <1800>;
};
};
gmac0_phy_0_cfg: gmac0-phy-0-cfg {
gmac0-phy-0-pins {
pinmux = <K3_PADCONF(14, 1)>; /* gmac0_int */
bias-disable;
drive-strength = <25>;
power-source = <1800>;
};
};
/omit-if-no-ref/
i2c8_cfg: i2c8-cfg {
i2c8-pins {
pinmux = <K3_PADCONF(128, 0)>, /* i2c8 scl */
<K3_PADCONF(129, 0)>; /* i2c8 sda */
bias-pull-up = <0>;
drive-strength = <25>;
};
};
/omit-if-no-ref/
uart0_0_cfg: uart0-0-cfg {
uart0-0-pins {
pinmux = <K3_PADCONF(149, 2)>, /* uart0 tx */
<K3_PADCONF(150, 2)>; /* uart0 rx */
bias-pull-up = <0>;
drive-strength = <25>;
};
};
};

View File

@ -4,6 +4,8 @@
* Copyright (c) 2026 Guodong Xu <guodong@riscstar.com>
*/
#include <dt-bindings/clock/spacemit,k3-clocks.h>
#include <dt-bindings/reset/spacemit,k3-resets.h>
#include <dt-bindings/interrupt-controller/irq.h>
/dts-v1/;
@ -398,6 +400,36 @@ core3 {
};
};
clocks {
vctcxo_1m: clock-1m {
compatible = "fixed-clock";
clock-frequency = <1000000>;
clock-output-names = "vctcxo_1m";
#clock-cells = <0>;
};
vctcxo_24m: clock-24m {
compatible = "fixed-clock";
clock-frequency = <24000000>;
clock-output-names = "vctcxo_24m";
#clock-cells = <0>;
};
vctcxo_3m: clock-3m {
compatible = "fixed-clock";
clock-frequency = <3000000>;
clock-output-names = "vctcxo_3m";
#clock-cells = <0>;
};
osc_32k: clock-32k {
compatible = "fixed-clock";
clock-frequency = <32000>;
clock-output-names = "osc_32k";
#clock-cells = <0>;
};
};
soc: soc {
compatible = "simple-bus";
interrupt-parent = <&saplic>;
@ -406,12 +438,211 @@ soc: soc {
dma-noncoherent;
ranges;
eth0: ethernet@cac80000 {
compatible = "spacemit,k3-dwmac", "snps,dwmac-5.40a";
reg = <0x0 0xcac80000 0x0 0x2000>;
clocks = <&syscon_apmu CLK_APMU_EMAC0_BUS>,
<&syscon_apmu CLK_APMU_EMAC0_1588>,
<&syscon_apmu CLK_APMU_EMAC0_RGMII_TX>;
clock-names = "stmmaceth", "ptp_ref", "tx";
interrupts = <131 IRQ_TYPE_LEVEL_HIGH>,
<276 IRQ_TYPE_LEVEL_HIGH>;
interrupt-names = "macirq", "eth_wake_irq";
resets = <&syscon_apmu RESET_APMU_EMAC0>;
reset-names = "stmmaceth";
rx-fifo-depth = <8192>;
tx-fifo-depth = <8192>;
snps,multicast-filter-bins = <64>;
snps,perfect-filter-entries = <32>;
snps,aal;
snps,tso;
snps,txpbl = <8>;
snps,rxpbl = <8>;
snps,force_sf_dma_mode;
snps,axi-config = <&gmac0_axi_setup>;
spacemit,apmu = <&syscon_apmu 0x3e4 0x3e8>;
status = "disabled";
mdio {
compatible = "snps,dwmac-mdio";
#address-cells = <1>;
#size-cells = <0>;
};
gmac0_axi_setup: stmmac-axi-config {
snps,wr_osr_lmt = <0xf>;
snps,rd_osr_lmt = <0xf>;
/* max axi burst len is 256 */
snps,blen = <256 128 64 32 16 0 0>;
};
};
eth1: ethernet@cac82000 {
compatible = "spacemit,k3-dwmac", "snps,dwmac-5.40a";
reg = <0x0 0xcac82000 0x0 0x2000>;
clocks = <&syscon_apmu CLK_APMU_EMAC1_BUS>,
<&syscon_apmu CLK_APMU_EMAC1_1588>,
<&syscon_apmu CLK_APMU_EMAC1_RGMII_TX>;
clock-names = "stmmaceth", "ptp_ref", "tx";
interrupts = <133 IRQ_TYPE_LEVEL_HIGH>,
<277 IRQ_TYPE_LEVEL_HIGH>;
interrupt-names = "macirq", "eth_wake_irq";
resets = <&syscon_apmu RESET_APMU_EMAC1>;
reset-names = "stmmaceth";
rx-fifo-depth = <8192>;
tx-fifo-depth = <8192>;
snps,multicast-filter-bins = <64>;
snps,perfect-filter-entries = <32>;
snps,aal;
snps,tso;
snps,txpbl = <8>;
snps,rxpbl = <8>;
snps,force_sf_dma_mode;
snps,axi-config = <&gmac1_axi_setup>;
spacemit,apmu = <&syscon_apmu 0x3ec 0x3f0>;
status = "disabled";
mdio {
compatible = "snps,dwmac-mdio";
#address-cells = <1>;
#size-cells = <0>;
};
gmac1_axi_setup: stmmac-axi-config {
snps,wr_osr_lmt = <0xf>;
snps,rd_osr_lmt = <0xf>;
/* max axi burst len is 256 */
snps,blen = <256 128 64 32 16 0 0>;
};
};
eth2: ethernet@cac8e000 {
compatible = "spacemit,k3-dwmac", "snps,dwmac-5.40a";
reg = <0x0 0xcac8e000 0x0 0x2000>;
clocks = <&syscon_apmu CLK_APMU_EMAC2_BUS>,
<&syscon_apmu CLK_APMU_EMAC2_1588>,
<&syscon_apmu CLK_APMU_EMAC2_RGMII_TX>;
clock-names = "stmmaceth", "ptp_ref", "tx";
interrupts = <130 IRQ_TYPE_LEVEL_HIGH>,
<278 IRQ_TYPE_LEVEL_HIGH>;
interrupt-names = "macirq", "eth_wake_irq";
resets = <&syscon_apmu RESET_APMU_EMAC2>;
reset-names = "stmmaceth";
rx-fifo-depth = <4096>;
tx-fifo-depth = <4096>;
snps,multicast-filter-bins = <64>;
snps,perfect-filter-entries = <32>;
snps,aal;
snps,tso;
snps,txpbl = <8>;
snps,rxpbl = <8>;
snps,force_sf_dma_mode;
snps,axi-config = <&gmac2_axi_setup>;
spacemit,apmu = <&syscon_apmu 0x248 0x24c>;
status = "disabled";
mdio {
compatible = "snps,dwmac-mdio";
#address-cells = <1>;
#size-cells = <0>;
};
gmac2_axi_setup: stmmac-axi-config {
snps,wr_osr_lmt = <0xf>;
snps,rd_osr_lmt = <0xf>;
/* max axi burst len is 256 */
snps,blen = <256 128 64 32 16 0 0>;
};
};
i2c0: i2c@d4010800 {
compatible = "spacemit,k3-i2c", "spacemit,k1-i2c";
reg = <0x0 0xd4010800 0x0 0x38>;
#address-cells = <1>;
#size-cells = <0>;
interrupts = <36 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&syscon_apbc CLK_APBC_TWSI0>,
<&syscon_apbc CLK_APBC_TWSI0_BUS>;
clock-names = "func", "bus";
clock-frequency = <400000>;
resets = <&syscon_apbc RESET_APBC_TWSI0>;
status = "disabled";
};
i2c1: i2c@d4011000 {
compatible = "spacemit,k3-i2c", "spacemit,k1-i2c";
reg = <0x0 0xd4011000 0x0 0x38>;
#address-cells = <1>;
#size-cells = <0>;
interrupts = <37 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&syscon_apbc CLK_APBC_TWSI1>,
<&syscon_apbc CLK_APBC_TWSI1_BUS>;
clock-names = "func", "bus";
clock-frequency = <400000>;
resets = <&syscon_apbc RESET_APBC_TWSI1>;
status = "disabled";
};
i2c2: i2c@d4012000 {
compatible = "spacemit,k3-i2c", "spacemit,k1-i2c";
reg = <0x0 0xd4012000 0x0 0x38>;
#address-cells = <1>;
#size-cells = <0>;
interrupts = <38 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&syscon_apbc CLK_APBC_TWSI2>,
<&syscon_apbc CLK_APBC_TWSI2_BUS>;
clock-names = "func", "bus";
clock-frequency = <400000>;
resets = <&syscon_apbc RESET_APBC_TWSI2>;
status = "disabled";
};
i2c4: i2c@d4012800 {
compatible = "spacemit,k3-i2c", "spacemit,k1-i2c";
reg = <0x0 0xd4012800 0x0 0x38>;
#address-cells = <1>;
#size-cells = <0>;
interrupts = <40 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&syscon_apbc CLK_APBC_TWSI4>,
<&syscon_apbc CLK_APBC_TWSI4_BUS>;
clock-names = "func", "bus";
clock-frequency = <400000>;
resets = <&syscon_apbc RESET_APBC_TWSI4>;
status = "disabled";
};
i2c5: i2c@d4013800 {
compatible = "spacemit,k3-i2c", "spacemit,k1-i2c";
reg = <0x0 0xd4013800 0x0 0x38>;
#address-cells = <1>;
#size-cells = <0>;
interrupts = <41 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&syscon_apbc CLK_APBC_TWSI5>,
<&syscon_apbc CLK_APBC_TWSI5_BUS>;
clock-names = "func", "bus";
clock-frequency = <400000>;
resets = <&syscon_apbc RESET_APBC_TWSI5>;
status = "disabled";
};
syscon_apbc: system-controller@d4015000 {
compatible = "spacemit,k3-syscon-apbc";
reg = <0x0 0xd4015000 0x0 0x1000>;
clocks = <&osc_32k>, <&vctcxo_1m>, <&vctcxo_3m>, <&vctcxo_24m>;
clock-names = "osc", "vctcxo_1m", "vctcxo_3m", "vctcxo_24m";
#clock-cells = <1>;
#reset-cells = <1>;
};
uart0: serial@d4017000 {
compatible = "spacemit,k3-uart", "intel,xscale-uart";
reg = <0x0 0xd4017000 0x0 0x100>;
reg-shift = <2>;
reg-io-width = <4>;
clock-frequency = <14700000>;
clocks = <&syscon_apbc CLK_APBC_UART0>,
<&syscon_apbc CLK_APBC_UART0_BUS>;
clock-names = "core", "bus";
resets = <&syscon_apbc RESET_APBC_UART0>;
interrupts = <42 IRQ_TYPE_LEVEL_HIGH>;
status = "disabled";
};
@ -421,7 +652,10 @@ uart2: serial@d4017100 {
reg = <0x0 0xd4017100 0x0 0x100>;
reg-shift = <2>;
reg-io-width = <4>;
clock-frequency = <14700000>;
clocks = <&syscon_apbc CLK_APBC_UART2>,
<&syscon_apbc CLK_APBC_UART2_BUS>;
clock-names = "core", "bus";
resets = <&syscon_apbc RESET_APBC_UART2>;
interrupts = <44 IRQ_TYPE_LEVEL_HIGH>;
status = "disabled";
};
@ -431,7 +665,10 @@ uart3: serial@d4017200 {
reg = <0x0 0xd4017200 0x0 0x100>;
reg-shift = <2>;
reg-io-width = <4>;
clock-frequency = <14700000>;
clocks = <&syscon_apbc CLK_APBC_UART3>,
<&syscon_apbc CLK_APBC_UART3_BUS>;
clock-names = "core", "bus";
resets = <&syscon_apbc RESET_APBC_UART3>;
interrupts = <45 IRQ_TYPE_LEVEL_HIGH>;
status = "disabled";
};
@ -441,7 +678,10 @@ uart4: serial@d4017300 {
reg = <0x0 0xd4017300 0x0 0x100>;
reg-shift = <2>;
reg-io-width = <4>;
clock-frequency = <14700000>;
clocks = <&syscon_apbc CLK_APBC_UART4>,
<&syscon_apbc CLK_APBC_UART4_BUS>;
clock-names = "core", "bus";
resets = <&syscon_apbc RESET_APBC_UART4>;
interrupts = <46 IRQ_TYPE_LEVEL_HIGH>;
status = "disabled";
};
@ -451,7 +691,10 @@ uart5: serial@d4017400 {
reg = <0x0 0xd4017400 0x0 0x100>;
reg-shift = <2>;
reg-io-width = <4>;
clock-frequency = <14700000>;
clocks = <&syscon_apbc CLK_APBC_UART5>,
<&syscon_apbc CLK_APBC_UART5_BUS>;
clock-names = "core", "bus";
resets = <&syscon_apbc RESET_APBC_UART5>;
interrupts = <47 IRQ_TYPE_LEVEL_HIGH>;
status = "disabled";
};
@ -461,7 +704,10 @@ uart6: serial@d4017500 {
reg = <0x0 0xd4017500 0x0 0x100>;
reg-shift = <2>;
reg-io-width = <4>;
clock-frequency = <14700000>;
clocks = <&syscon_apbc CLK_APBC_UART6>,
<&syscon_apbc CLK_APBC_UART6_BUS>;
clock-names = "core", "bus";
resets = <&syscon_apbc RESET_APBC_UART6>;
interrupts = <48 IRQ_TYPE_LEVEL_HIGH>;
status = "disabled";
};
@ -471,7 +717,10 @@ uart7: serial@d4017600 {
reg = <0x0 0xd4017600 0x0 0x100>;
reg-shift = <2>;
reg-io-width = <4>;
clock-frequency = <14700000>;
clocks = <&syscon_apbc CLK_APBC_UART7>,
<&syscon_apbc CLK_APBC_UART7_BUS>;
clock-names = "core", "bus";
resets = <&syscon_apbc RESET_APBC_UART7>;
interrupts = <49 IRQ_TYPE_LEVEL_HIGH>;
status = "disabled";
};
@ -481,7 +730,10 @@ uart8: serial@d4017700 {
reg = <0x0 0xd4017700 0x0 0x100>;
reg-shift = <2>;
reg-io-width = <4>;
clock-frequency = <14700000>;
clocks = <&syscon_apbc CLK_APBC_UART8>,
<&syscon_apbc CLK_APBC_UART8_BUS>;
clock-names = "core", "bus";
resets = <&syscon_apbc RESET_APBC_UART8>;
interrupts = <50 IRQ_TYPE_LEVEL_HIGH>;
status = "disabled";
};
@ -491,21 +743,116 @@ uart9: serial@d4017800 {
reg = <0x0 0xd4017800 0x0 0x100>;
reg-shift = <2>;
reg-io-width = <4>;
clock-frequency = <14700000>;
clocks = <&syscon_apbc CLK_APBC_UART9>,
<&syscon_apbc CLK_APBC_UART9_BUS>;
clock-names = "core", "bus";
resets = <&syscon_apbc RESET_APBC_UART9>;
interrupts = <51 IRQ_TYPE_LEVEL_HIGH>;
status = "disabled";
};
i2c6: i2c@d4018800 {
compatible = "spacemit,k3-i2c", "spacemit,k1-i2c";
reg = <0x0 0xd4018800 0x0 0x38>;
#address-cells = <1>;
#size-cells = <0>;
interrupts = <70 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&syscon_apbc CLK_APBC_TWSI6>,
<&syscon_apbc CLK_APBC_TWSI6_BUS>;
clock-names = "func", "bus";
clock-frequency = <400000>;
resets = <&syscon_apbc RESET_APBC_TWSI6>;
status = "disabled";
};
gpio: gpio@d4019000 {
compatible = "spacemit,k3-gpio";
reg = <0x0 0xd4019000 0x0 0x100>;
clocks = <&syscon_apbc CLK_APBC_GPIO>,
<&syscon_apbc CLK_APBC_GPIO_BUS>;
clock-names = "core", "bus";
gpio-controller;
#gpio-cells = <3>;
interrupts = <58 IRQ_TYPE_LEVEL_HIGH>;
interrupt-parent = <&saplic>;
interrupt-controller;
#interrupt-cells = <3>;
gpio-ranges = <&pinctrl 0 0 0 32>,
<&pinctrl 1 0 32 32>,
<&pinctrl 2 0 64 32>,
<&pinctrl 3 0 96 32>;
};
i2c8: i2c@d401d800 {
compatible = "spacemit,k3-i2c", "spacemit,k1-i2c";
reg = <0x0 0xd401d800 0x0 0x38>;
#address-cells = <1>;
#size-cells = <0>;
interrupts = <19 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&syscon_apbc CLK_APBC_TWSI8>,
<&syscon_apbc CLK_APBC_TWSI8_BUS>;
clock-names = "func", "bus";
clock-frequency = <400000>;
resets = <&syscon_apbc RESET_APBC_TWSI8>;
status = "disabled";
};
pinctrl: pinctrl@d401e000 {
compatible = "spacemit,k3-pinctrl";
reg = <0x0 0xd401e000 0x0 0x1000>;
clocks = <&syscon_apbc CLK_APBC_AIB>,
<&syscon_apbc CLK_APBC_AIB_BUS>;
clock-names = "func", "bus";
};
uart10: serial@d401f000 {
compatible = "spacemit,k3-uart", "intel,xscale-uart";
reg = <0x0 0xd401f000 0x0 0x100>;
reg-shift = <2>;
reg-io-width = <4>;
clock-frequency = <14700000>;
clocks = <&syscon_apbc CLK_APBC_UART10>,
<&syscon_apbc CLK_APBC_UART10_BUS>;
clock-names = "core", "bus";
resets = <&syscon_apbc RESET_APBC_UART10>;
interrupts = <281 IRQ_TYPE_LEVEL_HIGH>;
status = "disabled";
};
syscon_mpmu: system-controller@d4050000 {
compatible = "spacemit,k3-syscon-mpmu";
reg = <0x0 0xd4050000 0x0 0x10000>;
clocks = <&osc_32k>, <&vctcxo_1m>, <&vctcxo_3m>, <&vctcxo_24m>;
clock-names = "osc", "vctcxo_1m", "vctcxo_3m", "vctcxo_24m";
#clock-cells = <1>;
#power-domain-cells = <1>;
#reset-cells = <1>;
};
pll: clock-controller@d4090000 {
compatible = "spacemit,k3-pll";
reg = <0x0 0xd4090000 0x0 0x10000>;
clocks = <&vctcxo_24m>;
spacemit,mpmu = <&syscon_mpmu>;
#clock-cells = <1>;
};
syscon_apmu: system-controller@d4282800 {
compatible = "spacemit,k3-syscon-apmu";
reg = <0x0 0xd4282800 0x0 0x400>;
clocks = <&osc_32k>, <&vctcxo_1m>, <&vctcxo_3m>, <&vctcxo_24m>;
clock-names = "osc", "vctcxo_1m", "vctcxo_3m", "vctcxo_24m";
#clock-cells = <1>;
#power-domain-cells = <1>;
#reset-cells = <1>;
};
syscon_dciu: system-controller@d8440000 {
compatible = "spacemit,k3-syscon-dciu";
reg = <0x0 0xd8440000 0x0 0xc000>;
#clock-cells = <1>;
#reset-cells = <1>;
};
simsic: interrupt-controller@e0400000 {
compatible = "spacemit,k3-imsics", "riscv,imsics";
reg = <0x0 0xe0400000 0x0 0x200000>;
@ -545,6 +892,8 @@ clint: timer@e081c000 {
<&cpu7_intc 3>, <&cpu7_intc 7>;
};
/* sec_i2c3: 0xf0614000, not available from Linux */
mimsic: interrupt-controller@f1000000 {
compatible = "spacemit,k3-imsics", "riscv,imsics";
reg = <0x0 0xf1000000 0x0 0x10000>;