* [PATCH v1 0/2] arm64: dts: qcom: Add Xiaomi Poco M3 (citrus)
@ 2026-10-27 7:51 Amir Hanip
2026-10-27 7:51 ` [PATCH v1 1/2] dt-bindings: arm: qcom: Document Xiaomi Poco M3 Amir Hanip
2026-10-27 7:51 ` [PATCH v1 2/2] arm64: dts: qcom: Add " Amir Hanip
0 siblings, 2 replies; 5+ messages in thread
From: Amir Hanip @ 2026-10-27 7:51 UTC (permalink / raw)
To: Bjorn Andersson, Konrad Dybcio, linux-arm-msm
Cc: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Abel Vesa,
devicetree, linux-kernel, Amir Hanip
This series adds initial support for the Xiaomi Poco M3 (codename
citrus), a smartphone based on the Qualcomm Snapdragon 662 (SM6115).
Currently working:
- UFS and microSD
- USB host (OTG), limited to high-speed (SuperSpeed is untested)
- WiFi
- Bluetooth
- Remoteprocs (ADSP, CDSP and modem)
The memory map for the ADSP, CDSP, IPA and GPU regions differs from
the SM6115 defaults and follows the layout of the stock firmware.
Not included yet: the display panel, touchscreen and the GPU display
pipeline, which depend on drivers that are not upstream. Until then
the display is only available through simple-framebuffer. Audio is
not included either.
Firmware and userspace: WiFi, Bluetooth and the remoteprocs need
device-specific firmware which is not part of this series. WiFi
additionally needs qrtr, tqftpserv and rmtfs running in userspace,
and the Bluetooth controller needs its BD address set from userspace.
Tested on a Poco M3 booted from microSD with a v7.2-based kernel.
The series is based on qcom/for-next and passes W=1 and
CHECK_DTBS=y for qcom/sm6115-xiaomi-citrus.dtb.
Amir Hanip (2):
dt-bindings: arm: qcom: Document Xiaomi Poco M3
arm64: dts: qcom: Add Xiaomi Poco M3
.../devicetree/bindings/arm/qcom.yaml | 1 +
arch/arm64/boot/dts/qcom/Makefile | 1 +
.../boot/dts/qcom/sm6115-xiaomi-citrus.dts | 516 ++++++++++++++++++
3 files changed, 518 insertions(+)
create mode 100644 arch/arm64/boot/dts/qcom/sm6115-xiaomi-citrus.dts
base-commit: f5672a3dff0291d6a45eb0c258b9d2baeb4dc577
--
2.47.3
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH v1 1/2] dt-bindings: arm: qcom: Document Xiaomi Poco M3
2026-10-27 7:51 [PATCH v1 0/2] arm64: dts: qcom: Add Xiaomi Poco M3 (citrus) Amir Hanip
@ 2026-10-27 7:51 ` Amir Hanip
2026-10-27 7:51 ` [PATCH v1 2/2] arm64: dts: qcom: Add " Amir Hanip
1 sibling, 0 replies; 5+ messages in thread
From: Amir Hanip @ 2026-10-27 7:51 UTC (permalink / raw)
To: Bjorn Andersson, Konrad Dybcio, linux-arm-msm
Cc: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Abel Vesa,
devicetree, linux-kernel, Amir Hanip
Add compatible for Xiaomi Poco M3 codename citrus, which is
based on Snapdragon 662 (SM6115) SoC.
Signed-off-by: Amir Hanip <killdeath104@gmail.com>
---
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..8d2e4f0e3 100644
--- a/Documentation/devicetree/bindings/arm/qcom.yaml
+++ b/Documentation/devicetree/bindings/arm/qcom.yaml
@@ -1068,6 +1068,7 @@ properties:
- items:
- enum:
- fxtec,pro1x
+ - xiaomi,citrus
- xiaomi,lemon
- const: qcom,sm6115
--
2.47.3
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH v1 2/2] arm64: dts: qcom: Add Xiaomi Poco M3
2026-10-27 7:51 [PATCH v1 0/2] arm64: dts: qcom: Add Xiaomi Poco M3 (citrus) Amir Hanip
2026-10-27 7:51 ` [PATCH v1 1/2] dt-bindings: arm: qcom: Document Xiaomi Poco M3 Amir Hanip
@ 2026-10-27 7:51 ` Amir Hanip
2026-10-27 8:08 ` sashiko-bot
2026-10-27 8:38 ` Konrad Dybcio
1 sibling, 2 replies; 5+ messages in thread
From: Amir Hanip @ 2026-10-27 7:51 UTC (permalink / raw)
To: Bjorn Andersson, Konrad Dybcio, linux-arm-msm
Cc: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Abel Vesa,
devicetree, linux-kernel, Amir Hanip
Add initial device tree for the Xiaomi Poco M3 (codename citrus),
based on the Qualcomm Snapdragon 662 (SM6115) SoC.
Currently working:
- UFS and microSD
- USB host (OTG)
- WiFi
- Bluetooth
- Remoteprocs (ADSP, CDSP and modem)
WiFi, Bluetooth and the remoteprocs need device-specific firmware,
which is not part of this series. WiFi additionally needs qrtr,
tqftpserv and rmtfs running in userspace, and the Bluetooth
controller needs its BD address set from userspace.
Display panel, touchscreen, and the GPU display pipeline will
be added later, so the display is currently only available through
simple-framebuffer.
Signed-off-by: Amir Hanip <killdeath104@gmail.com>
---
arch/arm64/boot/dts/qcom/Makefile | 1 +
.../boot/dts/qcom/sm6115-xiaomi-citrus.dts | 516 ++++++++++++++++++
2 files changed, 517 insertions(+)
create mode 100644 arch/arm64/boot/dts/qcom/sm6115-xiaomi-citrus.dts
diff --git a/arch/arm64/boot/dts/qcom/Makefile b/arch/arm64/boot/dts/qcom/Makefile
index 88230c4e0..02e87dd78 100644
--- a/arch/arm64/boot/dts/qcom/Makefile
+++ b/arch/arm64/boot/dts/qcom/Makefile
@@ -386,6 +386,7 @@ dtb-$(CONFIG_ARCH_QCOM) += shikra-iqs-evk-imx577-camera.dtb
dtb-$(CONFIG_ARCH_QCOM) += sm4250-oneplus-billie2.dtb
dtb-$(CONFIG_ARCH_QCOM) += sm4450-qrd.dtb
dtb-$(CONFIG_ARCH_QCOM) += sm6115-fxtec-pro1x.dtb
+dtb-$(CONFIG_ARCH_QCOM) += sm6115-xiaomi-citrus.dtb
dtb-$(CONFIG_ARCH_QCOM) += sm6115-xiaomi-lemon.dtb
dtb-$(CONFIG_ARCH_QCOM) += sm6115p-lenovo-j606f.dtb
dtb-$(CONFIG_ARCH_QCOM) += sm6125-sony-xperia-seine-pdx201.dtb
diff --git a/arch/arm64/boot/dts/qcom/sm6115-xiaomi-citrus.dts b/arch/arm64/boot/dts/qcom/sm6115-xiaomi-citrus.dts
new file mode 100644
index 000000000..00c56e0f4
--- /dev/null
+++ b/arch/arm64/boot/dts/qcom/sm6115-xiaomi-citrus.dts
@@ -0,0 +1,516 @@
+// SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause)
+/*
+ * Copyright (c) 2023 - 2024, Dang Huynh <danct12@riseup.net>
+ * Copyright (c) 2026, Amir Hanip <killdeath104@gmail.com>
+ */
+
+/dts-v1/;
+
+#include "sm6115.dtsi"
+#include "pm6125.dtsi"
+#include "pmi632.dtsi"
+#include <dt-bindings/arm/qcom,ids.h>
+
+/delete-node/ &cdsp_sec_mem;
+
+/ {
+ model = "Xiaomi Poco M3";
+ compatible = "xiaomi,citrus", "qcom,sm6115";
+ chassis-type = "handset";
+
+ qcom,msm-id = <QCOM_ID_SM4250 0x10000>, <QCOM_ID_SM6115 0x10000>;
+ qcom,board-id = <0x00 0x303>;
+
+ aliases {
+ serial1 = &uart3;
+ };
+
+ chosen {
+ #address-cells = <2>;
+ #size-cells = <2>;
+ ranges;
+
+ framebuffer0: framebuffer@5c000000 {
+ compatible = "simple-framebuffer";
+ reg = <0x0 0x5c000000 0x0 (1080 * 2340 * 4)>;
+ width = <1080>;
+ height = <2340>;
+ stride = <(1080 * 4)>;
+ format = "a8r8g8b8";
+ clocks = <&gcc GCC_DISP_HF_AXI_CLK>;
+ };
+ };
+
+ gpio-keys {
+ compatible = "gpio-keys";
+
+ pinctrl-0 = <&vol_up_n>;
+ pinctrl-names = "default";
+
+ key-volume-up {
+ label = "Volume Up";
+ linux,code = <KEY_VOLUMEUP>;
+ gpios = <&pm6125_gpios 5 GPIO_ACTIVE_LOW>;
+ debounce-interval = <15>;
+ linux,can-disable;
+ wakeup-source;
+ };
+ };
+
+ wcn3950-pmu {
+ compatible = "qcom,wcn3950-pmu";
+
+ pinctrl-0 = <&sw_ctrl_default>;
+ pinctrl-names = "default";
+
+ vddio-supply = <&pm6125_l9>;
+ vddxo-supply = <&pm6125_l16>;
+ vddrf-supply = <&pm6125_l17>;
+ vddch0-supply = <&pm6125_l23>;
+
+ swctrl-gpios = <&tlmm 87 GPIO_ACTIVE_HIGH>;
+
+ regulators {
+ vreg_pmu_io: ldo0 { regulator-name = "vreg_pmu_io"; };
+ vreg_pmu_xo: ldo1 { regulator-name = "vreg_pmu_xo"; };
+ vreg_pmu_rf: ldo2 { regulator-name = "vreg_pmu_rf"; };
+ vreg_pmu_ch0: ldo3 { regulator-name = "vreg_pmu_ch0"; };
+ vreg_pmu_ch1: ldo4 { regulator-name = "vreg_pmu_ch1"; };
+ };
+ };
+};
+
+&dispcc {
+ /* Prevent simplefb from dying until we wire panel driver */
+ status = "disabled";
+};
+
+&gpi_dma0 {
+ status = "okay";
+};
+
+&gpu {
+ status = "okay";
+};
+
+&gpu_zap_shader {
+ firmware-name = "qcom/sm6115/xiaomi-citrus/a610_zap.mbn";
+};
+
+&pil_adsp_mem {
+ reg = <0x0 0x53800000 0x0 0x2200000>;
+};
+
+&pil_cdsp_mem {
+ reg = <0x0 0x51a00000 0x0 0xa00000>;
+};
+
+&pil_gpu_mem {
+ reg = <0x0 0x55A15000 0x0 0x2000>;
+};
+
+&pil_ipa_fw_mem {
+ reg = <0x0 0x55A00000 0x0 0x10000>;
+};
+
+&pil_ipa_gsi_mem {
+ reg = <0x0 0x55A10000 0x0 0x5000>;
+};
+
+&pm6125_gpios {
+ vol_up_n: vol-up-n-state {
+ pins = "gpio5";
+ function = "normal";
+ power-source = <0>;
+ bias-pull-up;
+ input-enable;
+ };
+};
+
+&pmi632_typec {
+ status = "okay";
+
+ connector {
+ compatible = "usb-c-connector";
+
+ power-role = "dual";
+ data-role = "dual";
+ self-powered;
+
+ typec-power-opmode = "default";
+ pd-disable;
+
+ vbus-supply = <&pmi632_vbus>;
+
+ ports {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ port@0 {
+ reg = <0>;
+ pmi632_hs_in: endpoint {
+ remote-endpoint = <&usb_dwc3_hs>;
+ };
+ };
+
+ port@1 {
+ reg = <1>;
+ pmi632_ss_in: endpoint {
+ remote-endpoint = <&usb_qmpphy_out>;
+ };
+ };
+ };
+ };
+};
+
+&pmi632_vbus {
+ regulator-min-microamp = <500000>;
+ regulator-max-microamp = <1000000>;
+ status = "okay";
+};
+
+&pon_pwrkey {
+ status = "okay";
+};
+
+&pon_resin {
+ linux,code = <KEY_VOLUMEDOWN>;
+ status = "okay";
+};
+
+&qupv3_id_0 {
+ status = "okay";
+};
+
+&remoteproc_adsp {
+ firmware-name = "qcom/sm6115/xiaomi-citrus/adsp.mdt";
+ status = "okay";
+};
+
+&remoteproc_cdsp {
+ firmware-name = "qcom/sm6115/xiaomi-citrus/cdsp.mdt";
+ status = "okay";
+};
+
+&remoteproc_mpss {
+ firmware-name = "qcom/sm6115/xiaomi-citrus/modem.mdt";
+ status = "okay";
+};
+
+&rpm_requests {
+ regulators-0 {
+ compatible = "qcom,rpm-pm6125-regulators";
+
+ pm6125_s6: s6 {
+ regulator-min-microvolt = <304000>;
+ regulator-max-microvolt = <1456000>;
+ };
+
+ pm6125_s7: s7 {
+ regulator-min-microvolt = <1280000>;
+ regulator-max-microvolt = <2040000>;
+ };
+
+ pm6125_s8: s8 {
+ regulator-min-microvolt = <1064000>;
+ regulator-max-microvolt = <1304000>;
+ };
+
+ pm6125_l1: l1 {
+ regulator-min-microvolt = <952000>;
+ regulator-max-microvolt = <1152000>;
+ };
+
+ pm6125_l4: l4 {
+ regulator-min-microvolt = <488000>;
+ regulator-max-microvolt = <1000000>;
+ };
+
+ pm6125_l5: l5 {
+ regulator-min-microvolt = <1648000>;
+ regulator-max-microvolt = <3056000>;
+ regulator-allow-set-load;
+ };
+
+ pm6125_l6: l6 {
+ regulator-min-microvolt = <576000>;
+ regulator-max-microvolt = <656000>;
+ };
+
+ pm6125_l7: l7 {
+ regulator-min-microvolt = <1200000>;
+ regulator-max-microvolt = <1304000>;
+ };
+
+ pm6125_l8: l8 {
+ regulator-min-microvolt = <400000>;
+ regulator-max-microvolt = <728000>;
+ };
+
+ pm6125_l9: l9 {
+ regulator-min-microvolt = <1800000>;
+ regulator-max-microvolt = <2000000>;
+ };
+
+ pm6125_l10: l10 {
+ regulator-min-microvolt = <1704000>;
+ regulator-max-microvolt = <1904000>;
+ };
+
+ pm6125_l11: l11 {
+ regulator-min-microvolt = <1704000>;
+ regulator-max-microvolt = <1952000>;
+ regulator-allow-set-load;
+ };
+
+ pm6125_l12: l12 {
+ regulator-min-microvolt = <1624000>;
+ regulator-max-microvolt = <1984000>;
+ };
+
+ pm6125_l13: l13 {
+ regulator-min-microvolt = <1504000>;
+ regulator-max-microvolt = <1952000>;
+ };
+
+ pm6125_l14: l14 {
+ regulator-min-microvolt = <1704000>;
+ regulator-max-microvolt = <1904000>;
+ };
+
+ pm6125_l15: l15 {
+ regulator-min-microvolt = <2920000>;
+ regulator-max-microvolt = <3232000>;
+ };
+
+ pm6125_l16: l16 {
+ regulator-min-microvolt = <1704000>;
+ regulator-max-microvolt = <1904000>;
+ };
+
+ pm6125_l17: l17 {
+ regulator-min-microvolt = <1304000>;
+ regulator-max-microvolt = <1304000>;
+ };
+
+ pm6125_l18: l18 {
+ regulator-min-microvolt = <1104000>;
+ regulator-max-microvolt = <1312000>;
+ };
+
+ pm6125_l19: l19 {
+ regulator-min-microvolt = <1624000>;
+ regulator-max-microvolt = <3304000>;
+ };
+
+ pm6125_l20: l20 {
+ regulator-min-microvolt = <1624000>;
+ regulator-max-microvolt = <3304000>;
+ };
+
+ pm6125_l21: l21 {
+ regulator-min-microvolt = <2400000>;
+ regulator-max-microvolt = <3600000>;
+ };
+
+ pm6125_l22: l22 {
+ regulator-min-microvolt = <2952000>;
+ regulator-max-microvolt = <3304000>;
+ };
+
+ pm6125_l23: l23 {
+ regulator-min-microvolt = <3200000>;
+ regulator-max-microvolt = <3400000>;
+ };
+
+ pm6125_l24: l24 {
+ regulator-min-microvolt = <2704000>;
+ regulator-max-microvolt = <3600000>;
+ regulator-allow-set-load;
+ };
+ };
+};
+
+&sdc2_state_off {
+ cd-pins {
+ pins = "gpio88";
+ function = "gpio";
+ drive-strength = <2>;
+ bias-disable;
+ };
+};
+
+&sdc2_state_on {
+ cd-pins {
+ pins = "gpio88";
+ function = "gpio";
+ drive-strength = <2>;
+ bias-pull-up;
+ };
+};
+
+&sdhc_2 {
+ pinctrl-0 = <&sdc2_state_on>;
+ pinctrl-1 = <&sdc2_state_off>;
+ pinctrl-names = "default", "sleep";
+
+ cd-gpios = <&tlmm 88 GPIO_ACTIVE_HIGH>;
+
+ vmmc-supply = <&pm6125_l22>;
+ vqmmc-supply = <&pm6125_l5>;
+
+ status = "okay";
+};
+
+&sleep_clk {
+ clock-frequency = <32764>;
+};
+
+&tlmm {
+ gpio-reserved-ranges = <0 4>, <14 4>;
+
+ uart3_default: uart3-default-state {
+ cts-pins {
+ pins = "gpio8";
+ function = "qup3";
+ drive-strength = <2>;
+ bias-bus-hold;
+ };
+
+ rts-pins {
+ pins = "gpio9";
+ function = "qup3";
+ drive-strength = <2>;
+ bias-disable;
+ };
+
+ tx-pins {
+ pins = "gpio10";
+ function = "qup3";
+ drive-strength = <2>;
+ bias-disable;
+ };
+
+ rx-pins {
+ pins = "gpio11";
+ function = "qup3";
+ drive-strength = <2>;
+ bias-pull-up;
+ };
+ };
+
+ uart3_sleep: uart3-sleep-state {
+ cts-pins {
+ pins = "gpio8";
+ function = "gpio";
+ drive-strength = <2>;
+ bias-bus-hold;
+ };
+
+ rts-pins {
+ pins = "gpio9";
+ function = "gpio";
+ drive-strength = <2>;
+ bias-pull-down;
+ };
+
+ tx-pins {
+ pins = "gpio10";
+ function = "gpio";
+ drive-strength = <2>;
+ bias-pull-up;
+ };
+
+ rx-pins {
+ pins = "gpio11";
+ function = "gpio";
+ drive-strength = <2>;
+ bias-pull-up;
+ };
+ };
+
+ sw_ctrl_default: sw-ctrl-default-state {
+ pins = "gpio87";
+ function = "gpio";
+ bias-pull-down;
+ };
+};
+
+&uart3 {
+ pinctrl-0 = <&uart3_default>;
+ pinctrl-1 = <&uart3_sleep>;
+ pinctrl-names = "default", "sleep";
+
+ status = "okay";
+
+ bluetooth {
+ compatible = "qcom,wcn3950-bt";
+ vddio-supply = <&vreg_pmu_io>;
+ vddxo-supply = <&vreg_pmu_xo>;
+ vddrf-supply = <&vreg_pmu_rf>;
+ vddch0-supply = <&vreg_pmu_ch0>;
+ };
+};
+
+&ufs_mem_hc {
+ vcc-supply = <&pm6125_l24>;
+ vcc-max-microamp = <600000>;
+ vccq2-supply = <&pm6125_l11>;
+ vccq2-max-microamp = <600000>;
+ vdd-hba-supply = <&pm6125_l18>;
+ status = "okay";
+};
+
+&ufs_mem_phy {
+ vdda-phy-supply = <&pm6125_l4>;
+ vdda-pll-supply = <&pm6125_l12>;
+
+ status = "okay";
+};
+
+&usb {
+ status = "okay";
+};
+
+&usb_dwc3 {
+ maximum-speed = "high-speed";
+
+ status = "okay";
+};
+
+&usb_dwc3_hs {
+ remote-endpoint = <&pmi632_hs_in>;
+};
+
+&usb_hsphy {
+ vdd-supply = <&pm6125_l4>;
+ vdda-pll-supply = <&pm6125_l12>;
+ vdda-phy-dpdm-supply = <&pm6125_l15>;
+ status = "okay";
+};
+
+&usb_qmpphy {
+ /delete-property/ orientation-switch;
+
+ vdda-phy-supply = <&pm6125_l4>;
+ vdda-pll-supply = <&pm6125_l12>;
+ status = "okay";
+};
+
+&usb_qmpphy_out {
+ remote-endpoint = <&pmi632_ss_in>;
+};
+
+&wifi {
+ vdd-0.8-cx-mx-supply = <&pm6125_l4>;
+ vdd-1.8-xo-supply = <&pm6125_l16>;
+ vdd-1.3-rfa-supply = <&pm6125_l17>;
+ vdd-3.3-ch0-supply = <&pm6125_l23>;
+ vdd-3.3-ch1-supply = <&pm6125_l24>;
+
+ status = "okay";
+};
+
+&xo_board {
+ clock-frequency = <19200000>;
+};
--
2.47.3
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH v1 2/2] arm64: dts: qcom: Add Xiaomi Poco M3
2026-10-27 7:51 ` [PATCH v1 2/2] arm64: dts: qcom: Add " Amir Hanip
@ 2026-10-27 8:08 ` sashiko-bot
2026-10-27 8:38 ` Konrad Dybcio
1 sibling, 0 replies; 5+ messages in thread
From: sashiko-bot @ 2026-10-27 8:08 UTC (permalink / raw)
To: Amir Hanip; +Cc: devicetree, robh, conor+dt
Thank you for your contribution! Sashiko AI review found 3 potential issue(s) to consider:
- [High] arm64: dts: qcom: sm6115-xiaomi-citrus: wifi node bypasses wcn3950-pmu
- [Low] arm64: dts: qcom: sm6115-xiaomi-citrus: reserved-memory unit-address mismatch
- [Low] arm64: dts: qcom: sm6115-xiaomi-citrus: missing regulator-allow-set-load on pm6125_l22
--
commit 7e5e34e4180038cdeff80b6bdbee89dac2d1329f
Author: Amir Hanip <killdeath104@gmail.com>
arm64: dts: qcom: Add Xiaomi Poco M3
This commit adds the initial device tree for the Xiaomi Poco M3 (citrus),
a smartphone based on the Qualcomm Snapdragon 662 (SM6115) SoC.
> diff --git a/arch/arm64/boot/dts/qcom/sm6115-xiaomi-citrus.dts b/arch/arm64/boot/dts/qcom/sm6115-xiaomi-citrus.dts
> new file mode 100644
> index 0000000000000..00c56e0f4f91a
> --- /dev/null
> +++ b/arch/arm64/boot/dts/qcom/sm6115-xiaomi-citrus.dts
> @@ -0,0 +1,516 @@
[ ... ]
> + wcn3950-pmu {
> + compatible = "qcom,wcn3950-pmu";
> +
> + pinctrl-0 = <&sw_ctrl_default>;
> + pinctrl-names = "default";
> +
> + vddio-supply = <&pm6125_l9>;
> + vddxo-supply = <&pm6125_l16>;
> + vddrf-supply = <&pm6125_l17>;
> + vddch0-supply = <&pm6125_l23>;
> +
> + swctrl-gpios = <&tlmm 87 GPIO_ACTIVE_HIGH>;
> +
> + regulators {
> + vreg_pmu_io: ldo0 { regulator-name = "vreg_pmu_io"; };
> + vreg_pmu_xo: ldo1 { regulator-name = "vreg_pmu_xo"; };
> + vreg_pmu_rf: ldo2 { regulator-name = "vreg_pmu_rf"; };
> + vreg_pmu_ch0: ldo3 { regulator-name = "vreg_pmu_ch0"; };
> + vreg_pmu_ch1: ldo4 { regulator-name = "vreg_pmu_ch1"; };
> + };
> + };
> +};
[ ... ]
> +&pil_gpu_mem {
> + reg = <0x0 0x55A15000 0x0 0x2000>;
> +};
> +
> +&pil_ipa_fw_mem {
> + reg = <0x0 0x55A00000 0x0 0x10000>;
> +};
> +
> +&pil_ipa_gsi_mem {
> + reg = <0x0 0x55A10000 0x0 0x5000>;
> +};
[Severity: Low]
In arch/arm64/boot/dts/qcom/sm6115.dtsi, these reserved-memory nodes are
defined as:
arch/arm64/boot/dts/qcom/sm6115.dtsi:
pil_ipa_fw_mem: memory@56100000 {
reg = <0x0 0x56100000 0x0 0x10000>;
no-map;
};
pil_ipa_gsi_mem: memory@56110000 {
reg = <0x0 0x56110000 0x0 0x5000>;
no-map;
};
pil_gpu_mem: memory@56115000 {
reg = <0x0 0x56115000 0x0 0x2000>;
no-map;
};
Because overriding reg by label reference does not rename the nodes, does
this leave the unit-addresses (@56115000, @56100000, and @56110000) out of
sync with their new base addresses and trigger dtc / dtbs_check warnings?
Should these nodes be removed with /delete-node/ and recreated under
&reserved_memory with matching @55a00000, @55a10000, and @55a15000
unit-addresses and lowercase hex literals?
[ ... ]
> + pm6125_l22: l22 {
> + regulator-min-microvolt = <2952000>;
> + regulator-max-microvolt = <3304000>;
> + };
[Severity: Low]
Since pm6125_l22 is used as vmmc-supply for &sdhc_2, should this node also
include regulator-allow-set-load?
When sdhci_msm powers the SD card bus on or off via
sdhci_msm_handle_pwr_irq() -> sdhci_msm_set_vmmc() ->
msm_config_vmmc_regulator(), it calls regulator_set_load(mmc->supply.vmmc,
load). Without regulator-allow-set-load in the device tree node,
of_get_regulation_constraints() does not set REGULATOR_CHANGE_DRMS, causing
drms_uA_update() in drivers/regulator/core.c to skip calling
rpm_reg_set_load():
drivers/regulator/core.c:drms_uA_update() {
...
if (!regulator_ops_is_valid(rdev, REGULATOR_CHANGE_DRMS)) {
rdev_dbg(rdev, "DRMS operation not allowed\n");
return 0;
}
...
}
[ ... ]
> +&wifi {
> + vdd-0.8-cx-mx-supply = <&pm6125_l4>;
> + vdd-1.8-xo-supply = <&pm6125_l16>;
> + vdd-1.3-rfa-supply = <&pm6125_l17>;
> + vdd-3.3-ch0-supply = <&pm6125_l23>;
> + vdd-3.3-ch1-supply = <&pm6125_l24>;
> +
> + status = "okay";
> +};
[Severity: High]
Should &wifi reference the wcn3950-pmu LDO regulators (&vreg_pmu_xo,
&vreg_pmu_rf, &vreg_pmu_ch0) instead of pointing directly to the PM6125
regulators?
In drivers/power/sequencing/pwrseq-qcom-wcn.c, pwrseq_qcom_wcn3990_match()
matches the WiFi device to wcn3950-pmu by checking whether
vdd-1.8-xo-supply resolves to a child regulator of the PMU node:
drivers/power/sequencing/pwrseq-qcom-wcn.c:pwrseq_qcom_wcn3990_match() {
...
/* WiFi device match */
return pwrseq_qcom_wcn_match_regulator(pwrseq, dev, "vdd-1.8-xo-supply");
}
Because vdd-1.8-xo-supply is set to <&pm6125_l16> instead of
<&vreg_pmu_xo>, pwrseq_qcom_wcn3990_match() returns PWRSEQ_NO_MATCH and
devm_pwrseq_get(&pdev->dev, "wlan") in ath10k_snoc_probe() returns
-EPROBE_DEFER:
drivers/net/wireless/ath/ath10k/snoc.c:ath10k_snoc_probe() {
ar_snoc->pwrseq = devm_pwrseq_get(&pdev->dev, "wlan");
if (IS_ERR(ar_snoc->pwrseq)) {
ret = PTR_ERR(ar_snoc->pwrseq);
ar_snoc->pwrseq = NULL;
if (ret != -EPROBE_DEFER)
goto err_free_irq;
ar_snoc->num_vregs = ARRAY_SIZE(ath10k_regulators);
}
...
}
As a result, ath10k_snoc_probe() falls back to direct regulator management
with ar_snoc->pwrseq = NULL, bypassing wcn3950-pmu power sequencing. Since
pm6125_l9 (the WCN3950 vddio-supply) is only referenced by wcn3950-pmu and
is not part of ath10k_regulators, won't pm6125_l9 remain unpowered or get
turned off whenever Bluetooth is disabled?
Also, wcn3950-pmu defines vreg_pmu_ch1: ldo4 without a corresponding
vddch1-supply, while &wifi connects vdd-3.3-ch1-supply directly to
&pm6125_l24. Should vreg_pmu_ch1 either be wired via wcn3950-pmu or
dropped if unused?
--
Sashiko AI review · https://sashiko.dev/#/patchset/20261027075116.41673-1-killdeath104@gmail.com?part=2
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v1 2/2] arm64: dts: qcom: Add Xiaomi Poco M3
2026-10-27 7:51 ` [PATCH v1 2/2] arm64: dts: qcom: Add " Amir Hanip
2026-10-27 8:08 ` sashiko-bot
@ 2026-10-27 8:38 ` Konrad Dybcio
1 sibling, 0 replies; 5+ messages in thread
From: Konrad Dybcio @ 2026-10-27 8:38 UTC (permalink / raw)
To: Amir Hanip, Bjorn Andersson, Konrad Dybcio, linux-arm-msm
Cc: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Abel Vesa,
devicetree, linux-kernel
On 10/27/26 8:51 AM, Amir Hanip wrote:
> Add initial device tree for the Xiaomi Poco M3 (codename citrus),
> based on the Qualcomm Snapdragon 662 (SM6115) SoC.
>
> Currently working:
> - UFS and microSD
> - USB host (OTG)
> - WiFi
> - Bluetooth
> - Remoteprocs (ADSP, CDSP and modem)
>
> WiFi, Bluetooth and the remoteprocs need device-specific firmware,
> which is not part of this series. WiFi additionally needs qrtr,
> tqftpserv and rmtfs running in userspace, and the Bluetooth
> controller needs its BD address set from userspace.
>
> Display panel, touchscreen, and the GPU display pipeline will
> be added later, so the display is currently only available through
> simple-framebuffer.
>
> Signed-off-by: Amir Hanip <killdeath104@gmail.com>
> ---
> arch/arm64/boot/dts/qcom/Makefile | 1 +
> .../boot/dts/qcom/sm6115-xiaomi-citrus.dts | 516 ++++++++++++++++++
> 2 files changed, 517 insertions(+)
> create mode 100644 arch/arm64/boot/dts/qcom/sm6115-xiaomi-citrus.dts
>
> diff --git a/arch/arm64/boot/dts/qcom/Makefile b/arch/arm64/boot/dts/qcom/Makefile
> index 88230c4e0..02e87dd78 100644
> --- a/arch/arm64/boot/dts/qcom/Makefile
> +++ b/arch/arm64/boot/dts/qcom/Makefile
> @@ -386,6 +386,7 @@ dtb-$(CONFIG_ARCH_QCOM) += shikra-iqs-evk-imx577-camera.dtb
> dtb-$(CONFIG_ARCH_QCOM) += sm4250-oneplus-billie2.dtb
> dtb-$(CONFIG_ARCH_QCOM) += sm4450-qrd.dtb
> dtb-$(CONFIG_ARCH_QCOM) += sm6115-fxtec-pro1x.dtb
> +dtb-$(CONFIG_ARCH_QCOM) += sm6115-xiaomi-citrus.dtb
> dtb-$(CONFIG_ARCH_QCOM) += sm6115-xiaomi-lemon.dtb
Any chance these two are related and should share some portion of
DT?
[...]
> + wcn3950-pmu {
> + compatible = "qcom,wcn3950-pmu";
> +
> + pinctrl-0 = <&sw_ctrl_default>;
> + pinctrl-names = "default";
> +
> + vddio-supply = <&pm6125_l9>;
> + vddxo-supply = <&pm6125_l16>;
> + vddrf-supply = <&pm6125_l17>;
> + vddch0-supply = <&pm6125_l23>;
> +
> + swctrl-gpios = <&tlmm 87 GPIO_ACTIVE_HIGH>;
> +
> + regulators {
> + vreg_pmu_io: ldo0 { regulator-name = "vreg_pmu_io"; };
> + vreg_pmu_xo: ldo1 { regulator-name = "vreg_pmu_xo"; };
> + vreg_pmu_rf: ldo2 { regulator-name = "vreg_pmu_rf"; };
> + vreg_pmu_ch0: ldo3 { regulator-name = "vreg_pmu_ch0"; };
> + vreg_pmu_ch1: ldo4 { regulator-name = "vreg_pmu_ch1"; };
Please unroll these scopes
[...]
> +&gpu_zap_shader {
> + firmware-name = "qcom/sm6115/xiaomi-citrus/a610_zap.mbn";
> +};
> +
> +&pil_adsp_mem {
> + reg = <0x0 0x53800000 0x0 0x2200000>;
> +};
> +
> +&pil_cdsp_mem {
> + reg = <0x0 0x51a00000 0x0 0xa00000>;
> +};
> +
> +&pil_gpu_mem {
> + reg = <0x0 0x55A15000 0x0 0x2000>;
> +};
> +
> +&pil_ipa_fw_mem {
> + reg = <0x0 0x55A00000 0x0 0x10000>;
> +};
> +
> +&pil_ipa_gsi_mem {
> + reg = <0x0 0x55A10000 0x0 0x5000>;
> +};
Let's use lowercase hex
[...]
> +&pmi632_vbus {
> + regulator-min-microamp = <500000>;
> + regulator-max-microamp = <1000000>;
> + status = "okay";
Let's keep an \n between 'status', file-wide
[...]
> +&tlmm {
> + gpio-reserved-ranges = <0 4>, <14 4>;
Do we know what these correspond to? Usually that's NFC eSE and
FP scanner - if you happen to know, please add some somments
(following the style in glymur-crd.dtsi)
Konrad
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2026-10-27 8:38 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-10-27 7:51 [PATCH v1 0/2] arm64: dts: qcom: Add Xiaomi Poco M3 (citrus) Amir Hanip
2026-10-27 7:51 ` [PATCH v1 1/2] dt-bindings: arm: qcom: Document Xiaomi Poco M3 Amir Hanip
2026-10-27 7:51 ` [PATCH v1 2/2] arm64: dts: qcom: Add " Amir Hanip
2026-10-27 8:08 ` sashiko-bot
2026-10-27 8:38 ` Konrad Dybcio
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.