2 * Hisilicon Ltd. HiP04 SoC
4 * Copyright (C) 2013-2014 Hisilicon Ltd.
5 * Copyright (C) 2013-2014 Linaro Ltd.
7 * Author: Haojian Zhuang <haojian.zhuang@linaro.org>
9 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License version 2 as
11 * published by the Free Software Foundation.
15 /* memory bus is 64-bit */
24 compatible = "hisilicon,hip04-bootwrapper";
25 boot-method = <0x10c00000 0x10000>, <0xe0000100 0x1000>;
92 compatible = "arm,cortex-a15";
97 compatible = "arm,cortex-a15";
102 compatible = "arm,cortex-a15";
107 compatible = "arm,cortex-a15";
112 compatible = "arm,cortex-a15";
117 compatible = "arm,cortex-a15";
122 compatible = "arm,cortex-a15";
127 compatible = "arm,cortex-a15";
132 compatible = "arm,cortex-a15";
137 compatible = "arm,cortex-a15";
142 compatible = "arm,cortex-a15";
147 compatible = "arm,cortex-a15";
152 compatible = "arm,cortex-a15";
157 compatible = "arm,cortex-a15";
162 compatible = "arm,cortex-a15";
167 compatible = "arm,cortex-a15";
173 compatible = "arm,armv7-timer";
174 interrupt-parent = <&gic>;
175 interrupts = <1 13 0xf08>,
183 compatible = "fixed-clock";
184 clock-frequency = <50000000>;
189 compatible = "fixed-clock";
190 clock-frequency = <168000000>;
195 compatible = "fixed-clock";
196 clock-frequency = <375000000>;
200 /* It's a 32-bit SoC. */
201 #address-cells = <1>;
203 compatible = "simple-bus";
204 interrupt-parent = <&gic>;
205 ranges = <0 0 0xe0000000 0x10000000>;
207 gic: interrupt-controller@c01000 {
208 compatible = "hisilicon,hip04-intc";
209 #interrupt-cells = <3>;
210 #address-cells = <0>;
211 interrupt-controller;
212 interrupts = <1 9 0xf04>;
214 reg = <0xc01000 0x1000>, <0xc02000 0x1000>,
215 <0xc04000 0x2000>, <0xc06000 0x2000>;
219 compatible = "hisilicon,sysctrl";
220 reg = <0x3e00000 0x00100000>;
224 compatible = "hisilicon,hip04-fabric";
225 reg = <0x302a000 0x1000>;
228 dual_timer0: dual_timer@3000000 {
229 compatible = "arm,sp804", "arm,primecell";
230 reg = <0x3000000 0x1000>;
231 interrupts = <0 224 4>;
232 clocks = <&clk_50m>, <&clk_50m>;
233 clock-names = "apb_pclk";
237 compatible = "arm,cortex-a15-pmu";
238 interrupts = <0 64 4>,
256 uart0: uart@4007000 {
257 compatible = "snps,dw-apb-uart";
258 reg = <0x4007000 0x1000>;
259 interrupts = <0 381 4>;
260 clocks = <&clk_168m>;
261 clock-names = "uartclk";
266 sata0: sata@a000000 {
267 compatible = "hisilicon,hisi-ahci";
268 reg = <0xa000000 0x1000000>;
269 interrupts = <0 372 4>;
273 #address-cells = <1>;
275 compatible = "snps,dw-apb-gpio";
276 reg = <0x4003000 0x1000>;
278 gpio3: gpio-controller@0 {
279 compatible = "snps,dw-apb-gpio-port";
282 snps,nr-gpios = <32>;
284 interrupt-parent = <&gic>;
285 interrupt-controller;
286 #interrupt-cells = <2>;
287 interrupts = <0 392 4>;
292 #address-cells = <1>;
294 compatible = "snps,dw-apb-gpio";
295 reg = <0x4002000 0x1000>;
297 gpio2: gpio-controller@0 {
298 compatible = "snps,dw-apb-gpio-port";
301 snps,nr-gpios = <32>;
303 interrupt-parent = <&gic>;
304 interrupt-controller;
305 #interrupt-cells = <2>;
306 interrupts = <0 391 4>;
311 #address-cells = <1>;
313 compatible = "snps,dw-apb-gpio";
314 reg = <0x4001000 0x1000>;
316 gpio1: gpio-controller@0 {
317 compatible = "snps,dw-apb-gpio-port";
320 snps,nr-gpios = <32>;
322 interrupt-parent = <&gic>;
323 interrupt-controller;
324 #interrupt-cells = <2>;
325 interrupts = <0 390 4>;
330 #address-cells = <1>;
332 compatible = "snps,dw-apb-gpio";
333 reg = <0x4000000 0x1000>;
335 gpio0: gpio-controller@0 {
336 compatible = "snps,dw-apb-gpio-port";
339 snps,nr-gpios = <32>;
341 interrupt-parent = <&gic>;
342 interrupt-controller;
343 #interrupt-cells = <2>;
344 interrupts = <0 389 4>;
349 compatible = "hisilicon,504-nfc";
350 reg = <0x4020000 0x10000>, <0x5000000 0x1000>;
351 interrupts = <0 379 4>;
352 #address-cells = <1>;
357 compatible = "hisilicon,hip04-mdio";
358 reg = <0x28f1000 0x1000>;
359 #address-cells = <1>;
362 phy0: ethernet-phy@0 {
363 compatible = "ethernet-phy-ieee802.3-c22";
365 marvell,reg-init = <18 0x14 0 0x8001>;
368 phy1: ethernet-phy@1 {
369 compatible = "ethernet-phy-ieee802.3-c22";
371 marvell,reg-init = <18 0x14 0 0x8001>;
376 compatible = "hisilicon,hip04-ppe", "syscon";
377 reg = <0x28c0000 0x10000>;
380 fe: ethernet@28b0000 {
381 compatible = "hisilicon,hip04-mac";
382 reg = <0x28b0000 0x10000>;
383 interrupts = <0 413 4>;
385 port-handle = <&ppe 31 0>;
388 ge0: ethernet@2800000 {
389 compatible = "hisilicon,hip04-mac";
390 reg = <0x2800000 0x10000>;
391 interrupts = <0 402 4>;
393 port-handle = <&ppe 0 1>;
394 phy-handle = <&phy0>;
397 ge8: ethernet@2880000 {
398 compatible = "hisilicon,hip04-mac";
399 reg = <0x2880000 0x10000>;
400 interrupts = <0 410 4>;
402 port-handle = <&ppe 8 2>;
403 phy-handle = <&phy1>;
408 compatible = "arm,coresight-etb10", "arm,primecell";
409 reg = <0 0xe3c42000 0 0x1000>;
411 clocks = <&clk_375m>;
412 clock-names = "apb_pclk";
414 etb0_in_port: endpoint@0 {
416 remote-endpoint = <&replicator0_out_port0>;
422 compatible = "arm,coresight-etb10", "arm,primecell";
423 reg = <0 0xe3c82000 0 0x1000>;
425 clocks = <&clk_375m>;
426 clock-names = "apb_pclk";
428 etb1_in_port: endpoint@0 {
430 remote-endpoint = <&replicator1_out_port0>;
436 compatible = "arm,coresight-etb10", "arm,primecell";
437 reg = <0 0xe3cc2000 0 0x1000>;
439 clocks = <&clk_375m>;
440 clock-names = "apb_pclk";
442 etb2_in_port: endpoint@0 {
444 remote-endpoint = <&replicator2_out_port0>;
450 compatible = "arm,coresight-etb10", "arm,primecell";
451 reg = <0 0xe3d02000 0 0x1000>;
453 clocks = <&clk_375m>;
454 clock-names = "apb_pclk";
456 etb3_in_port: endpoint@0 {
458 remote-endpoint = <&replicator3_out_port0>;
464 compatible = "arm,coresight-tpiu", "arm,primecell";
465 reg = <0 0xe3c05000 0 0x1000>;
467 clocks = <&clk_375m>;
468 clock-names = "apb_pclk";
470 tpiu_in_port: endpoint@0 {
472 remote-endpoint = <&funnel4_out_port0>;
478 /* non-configurable replicators don't show up on the
479 * AMBA bus. As such no need to add "arm,primecell".
481 compatible = "arm,coresight-replicator";
484 #address-cells = <1>;
487 /* replicator output ports */
490 replicator0_out_port0: endpoint {
491 remote-endpoint = <&etb0_in_port>;
497 replicator0_out_port1: endpoint {
498 remote-endpoint = <&funnel4_in_port0>;
502 /* replicator input port */
505 replicator0_in_port0: endpoint {
507 remote-endpoint = <&funnel0_out_port0>;
514 /* non-configurable replicators don't show up on the
515 * AMBA bus. As such no need to add "arm,primecell".
517 compatible = "arm,coresight-replicator";
520 #address-cells = <1>;
523 /* replicator output ports */
526 replicator1_out_port0: endpoint {
527 remote-endpoint = <&etb1_in_port>;
533 replicator1_out_port1: endpoint {
534 remote-endpoint = <&funnel4_in_port1>;
538 /* replicator input port */
541 replicator1_in_port0: endpoint {
543 remote-endpoint = <&funnel1_out_port0>;
550 /* non-configurable replicators don't show up on the
551 * AMBA bus. As such no need to add "arm,primecell".
553 compatible = "arm,coresight-replicator";
556 #address-cells = <1>;
559 /* replicator output ports */
562 replicator2_out_port0: endpoint {
563 remote-endpoint = <&etb2_in_port>;
569 replicator2_out_port1: endpoint {
570 remote-endpoint = <&funnel4_in_port2>;
574 /* replicator input port */
577 replicator2_in_port0: endpoint {
579 remote-endpoint = <&funnel2_out_port0>;
586 /* non-configurable replicators don't show up on the
587 * AMBA bus. As such no need to add "arm,primecell".
589 compatible = "arm,coresight-replicator";
592 #address-cells = <1>;
595 /* replicator output ports */
598 replicator3_out_port0: endpoint {
599 remote-endpoint = <&etb3_in_port>;
605 replicator3_out_port1: endpoint {
606 remote-endpoint = <&funnel4_in_port3>;
610 /* replicator input port */
613 replicator3_in_port0: endpoint {
615 remote-endpoint = <&funnel3_out_port0>;
622 compatible = "arm,coresight-funnel", "arm,primecell";
623 reg = <0 0xe3c41000 0 0x1000>;
625 clocks = <&clk_375m>;
626 clock-names = "apb_pclk";
628 #address-cells = <1>;
631 /* funnel output port */
634 funnel0_out_port0: endpoint {
636 <&replicator0_in_port0>;
640 /* funnel input ports */
643 funnel0_in_port0: endpoint {
645 remote-endpoint = <&ptm0_out_port>;
651 funnel0_in_port1: endpoint {
653 remote-endpoint = <&ptm1_out_port>;
659 funnel0_in_port2: endpoint {
661 remote-endpoint = <&ptm2_out_port>;
667 funnel0_in_port3: endpoint {
669 remote-endpoint = <&ptm3_out_port>;
676 compatible = "arm,coresight-funnel", "arm,primecell";
677 reg = <0 0xe3c81000 0 0x1000>;
679 clocks = <&clk_375m>;
680 clock-names = "apb_pclk";
682 #address-cells = <1>;
685 /* funnel output port */
688 funnel1_out_port0: endpoint {
690 <&replicator1_in_port0>;
694 /* funnel input ports */
697 funnel1_in_port0: endpoint {
699 remote-endpoint = <&ptm4_out_port>;
705 funnel1_in_port1: endpoint {
707 remote-endpoint = <&ptm5_out_port>;
713 funnel1_in_port2: endpoint {
715 remote-endpoint = <&ptm6_out_port>;
721 funnel1_in_port3: endpoint {
723 remote-endpoint = <&ptm7_out_port>;
730 compatible = "arm,coresight-funnel", "arm,primecell";
731 reg = <0 0xe3cc1000 0 0x1000>;
733 clocks = <&clk_375m>;
734 clock-names = "apb_pclk";
736 #address-cells = <1>;
739 /* funnel output port */
742 funnel2_out_port0: endpoint {
744 <&replicator2_in_port0>;
748 /* funnel input ports */
751 funnel2_in_port0: endpoint {
753 remote-endpoint = <&ptm8_out_port>;
759 funnel2_in_port1: endpoint {
761 remote-endpoint = <&ptm9_out_port>;
767 funnel2_in_port2: endpoint {
769 remote-endpoint = <&ptm10_out_port>;
775 funnel2_in_port3: endpoint {
777 remote-endpoint = <&ptm11_out_port>;
784 compatible = "arm,coresight-funnel", "arm,primecell";
785 reg = <0 0xe3d01000 0 0x1000>;
787 clocks = <&clk_375m>;
788 clock-names = "apb_pclk";
790 #address-cells = <1>;
793 /* funnel output port */
796 funnel3_out_port0: endpoint {
798 <&replicator3_in_port0>;
802 /* funnel input ports */
805 funnel3_in_port0: endpoint {
807 remote-endpoint = <&ptm12_out_port>;
813 funnel3_in_port1: endpoint {
815 remote-endpoint = <&ptm13_out_port>;
821 funnel3_in_port2: endpoint {
823 remote-endpoint = <&ptm14_out_port>;
829 funnel3_in_port3: endpoint {
831 remote-endpoint = <&ptm15_out_port>;
838 compatible = "arm,coresight-funnel", "arm,primecell";
839 reg = <0 0xe3c04000 0 0x1000>;
841 clocks = <&clk_375m>;
842 clock-names = "apb_pclk";
844 #address-cells = <1>;
847 /* funnel output port */
850 funnel4_out_port0: endpoint {
851 remote-endpoint = <&tpiu_in_port>;
855 /* funnel input ports */
858 funnel4_in_port0: endpoint {
861 <&replicator0_out_port1>;
867 funnel4_in_port1: endpoint {
870 <&replicator1_out_port1>;
876 funnel4_in_port2: endpoint {
879 <&replicator2_out_port1>;
885 funnel4_in_port3: endpoint {
888 <&replicator3_out_port1>;
895 compatible = "arm,coresight-etm3x", "arm,primecell";
896 reg = <0 0xe3c7c000 0 0x1000>;
898 clocks = <&clk_375m>;
899 clock-names = "apb_pclk";
902 ptm0_out_port: endpoint {
903 remote-endpoint = <&funnel0_in_port0>;
909 compatible = "arm,coresight-etm3x", "arm,primecell";
910 reg = <0 0xe3c7d000 0 0x1000>;
912 clocks = <&clk_375m>;
913 clock-names = "apb_pclk";
916 ptm1_out_port: endpoint {
917 remote-endpoint = <&funnel0_in_port1>;
923 compatible = "arm,coresight-etm3x", "arm,primecell";
924 reg = <0 0xe3c7e000 0 0x1000>;
926 clocks = <&clk_375m>;
927 clock-names = "apb_pclk";
930 ptm2_out_port: endpoint {
931 remote-endpoint = <&funnel0_in_port2>;
937 compatible = "arm,coresight-etm3x", "arm,primecell";
938 reg = <0 0xe3c7f000 0 0x1000>;
940 clocks = <&clk_375m>;
941 clock-names = "apb_pclk";
944 ptm3_out_port: endpoint {
945 remote-endpoint = <&funnel0_in_port3>;
951 compatible = "arm,coresight-etm3x", "arm,primecell";
952 reg = <0 0xe3cbc000 0 0x1000>;
954 clocks = <&clk_375m>;
955 clock-names = "apb_pclk";
958 ptm4_out_port: endpoint {
959 remote-endpoint = <&funnel1_in_port0>;
965 compatible = "arm,coresight-etm3x", "arm,primecell";
966 reg = <0 0xe3cbd000 0 0x1000>;
968 clocks = <&clk_375m>;
969 clock-names = "apb_pclk";
972 ptm5_out_port: endpoint {
973 remote-endpoint = <&funnel1_in_port1>;
979 compatible = "arm,coresight-etm3x", "arm,primecell";
980 reg = <0 0xe3cbe000 0 0x1000>;
982 clocks = <&clk_375m>;
983 clock-names = "apb_pclk";
986 ptm6_out_port: endpoint {
987 remote-endpoint = <&funnel1_in_port2>;
993 compatible = "arm,coresight-etm3x", "arm,primecell";
994 reg = <0 0xe3cbf000 0 0x1000>;
996 clocks = <&clk_375m>;
997 clock-names = "apb_pclk";
1000 ptm7_out_port: endpoint {
1001 remote-endpoint = <&funnel1_in_port3>;
1007 compatible = "arm,coresight-etm3x", "arm,primecell";
1008 reg = <0 0xe3cfc000 0 0x1000>;
1010 clocks = <&clk_375m>;
1011 clock-names = "apb_pclk";
1014 ptm8_out_port: endpoint {
1015 remote-endpoint = <&funnel2_in_port0>;
1021 compatible = "arm,coresight-etm3x", "arm,primecell";
1022 reg = <0 0xe3cfd000 0 0x1000>;
1023 clocks = <&clk_375m>;
1024 clock-names = "apb_pclk";
1027 ptm9_out_port: endpoint {
1028 remote-endpoint = <&funnel2_in_port1>;
1034 compatible = "arm,coresight-etm3x", "arm,primecell";
1035 reg = <0 0xe3cfe000 0 0x1000>;
1037 clocks = <&clk_375m>;
1038 clock-names = "apb_pclk";
1041 ptm10_out_port: endpoint {
1042 remote-endpoint = <&funnel2_in_port2>;
1048 compatible = "arm,coresight-etm3x", "arm,primecell";
1049 reg = <0 0xe3cff000 0 0x1000>;
1051 clocks = <&clk_375m>;
1052 clock-names = "apb_pclk";
1055 ptm11_out_port: endpoint {
1056 remote-endpoint = <&funnel2_in_port3>;
1062 compatible = "arm,coresight-etm3x", "arm,primecell";
1063 reg = <0 0xe3d3c000 0 0x1000>;
1065 clocks = <&clk_375m>;
1066 clock-names = "apb_pclk";
1069 ptm12_out_port: endpoint {
1070 remote-endpoint = <&funnel3_in_port0>;
1076 compatible = "arm,coresight-etm3x", "arm,primecell";
1077 reg = <0 0xe3d3d000 0 0x1000>;
1079 clocks = <&clk_375m>;
1080 clock-names = "apb_pclk";
1083 ptm13_out_port: endpoint {
1084 remote-endpoint = <&funnel3_in_port1>;
1090 compatible = "arm,coresight-etm3x", "arm,primecell";
1091 reg = <0 0xe3d3e000 0 0x1000>;
1093 clocks = <&clk_375m>;
1094 clock-names = "apb_pclk";
1097 ptm14_out_port: endpoint {
1098 remote-endpoint = <&funnel3_in_port2>;
1104 compatible = "arm,coresight-etm3x", "arm,primecell";
1105 reg = <0 0xe3d3f000 0 0x1000>;
1107 clocks = <&clk_375m>;
1108 clock-names = "apb_pclk";
1111 ptm15_out_port: endpoint {
1112 remote-endpoint = <&funnel3_in_port3>;