Re: [PATCH v2 1/1] arm64: dts: qcom: Add MSM8976 device tree

From: Bjorn Andersson
Date: Tue Nov 01 2022 - 23:02:39 EST


On Tue, Nov 01, 2022 at 08:16:20PM +0100, Adam Skladowski wrote:
> Add a base DT for MSM8976 SoC.
>

Please send this together with some device dts, so that it's actually
being built.

> Signed-off-by: Adam Skladowski <a39.skl@xxxxxxxxx>
> ---
> arch/arm64/boot/dts/qcom/msm8976.dtsi | 1310 +++++++++++++++++++++++++
> 1 file changed, 1310 insertions(+)
> create mode 100644 arch/arm64/boot/dts/qcom/msm8976.dtsi
>
> diff --git a/arch/arm64/boot/dts/qcom/msm8976.dtsi b/arch/arm64/boot/dts/qcom/msm8976.dtsi
> new file mode 100644
> index 0000000000000..c073f16faa7ee
> --- /dev/null
> +++ b/arch/arm64/boot/dts/qcom/msm8976.dtsi
> @@ -0,0 +1,1310 @@
> +// SPDX-License-Identifier: BSD-3-Clause
> +/* Copyright (c) 2022, The Linux Foundation. All rights reserved. */
> +
> +#include <dt-bindings/clock/qcom,gcc-msm8976.h>
> +#include <dt-bindings/clock/qcom,rpmcc.h>
> +#include <dt-bindings/gpio/gpio.h>
> +#include <dt-bindings/interrupt-controller/arm-gic.h>
> +#include <dt-bindings/power/qcom-rpmpd.h>
> +#include <dt-bindings/thermal/thermal.h>
> +
> +/ {
> + interrupt-parent = <&intc>;
> +
> + #address-cells = <2>;
> + #size-cells = <2>;
> +
> + chosen { };
> +
> + clocks {
> + xo_board_clk: xo_board_clk {

No underscore in node names please (xo-board-clk sounds good).

> + compatible = "fixed-clock";
> + #clock-cells = <0>;
> + clock-frequency = <19200000>;
> + };
> +
> + sleep_clk {
> + compatible = "fixed-clock";
> + #clock-cells = <0>;
> + clock-frequency = <32768>;
> + };
> + };
> +
[..]
> + reserved-memory {
> + #address-cells = <2>;
> + #size-cells = <2>;
> + ranges;
> +
> + cont_splash_mem: memory@83000000 {

"memory" is reserved, so please don't do what we've been doing
everywhere else, but instead use descriptive names.

> + reg = <0x0 0x83000000 0x0 0x2800000>;
> + };
> +
[..]
> +
> + mba_mem: mba_mem@d5a00000 {

No underscores in node names please.

> + reg = <0x0 0xd5a00000 0x0 0x100000>;
> + no-map;
> + };
> + };
[..]
> + soc: soc@0 {
[..]
> +
> + tlmm: pinctrl@1000000 {
> + compatible = "qcom,msm8976-pinctrl";
> + reg = <0x01000000 0x300000>;
> + interrupts = <GIC_SPI 208 IRQ_TYPE_LEVEL_HIGH>;
> + gpio-controller;
> + gpio-ranges = <&tlmm 0 0 158>;
> + #gpio-cells = <2>;
> + interrupt-controller;
> + #interrupt-cells = <2>;
> +
> + mdss_te_default: mdss-te-default-state {
> + pins = "gpio24";
> + function = "mdp_vsync";
> + drive-strength = <2>;
> + bias-pull-down;
> + };
> +
> + sdc1_clk_on: sdc1-clk-on-state {

I do like when related configuration is lumped together in a single
state:

sdc1-default-state {
clk-pins {
...;
};

cmd-pins {
...;
};

...
};

> + pins = "sdc1_clk";
> + bias-disable;
> + drive-strength = <16>;
> + };
> +
> + sdc1_clk_off: sdc1-clk-off-state {
> + pins = "sdc1_clk";
> + bias-disable;
> + drive-strength = <2>;
> + };
> +
[..]
> +
> + gpio_key_default: gpio-key-default-state {

This looks like a state that should go in the board-specific .dts.

> + pins = "gpio113";
> + function = "gpio";
> + drive-strength = <2>;
> + bias-pull-up;
> + };
[..]
> + };
> +
> + gcc: clock-controller@1800000 {
> + compatible = "qcom,gcc-msm8976-v1.1";
> + reg = <0x01800000 0x80000>;
> + #clock-cells = <1>;
> + #reset-cells = <1>;
> + #power-domain-cells = <1>;
> + clocks = <&rpmcc RPM_SMD_XO_CLK_SRC>,
> + <&rpmcc RPM_SMD_XO_A_CLK_SRC>,
> + <&dsi0_phy 1>,
> + <&dsi0_phy 0>,
> + <&dsi1_phy 1>,
> + <&dsi1_phy 0>;
> + clock-names = "xo",
> + "xo_a",
> + "dsi0pll",
> + "dsi0pllbyte",
> + "dsi1pll",
> + "dsi1pllbyte";
> + };
> +
> + tcsr_mutex: hwlock@1905000 {
> + compatible = "qcom,tcsr-mutex";
> + reg = <0x01905000 0x20000>;
> + #hwlock-cells = <1>;
> + };
> +
> + tcsr: syscon@1937000 {
> + compatible = "qcom,tcsr-msm8976", "syscon";
> + reg = <0x01937000 0x30000>;
> + };
> +
> + mdss: mdss@1a00000 {

display-subsystem@ please.

> + compatible = "qcom,mdss";
> +
> + reg = <0x01a00000 0x1000>,
> + <0x01ab0000 0x1040>;
> + reg-names = "mdss_phys",
> + "vbif_phys";
> +
> + power-domains = <&gcc MDSS_GDSC>;
> + interrupts = <GIC_SPI 72 IRQ_TYPE_LEVEL_HIGH>;
> +
> + interrupt-controller;
> + #interrupt-cells = <1>;
> +
> + clocks = <&gcc GCC_MDSS_AHB_CLK>,
> + <&gcc GCC_MDSS_AXI_CLK>,
> + <&gcc GCC_MDSS_VSYNC_CLK>,
> + <&gcc GCC_MDSS_MDP_CLK>;
> + clock-names = "iface",
> + "bus",
> + "vsync",
> + "core";
> +
> + #address-cells = <1>;
> + #size-cells = <1>;
> + ranges;
> +
> + status = "disabled";
> +
> + mdp: mdp@1a01000 {

display-controller@ please

> + compatible = "qcom,mdp5";
> + reg = <0x01a01000 0x89000>;
> + reg-names = "mdp_phys";
> +
> + interrupt-parent = <&mdss>;
> + interrupts = <0>;
> +
> + power-domains = <&gcc MDSS_GDSC>;
> +
> + clocks = <&gcc GCC_MDSS_AHB_CLK>,
> + <&gcc GCC_MDSS_AXI_CLK>,
> + <&gcc GCC_MDSS_MDP_CLK>,
> + <&gcc GCC_MDSS_VSYNC_CLK>,
> + <&gcc GCC_MDP_TBU_CLK>,
> + <&gcc GCC_MDP_RT_TBU_CLK>;
> + clock-names = "iface",
> + "bus",
> + "core",
> + "vsync",
> + "tbu",
> + "tbu_rt";
> + iommus = <&apps_iommu 0x17>;
> +
> + ports {
> + #address-cells = <1>;
> + #size-cells = <0>;
> +
> + port@0 {
> + reg = <0>;
> + mdp5_intf1_out: endpoint {
> + remote-endpoint = <&dsi0_in>;
> + };
> + };
> +
> + port@1 {
> + reg = <1>;
> + mdp5_intf2_out: endpoint {
> + remote-endpoint = <&dsi1_in>;
> + };
> + };
> + };
> + };
> +
> + dsi0: dsi@1a94000 {

If you label this mdss_dsi0 (and similar for other mdss nodes) it will
sort nicely in the dts

> + compatible = "qcom,mdss-dsi-ctrl";
> + reg = <0x01a94000 0x2d4>;
> + reg-names = "dsi_ctrl";
[..]

Generally, please try to use make dtbs_check

Thanks,
Bjorn