* [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-26 10:18 ` Konrad Dybcio
2026-10-24 11:10 ` [PATCH v2 2/3] dt-bindings: arm: qcom: Add Motorola Moto G10 Michael McAllister
` (2 subsequent siblings)
3 siblings, 1 reply; 11+ 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] 11+ messages in thread* Re: [PATCH v2 1/3] arm64: dts: qcom: sm6115: Correct cluster idle state parameters
2026-10-24 11:10 ` [PATCH v2 1/3] arm64: dts: qcom: sm6115: Correct cluster idle state parameters Michael McAllister
@ 2026-10-26 10:18 ` Konrad Dybcio
0 siblings, 0 replies; 11+ messages in thread
From: Konrad Dybcio @ 2026-10-26 10:18 UTC (permalink / raw)
To: Michael McAllister, Bjorn Andersson
Cc: Rob Herring, Krzysztof Kozlowski, Conor Dooley, linux-arm-msm,
devicetree, linux-kernel
On 10/24/26 1:10 PM, Michael McAllister wrote:
> 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.
This paragraph needs to go. It's a conclusion of your LLM's local
work and doesn't make sense in the upstream git history
otherwise:
Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Konrad
^ permalink raw reply [flat|nested] 11+ 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-26 11:08 ` Krzysztof Kozlowski
2026-10-24 11:10 ` [PATCH v2 3/3] arm64: dts: " Michael McAllister
2026-10-26 22:10 ` [PATCH v3 0/3] arm64: dts: qcom: Add initial Motorola Moto G10 support Michael McAllister
3 siblings, 1 reply; 11+ 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] 11+ messages in thread* Re: [PATCH v2 2/3] dt-bindings: arm: qcom: Add Motorola Moto G10
2026-10-24 11:10 ` [PATCH v2 2/3] dt-bindings: arm: qcom: Add Motorola Moto G10 Michael McAllister
@ 2026-10-26 11:08 ` Krzysztof Kozlowski
0 siblings, 0 replies; 11+ messages in thread
From: Krzysztof Kozlowski @ 2026-10-26 11:08 UTC (permalink / raw)
To: Michael McAllister
Cc: Bjorn Andersson, Konrad Dybcio, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, linux-arm-msm, devicetree, linux-kernel
On Sat, Oct 24, 2026 at 12:10:08PM +0100, Michael McAllister wrote:
> 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(+)
Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.com>
<form letter>
This is an automated instruction, just in case, because many review
tags are being ignored. If you know the process, just skip it entirely
(please do not feel offended by me posting it here - no bad intentions
intended, no patronizing, I just want to avoid wasted efforts). If you
do not know the process, here is a short explanation:
Please add Acked-by/Reviewed-by/Tested-by tags when posting new
versions of patchset, under or above your Signed-off-by tag, unless
patch changed significantly (e.g. new properties added to the DT
bindings). Tag is "received", when provided in a message replied to you
on the mailing list. Tools like b4 can help here ('b4 trailers -u ...').
However, there's no need to repost patches *only* to add the tags. The
upstream maintainer will do that for tags received on the version they
apply.
https://elixir.bootlin.com/linux/v6.15/source/Documentation/process/submitting-patches.rst#L591
</form letter>
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 11+ 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
2026-10-26 10:18 ` Konrad Dybcio
2026-10-26 22:10 ` [PATCH v3 0/3] arm64: dts: qcom: Add initial Motorola Moto G10 support Michael McAllister
3 siblings, 1 reply; 11+ 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] 11+ messages in thread* Re: [PATCH v2 3/3] arm64: dts: qcom: Add Motorola Moto G10
2026-10-24 11:10 ` [PATCH v2 3/3] arm64: dts: " Michael McAllister
@ 2026-10-26 10:18 ` Konrad Dybcio
0 siblings, 0 replies; 11+ messages in thread
From: Konrad Dybcio @ 2026-10-26 10:18 UTC (permalink / raw)
To: Michael McAllister, Bjorn Andersson
Cc: Rob Herring, Krzysztof Kozlowski, Conor Dooley, linux-arm-msm,
devicetree, linux-kernel
On 10/24/26 1:10 PM, Michael McAllister wrote:
> 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>
> ---
Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Konrad
^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH v3 0/3] arm64: dts: qcom: Add initial Motorola Moto G10 support
2026-10-24 11:10 [PATCH v2 0/3] arm64: dts: qcom: Add initial Motorola Moto G10 support Michael McAllister
` (2 preceding siblings ...)
2026-10-24 11:10 ` [PATCH v2 3/3] arm64: dts: " Michael McAllister
@ 2026-10-26 22:10 ` Michael McAllister
2026-10-26 22:10 ` [PATCH v3 3/3] arm64: dts: qcom: Add Motorola Moto G10 Michael McAllister
` (2 more replies)
3 siblings, 3 replies; 11+ messages in thread
From: Michael McAllister @ 2026-10-26 22: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,
I've removed the final paragraph from the idle-state commit message and
added the review tags. The code is unchanged from v2.
v2: https://lore.kernel.org/linux-arm-msm/cover.1792840208.git.me@michaelmcallister.org/
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] 11+ messages in thread* [PATCH v3 3/3] arm64: dts: qcom: Add Motorola Moto G10
2026-10-26 22:10 ` [PATCH v3 0/3] arm64: dts: qcom: Add initial Motorola Moto G10 support Michael McAllister
@ 2026-10-26 22:10 ` Michael McAllister
2026-10-26 22:10 ` [PATCH v3 1/3] arm64: dts: qcom: sm6115: Correct cluster idle state parameters Michael McAllister
2026-10-26 22:10 ` [PATCH v3 2/3] dt-bindings: arm: qcom: Add Motorola Moto G10 Michael McAllister
2 siblings, 0 replies; 11+ messages in thread
From: Michael McAllister @ 2026-10-26 22: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>
Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
---
Changes in v3:
- Add the received Reviewed-by tag.
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] 11+ messages in thread* [PATCH v3 1/3] arm64: dts: qcom: sm6115: Correct cluster idle state parameters
2026-10-26 22:10 ` [PATCH v3 0/3] arm64: dts: qcom: Add initial Motorola Moto G10 support Michael McAllister
2026-10-26 22:10 ` [PATCH v3 3/3] arm64: dts: qcom: Add Motorola Moto G10 Michael McAllister
@ 2026-10-26 22:10 ` Michael McAllister
2026-10-26 22:10 ` [PATCH v3 2/3] dt-bindings: arm: qcom: Add Motorola Moto G10 Michael McAllister
2 siblings, 0 replies; 11+ messages in thread
From: Michael McAllister @ 2026-10-26 22: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.
[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>
Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
---
Changes in v3:
- Remove the final commit-message paragraph.
- Add the received Reviewed-by tag.
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] 11+ messages in thread* [PATCH v3 2/3] dt-bindings: arm: qcom: Add Motorola Moto G10
2026-10-26 22:10 ` [PATCH v3 0/3] arm64: dts: qcom: Add initial Motorola Moto G10 support Michael McAllister
2026-10-26 22:10 ` [PATCH v3 3/3] arm64: dts: qcom: Add Motorola Moto G10 Michael McAllister
2026-10-26 22:10 ` [PATCH v3 1/3] arm64: dts: qcom: sm6115: Correct cluster idle state parameters Michael McAllister
@ 2026-10-26 22:10 ` Michael McAllister
2 siblings, 0 replies; 11+ messages in thread
From: Michael McAllister @ 2026-10-26 22: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>
Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.com>
---
Changes in v3:
- Add the received Acked-by tag.
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] 11+ messages in thread