Message ID | 20180428054248.22387-1-bjorn.andersson@linaro.org |
---|---|
State | New |
Headers | show |
Series | [v2,1/2] arm64: dts: Add msm8998 SoC and MTP board support | expand |
Quoting Bjorn Andersson (2018-04-27 22:42:48) > diff --git a/arch/arm64/boot/dts/qcom/msm8998.dtsi b/arch/arm64/boot/dts/qcom/msm8998.dtsi > index d6665e4f801f..ccbf6347aacb 100644 > --- a/arch/arm64/boot/dts/qcom/msm8998.dtsi > +++ b/arch/arm64/boot/dts/qcom/msm8998.dtsi > @@ -220,6 +220,16 @@ > method = "smc"; > }; > > + rpm_glink: rpm-glink { > + compatible = "qcom,glink-rpm"; > + > + interrupts = <GIC_SPI 168 IRQ_TYPE_EDGE_RISING>; > + > + qcom,rpm-msg-ram = <&rpm_msg_ram>; > + > + mboxes = <&apcs_glb 0>; Why so many newlines? > + }; > + > soc: soc {}; > }; > > @@ -337,4 +347,77 @@ > #interrupt-cells = <4>; > cell-index = <0>; > }; > + > + rpm_msg_ram: memory@68000 { unit address doesn't match reg property. > + compatible = "qcom,rpm-msg-ram"; > + reg = <0x778000 0x7000>; > + }; > + > + apcs_glb: mailbox@9820000 { unit address doesn't match reg property. > + compatible = "qcom,msm8998-apcs-hmss-global"; > + reg = <0x17911000 0x1000>; > + > + #mbox-cells = <1>; > + }; > +}; > + > +&rpm_glink { > + rpm_requests { > + compatible = "qcom,rpm-msm8998"; > + qcom,glink-channels = "rpm_requests"; > + > + pm8998-regulators { > + compatible = "qcom,rpm-pm8998-regulators"; > + > + pm8998_s1: s1 {}; > + pm8998_s2: s2 {}; > + pm8998_s3: s3 {}; > + pm8998_s4: s4 {}; > + pm8998_s5: s5 {}; > + pm8998_s6: s6 {}; > + pm8998_s7: s7 {}; > + pm8998_s8: s8 {}; > + pm8998_s9: s9 {}; > + pm8998_s10: s10 {}; > + pm8998_s11: s11 {}; > + pm8998_s12: s12 {}; > + pm8998_s13: s13 {}; > + pm8998_l1: l1 {}; > + pm8998_l2: l2 {}; > + pm8998_l3: l3 {}; > + pm8998_l4: l4 {}; > + pm8998_l5: l5 {}; > + pm8998_l6: l6 {}; > + pm8998_l7: l7 {}; > + pm8998_l8: l8 {}; > + pm8998_l9: l9 {}; > + pm8998_l10: l10 {}; > + pm8998_l11: l11 {}; > + pm8998_l12: l12 {}; > + pm8998_l13: l13 {}; > + pm8998_l14: l14 {}; > + pm8998_l15: l15 {}; > + pm8998_l16: l16 {}; > + pm8998_l17: l17 {}; > + pm8998_l18: l18 {}; > + pm8998_l19: l19 {}; > + pm8998_l20: l20 {}; > + pm8998_l21: l21 {}; > + pm8998_l22: l22 {}; > + pm8998_l23: l23 {}; > + pm8998_l24: l24 {}; > + pm8998_l25: l25 {}; > + pm8998_l26: l26 {}; > + pm8998_l27: l27 {}; > + pm8998_l28: l28 {}; > + pm8998_lvs1: lvs1 {}; > + pm8998_lvs2: lvs2 {}; What's the benefit to having the nodes here instead of in each board? > + }; > + > + pmi8998-regulators { > + compatible = "qcom,rpm-pmi8998-regulators"; > + > + pmi8998_bob: bob {}; > + }; These may be board specific? So each regulator container would need status = "disabled" and then status = "okay" in the board file. -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Mon 07 May 16:04 PDT 2018, Stephen Boyd wrote: > Quoting Bjorn Andersson (2018-04-27 22:42:48) > > diff --git a/arch/arm64/boot/dts/qcom/msm8998.dtsi b/arch/arm64/boot/dts/qcom/msm8998.dtsi > > index d6665e4f801f..ccbf6347aacb 100644 > > --- a/arch/arm64/boot/dts/qcom/msm8998.dtsi > > +++ b/arch/arm64/boot/dts/qcom/msm8998.dtsi > > @@ -220,6 +220,16 @@ > > method = "smc"; > > }; > > > > + rpm_glink: rpm-glink { > > + compatible = "qcom,glink-rpm"; > > + > > + interrupts = <GIC_SPI 168 IRQ_TYPE_EDGE_RISING>; > > + > > + qcom,rpm-msg-ram = <&rpm_msg_ram>; > > + > > + mboxes = <&apcs_glb 0>; > > Why so many newlines? > No particular reason... > > + }; > > + > > soc: soc {}; > > }; > > > > @@ -337,4 +347,77 @@ > > #interrupt-cells = <4>; > > cell-index = <0>; > > }; > > + > > + rpm_msg_ram: memory@68000 { > > unit address doesn't match reg property. > Doh... > > + compatible = "qcom,rpm-msg-ram"; > > + reg = <0x778000 0x7000>; > > + }; [..] > > +&rpm_glink { > > + rpm_requests { > > + compatible = "qcom,rpm-msm8998"; > > + qcom,glink-channels = "rpm_requests"; > > + > > + pm8998-regulators { > > + compatible = "qcom,rpm-pm8998-regulators"; > > + > > + pm8998_s1: s1 {}; [..] > > + pm8998_lvs2: lvs2 {}; > > What's the benefit to having the nodes here instead of in each board? > That's how we've done it in the previous boards, but I had a discussion regarding this with Doug the other day and agree that it might make sense to just leave them out. In particular Doug wanted to use labels based on names in the schematics for his board... > > + }; > > + > > + pmi8998-regulators { > > + compatible = "qcom,rpm-pmi8998-regulators"; > > + > > + pmi8998_bob: bob {}; > > + }; > > These may be board specific? So each regulator container would need > status = "disabled" and then status = "okay" in the board file. > Right, we haven't really seen the need for this before, but it seems to make more sense to move all regulators and their references to the board file. Regards, Bjorn -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Quoting Bjorn Andersson (2018-05-07 16:35:11) > On Mon 07 May 15:59 PDT 2018, Stephen Boyd wrote: > > > Quoting Bjorn Andersson (2018-04-27 22:42:47) > > > diff --git a/arch/arm64/boot/dts/qcom/msm8998.dtsi b/arch/arm64/boot/dts/qcom/msm8998.dtsi > > > new file mode 100644 > > > index 000000000000..d6665e4f801f > > > --- /dev/null > > > +++ b/arch/arm64/boot/dts/qcom/msm8998.dtsi > > > @@ -0,0 +1,340 @@ > > > +// SPDX-License-Identifier: GPL-2.0 > > > +/* Copyright (c) 2016, The Linux Foundation. All rights reserved. */ > > > + > > > +#include <dt-bindings/interrupt-controller/arm-gic.h> > > > +#include <dt-bindings/clock/qcom,gcc-msm8998.h> > > > + > > > +/ { > > > + model = "Qualcomm Technologies, Inc. MSM 8998"; Drop the space between MSM and 8998? > > > + > > > + interrupt-parent = <&intc>; > > > + > > > + qcom,msm-id = <292 0x0>; > > > > No update to dtbtool? > > > > This allows me to concatenate the dtb to the Image.gz and boot the > device. From my scripts I see that I tried to use dtbTool before > reverting to this... Oh, must be that the bootloader mandates the magic numbers exist in the blob and you can't concatenate a single dtb and have it ignore the magic numbers? Sounds perfect. > > [..] > > > + cpu-map { > > > + cluster0 { > > > + core0 { > > > + cpu = <&CPU0>; > > > + }; > > > + > > > + core1 { > > > + cpu = <&CPU1>; > > > + }; > > > + > > > + core2 { > > > + cpu = <&CPU2>; > > > + }; > > > + > > > + core3 { > > > + cpu = <&CPU3>; > > > + }; > > > + }; > > > + > > > + cluster1 { > > > + core0 { > > > + cpu = <&CPU4>; > > > + }; > > > + > > > + core1 { > > > + cpu = <&CPU5>; > > > + }; > > > + > > > + core2 { > > > + cpu = <&CPU6>; > > > + }; > > > + > > > + core3 { > > > + cpu = <&CPU7>; > > > + }; > > > + }; > > > + }; > > > > I still wonder if this is accurate, but OK. > > > > Afaict it matches downstream, not sure if I'm missing something? Right, it matches downstream, but I seem to recall that downstream was describing the power "clusters" for big and little, when this mapping usually follows the cache layout of the CPUs (i.e. if all CPUs share a cache then they're in the same cluster). > > [..] > > > + intc: interrupt-controller@17a00000 { > > > + compatible = "arm,gic-v3"; > > > + reg = <0x17a00000 0x10000>, /* GICD */ > > > + <0x17b00000 0x100000>; /* GICR * 8 */ > > > + #interrupt-cells = <3>; > > > + #address-cells = <1>; > > > + #size-cells = <1>; > > > + ranges; > > > + interrupt-controller; > > > + #redistributor-regions = <1>; > > > + redistributor-stride = <0x0 0x20000>; > > > > Is this needed? The redistributor stuff can be left out if there's only > > one right? > > > > #redistributor-regions is listed as optional if there's more than 1, the > stride is still needed. > > Afaict the stride still needs to be specified, as it's different from > the default 64kb. There's one region though. Marc rejected those properties in the sdm845 dts file[1] and it looks exactly the same here. It would be nice if the ITS region was described (we know it's there and it's probably the same offset as on SDM845 no doubt). > > > > + interrupts = <GIC_PPI 9 IRQ_TYPE_LEVEL_HIGH>; > > > + }; > > > + > > > + blsp2_uart1: serial@c1b0000 { > > > > Clk name says uart2 though? > > > > That's because it's the wrong clock. Thanks! Hah! [1] https://lkml.kernel.org/r/96fac632-8fb8-0933-cc1f-627acb38a595@arm.com -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/arch/arm64/boot/dts/qcom/Makefile b/arch/arm64/boot/dts/qcom/Makefile index 55ec5ee7f7e8..f658595bb347 100644 --- a/arch/arm64/boot/dts/qcom/Makefile +++ b/arch/arm64/boot/dts/qcom/Makefile @@ -6,3 +6,4 @@ dtb-$(CONFIG_ARCH_QCOM) += msm8916-mtp.dtb dtb-$(CONFIG_ARCH_QCOM) += msm8992-bullhead-rev-101.dtb dtb-$(CONFIG_ARCH_QCOM) += msm8994-angler-rev-101.dtb dtb-$(CONFIG_ARCH_QCOM) += msm8996-mtp.dtb +dtb-$(CONFIG_ARCH_QCOM) += msm8998-mtp.dtb diff --git a/arch/arm64/boot/dts/qcom/msm8998-mtp.dts b/arch/arm64/boot/dts/qcom/msm8998-mtp.dts new file mode 100644 index 000000000000..f1853e020e57 --- /dev/null +++ b/arch/arm64/boot/dts/qcom/msm8998-mtp.dts @@ -0,0 +1,13 @@ +// SPDX-License-Identifier: GPL-2.0 +/* Copyright (c) 2016, The Linux Foundation. All rights reserved. */ + +/dts-v1/; + +#include "msm8998-mtp.dtsi" + +/ { + model = "Qualcomm Technologies, Inc. MSM 8998 v1 MTP"; + compatible = "qcom,msm8998-mtp"; + + qcom,board-id = <8 0>; +}; diff --git a/arch/arm64/boot/dts/qcom/msm8998-mtp.dtsi b/arch/arm64/boot/dts/qcom/msm8998-mtp.dtsi new file mode 100644 index 000000000000..e30c95f63a05 --- /dev/null +++ b/arch/arm64/boot/dts/qcom/msm8998-mtp.dtsi @@ -0,0 +1,20 @@ +// SPDX-License-Identifier: GPL-2.0 +/* Copyright (c) 2016, The Linux Foundation. All rights reserved. */ + +#include "msm8998.dtsi" + +/ { + aliases { + serial0 = &blsp2_uart1; + }; + + chosen { + stdout-path = "serial0:115200n8"; + }; +}; + +&soc { + serial@c1b0000 { + status = "okay"; + }; +}; diff --git a/arch/arm64/boot/dts/qcom/msm8998.dtsi b/arch/arm64/boot/dts/qcom/msm8998.dtsi new file mode 100644 index 000000000000..d6665e4f801f --- /dev/null +++ b/arch/arm64/boot/dts/qcom/msm8998.dtsi @@ -0,0 +1,340 @@ +// SPDX-License-Identifier: GPL-2.0 +/* Copyright (c) 2016, The Linux Foundation. All rights reserved. */ + +#include <dt-bindings/interrupt-controller/arm-gic.h> +#include <dt-bindings/clock/qcom,gcc-msm8998.h> + +/ { + model = "Qualcomm Technologies, Inc. MSM 8998"; + + interrupt-parent = <&intc>; + + qcom,msm-id = <292 0x0>; + + #address-cells = <2>; + #size-cells = <2>; + + chosen { }; + + memory { + device_type = "memory"; + /* We expect the bootloader to fill in the reg */ + reg = <0 0 0 0>; + }; + + cpus { + #address-cells = <2>; + #size-cells = <0>; + + CPU0: cpu@0 { + device_type = "cpu"; + compatible = "arm,armv8"; + reg = <0x0 0x0>; + enable-method = "psci"; + efficiency = <1024>; + next-level-cache = <&L2_0>; + L2_0: l2-cache { + compatible = "arm,arch-cache"; + cache-level = <2>; + }; + L1_I_0: l1-icache { + compatible = "arm,arch-cache"; + }; + L1_D_0: l1-dcache { + compatible = "arm,arch-cache"; + }; + }; + + CPU1: cpu@1 { + device_type = "cpu"; + compatible = "arm,armv8"; + reg = <0x0 0x1>; + enable-method = "psci"; + efficiency = <1024>; + next-level-cache = <&L2_0>; + L1_I_1: l1-icache { + compatible = "arm,arch-cache"; + }; + L1_D_1: l1-dcache { + compatible = "arm,arch-cache"; + }; + }; + + CPU2: cpu@2 { + device_type = "cpu"; + compatible = "arm,armv8"; + reg = <0x0 0x2>; + enable-method = "psci"; + efficiency = <1024>; + next-level-cache = <&L2_0>; + L1_I_2: l1-icache { + compatible = "arm,arch-cache"; + }; + L1_D_2: l1-dcache { + compatible = "arm,arch-cache"; + }; + }; + + CPU3: cpu@3 { + device_type = "cpu"; + compatible = "arm,armv8"; + reg = <0x0 0x3>; + enable-method = "psci"; + efficiency = <1024>; + next-level-cache = <&L2_0>; + L1_I_3: l1-icache { + compatible = "arm,arch-cache"; + }; + L1_D_3: l1-dcache { + compatible = "arm,arch-cache"; + }; + }; + + CPU4: cpu@100 { + device_type = "cpu"; + compatible = "arm,armv8"; + reg = <0x0 0x100>; + enable-method = "psci"; + efficiency = <1536>; + next-level-cache = <&L2_1>; + L2_1: l2-cache { + compatible = "arm,arch-cache"; + cache-level = <2>; + }; + L1_I_100: l1-icache { + compatible = "arm,arch-cache"; + }; + L1_D_100: l1-dcache { + compatible = "arm,arch-cache"; + }; + }; + + CPU5: cpu@101 { + device_type = "cpu"; + compatible = "arm,armv8"; + reg = <0x0 0x101>; + enable-method = "psci"; + efficiency = <1536>; + next-level-cache = <&L2_1>; + L1_I_101: l1-icache { + compatible = "arm,arch-cache"; + }; + L1_D_101: l1-dcache { + compatible = "arm,arch-cache"; + }; + }; + + CPU6: cpu@102 { + device_type = "cpu"; + compatible = "arm,armv8"; + reg = <0x0 0x102>; + enable-method = "psci"; + efficiency = <1536>; + next-level-cache = <&L2_1>; + L1_I_102: l1-icache { + compatible = "arm,arch-cache"; + }; + L1_D_102: l1-dcache { + compatible = "arm,arch-cache"; + }; + }; + + CPU7: cpu@103 { + device_type = "cpu"; + compatible = "arm,armv8"; + reg = <0x0 0x103>; + enable-method = "psci"; + efficiency = <1536>; + next-level-cache = <&L2_1>; + L1_I_103: l1-icache { + compatible = "arm,arch-cache"; + }; + L1_D_103: l1-dcache { + compatible = "arm,arch-cache"; + }; + }; + + cpu-map { + cluster0 { + core0 { + cpu = <&CPU0>; + }; + + core1 { + cpu = <&CPU1>; + }; + + core2 { + cpu = <&CPU2>; + }; + + core3 { + cpu = <&CPU3>; + }; + }; + + cluster1 { + core0 { + cpu = <&CPU4>; + }; + + core1 { + cpu = <&CPU5>; + }; + + core2 { + cpu = <&CPU6>; + }; + + core3 { + cpu = <&CPU7>; + }; + }; + }; + }; + + timer { + compatible = "arm,armv8-timer"; + interrupts = <GIC_PPI 1 IRQ_TYPE_LEVEL_LOW>, + <GIC_PPI 2 IRQ_TYPE_LEVEL_LOW>, + <GIC_PPI 3 IRQ_TYPE_LEVEL_LOW>, + <GIC_PPI 0 IRQ_TYPE_LEVEL_LOW>; + }; + + clocks { + xo_board { + compatible = "fixed-clock"; + #clock-cells = <0>; + clock-frequency = <19200000>; + }; + + sleep_clk { + compatible = "fixed-clock"; + #clock-cells = <0>; + clock-frequency = <32764>; + }; + }; + + psci { + compatible = "arm,psci-1.0"; + method = "smc"; + }; + + soc: soc {}; +}; + +&soc { + #address-cells = <1>; + #size-cells = <1>; + ranges = <0 0 0 0xffffffff>; + compatible = "simple-bus"; + + intc: interrupt-controller@17a00000 { + compatible = "arm,gic-v3"; + reg = <0x17a00000 0x10000>, /* GICD */ + <0x17b00000 0x100000>; /* GICR * 8 */ + #interrupt-cells = <3>; + #address-cells = <1>; + #size-cells = <1>; + ranges; + interrupt-controller; + #redistributor-regions = <1>; + redistributor-stride = <0x0 0x20000>; + interrupts = <GIC_PPI 9 IRQ_TYPE_LEVEL_HIGH>; + }; + + gcc: clock-controller@100000 { + compatible = "qcom,gcc-msm8998"; + #clock-cells = <1>; + #reset-cells = <1>; + #power-domain-cells = <1>; + reg = <0x100000 0xb0000>; + }; + + blsp2_uart1: serial@c1b0000 { + compatible = "qcom,msm-uartdm-v1.4", "qcom,msm-uartdm"; + reg = <0xc1b0000 0x1000>; + interrupts = <GIC_SPI 114 IRQ_TYPE_LEVEL_HIGH>; + clocks = <&gcc GCC_BLSP2_UART2_APPS_CLK>, + <&gcc GCC_BLSP2_AHB_CLK>; + clock-names = "core", "iface"; + status = "disabled"; + }; + + timer@17920000 { + #address-cells = <1>; + #size-cells = <1>; + ranges; + compatible = "arm,armv7-timer-mem"; + reg = <0x17920000 0x1000>; + + frame@17921000 { + frame-number = <0>; + interrupts = <GIC_SPI 8 IRQ_TYPE_LEVEL_HIGH>, + <GIC_SPI 7 IRQ_TYPE_LEVEL_HIGH>; + reg = <0x17921000 0x1000>, + <0x17922000 0x1000>; + }; + + frame@17923000 { + frame-number = <1>; + interrupts = <GIC_SPI 9 IRQ_TYPE_LEVEL_HIGH>; + reg = <0x17923000 0x1000>; + status = "disabled"; + }; + + frame@17924000 { + frame-number = <2>; + interrupts = <GIC_SPI 10 IRQ_TYPE_LEVEL_HIGH>; + reg = <0x17924000 0x1000>; + status = "disabled"; + }; + + frame@17925000 { + frame-number = <3>; + interrupts = <GIC_SPI 11 IRQ_TYPE_LEVEL_HIGH>; + reg = <0x17925000 0x1000>; + status = "disabled"; + }; + + frame@17926000 { + frame-number = <4>; + interrupts = <GIC_SPI 12 IRQ_TYPE_LEVEL_HIGH>; + reg = <0x17926000 0x1000>; + status = "disabled"; + }; + + frame@17927000 { + frame-number = <5>; + interrupts = <GIC_SPI 13 IRQ_TYPE_LEVEL_HIGH>; + reg = <0x17927000 0x1000>; + status = "disabled"; + }; + + frame@17928000 { + frame-number = <6>; + interrupts = <GIC_SPI 14 IRQ_TYPE_LEVEL_HIGH>; + reg = <0x17928000 0x1000>; + status = "disabled"; + }; + }; + + spmi_bus: qcom,spmi@800f000 { + compatible = "qcom,spmi-pmic-arb"; + reg = <0x800f000 0x1000>, + <0x8400000 0x1000000>, + <0x9400000 0x1000000>, + <0xa400000 0x220000>, + <0x800a000 0x3000>; + reg-names = "core", "chnls", "obsrvr", "intr", "cnfg"; + interrupt-names = "periph_irq"; + interrupts = <GIC_SPI 326 IRQ_TYPE_LEVEL_HIGH>; + qcom,ee = <0>; + qcom,channel = <0>; + #address-cells = <2>; + #size-cells = <0>; + interrupt-controller; + #interrupt-cells = <4>; + cell-index = <0>; + }; +};