mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [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 ` [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
@ 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

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 ` Michael McAllister
  2026-10-24 11:10 ` [PATCH v2 3/3] arm64: dts: " Michael McAllister
  2026-10-24 11:10 ` [PATCH v2 1/3] arm64: dts: qcom: sm6115: Correct cluster idle state parameters 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 2/3] dt-bindings: arm: qcom: Add Motorola Moto G10 Michael McAllister
@ 2026-10-24 11:10 ` Michael McAllister
  2026-10-24 11:10 ` [PATCH v2 1/3] arm64: dts: qcom: sm6115: Correct cluster idle state parameters 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

* [PATCH v2 0/3] arm64: dts: qcom: Add initial Motorola Moto G10 support
@ 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
                   ` (2 more replies)
  0 siblings, 3 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

Hi Konrad, all,

Thanks for the review. I've updated the Moto G10 (SM4250) series with
a separate patch for the shared idle-state fix. I've disabled Bluetooth
for now while I work through the remaining driver changes.

Regarding the magic smoke, I checked the 25 voltage ranges against
the Android DT pulled from the G10, and they're all within the vendor
ranges. The 640 mV L8 setting also matches Android's ICNSS override.
These settings are also running on my device.

Changes since v1:
- Correct the cluster idle-state parameters in sm6115.dtsi first.
- Use QCOM_ID_SM4250, delete reserved-memory nodes by label, and tidy
  the comments and redundant USB defaults.
- Keep GPIOs 14-17 reserved; I haven't established their board-specific
  use.
- Keep both framebuffer bus clocks enabled, disable DISPCC, and point
  display0 at MDSS to preserve the bootloader display.
- Leave Bluetooth disabled pending the separate shutdown fixes.

The DT passes schema validation and boots on the phone using separate
Android bootloader handoff/alignment code, with USB transfers and
read-only eMMC access tested. GPU, Wi-Fi, DSPs and suspend weren't
exercised in that minimal test image.

v1: https://lore.kernel.org/linux-arm-msm/cover.1792703903.git.me@michaelmcallister.org/


Michael McAllister (3):
  arm64: dts: qcom: sm6115: Correct cluster idle state parameters
  dt-bindings: arm: qcom: Add Motorola Moto G10
  arm64: dts: qcom: Add Motorola Moto G10

 .../devicetree/bindings/arm/qcom.yaml         |   1 +
 arch/arm64/boot/dts/qcom/Makefile             |   1 +
 .../boot/dts/qcom/sm4250-motorola-capri.dts   | 374 ++++++++++++++++++
 arch/arm64/boot/dts/qcom/sm6115.dtsi          |   8 +-
 4 files changed, 380 insertions(+), 4 deletions(-)
 create mode 100644 arch/arm64/boot/dts/qcom/sm4250-motorola-capri.dts


base-commit: d053e38e614fb2e383b298ce8fc308a780d7f209
-- 
2.39.5

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2026-10-24 11:11 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
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 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
2026-10-24 11:10 ` [PATCH v2 1/3] arm64: dts: qcom: sm6115: Correct cluster idle state parameters Michael McAllister

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®