On Sat, Mar 23, 2019 at 10:01:28PM +0800, qiaozhou wrote: > From: Qiao Zhou <qiaozhou@xxxxxxxxxxxx> > > Add initial dtsi file to support ASR Aquilac SoC. It has two clusters. > Cluster0 has 4 * Cortex-A53 and Cluster1 has 4 * Cortex-A73. > > Also add dts file to support ASR Aquilac SoC development board which is > based on ASR AquilaC SoC. > > Signed-off-by: qiaozhou <qiaozhou@xxxxxxxxxxxx> > --- > arch/arm64/boot/dts/Makefile | 1 + > arch/arm64/boot/dts/asr/Makefile | 2 + > arch/arm64/boot/dts/asr/asr8751c-aquilac.dts | 58 ++++ > arch/arm64/boot/dts/asr/asr8751c-pinctrl.dtsi | 400 ++++++++++++++++++++++ > arch/arm64/boot/dts/asr/asr8751c.dtsi | 460 ++++++++++++++++++++++++++ > 5 files changed, 921 insertions(+) > create mode 100644 arch/arm64/boot/dts/asr/Makefile > create mode 100644 arch/arm64/boot/dts/asr/asr8751c-aquilac.dts > create mode 100644 arch/arm64/boot/dts/asr/asr8751c-pinctrl.dtsi > create mode 100644 arch/arm64/boot/dts/asr/asr8751c.dtsi > > diff --git a/arch/arm64/boot/dts/Makefile b/arch/arm64/boot/dts/Makefile > index 5bc7533..38f3db0 100644 > --- a/arch/arm64/boot/dts/Makefile > +++ b/arch/arm64/boot/dts/Makefile > @@ -27,3 +27,4 @@ subdir-y += synaptics > subdir-y += ti > subdir-y += xilinx > subdir-y += zte > +subdir-y += asr > diff --git a/arch/arm64/boot/dts/asr/Makefile b/arch/arm64/boot/dts/asr/Makefile > new file mode 100644 > index 0000000..b1f31c8 > --- /dev/null > +++ b/arch/arm64/boot/dts/asr/Makefile > @@ -0,0 +1,2 @@ > +# SPDX-License-Identifier: GPL-2.0 > +dtb-$(CONFIG_ARCH_ASR) += asr8751c-aquilac.dtb > diff --git a/arch/arm64/boot/dts/asr/asr8751c-aquilac.dts b/arch/arm64/boot/dts/asr/asr8751c-aquilac.dts > new file mode 100644 > index 0000000..076642f > --- /dev/null > +++ b/arch/arm64/boot/dts/asr/asr8751c-aquilac.dts > @@ -0,0 +1,58 @@ > +// SPDX-License-Identifier: GPL-2.0 > +/* > + * dts file for ASR8751C AquilaC SoC > + * Copyright (c) 2019, ASR Microelectronics(Shanghai) Co., Ltd. > + * > + * This program is free software; you can redistribute it and/or modify > + * it under the terms of the GNU General Public License version 2 as > + * publishhed by the Free Software Foundation. Drop the boilerplate. > + */ > + > +/dts-v1/; > +#include "asr8751c.dtsi" > +#include "asr8751c-pinctrl.dtsi" > +#include <dt-bindings/input/linux-event-codes.h> > + > +/ { > + model = "ASR AquilaC Development Board"; > + compatible = "asr,aquilac-evb", "asr,8751c"; > + > + aliases { > + serial0 = &uart0; > + serial1 = &uart1; > + serial2 = &uart2; > + }; > + > + chosen { > + /* > + * initrd parameters not set in dts file since the ramdisk.img > + * size need to check in uboot, and the initrd load address and > + * size will set in uboot stage. > + */ > + bootargs = "clk_ignore_unused"; > + stdout-path = "serial0:115200n8"; > + }; > + > + memory@0 { unit address doesn't match. > + /* address-cell = 2, size-cell = 2 */ > + device_type = "memory"; > + /* start address: 0x100000000, size = 0xC0000000 */ > + reg = <0x1 0x00000000 0x0 0xC0000000>; > + }; > + > + reserved-memory { > + #address-cells = <2>; > + #size-cells = <2>; > + ranges; > + > + ramoops@10c000000 { > + compatible = "ramoops"; > + reg = <0x1 0x0c000000 0x0 0x0040000>; > + record-size = <0x7000>; > + console-size = <0x30000>; > + ftrace-size = <0x1000>; > + pmsg-size = <0x1000>; > + dump-oops = <0>; > + }; > + }; > +}; > diff --git a/arch/arm64/boot/dts/asr/asr8751c-pinctrl.dtsi b/arch/arm64/boot/dts/asr/asr8751c-pinctrl.dtsi > new file mode 100644 > index 0000000..047049f > --- /dev/null > +++ b/arch/arm64/boot/dts/asr/asr8751c-pinctrl.dtsi > @@ -0,0 +1,400 @@ > +// SPDX-License-Identifier: GPL-2.0 > +/* > + * Copyright (C) 2019 ASR Microelectronics(Shanghai) Co., Ltd. > + * Author: Tim Wang <timwang@xxxxxxxxxxxx> > + * > + * This program is free software; you can redistribute it and/or modify > + * it under the terms of the GNU General Public License version 2 as > + * publishhed by the Free Software Foundation. Drop the boilerplate. > + */ > +#include <dt-bindings/pinctrl/asr8751c-pinfunc.h> > + > +&pmx { > + evb_mfp_pins_group_0: evb_mfp_pins_group_0 { > + pinctrl-single,pins = < > + GPIO_124 AF0 > + >; > + MFP_PULL_DOWN; > + }; > + > + /* aquilac evb config group */ > + evb_mfp_pins_group_1: evb_mfp_pins_group_1 { > + pinctrl-single,pins = < > + GPIO_07 AF0 > + /* I2C */ > + GPIO_03 AF1 /* I2C5 */ > + GPIO_04 AF1 > + GPIO_45 AF1 /* I2C7 */ > + GPIO_46 AF1 > + GPIO_22 AF1 /* I2C2 */ > + GPIO_23 AF1 > + GPIO_112 AF1 /* I2C6 */ > + GPIO_113 AF1 > + GPIO_63 AF1 > + GPIO_64 AF1 > + > + /* I2S */ > + GPIO_31 AF1 > + GPIO_32 AF1 > + GPIO_33 AF1 > + GPIO_34 AF1 > + GPIO_102 AF1 > + GPIO_103 AF1 > + GPIO_104 AF1 > + GPIO_105 AF1 > + /* SH_SSP */ > + GPIO_82 AF1 > + GPIO_83 AF1 > + GPIO_84 AF1 > + GPIO_85 AF1 > + GPIO_86 AF1 > + GPIO_87 AF1 > + GPIO_88 AF1 > + GPIO_89 AF1 > + /* SH_UART */ > + GPIO_61 AF1 > + GPIO_62 AF1 > + /* SSP */ > + GPIO_41 AF1 > + GPIO_42 AF1 > + GPIO_43 AF1 > + GPIO_44 AF1 > + /* UART */ > + GPIO_24 AF0 /* VSP UART */ > + GPIO_25 AF0 > + GPIO_08 AF0 > + GPIO_92 AF1 /* BT_UART */ > + GPIO_93 AF1 > + GPIO_94 AF1 > + GPIO_95 AF1 > + /* CAMERA */ > + GPIO_09 AF0 > + GPIO_10 AF0 > + GPIO_11 AF0 > + GPIO_12 AF0 > + GPIO_13 AF0 > + GPIO_14 AF0 > + GPIO_15 AF1 > + GPIO_16 AF1 > + GPIO_17 AF1 > + >; > + MFP_DEFAULT; > + }; > + > + /* TWSI0 GPIO */ > + twsi0_pmx_func0: twsi0_pmx_func0 { > + pinctrl-single,pins = < > + GPIO_18 AF0 > + GPIO_19 AF0 > + >; > + MFP_DEFAULT; > + }; > + > + /* AP I2C0 */ > + twsi0_pmx_func1: twsi0_pmx_func1 { > + pinctrl-single,pins = < > + GPIO_18 AF1 > + GPIO_19 AF1 > + >; > + MFP_DEFAULT; > + }; > + > + /* OVT I2C 0 */ > + twsi0_pmx_func2: twsi0_pmx_func2 { > + pinctrl-single,pins = < > + GPIO_18 AF2 > + GPIO_19 AF2 > + >; > + MFP_DEFAULT; > + }; > + > + /* TWSI1 GPIO */ > + twsi1_pmx_func0: twsi1_pmx_func0 { > + pinctrl-single,pins = < > + GPIO_20 AF0 > + GPIO_21 AF0 > + >; > + MFP_DEFAULT; > + }; > + > + /* AP I2C 1 */ > + twsi1_pmx_func1: twsi1_pmx_func1 { > + pinctrl-single,pins = < > + GPIO_20 AF1 > + GPIO_21 AF1 > + >; > + MFP_DEFAULT; > + }; > + > + /* OVT I2C 1 */ > + twsi1_pmx_func2: twsi1_pmx_func2 { > + pinctrl-single,pins = < > + GPIO_20 AF2 > + GPIO_21 AF2 > + >; > + MFP_DEFAULT; > + }; > + > + /* AP I2C 4 */ > + twsi4_pmx_func1: twsi4_pmx_func1 { > + pinctrl-single,pins = < > + GPIO_35 AF1 > + GPIO_36 AF1 > + >; > + MFP_DEFAULT; > + }; > + > + ccic1_pmx_func1: ccic1_pmx_func1 { > + pinctrl-single,pins = < > + GPIO_09 AF0 > + GPIO_12 AF0 > + GPIO_15 AF1 > + >; > + MFP_DEFAULT; > + }; > + > + ccic2_pmx_func1: ccic2_pmx_func1 { > + pinctrl-single,pins = < > + GPIO_10 AF0 > + GPIO_13 AF0 > + GPIO_16 AF1 > + >; > + MFP_DEFAULT; > + }; > + > + ccic3_pmx_func1: ccic3_pmx_func1 { > + pinctrl-single,pins = < > + GPIO_11 AF0 > + GPIO_14 AF0 > + GPIO_17 AF1 > + >; > + MFP_DEFAULT; > + }; > + > + /* MFP_LPM_PULL_UP */ > + gpio126_pmx_func0: gpio126_pmx_func0 { > + pinctrl-single,pins = < > + GPIO_126 AF0 > + >; > + MFP_LPM_PULL_UP; > + }; > + > + /* MFP_DEFAULT */ > + gpio126_pmx_func2: gpio126_pmx_func2 { > + pinctrl-single,pins = < > + GPIO_126 AF2 > + >; > + MFP_DEFAULT; > + }; > + > + /* MFP_LPM_PULL_UP */ > + gpio51_pmx_func0: gpio51_pmx_func0 { > + pinctrl-single,pins = < > + GPIO_51 AF0 > + >; > + MFP_LPM_PULL_UP; > + }; > + > + /* MFP_DEFAULT */ > + gpio51_pmx_func2: gpio51_pmx_func2 { > + pinctrl-single,pins = < > + GPIO_51 AF2 > + >; > + MFP_DEFAULT; > + }; > + > + /* SD card */ > + sdcard_pmx_func0: sdcard_pmx_func0 { > + pinctrl-single,pins = < > + MMC1_DAT3 AF0 > + MMC1_DAT2 AF0 > + MMC1_DAT1 AF0 > + MMC1_DAT0 AF0 > + MMC1_CMD AF0 > + >; > + MFP_DEFAULT; > + }; > + > + /* MFP_LPM_DRIVE_LOW */ > + sdcard_clk_pmx_func0: sdcard_clk_pmx_func0 { > + pinctrl-single,pins = < > + MMC1_CLK AF0 > + >; > + MFP_LPM_DRIVE_LOW; > + }; > + > + /* ds fast, no pull, no LPM */ > + sdcard_pmx_func0_fast: sdcard_pmx_func0_fast { > + pinctrl-single,pins = < > + MMC1_DAT3 AF0 > + MMC1_DAT2 AF0 > + MMC1_DAT1 AF0 > + MMC1_DAT0 AF0 > + MMC1_CMD AF0 > + >; > + DS_FAST;PULL_NONE;EDGE_NONE;LPM_NONE; > + }; > + > + /* ds fast, LPM_DRIVE_LOW */ > + sdcard_clk_pmx_func0_fast: sdcard_clk_pmx_func0_fast { > + pinctrl-single,pins = < > + MMC1_CLK AF0 > + >; > + DS_FAST;PULL_NONE;EDGE_NONE;LPM_DRIVE_LOW; > + }; > + > + /* JTAG */ > + sdcard_pmx_func2: sdcard_pmx_func2 { > + pinctrl-single,pins = < > + MMC1_DAT3 AF2 > + MMC1_DAT2 AF2 > + MMC1_DAT1 AF2 > + MMC1_DAT0 AF2 > + MMC1_CMD AF2 > + MMC1_CLK AF2 > + >; > + MFP_DEFAULT; > + }; > + > + /* SDIO card */ > + sdio_pmx_func1: sdio_pmx_func1 { > + pinctrl-single,pins = < > + GPIO_96 AF1 //MMC2_DAT3 > + GPIO_97 AF1 //MMC2_DAT2 > + GPIO_98 AF1 //MMC2_DAT1 > + GPIO_99 AF1 //MMC2_DAT0 > + GPIO_100 AF1 //MMC2_CMD > + >; > + MFP_DEFAULT; > + }; > + > + /* MFP_LPM_DRIVE_LOW */ > + sdio_clk_pmx_func1: sdio_clk_pmx_func1 { > + pinctrl-single,pins = < > + GPIO_101 AF1 //MMC2_CLK > + >; > + MFP_LPM_DRIVE_LOW; > + }; > + > + /* ds fast, no pull, no LPM */ > + sdio_pmx_func1_fast: sdio_pmx_func1_fast { > + pinctrl-single,pins = < > + GPIO_96 AF1 //MMC2_DAT3 > + GPIO_97 AF1 //MMC2_DAT2 > + GPIO_98 AF1 //MMC2_DAT1 > + GPIO_99 AF1 //MMC2_DAT0 > + GPIO_100 AF1 //MMC2_CMD > + >; > + DS_FAST;PULL_NONE;EDGE_NONE;LPM_NONE; > + }; > + > + /* ds fast, LPM_DRIVE_LOW */ > + sdio_clk_pmx_func1_fast: sdio_clk_pmx_func1_fast { > + pinctrl-single,pins = < > + GPIO_101 AF1 //MMC2_CLK > + >; > + DS_FAST;PULL_NONE;EDGE_NONE;LPM_DRIVE_LOW; > + }; > + > + /* ssp0 default state */ > + ssp0_pmx_func0: ssp0_pmx_func0 { > + pinctrl-single,pins = < > + GPIO_118 AF1 /* clk */ > + GPIO_120 AF1 /* tx */ > + GPIO_121 AF1 /* rx */ > + >; > + MFP_PULL_DOWN; > + }; > + > + ssp0_pmx_func1: ssp0_pmx_func1 { > + pinctrl-single,pins = < > + GPIO_119 AF1 /* cs */ > + >; > + MFP_PULL_UP; > + }; > + > + /* uart2 */ > + uart2_pmx_func1: uart2_pmx_func1 { > + pinctrl-single,pins = < > + GPIO_120 AF2 /* tx */ > + GPIO_121 AF2 /* rx */ > + >; > + MFP_DEFAULT; > + }; > + > + uart2_pmx_func2: uart2_pmx_func2 { > + pinctrl-single,pins = < > + GPIO_118 AF2 /* CTS */ > + GPIO_119 AF2 /* RTS */ > + >; > + MFP_PULL_DOWN; > + }; > + > + fp_pmx_func1: fp_pmx_func1 { > + pinctrl-single,pins = < > + GPIO_76 AF0 > + GPIO_81 AF0 > + >; > + MFP_DEFAULT; > + }; > + > + /* AP I2C 8 */ > + twsi8_pmx_func1: twsi8_pmx_func1 { > + pinctrl-single,pins = < > + GPIO_47 AF1 > + GPIO_48 AF1 > + >; > + MFP_DEFAULT; > + }; > + > + nfc_pmx_func0: nfc_pmx_func0 { > + pinctrl-single,pins = < > + GPIO_124 AF0 > + GPIO_123 AF0 > + GPIO_115 AF0 > + VCXO_REQ1 AF1 > + >; > + MFP_LPM_FLOAT; > + }; > + > + nfc_pmx_func0_n3_1: nfc_pmx_func0_n3_1 { > + pinctrl-single,pins = < > + GPIO_116 AF0 > + GPIO_115 AF0 > + GPIO_60 AF0 > + >; > + MFP_DEFAULT; > + }; > + > + nfc_pmx_func0_n3_2: nfc_pmx_func0_n3_2 { > + pinctrl-single,pins = < > + GPIO_107 AF0 > + >; > + MFP_PULL_DOWN; > + }; > + > + goodix_ts_pmx_func0: goodix_ts_pmx_func0 { > + pinctrl-single,pins = < > + GPIO_05 AF0 > + GPIO_06 AF0 > + >; > + MFP_PULL_DOWN; > + }; > + > + > + /* Not used pin, pull down and set input in lpm */ > + evb_sensor_pmx_func0: evb_sensor_pmx_func0 { > + pinctrl-single,pins = < > + GPIO_78 AF0 > + >; > + MFP_PULL_DOWN; > + }; > + > + /* EVB reset pin for mag sensor, GPIO */ > + evb_sensor_pmx_func1: evb_sensor_pmx_func1 { > + pinctrl-single,pins = < > + GPIO_80 AF0 > + >; > + MFP_PULL_UP; > + }; > +}; > diff --git a/arch/arm64/boot/dts/asr/asr8751c.dtsi b/arch/arm64/boot/dts/asr/asr8751c.dtsi > new file mode 100644 > index 0000000..c7222eb > --- /dev/null > +++ b/arch/arm64/boot/dts/asr/asr8751c.dtsi > @@ -0,0 +1,460 @@ > +// SPDX-License-Identifier: GPL-2.0 > +/* > + * dtsi file for ASR8751C > + * Copyright (c) 2019, ASR Microelectronics(Shanghai) Co., Ltd. > + * > + * This program is free software; you can redistribute it and/or modify > + * it under the terms of the GNU General Public License version 2 as > + * publishhed by the Free Software Foundation. > + */ > + > +#include <dt-bindings/clock/asr8751c-clk.h> > +#include <dt-bindings/interrupt-controller/irq.h> > +#include <dt-bindings/gpio/gpio.h> > + > +/ { > + interrupt-parent = <&gic>; > + #address-cells = <2>; > + #size-cells = <2>; > + > + cpus { > + #address-cells = <2>; > + #size-cells = <0>; > + > + idle-states { > + entry-method = "psci"; > + > + CPU_C1: cpu-c1 { > + compatible = "arm,idle-state"; > + arm,psci-suspend-param = <0x0000002>; > + entry-latency-us = <20>; > + exit-latency-us = <20>; > + min-residency-us = <100>; > + }; > + > + CPU_C2: cpu-c2 { > + compatible = "arm,idle-state"; > + local-timer-stop; > + arm,psci-suspend-param = <0x0010005>; > + entry-latency-us = <40>; > + exit-latency-us = <40>; > + min-residency-us = <200>; > + }; > + > + CLUSTER_MP2: cluster-mp2 { > + compatible = "arm,idle-state"; > + local-timer-stop; > + arm,psci-suspend-param = <0x1010055>; > + entry-latency-us = <80>; > + exit-latency-us = <80>; > + min-residency-us = <400>; > + wakeup-latency-us = <40>; > + }; > + > + CHIP_D1P: chip-d1p { > + compatible = "arm,idle-state"; > + local-timer-stop; > + arm,psci-suspend-param = <0x2010355>; > + entry-latency-us = <200>; > + exit-latency-us = <200>; > + min-residency-us = <1000>; > + wakeup-latency-us = <80>; > + }; > + > + CHIP_D1: chip-d1 { > + compatible = "arm,idle-state"; > + local-timer-stop; > + arm,psci-suspend-param = <0x2010455>; > + entry-latency-us = <300>; > + exit-latency-us = <300>; > + min-residency-us = <1200>; > + wakeup-latency-us = <160>; > + }; > + > + CHIP_D2: chip-d2 { > + compatible = "arm,idle-state"; > + local-timer-stop; > + arm,psci-suspend-param = <0x2010555>; > + entry-latency-us = <400>; > + exit-latency-us = <400>; > + min-residency-us = <1500>; > + wakeup-latency-us = <200>; > + }; > + }; > + > + clst0_core_opp_table: opp_table0 { Use '-' rather than '_': opp-table0 > + compatible = "operating-points-v2"; > + opp-shared; > + > + opp624000000 { > + opp-hz = /bits/ 64 <624000000>; > + opp-microvolt = <1000000>; > + clock-latency-ns = <200000>; > + }; > + opp832000000 { > + opp-hz = /bits/ 64 <832000000>; > + opp-microvolt = <1000000>; > + clock-latency-ns = <200000>; > + }; > + opp1000000000 { > + opp-hz = /bits/ 64 <1000000000>; > + opp-microvolt = <1500000>; > + clock-latency-ns = <200000>; > + }; > + opp1248000000 { > + opp-hz = /bits/ 64 <1248000000>; > + opp-microvolt = <1500000>; > + clock-latency-ns = <200000>; > + }; > + opp1400000000 { > + opp-hz = /bits/ 64 <1400000000>; > + opp-microvolt = <1500000>; > + clock-latency-ns = <200000>; > + }; > + opp1600000000 { > + opp-hz = /bits/ 64 <1600000000>; > + opp-microvolt = <1500000>; > + clock-latency-ns = <200000>; > + }; > + }; > + > + clst1_core_opp_table: opp_table1 { > + compatible = "operating-points-v2"; > + opp-shared; > + > + opp1000000000 { > + opp-hz = /bits/ 64 <1000000000>; > + opp-microvolt = <1500000>; > + clock-latency-ns = <200000>; > + }; > + opp1248000000 { > + opp-hz = /bits/ 64 <1248000000>; > + opp-microvolt = <1500000>; > + clock-latency-ns = <200000>; > + }; > + opp1600000000 { > + opp-hz = /bits/ 64 <1600000000>; > + opp-microvolt = <1500000>; > + clock-latency-ns = <200000>; > + }; > + opp1900000000 { > + opp-hz = /bits/ 64 <1900000000>; > + opp-microvolt = <1500000>; > + clock-latency-ns = <200000>; > + }; > + }; > + > + cpu-map { > + cluster0: cluster0 { > + #cooling-cells = <2>; /* min followed by max */ > + dynamic-pwr-coeff = <89>; > + static-pwr-base-coeff = <1335>; > + static-pwr-temp-coeff = > + <2225 27650 (-286) 10>; > + enable_ipa_vmin_control; Not documented. > + core0 { > + cpu = <&cpu0>; > + }; > + core1 { > + cpu = <&cpu1>; > + }; > + core2 { > + cpu = <&cpu2>; > + }; > + core3 { > + cpu = <&cpu3>; > + }; > + }; > + > + cluster1: cluster1 { > + #cooling-cells = <2>; > + dynamic-pwr-coeff = <115>; > + static-pwr-base-coeff = <2157>; > + static-pwr-temp-coeff = > + <52330 32960 (-603) 13>; > + enable_ipa_vmin_control; > + core0 { > + cpu = <&cpu4>; > + }; > + core1 { > + cpu = <&cpu5>; > + }; > + core2 { > + cpu = <&cpu6>; > + }; > + core3 { > + cpu = <&cpu7>; > + }; > + }; > + }; > + cpu0: cpu@0 { > + device_type = "cpu"; > + compatible = "arm,armv8"; 'arm,armv8' is only valid for s/w models. > + reg = <0 0x0>; > + enable-method = "psci"; > + cpu-idle-states = <&CPU_C2 &CLUSTER_MP2 &CHIP_D1P &CHIP_D1>; > + sched-energy-costs = <&CPU_COST_0 &CLUSTER_COST_0>; > + clocks = <&soc_clocks ASR_CLK_CLST0>; > + operating-points-v2 = <&clst0_core_opp_table>; > + }; > + cpu1: cpu@1 { > + device_type = "cpu"; > + compatible = "arm,armv8"; > + reg = <0 0x1>; > + enable-method = "psci"; > + cpu-idle-states = <&CPU_C2 &CLUSTER_MP2 &CHIP_D1P &CHIP_D1>; > + sched-energy-costs = <&CPU_COST_0 &CLUSTER_COST_0>; > + clocks = <&soc_clocks ASR_CLK_CLST0>; > + operating-points-v2 = <&clst0_core_opp_table>; > + }; > + cpu2: cpu@2 { > + device_type = "cpu"; > + compatible = "arm,armv8"; > + reg = <0 0x2>; > + enable-method = "psci"; > + cpu-idle-states = <&CPU_C2 &CLUSTER_MP2 &CHIP_D1P &CHIP_D1>; > + sched-energy-costs = <&CPU_COST_0 &CLUSTER_COST_0>; > + clocks = <&soc_clocks ASR_CLK_CLST0>; > + operating-points-v2 = <&clst0_core_opp_table>; > + }; > + cpu3: cpu@3 { > + device_type = "cpu"; > + compatible = "arm,armv8"; > + reg = <0 0x3>; > + enable-method = "psci"; > + cpu-idle-states = <&CPU_C2 &CLUSTER_MP2 &CHIP_D1P &CHIP_D1>; > + sched-energy-costs = <&CPU_COST_0 &CLUSTER_COST_0>; > + clocks = <&soc_clocks ASR_CLK_CLST0>; > + operating-points-v2 = <&clst0_core_opp_table>; > + }; > + cpu4: cpu@100 { > + device_type = "cpu"; > + compatible = "arm,armv8"; > + reg = <0 0x100>; > + enable-method = "psci"; > + cpu-idle-states = <&CPU_C2 &CLUSTER_MP2 &CHIP_D1P &CHIP_D1>; > + sched-energy-costs = <&CPU_COST_1 &CLUSTER_COST_1>; > + clocks = <&soc_clocks ASR_CLK_CLST1>; > + operating-points-v2 = <&clst1_core_opp_table>; > + }; > + cpu5: cpu@101 { > + device_type = "cpu"; > + compatible = "arm,armv8"; > + reg = <0 0x101>; > + enable-method = "psci"; > + cpu-idle-states = <&CPU_C2 &CLUSTER_MP2 &CHIP_D1P &CHIP_D1>; > + sched-energy-costs = <&CPU_COST_1 &CLUSTER_COST_1>; > + clocks = <&soc_clocks ASR_CLK_CLST1>; > + operating-points-v2 = <&clst1_core_opp_table>; > + }; > + cpu6: cpu@102 { > + device_type = "cpu"; > + compatible = "arm,armv8"; > + reg = <0 0x102>; > + enable-method = "psci"; > + cpu-idle-states = <&CPU_C2 &CLUSTER_MP2 &CHIP_D1P &CHIP_D1>; > + sched-energy-costs = <&CPU_COST_1 &CLUSTER_COST_1>; > + clocks = <&soc_clocks ASR_CLK_CLST1>; > + operating-points-v2 = <&clst1_core_opp_table>; > + }; > + cpu7: cpu@103 { > + device_type = "cpu"; > + compatible = "arm,armv8"; > + reg = <0 0x103>; > + enable-method = "psci"; > + cpu-idle-states = <&CPU_C2 &CLUSTER_MP2 &CHIP_D1P &CHIP_D1>; > + sched-energy-costs = <&CPU_COST_1 &CLUSTER_COST_1>; > + clocks = <&soc_clocks ASR_CLK_CLST1>; > + operating-points-v2 = <&clst1_core_opp_table>; > + }; > + > + }; > + > + energy-costs { None of this node is documented. > + /* cpu 0 data is magic data without any evidence */ > + CPU_COST_0: core-cost0 { > + busy-cost-data = < > + 195 35 /* 624mhz */ > + 260 48 /* 832mhz */ > + 312 64 /* 1000mhz */ > + 390 95 /* 1248mhz */ > + 438 118 /* 1400mhz */ > + 501 149 /* 1600mhz */ > + >; > + idle-cost-data = < > + 6 > + 0 > + 0 > + 0 > + 0 > + 0 > + 0 > + >; > + }; > + CPU_COST_1: core-cost1 { > + busy-cost-data = < > + 538 195 /* 1000mhz */ > + 672 292 /* 1248mhz */ > + 862 441 /* 1600mhz */ > + 1024 640 /* 1900mhz */ > + > + >; > + idle-cost-data = < > + 8 > + 0 > + 0 > + 0 > + 0 > + 0 > + 0 > + >; > + }; > + CLUSTER_COST_0: cluster-cost0 { > + busy-cost-data = < > + 195 7 /* 624mhz */ > + 260 10 /* 832mhz */ > + 312 13 /* 1000mhz */ > + 390 22 /* 1248mhz */ > + 438 29 /* 1400mhz */ > + 501 39 /* 1600mhz */ > + >; > + idle-cost-data = < > + 40 > + 50 > + 0 > + 0 > + 0 > + 0 > + 0 > + >; > + }; > + CLUSTER_COST_1: cluster-cost1 { > + busy-cost-data = < > + 538 20 /* 1000mhz */ > + 672 33 /* 1248mhz */ > + 862 54 /* 1600mhz */ > + 1024 86 /* 1900mhz */ > + >; > + idle-cost-data = < > + 50 > + 60 > + 0 > + 0 > + 0 > + 0 > + 0 > + >; > + }; > + }; > + > + psci { > + compatible = "arm,psci-1.0"; > + method = "smc"; > + cpu_suspend = <0xc4000001>; > + cpu_off = <0x84000002>; > + cpu_on = <0xc4000003>; I believe specifying the numbers is deprecated. > + }; > + > + pmu { > + compatible = "arm,armv8-pmuv3"; > + interrupts = <1 7 0x8>; /* PMU PPI, Level low type */ > + }; > + > + gic: interrupt-controller@d8000000 { > + compatible = "arm,gic-v3"; > + interrupt-controller; > + #interrupt-cells = <3>; > + reg = <0x0 0xd8000000 0x0 0x200000>, > + <0x0 0xd8100000 0x0 0x200000>; > + interrupts = <1 9 0x8>; > + }; > + > + generic-timer { > + compatible = "arm,armv8-timer"; > + /* PPI secure/nonsecure IRQ, active low level-sensitive */ > + interrupts = <1 13 0x8>, > + <1 14 0x8>, > + <1 11 0x8>, > + <1 10 0x8>; > + clock-frequency = <26000000>; > + }; > + > + soc { > + #address-cells = <2>; > + #size-cells = <2>; > + compatible = "simple-bus"; > + interrupt-parent = <&gic>; > + ranges; You can remove this level and move axi and apb up to the root. > + > + axi@d4200000 { /* AXI */ > + compatible = "asr,axi-bus", "simple-bus"; > + #address-cells = <1>; > + #size-cells = <1>; > + reg = <0 0xd4200000 0 0x00200000>; > + ranges = <0 0 0 0xffffffff>; > + > + }; /* AXI */ > + > + apb@d4000000 { /* APB */ > + compatible = "asr,apb-bus", "simple-bus"; > + #address-cells = <1>; > + #size-cells = <1>; > + reg = <0 0xd4000000 0 0x00200000>; > + ranges = <0 0 0 0xffffffff>; > + > + uart0: uart@d4017000 { > + compatible = "asr,uart"; > + reg = <0xd4017000 0x1000>; > + interrupts = <0 32 0x4>; > + clock-frequency = <13000000>; > + clocks = <&soc_clocks ASR_CLK_UART0>; > + }; > + > + uart1: uart@d4018000 { > + compatible = "asr,uart"; > + reg = <0xd4018000 0x1000>; > + interrupts = <0 33 0x4>; > + clock-frequency = <13000000>; > + clocks = <&soc_clocks ASR_CLK_UART1>; > + }; > + > + uart2: uart@d4017800 { > + compatible = "asr,uart"; > + reg = <0xd4017800 0x1000>; > + interrupts = <0 34 0x4>; > + clock-frequency = <13000000>; > + clocks = <&soc_clocks ASR_CLK_UART2>; > + }; > + > + pmx: pinmux@d401e000 { > + compatible = "pinconf-single"; > + reg = <0xd401e000 0x400>; > + #address-cells = <1>; > + #size-cells = <1>; > + #gpio-range-cells = <3>; > + ranges; > + > + pinctrl-single,register-width = <32>; > + pinctrl-single,function-mask = <7>; > + > + range: gpio-range { > + #pinctrl-single,gpio-range-cells = <3>; > + }; > + }; > + }; /* APB */ > + }; /* soc */ > + > + soc_clocks: clocks@d4050000{ > + compatible = "asr,8751c-clock"; > + reg = <0x0 0xd4050000 0x0 0x209c>, > + <0x0 0xd4282800 0x0 0x400>, > + <0x0 0xd4015000 0x0 0x1000>, > + <0x0 0xd4090000 0x0 0x1000>, > + <0x0 0xd4282c00 0x0 0x400>, > + <0x0 0xd8440000 0x0 0x98>, > + <0x0 0xd4200000 0x0 0x4280>; > + reg-names = "mpmu", "apmu", "apbc", "apbs", "ciu", "dciu", "ddrc"; > + interrupts = <0 96 IRQ_TYPE_LEVEL_HIGH>; > + #clock-cells = <1>; > + }; > +}; > -- > 2.7.4 >