arm64: dts: qcom: add SA8540P and ADP
authorBjorn Andersson <bjorn.andersson@linaro.org>
Wed, 29 Jun 2022 04:14:38 +0000 (21:14 -0700)
committerBjorn Andersson <bjorn.andersson@linaro.org>
Sun, 3 Jul 2022 02:50:10 +0000 (21:50 -0500)
Introduce the Qualcomm SA8540P automotive platform and the SA8295P ADP
development board.

The SA8540P and SC8280XP are fairly similar, so the SA8540P is built
ontop of the SC8280XP dtsi to reduce duplication. As more advanced
features are integrated this might be re-evaluated.

This initial contribution supports SMP, CPUFreq, cluster idle, UFS, RPMh
regulators, debug UART, PMICs, remoteprocs (NSPs crashes shortly after
booting) and USB.

The SA8295P ADP contains four PM8450 PMICs, which according to their
revid are compatible with PM8150. They are defined within the ADP for
now, to avoid creating additional .dtsi files for PM8150 with just
addresses changed - and to allow using the labels from the schematics.

Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
Reviewed-by: Johan Hovold <johan+linaro@kernel.org>
Link: https://lore.kernel.org/r/20220629041438.1352536-6-bjorn.andersson@linaro.org
arch/arm64/boot/dts/qcom/Makefile
arch/arm64/boot/dts/qcom/sa8295p-adp.dts [new file with mode: 0644]
arch/arm64/boot/dts/qcom/sa8540p.dtsi [new file with mode: 0644]

index 83ac313..2e532e8 100644 (file)
@@ -49,6 +49,7 @@ dtb-$(CONFIG_ARCH_QCOM)       += qcs404-evb-1000.dtb
 dtb-$(CONFIG_ARCH_QCOM)        += qcs404-evb-4000.dtb
 dtb-$(CONFIG_ARCH_QCOM)        += qrb5165-rb5.dtb
 dtb-$(CONFIG_ARCH_QCOM)        += sa8155p-adp.dtb
+dtb-$(CONFIG_ARCH_QCOM)        += sa8295p-adp.dtb
 dtb-$(CONFIG_ARCH_QCOM)        += sc7180-idp.dtb
 dtb-$(CONFIG_ARCH_QCOM)        += sc7180-trogdor-coachz-r1.dtb
 dtb-$(CONFIG_ARCH_QCOM)        += sc7180-trogdor-coachz-r1-lte.dtb
diff --git a/arch/arm64/boot/dts/qcom/sa8295p-adp.dts b/arch/arm64/boot/dts/qcom/sa8295p-adp.dts
new file mode 100644 (file)
index 0000000..9398f03
--- /dev/null
@@ -0,0 +1,389 @@
+// SPDX-License-Identifier: BSD-3-Clause
+/*
+ * Copyright (c) 2021, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2022, Linaro Limited
+ */
+
+/dts-v1/;
+
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/regulator/qcom,rpmh-regulator.h>
+#include <dt-bindings/spmi/spmi.h>
+
+#include "sa8540p.dtsi"
+
+/ {
+       model = "Qualcomm SA8295P ADP";
+       compatible = "qcom,sa8295p-adp", "qcom,sa8540p";
+
+       aliases {
+               serial0 = &qup2_uart17;
+       };
+
+       chosen {
+               stdout-path = "serial0:115200n8";
+       };
+};
+
+&apps_rsc {
+       pmm8540-a-regulators {
+               compatible = "qcom,pm8150-rpmh-regulators";
+               qcom,pmic-id = "a";
+
+               vreg_l3a: ldo3 {
+                       regulator-name = "vreg_l3a";
+                       regulator-min-microvolt = <1200000>;
+                       regulator-max-microvolt = <1208000>;
+                       regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+                       regulator-allow-set-load;
+               };
+
+               vreg_l5a: ldo5 {
+                       regulator-name = "vreg_l5a";
+                       regulator-min-microvolt = <912000>;
+                       regulator-max-microvolt = <912000>;
+                       regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+                       regulator-allow-set-load;
+               };
+
+               vreg_l7a: ldo7 {
+                       regulator-name = "vreg_l7a";
+                       regulator-min-microvolt = <1800000>;
+                       regulator-max-microvolt = <1800000>;
+                       regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+                       regulator-allow-set-load;
+               };
+
+               vreg_l13a: ldo13 {
+                       regulator-name = "vreg_l13a";
+                       regulator-min-microvolt = <3072000>;
+                       regulator-max-microvolt = <3072000>;
+                       regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+                       regulator-allow-set-load;
+               };
+       };
+
+       pmm8540-c-regulators {
+               compatible = "qcom,pm8150-rpmh-regulators";
+               qcom,pmic-id = "c";
+
+               vreg_l1c: ldo1 {
+                       regulator-name = "vreg_l1c";
+                       regulator-min-microvolt = <912000>;
+                       regulator-max-microvolt = <912000>;
+                       regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+                       regulator-allow-set-load;
+               };
+
+               vreg_l2c: ldo2 {
+                       regulator-name = "vreg_l2c";
+                       regulator-min-microvolt = <3072000>;
+                       regulator-max-microvolt = <3072000>;
+                       regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+                       regulator-allow-set-load;
+               };
+
+               vreg_l3c: ldo3 {
+                       regulator-name = "vreg_l3c";
+                       regulator-min-microvolt = <1200000>;
+                       regulator-max-microvolt = <1200000>;
+                       regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+                       regulator-allow-set-load;
+               };
+
+               vreg_l4c: ldo4 {
+                       regulator-name = "vreg_l4c";
+                       regulator-min-microvolt = <1200000>;
+                       regulator-max-microvolt = <1208000>;
+                       regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+                       regulator-allow-set-load;
+               };
+
+               vreg_l6c: ldo6 {
+                       regulator-name = "vreg_l6c";
+                       regulator-min-microvolt = <1200000>;
+                       regulator-max-microvolt = <1200000>;
+                       regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+                       regulator-allow-set-load;
+               };
+
+               vreg_l7c: ldo7 {
+                       regulator-name = "vreg_l7c";
+                       regulator-min-microvolt = <1800000>;
+                       regulator-max-microvolt = <1800000>;
+                       regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+                       regulator-allow-set-load;
+               };
+
+               vreg_l10c: ldo10 {
+                       regulator-name = "vreg_l10c";
+                       regulator-min-microvolt = <2504000>;
+                       regulator-max-microvolt = <2504000>;
+                       regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+                       regulator-allow-set-load;
+               };
+
+               vreg_l17c: ldo17 {
+                       regulator-name = "vreg_l17c";
+                       regulator-min-microvolt = <2504000>;
+                       regulator-max-microvolt = <2504000>;
+                       regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+                       regulator-allow-set-load;
+               };
+       };
+
+       pmm8540-g-regulators {
+               compatible = "qcom,pm8150-rpmh-regulators";
+               qcom,pmic-id = "g";
+
+               vreg_l3g: ldo3 {
+                       regulator-name = "vreg_l3g";
+                       regulator-min-microvolt = <1200000>;
+                       regulator-max-microvolt = <1200000>;
+                       regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+                       regulator-allow-set-load;
+               };
+
+               vreg_l7g: ldo7 {
+                       regulator-name = "vreg_l7g";
+                       regulator-min-microvolt = <1800000>;
+                       regulator-max-microvolt = <1800000>;
+                       regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+                       regulator-allow-set-load;
+               };
+
+               vreg_l8g: ldo8 {
+                       regulator-name = "vreg_l8g";
+                       regulator-min-microvolt = <880000>;
+                       regulator-max-microvolt = <880000>;
+                       regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+                       regulator-allow-set-load;
+               };
+       };
+};
+
+&qup2 {
+       status = "okay";
+};
+
+&qup2_uart17 {
+       compatible = "qcom,geni-debug-uart";
+       status = "okay";
+};
+
+&remoteproc_adsp {
+       firmware-name = "qcom/sa8540p/adsp.mbn";
+       status = "okay";
+};
+
+&remoteproc_nsp0 {
+       firmware-name = "qcom/sa8540p/cdsp.mbn";
+       status = "okay";
+};
+
+&remoteproc_nsp1 {
+       firmware-name = "qcom/sa8540p/cdsp1.mbn";
+       status = "okay";
+};
+
+&spmi_bus {
+       pm8450a: pmic@0 {
+               compatible = "qcom,pm8150", "qcom,spmi-pmic";
+               reg = <0x0 SPMI_USID>;
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               pm8450a_gpios: gpio@c000 {
+                       compatible = "qcom,pm8150-gpio";
+                       reg = <0xc000>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+                       interrupt-controller;
+                       #interrupt-cells = <2>;
+               };
+       };
+
+       pm8450c: pmic@4 {
+               compatible = "qcom,pm8150", "qcom,spmi-pmic";
+               reg = <0x4 SPMI_USID>;
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               pm8450c_gpios: gpio@c000 {
+                       compatible = "qcom,pm8150-gpio";
+                       reg = <0xc000>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+                       interrupt-controller;
+                       #interrupt-cells = <2>;
+               };
+       };
+
+       pm8450e: pmic@8 {
+               compatible = "qcom,pm8150", "qcom,spmi-pmic";
+               reg = <0x8 SPMI_USID>;
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               pm8450e_gpios: gpio@c000 {
+                       compatible = "qcom,pm8150-gpio";
+                       reg = <0xc000>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+                       interrupt-controller;
+                       #interrupt-cells = <2>;
+               };
+       };
+
+       pm8450g: pmic@c {
+               compatible = "qcom,pm8150", "qcom,spmi-pmic";
+               reg = <0xc SPMI_USID>;
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               pm8450g_gpios: gpio@c000 {
+                       compatible = "qcom,pm8150-gpio";
+                       reg = <0xc000>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+                       interrupt-controller;
+                       #interrupt-cells = <2>;
+               };
+       };
+};
+
+&ufs_mem_hc {
+       reset-gpios = <&tlmm 228 GPIO_ACTIVE_LOW>;
+
+       vcc-supply = <&vreg_l17c>;
+       vcc-max-microamp = <800000>;
+       vccq-supply = <&vreg_l6c>;
+       vccq-max-microamp = <900000>;
+
+       status = "okay";
+};
+
+&ufs_mem_phy {
+       vdda-phy-supply = <&vreg_l8g>;
+       vdda-pll-supply = <&vreg_l3g>;
+
+       status = "okay";
+};
+
+&ufs_card_hc {
+       reset-gpios = <&tlmm 229 GPIO_ACTIVE_LOW>;
+
+       vcc-supply = <&vreg_l10c>;
+       vcc-max-microamp = <800000>;
+       vccq-supply = <&vreg_l3c>;
+       vccq-max-microamp = <900000>;
+
+       status = "okay";
+};
+
+&ufs_card_phy {
+       vdda-phy-supply = <&vreg_l8g>;
+       vdda-pll-supply = <&vreg_l3g>;
+
+       status = "okay";
+};
+
+&usb_0 {
+       status = "okay";
+};
+
+&usb_0_dwc3 {
+       /* TODO: Define USB-C connector properly */
+       dr_mode = "peripheral";
+};
+
+&usb_0_hsphy {
+       vdda-pll-supply = <&vreg_l5a>;
+       vdda18-supply = <&vreg_l7a>;
+       vdda33-supply = <&vreg_l13a>;
+
+       status = "okay";
+};
+
+&usb_0_qmpphy {
+       vdda-phy-supply = <&vreg_l3a>;
+       vdda-pll-supply = <&vreg_l5a>;
+
+       status = "okay";
+};
+
+&usb_1 {
+       status = "okay";
+};
+
+&usb_1_dwc3 {
+       /* TODO: Define USB-C connector properly */
+       dr_mode = "host";
+};
+
+&usb_1_hsphy {
+       vdda-pll-supply = <&vreg_l1c>;
+       vdda18-supply = <&vreg_l7c>;
+       vdda33-supply = <&vreg_l2c>;
+
+       status = "okay";
+};
+
+&usb_1_qmpphy {
+       vdda-phy-supply = <&vreg_l4c>;
+       vdda-pll-supply = <&vreg_l1c>;
+
+       status = "okay";
+};
+
+&usb_2_hsphy0 {
+       vdda-pll-supply = <&vreg_l5a>;
+       vdda18-supply = <&vreg_l7g>;
+       vdda33-supply = <&vreg_l13a>;
+
+       status = "okay";
+};
+
+&usb_2_hsphy1 {
+       vdda-pll-supply = <&vreg_l5a>;
+       vdda18-supply = <&vreg_l7g>;
+       vdda33-supply = <&vreg_l13a>;
+
+       status = "okay";
+};
+
+&usb_2_hsphy2 {
+       vdda-pll-supply = <&vreg_l5a>;
+       vdda18-supply = <&vreg_l7g>;
+       vdda33-supply = <&vreg_l13a>;
+
+       status = "okay";
+};
+
+&usb_2_hsphy3 {
+       vdda-pll-supply = <&vreg_l5a>;
+       vdda18-supply = <&vreg_l7g>;
+       vdda33-supply = <&vreg_l13a>;
+
+       status = "okay";
+};
+
+&usb_2_qmpphy0 {
+       vdda-phy-supply = <&vreg_l3a>;
+       vdda-pll-supply = <&vreg_l5a>;
+
+       status = "okay";
+};
+
+&usb_2_qmpphy1 {
+       vdda-phy-supply = <&vreg_l3a>;
+       vdda-pll-supply = <&vreg_l5a>;
+
+       status = "okay";
+};
+
+&xo_board_clk {
+       clock-frequency = <38400000>;
+};
+
+/* PINCTRL */
diff --git a/arch/arm64/boot/dts/qcom/sa8540p.dtsi b/arch/arm64/boot/dts/qcom/sa8540p.dtsi
new file mode 100644 (file)
index 0000000..8ea2886
--- /dev/null
@@ -0,0 +1,133 @@
+// SPDX-License-Identifier: BSD-3-Clause
+/*
+ * Copyright (c) 2021, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2022, Linaro Limited
+ */
+
+#include "sc8280xp.dtsi"
+
+/delete-node/ &cpu0_opp_table;
+/delete-node/ &cpu4_opp_table;
+
+/ {
+       cpu0_opp_table: cpu0-opp-table {
+               compatible = "operating-points-v2";
+               opp-shared;
+
+               opp-403200000 {
+                       opp-hz = /bits/ 64 <403200000>;
+               };
+               opp-499200000 {
+                       opp-hz = /bits/ 64 <499200000>;
+               };
+               opp-595200000 {
+                       opp-hz = /bits/ 64 <595200000>;
+               };
+               opp-710400000 {
+                       opp-hz = /bits/ 64 <710400000>;
+               };
+               opp-806400000 {
+                       opp-hz = /bits/ 64 <806400000>;
+               };
+               opp-902400000 {
+                       opp-hz = /bits/ 64 <902400000>;
+               };
+               opp-1017600000 {
+                       opp-hz = /bits/ 64 <1017600000>;
+               };
+               opp-1113600000 {
+                       opp-hz = /bits/ 64 <1113600000>;
+               };
+               opp-1209600000 {
+                       opp-hz = /bits/ 64 <1209600000>;
+               };
+               opp-1324800000 {
+                       opp-hz = /bits/ 64 <1324800000>;
+               };
+               opp-1440000000 {
+                       opp-hz = /bits/ 64 <1440000000>;
+               };
+               opp-1555200000 {
+                       opp-hz = /bits/ 64 <1555200000>;
+               };
+               opp-1670400000 {
+                       opp-hz = /bits/ 64 <1670400000>;
+               };
+               opp-1785600000 {
+                       opp-hz = /bits/ 64 <1785600000>;
+               };
+               opp-1881600000 {
+                       opp-hz = /bits/ 64 <1881600000>;
+               };
+               opp-2016000000 {
+                       opp-hz = /bits/ 64 <2016000000>;
+               };
+               opp-2131200000 {
+                       opp-hz = /bits/ 64 <2131200000>;
+               };
+               opp-2246400000 {
+                       opp-hz = /bits/ 64 <2246400000>;
+               };
+       };
+
+       cpu4_opp_table: cpu4-opp-table {
+               compatible = "operating-points-v2";
+               opp-shared;
+
+               opp-825600000 {
+                       opp-hz = /bits/ 64 <825600000>;
+               };
+               opp-940800000 {
+                       opp-hz = /bits/ 64 <940800000>;
+               };
+               opp-1056000000 {
+                       opp-hz = /bits/ 64 <1056000000>;
+               };
+               opp-1171200000 {
+                       opp-hz = /bits/ 64 <1171200000>;
+               };
+               opp-1286400000 {
+                       opp-hz = /bits/ 64 <1286400000>;
+               };
+               opp-1401600000 {
+                       opp-hz = /bits/ 64 <1401600000>;
+               };
+               opp-1516800000 {
+                       opp-hz = /bits/ 64 <1516800000>;
+               };
+               opp-1632000000 {
+                       opp-hz = /bits/ 64 <1632000000>;
+               };
+               opp-1747200000 {
+                       opp-hz = /bits/ 64 <1747200000>;
+               };
+               opp-1862400000 {
+                       opp-hz = /bits/ 64 <1862400000>;
+               };
+               opp-1977600000 {
+                       opp-hz = /bits/ 64 <1977600000>;
+               };
+               opp-2073600000 {
+                       opp-hz = /bits/ 64 <2073600000>;
+               };
+               opp-2169600000 {
+                       opp-hz = /bits/ 64 <2169600000>;
+               };
+               opp-2284800000 {
+                       opp-hz = /bits/ 64 <2284800000>;
+               };
+               opp-2380800000 {
+                       opp-hz = /bits/ 64 <2380800000>;
+               };
+               opp-2496000000 {
+                       opp-hz = /bits/ 64 <2496000000>;
+               };
+               opp-2592000000 {
+                       opp-hz = /bits/ 64 <2592000000>;
+               };
+       };
+};
+
+&rpmhpd {
+       compatible = "qcom,sa8540p-rpmhpd";
+};