* [PATCH v2 1/3] arm64: dts: qcom: sm6115: Correct cluster idle state parameters
2026-10-24 11:10 [PATCH v2 0/3] arm64: dts: qcom: Add initial Motorola Moto G10 support Michael McAllister
@ 2026-10-24 11:10 ` Michael McAllister
2026-10-24 11:10 ` [PATCH v2 2/3] dt-bindings: arm: qcom: Add Motorola Moto G10 Michael McAllister
2026-10-24 11:10 ` [PATCH v2 3/3] arm64: dts: " Michael McAllister
2 siblings, 0 replies; 4+ messages in thread
From: Michael McAllister @ 2026-10-24 11:10 UTC (permalink / raw)
To: Bjorn Andersson, Konrad Dybcio
Cc: Rob Herring, Krzysztof Kozlowski, Conor Dooley, linux-arm-msm,
devicetree, linux-kernel
The cluster state IDs encode unsupported CPU modes: the GDHS entries
request CPU mode 2 and the power-collapse entries request CPU mode 4.
The CPU power-collapse state is mode 3, as already used by the CPU
idle-state nodes. The GDHS entries also omit the cluster affinity level,
and cluster 1 requests cluster power collapse instead of GDHS.
The downstream Bengal power description [1] defines CPU power collapse
as mode 3, cluster GDHS as mode 2 and cluster power collapse as mode 4,
with cluster mode shifted by four bits. Its idle driver [2] combines
these with bit 30 for CPU reset and bits 25:24 for the affinity level.
For either cluster this yields 0x41000023 for GDHS and 0x41000043 for
power collapse. The Motorola SM4250 tree uses the same power description,
byte-for-byte, as the Xiaomi SM6115 release cited here.
Correct the shared states to match this interface. This replaces the
board-specific overrides used by the Motorola Moto G10. Runtime testing
is limited to that device; the downstream sources provide the common
SM6115/SM4250 encoding evidence.
[1]
https://github.com/MiCode/Xiaomi_Kernel_OpenSource/blob/02ca1a919564a9b176a79cce09c40977f833e9ac/arch/arm64/boot/dts/vendor/qcom/bengal-pm.dtsi
[2]
https://github.com/MiCode/Xiaomi_Kernel_OpenSource/blob/02ca1a919564a9b176a79cce09c40977f833e9ac/drivers/cpuidle/lpm-levels.c
Signed-off-by: Michael McAllister <me@michaelmcallister.org>
---
arch/arm64/boot/dts/qcom/sm6115.dtsi | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/arch/arm64/boot/dts/qcom/sm6115.dtsi b/arch/arm64/boot/dts/qcom/sm6115.dtsi
index 0f2af8aba..79ca73bfc 100644
--- a/arch/arm64/boot/dts/qcom/sm6115.dtsi
+++ b/arch/arm64/boot/dts/qcom/sm6115.dtsi
@@ -232,7 +232,7 @@ domain-idle-states {
cluster_0_sleep_0: cluster-sleep-0-0 {
/* GDHS */
compatible = "domain-idle-state";
- arm,psci-suspend-param = <0x40000022>;
+ arm,psci-suspend-param = <0x41000023>;
entry-latency-us = <360>;
exit-latency-us = <421>;
min-residency-us = <782>;
@@ -241,7 +241,7 @@ cluster_0_sleep_0: cluster-sleep-0-0 {
cluster_0_sleep_1: cluster-sleep-0-1 {
/* Power Collapse */
compatible = "domain-idle-state";
- arm,psci-suspend-param = <0x41000044>;
+ arm,psci-suspend-param = <0x41000043>;
entry-latency-us = <800>;
exit-latency-us = <2118>;
min-residency-us = <7376>;
@@ -250,7 +250,7 @@ cluster_0_sleep_1: cluster-sleep-0-1 {
cluster_1_sleep_0: cluster-sleep-1-0 {
/* GDHS */
compatible = "domain-idle-state";
- arm,psci-suspend-param = <0x40000042>;
+ arm,psci-suspend-param = <0x41000023>;
entry-latency-us = <314>;
exit-latency-us = <345>;
min-residency-us = <660>;
@@ -259,7 +259,7 @@ cluster_1_sleep_0: cluster-sleep-1-0 {
cluster_1_sleep_1: cluster-sleep-1-1 {
/* Power Collapse */
compatible = "domain-idle-state";
- arm,psci-suspend-param = <0x41000044>;
+ arm,psci-suspend-param = <0x41000043>;
entry-latency-us = <640>;
exit-latency-us = <1654>;
min-residency-us = <8094>;
^ permalink raw reply [flat|nested] 4+ messages in thread* [PATCH v2 2/3] dt-bindings: arm: qcom: Add Motorola Moto G10
2026-10-24 11:10 [PATCH v2 0/3] arm64: dts: qcom: Add initial Motorola Moto G10 support Michael McAllister
2026-10-24 11:10 ` [PATCH v2 1/3] arm64: dts: qcom: sm6115: Correct cluster idle state parameters Michael McAllister
@ 2026-10-24 11:10 ` Michael McAllister
2026-10-24 11:10 ` [PATCH v2 3/3] arm64: dts: " Michael McAllister
2 siblings, 0 replies; 4+ messages in thread
From: Michael McAllister @ 2026-10-24 11:10 UTC (permalink / raw)
To: Bjorn Andersson, Konrad Dybcio
Cc: Rob Herring, Krzysztof Kozlowski, Conor Dooley, linux-arm-msm,
devicetree, linux-kernel
Document the Motorola Moto G10 (capri), a smartphone based on the
Qualcomm Snapdragon 460 (SM4250).
Signed-off-by: Michael McAllister <me@michaelmcallister.org>
---
Documentation/devicetree/bindings/arm/qcom.yaml | 1 +
1 file changed, 1 insertion(+)
diff --git a/Documentation/devicetree/bindings/arm/qcom.yaml b/Documentation/devicetree/bindings/arm/qcom.yaml
index 121ca557c..963fd482b 100644
--- a/Documentation/devicetree/bindings/arm/qcom.yaml
+++ b/Documentation/devicetree/bindings/arm/qcom.yaml
@@ -1051,6 +1051,7 @@ properties:
- items:
- enum:
+ - motorola,capri
- oneplus,billie2
- const: qcom,sm4250
^ permalink raw reply [flat|nested] 4+ messages in thread* [PATCH v2 3/3] arm64: dts: qcom: Add Motorola Moto G10
2026-10-24 11:10 [PATCH v2 0/3] arm64: dts: qcom: Add initial Motorola Moto G10 support Michael McAllister
2026-10-24 11:10 ` [PATCH v2 1/3] arm64: dts: qcom: sm6115: Correct cluster idle state parameters Michael McAllister
2026-10-24 11:10 ` [PATCH v2 2/3] dt-bindings: arm: qcom: Add Motorola Moto G10 Michael McAllister
@ 2026-10-24 11:10 ` Michael McAllister
2 siblings, 0 replies; 4+ messages in thread
From: Michael McAllister @ 2026-10-24 11:10 UTC (permalink / raw)
To: Bjorn Andersson, Konrad Dybcio
Cc: Rob Herring, Krzysztof Kozlowski, Conor Dooley, linux-arm-msm,
devicetree, linux-kernel
Add an initial board description for the SM4250-based Motorola Moto G10
(codenamed capri), including eMMC, USB-C, buttons, GPU, Wi-Fi and remote
processors. Describe the board-specific firmware carveouts and use the
shared PM6125 and PMI632 definitions. Put the modem, ADSP and GPU firmware
paths under qcom/motorola/capri/.
Use the firmware framebuffer until native panel support is available.
Retain the GCC display AHB and AXI clocks and leave DISPCC disabled to
preserve the bootloader display configuration.
Leave Bluetooth disabled until the WCN3950 shutdown fixes are merged.
Panel, touchscreen, amplifier, sound-card and battery-monitor support
depend on separate driver and binding submissions.
Signed-off-by: Michael McAllister <me@michaelmcallister.org>
---
arch/arm64/boot/dts/qcom/Makefile | 1 +
.../boot/dts/qcom/sm4250-motorola-capri.dts | 374 ++++++++++++++++++
2 files changed, 375 insertions(+)
create mode 100644 arch/arm64/boot/dts/qcom/sm4250-motorola-capri.dts
diff --git a/arch/arm64/boot/dts/qcom/Makefile b/arch/arm64/boot/dts/qcom/Makefile
index 88230c4e0..6f2dd88a1 100644
--- a/arch/arm64/boot/dts/qcom/Makefile
+++ b/arch/arm64/boot/dts/qcom/Makefile
@@ -383,6 +383,7 @@ shikra-iqs-evk-imx577-camera-dtbs := shikra-iqs-evk.dtb shikra-iqs-evk-imx577-ca
dtb-$(CONFIG_ARCH_QCOM) += shikra-cqm-evk-imx577-camera.dtb
dtb-$(CONFIG_ARCH_QCOM) += shikra-cqs-evk-imx577-camera.dtb
dtb-$(CONFIG_ARCH_QCOM) += shikra-iqs-evk-imx577-camera.dtb
+dtb-$(CONFIG_ARCH_QCOM) += sm4250-motorola-capri.dtb
dtb-$(CONFIG_ARCH_QCOM) += sm4250-oneplus-billie2.dtb
dtb-$(CONFIG_ARCH_QCOM) += sm4450-qrd.dtb
dtb-$(CONFIG_ARCH_QCOM) += sm6115-fxtec-pro1x.dtb
diff --git a/arch/arm64/boot/dts/qcom/sm4250-motorola-capri.dts b/arch/arm64/boot/dts/qcom/sm4250-motorola-capri.dts
new file mode 100644
index 000000000..08807953a
--- /dev/null
+++ b/arch/arm64/boot/dts/qcom/sm4250-motorola-capri.dts
@@ -0,0 +1,374 @@
+// SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause)
+/*
+ * Copyright (c) 2026 Michael McAllister <me@michaelmcallister.org>
+ *
+ * PM6125 regulator definitions derived from sm4250-oneplus-billie2.dts:
+ * Copyright (c) 2021 Iskren Chernev <iskren.chernev@gmail.com>
+ */
+
+/dts-v1/;
+
+#include <dt-bindings/arm/qcom,ids.h>
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/input/input.h>
+#include "sm4250.dtsi"
+#include "pm6125.dtsi"
+#include "pmi632.dtsi"
+
+/delete-node/ &pil_adsp_mem;
+/delete-node/ &pil_ipa_fw_mem;
+/delete-node/ &pil_ipa_gsi_mem;
+/delete-node/ &pil_gpu_mem;
+
+/ {
+ model = "Motorola Moto G10";
+ compatible = "motorola,capri", "qcom,sm4250";
+
+ /* Used by the bootloader to select the board */
+ qcom,msm-id = <QCOM_ID_SM4250 0x10000>;
+ qcom,board-id = <0 0xb200>;
+
+ aliases {
+ display0 = &mdss;
+ mmc0 = &sdhc_1;
+ };
+
+ chosen {
+ #address-cells = <2>;
+ #size-cells = <2>;
+ ranges;
+
+ stdout-path = "display0";
+
+ framebuffer0: framebuffer@5c000000 {
+ compatible = "simple-framebuffer";
+ reg = <0 0x5c000000 0 (720 * 1600 * 4)>;
+ clocks = <&gcc GCC_DISP_AHB_CLK>,
+ <&gcc GCC_DISP_HF_AXI_CLK>;
+ display = <&mdss>;
+ format = "a8r8g8b8";
+ height = <1600>;
+ stride = <(720 * 4)>;
+ vddio-supply = <&vreg_l9a>;
+ width = <720>;
+ };
+ };
+
+ gpio-keys {
+ compatible = "gpio-keys";
+ pinctrl-0 = <&volume_up_default>;
+ pinctrl-names = "default";
+
+ key-volume-up {
+ debounce-interval = <15>;
+ gpios = <&pm6125_gpios 5 GPIO_ACTIVE_LOW>;
+ label = "Volume Up";
+ linux,code = <KEY_VOLUMEUP>;
+ wakeup-source;
+ };
+ };
+};
+
+&dispcc {
+ /* Preserve the bootloader display until the native panel is supported */
+ status = "disabled";
+};
+
+&gpu {
+ status = "okay";
+};
+
+&gpu_zap_shader {
+ firmware-name = "qcom/motorola/capri/a610_zap.mdt";
+};
+
+&pil_cdsp_mem {
+ reg = <0 0x51a00000 0 0x800000>;
+};
+
+&pm6125_gpios {
+ volume_up_default: volume-up-state {
+ pins = "gpio5";
+ function = "normal";
+ bias-pull-up;
+ input-enable;
+ power-source = <0>;
+ };
+};
+
+&pmi632_typec {
+ status = "okay";
+
+ connector {
+ compatible = "usb-c-connector";
+ data-role = "dual";
+ pd-disable;
+ power-role = "dual";
+ self-powered;
+ typec-power-opmode = "default";
+ vbus-supply = <&pmi632_vbus>;
+
+ port {
+ pmi632_hs_in: endpoint {
+ remote-endpoint = <&usb_dwc3_hs>;
+ };
+ };
+ };
+};
+
+&pmi632_vbus {
+ regulator-min-microamp = <500000>;
+ regulator-max-microamp = <500000>;
+
+ status = "okay";
+};
+
+&pon_pwrkey {
+ status = "okay";
+};
+
+&pon_resin {
+ linux,code = <KEY_VOLUMEDOWN>;
+
+ status = "okay";
+};
+
+&remoteproc_adsp {
+ firmware-name = "qcom/motorola/capri/adsp2.mdt";
+
+ status = "okay";
+};
+
+&remoteproc_mpss {
+ firmware-name = "qcom/motorola/capri/modem.mdt";
+
+ status = "okay";
+};
+
+&reserved_memory {
+ /* The ADSP and following carveouts differ from the SM6115 defaults */
+ pil_adsp_mem: memory@52200000 {
+ reg = <0 0x52200000 0 0x1c00000>;
+ no-map;
+ };
+
+ pil_ipa_fw_mem: memory@53e00000 {
+ reg = <0 0x53e00000 0 0x10000>;
+ no-map;
+ };
+
+ pil_ipa_gsi_mem: memory@53e10000 {
+ reg = <0 0x53e10000 0 0x5000>;
+ no-map;
+ };
+
+ pil_gpu_mem: memory@53e15000 {
+ reg = <0 0x53e15000 0 0x2000>;
+ no-map;
+ };
+
+ /* Bootloader debug data */
+ memory@aef9d800 {
+ reg = <0 0xaef9d800 0 0x62800>;
+ no-map;
+ };
+
+ ramoops@af000000 {
+ compatible = "ramoops";
+ reg = <0 0xaf000000 0 0xbf800>;
+ console-size = <0x40000>;
+ pmsg-size = <0x40000>;
+ record-size = <0x20000>;
+ };
+};
+
+&rpm_requests {
+ regulators-0 {
+ compatible = "qcom,rpm-pm6125-regulators";
+
+ vreg_s6a: s6 {
+ regulator-min-microvolt = <320000>;
+ regulator-max-microvolt = <1456000>;
+ };
+
+ vreg_s7a: s7 {
+ regulator-min-microvolt = <1280000>;
+ regulator-max-microvolt = <2040000>;
+ };
+
+ vreg_s8a: s8 {
+ regulator-min-microvolt = <1064000>;
+ regulator-max-microvolt = <1304000>;
+ };
+
+ vreg_l1a: l1 {
+ regulator-min-microvolt = <952000>;
+ regulator-max-microvolt = <1152000>;
+ };
+
+ vreg_l4a: l4 {
+ regulator-min-microvolt = <488000>;
+ regulator-max-microvolt = <1000000>;
+ };
+
+ vreg_l5a: l5 {
+ regulator-min-microvolt = <1648000>;
+ regulator-max-microvolt = <3056000>;
+ };
+
+ vreg_l6a: l6 {
+ regulator-min-microvolt = <576000>;
+ regulator-max-microvolt = <656000>;
+ };
+
+ vreg_l7a: l7 {
+ regulator-min-microvolt = <1200000>;
+ regulator-max-microvolt = <1304000>;
+ };
+
+ vreg_l8a: l8 {
+ regulator-min-microvolt = <640000>;
+ regulator-max-microvolt = <640000>;
+ };
+
+ vreg_l9a: l9 {
+ regulator-min-microvolt = <1800000>;
+ regulator-max-microvolt = <1800000>;
+ regulator-boot-on;
+ };
+
+ vreg_l10a: l10 {
+ regulator-min-microvolt = <1704000>;
+ regulator-max-microvolt = <1904000>;
+ };
+
+ vreg_l11a: l11 {
+ regulator-min-microvolt = <1704000>;
+ regulator-max-microvolt = <1952000>;
+ };
+
+ vreg_l12a: l12 {
+ regulator-min-microvolt = <1624000>;
+ regulator-max-microvolt = <1984000>;
+ };
+
+ vreg_l13a: l13 {
+ regulator-min-microvolt = <1504000>;
+ regulator-max-microvolt = <1952000>;
+ };
+
+ vreg_l14a: l14 {
+ regulator-min-microvolt = <1704000>;
+ regulator-max-microvolt = <1904000>;
+ };
+
+ vreg_l15a: l15 {
+ regulator-min-microvolt = <2920000>;
+ regulator-max-microvolt = <3232000>;
+ };
+
+ vreg_l16a: l16 {
+ regulator-min-microvolt = <1800000>;
+ regulator-max-microvolt = <1800000>;
+ };
+
+ vreg_l17a: l17 {
+ regulator-min-microvolt = <1304000>;
+ regulator-max-microvolt = <1304000>;
+ };
+
+ vreg_l18a: l18 {
+ regulator-min-microvolt = <1104000>;
+ regulator-max-microvolt = <1304000>;
+ };
+
+ vreg_l19a: l19 {
+ regulator-min-microvolt = <1624000>;
+ regulator-max-microvolt = <3304000>;
+ };
+
+ vreg_l20a: l20 {
+ regulator-min-microvolt = <1624000>;
+ regulator-max-microvolt = <3304000>;
+ };
+
+ vreg_l21a: l21 {
+ regulator-min-microvolt = <2400000>;
+ regulator-max-microvolt = <3544000>;
+ };
+
+ vreg_l22a: l22 {
+ regulator-min-microvolt = <2952000>;
+ regulator-max-microvolt = <3304000>;
+ };
+
+ vreg_l23a: l23 {
+ regulator-min-microvolt = <3296000>;
+ regulator-max-microvolt = <3304000>;
+ };
+
+ vreg_l24a: l24 {
+ regulator-min-microvolt = <2704000>;
+ regulator-max-microvolt = <3544000>;
+ };
+ };
+};
+
+&sdhc_1 {
+ pinctrl-0 = <&sdc1_state_on>;
+ pinctrl-1 = <&sdc1_state_off>;
+ pinctrl-names = "default", "sleep";
+ vmmc-supply = <&vreg_l24a>;
+ vqmmc-supply = <&vreg_l11a>;
+ max-frequency = <50000000>;
+ non-removable;
+
+ status = "okay";
+};
+
+&sleep_clk {
+ clock-frequency = <32764>;
+};
+
+&tlmm {
+ gpio-reserved-ranges = <14 4>;
+};
+
+&usb {
+ /* The connector exposes only the USB 2.0 data pair */
+ qcom,select-utmi-as-pipe-clk;
+
+ status = "okay";
+};
+
+&usb_dwc3 {
+ maximum-speed = "high-speed";
+ phy-names = "usb2-phy";
+ phys = <&usb_hsphy>;
+};
+
+&usb_dwc3_hs {
+ remote-endpoint = <&pmi632_hs_in>;
+};
+
+&usb_hsphy {
+ vdd-supply = <&vreg_l4a>;
+ vdda-phy-dpdm-supply = <&vreg_l15a>;
+ vdda-pll-supply = <&vreg_l12a>;
+
+ status = "okay";
+};
+
+&wifi {
+ vdd-0.8-cx-mx-supply = <&vreg_l8a>;
+ vdd-1.3-rfa-supply = <&vreg_l17a>;
+ vdd-1.8-xo-supply = <&vreg_l16a>;
+ vdd-3.3-ch0-supply = <&vreg_l23a>;
+ qcom,calibration-variant = "Motorola_Capri";
+
+ status = "okay";
+};
+
+&xo_board {
+ clock-frequency = <19200000>;
+};
^ permalink raw reply [flat|nested] 4+ messages in thread