Add the two RKNN cores and their IOMMUs, plus the NPU power-domain
resets the pmdomain driver now cycles on power-on. Both cores are
disabled by default; boards enable what they wire up.

Each core lists both NPU power domains, its own first. The compute path
needs NPU1 powered even when only core 0 runs, and a node with a single
domain would be auto-attached by the driver core before the driver can
attach the list itself. The IOMMUs keep one domain each, since they rely
on that same auto-attach.

Signed-off-by: Jiaxing Hu <[email protected]>
---
 arch/arm64/boot/dts/rockchip/rk3576.dtsi | 80 +++++++++++++++++++++++-
 1 file changed, 78 insertions(+), 2 deletions(-)

diff --git a/arch/arm64/boot/dts/rockchip/rk3576.dtsi 
b/arch/arm64/boot/dts/rockchip/rk3576.dtsi
index b0c0d3c8b..1e6dd039f 100644
--- a/arch/arm64/boot/dts/rockchip/rk3576.dtsi
+++ b/arch/arm64/boot/dts/rockchip/rk3576.dtsi
@@ -1070,14 +1070,22 @@ power-domain@RK3576_PD_NPUTOP {
                                                power-domain@RK3576_PD_NPU0 {
                                                        reg = <RK3576_PD_NPU0>;
                                                        clocks = <&cru 
HCLK_RKNN_ROOT>,
-                                                                <&cru 
ACLK_RKNN0>;
+                                                                <&cru 
ACLK_RKNN0>,
+                                                                <&cru 
CLK_RKNN_DSU0>,
+                                                                <&cru 
ACLK_RKNN_CBUF>,
+                                                                <&cru 
HCLK_RKNN_CBUF>;
+                                                       resets = <&cru 
SRST_A_RKNN0_BIU>;
                                                        pm_qos = <&qos_npu_m0>;
                                                        #power-domain-cells = 
<0>;
                                                };
                                                power-domain@RK3576_PD_NPU1 {
                                                        reg = <RK3576_PD_NPU1>;
                                                        clocks = <&cru 
HCLK_RKNN_ROOT>,
-                                                                <&cru 
ACLK_RKNN1>;
+                                                                <&cru 
ACLK_RKNN1>,
+                                                                <&cru 
CLK_RKNN_DSU0>,
+                                                                <&cru 
ACLK_RKNN_CBUF>,
+                                                                <&cru 
HCLK_RKNN_CBUF>;
+                                                       resets = <&cru 
SRST_A_RKNN1_BIU>;
                                                        pm_qos = <&qos_npu_m1>;
                                                        #power-domain-cells = 
<0>;
                                                };
@@ -1832,6 +1840,74 @@ qos_npu_m1ro: qos@27f22100 {
                        reg = <0x0 0x27f22100 0x0 0x20>;
                };
 
+               rknn_core_0: npu@27700000 {
+                       compatible = "rockchip,rk3576-rknn-core";
+                       reg = <0x0 0x27700000 0x0 0x1000>,
+                             <0x0 0x27701000 0x0 0x1000>,
+                             <0x0 0x27703000 0x0 0x1000>;
+                       reg-names = "pc", "cna", "core";
+                       interrupts = <GIC_SPI 247 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cru ACLK_RKNN0>, <&cru HCLK_RKNN_ROOT>,
+                                <&cru CLK_RKNN_DSU0>, <&cru PCLK_NPUTOP_ROOT>,
+                                <&cru ACLK_RKNN_CBUF>, <&cru HCLK_RKNN_CBUF>;
+                       clock-names = "aclk", "hclk", "npu", "pclk",
+                                     "aclk_cbuf", "hclk_cbuf";
+                       resets = <&cru SRST_A_RKNN0>;
+                       reset-names = "srst_a";
+                       power-domains = <&power RK3576_PD_NPU0>, <&power 
RK3576_PD_NPU1>;
+                       iommus = <&rknn_mmu_0>;
+                       status = "disabled";
+               };
+
+               rknn_mmu_0: iommu@27702000 {
+                       compatible = "rockchip,rk3576-iommu", 
"rockchip,rk3568-iommu";
+                       reg = <0x0 0x27702000 0x0 0x100>,
+                             <0x0 0x27702100 0x0 0x100>;
+                       interrupts = <GIC_SPI 247 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cru ACLK_RKNN0>, <&cru HCLK_RKNN_ROOT>,
+                                <&cru CLK_RKNN_DSU0>, <&cru ACLK_RKNN_CBUF>,
+                                <&cru HCLK_RKNN_CBUF>;
+                       clock-names = "aclk", "iface", "npu",
+                                     "aclk_cbuf", "hclk_cbuf";
+                       #iommu-cells = <0>;
+                       power-domains = <&power RK3576_PD_NPU0>;
+                       status = "disabled";
+               };
+
+               rknn_core_1: npu@27708000 {
+                       compatible = "rockchip,rk3576-rknn-core";
+                       reg = <0x0 0x27708000 0x0 0x1000>,
+                             <0x0 0x27709000 0x0 0x1000>,
+                             <0x0 0x2770b000 0x0 0x1000>;
+                       reg-names = "pc", "cna", "core";
+                       interrupts = <GIC_SPI 248 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cru ACLK_RKNN1>, <&cru HCLK_RKNN_ROOT>,
+                                <&cru CLK_RKNN_DSU0>, <&cru PCLK_NPUTOP_ROOT>,
+                                <&cru ACLK_RKNN_CBUF>, <&cru HCLK_RKNN_CBUF>;
+                       clock-names = "aclk", "hclk", "npu", "pclk",
+                                     "aclk_cbuf", "hclk_cbuf";
+                       resets = <&cru SRST_A_RKNN1>;
+                       reset-names = "srst_a";
+                       power-domains = <&power RK3576_PD_NPU1>, <&power 
RK3576_PD_NPU0>;
+                       iommus = <&rknn_mmu_1>;
+                       status = "disabled";
+               };
+
+               rknn_mmu_1: iommu@2770a000 {
+                       compatible = "rockchip,rk3576-iommu", 
"rockchip,rk3568-iommu";
+                       reg = <0x0 0x2770a000 0x0 0x100>,
+                             <0x0 0x2770a100 0x0 0x100>;
+                       interrupts = <GIC_SPI 248 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cru ACLK_RKNN1>, <&cru HCLK_RKNN_ROOT>,
+                                <&cru CLK_RKNN_DSU0>, <&cru ACLK_RKNN_CBUF>,
+                                <&cru HCLK_RKNN_CBUF>;
+                       clock-names = "aclk", "iface", "npu",
+                                     "aclk_cbuf", "hclk_cbuf";
+                       #iommu-cells = <0>;
+                       power-domains = <&power RK3576_PD_NPU1>;
+                       status = "disabled";
+               };
+
                gmac0: ethernet@2a220000 {
                        compatible = "rockchip,rk3576-gmac", "snps,dwmac-4.20a";
                        reg = <0x0 0x2a220000 0x0 0x10000>;
-- 
2.43.0

Reply via email to