Re: [PATCH v3] arm64: dts: qcom: shikra-iqs: add M.2 Wi-Fi and Bluetooth overlay

From: Dmitry Baryshkov

Date: Wed Oct 21 2026 - 19:20:54 EST


On Tue, Oct 20, 2026 at 10:09:25AM +0800, Linghui Wu wrote:
> Add an overlay for M.2 Key-E Wi-Fi and Bluetooth modules on the Qualcomm
> Shikra IQS EVK.
>
> The M.2 variant uses the external module connected through the Key-E
> connector instead of the onboard WCN3988 devices. Disable the onboard
> Wi-Fi and Bluetooth nodes when the overlay is selected so the device tree
> matches the hardware variant and does not probe the unavailable onboard
> connectivity path.

You already got a question on GitHub and ignored it there. Why are you
disaling onboard WiFi/BT? What makes it unavailable?

>
> Describe the PCIe and UART connections through the M.2 connector, the
> 3.3 V supply, the W_DISABLE signals and the PCIe reset signal.
>
> The Wi-Fi PCIe path was tested on a Shikra IQS EVK with a QCC2072
> module. The overlay was applied, the link trained at Gen2 x1 and the
> endpoint enumerated. Bluetooth UART and HCI runtime validation is
> pending.

Please don't send unvalidated patches.

>
> Co-developed-by: Wei Deng <wei.deng@xxxxxxxxxxxxxxxx>
> Signed-off-by: Wei Deng <wei.deng@xxxxxxxxxxxxxxxx>
> Signed-off-by: Linghui Wu <linghui.wu@xxxxxxxxxxxxxxxx>
> ---
> Changes in v2:
> - Drop regulator-boot-on and startup-delay-us from the 3.3 V regulator.
>
> Changes in v3:
> - Drop the unused reg override from the disabled TC9563 node.
>
> arch/arm64/boot/dts/qcom/Makefile | 1 +
> .../dts/qcom/shikra-iqs-evk-m2-wifi-bt.dtso | 105 +++++++++++++++++
> 2 files changed, 106 insertions(+)
> create mode 100644 arch/arm64/boot/dts/qcom/shikra-iqs-evk-m2-wifi-bt.dtso
>
> diff --git a/arch/arm64/boot/dts/qcom/Makefile b/arch/arm64/boot/dts/qcom/Makefile
> index 1c86e7e98f55..799faa32e2d9 100644
> --- a/arch/arm64/boot/dts/qcom/Makefile
> +++ b/arch/arm64/boot/dts/qcom/Makefile
> @@ -339,6 +339,7 @@ dtb-$(CONFIG_ARCH_QCOM) += sdx75-idp.dtb
> dtb-$(CONFIG_ARCH_QCOM) += shikra-cqm-evk.dtb
> dtb-$(CONFIG_ARCH_QCOM) += shikra-cqs-evk.dtb
> dtb-$(CONFIG_ARCH_QCOM) += shikra-iqs-evk.dtb
> +dtb-$(CONFIG_ARCH_QCOM) += shikra-iqs-evk-m2-wifi-bt.dtbo

How does the Makefile handle eother dtbos?

> 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/shikra-iqs-evk-m2-wifi-bt.dtso b/arch/arm64/boot/dts/qcom/shikra-iqs-evk-m2-wifi-bt.dtso
> new file mode 100644
> index 000000000000..9496c6558eef
> --- /dev/null
> +++ b/arch/arm64/boot/dts/qcom/shikra-iqs-evk-m2-wifi-bt.dtso
> @@ -0,0 +1,105 @@
> +// SPDX-License-Identifier: BSD-3-Clause
> +/*
> + * Copyright (c) 2026 Qualcomm Technologies, Inc. and/or its subsidiaries.
> + */
> +
> +/dts-v1/;
> +/plugin/;
> +
> +#include <dt-bindings/gpio/gpio.h>
> +
> +&{/} {
> + m2_keye_3p3: regulator-m2-keye-3p3 {
> + compatible = "regulator-fixed";
> + regulator-name = "VREG_3P3_KEYE";
> + regulator-min-microvolt = <3300000>;
> + regulator-max-microvolt = <3300000>;
> + gpio = <&qps_gpio_expander 6 GPIO_ACTIVE_HIGH>;
> + enable-active-high;
> + };
> +
> + wifi-bt-connector {
> + compatible = "pcie-m2-e-connector";
> +
> + vpcie3v3-supply = <&m2_keye_3p3>;
> + w-disable1-gpios = <&tlmm 61 GPIO_ACTIVE_LOW>;
> + w-disable2-gpios = <&tlmm 60 GPIO_ACTIVE_LOW>;
> +
> + ports {
> + #address-cells = <1>;
> + #size-cells = <0>;
> +
> + port@0 {
> + reg = <0>;
> + #address-cells = <1>;
> + #size-cells = <0>;
> +
> + m2_e_pcie_ep: endpoint@0 {
> + reg = <0>;
> + remote-endpoint = <&pcie_port0_ep>;
> + };
> + };
> +
> + port@3 {
> + reg = <3>;
> + #address-cells = <1>;
> + #size-cells = <0>;
> +
> + m2_e_uart_ep: endpoint@0 {
> + reg = <0>;
> + remote-endpoint = <&uart8_ep>;
> + };
> + };
> + };
> + };
> +};
> +
> +&{/wcn3988-pmu} {

Add a label to the PMU and update it by label rather than by the path.
If the path changes, this node, I think, will happily create a new one.
Using label will generate an error.

> + status = "disabled";
> +};
> +
> +&i2c3 {
> + qps_gpio_expander: gpio@3c {
> + compatible = "nxp,pca9534";
> + reg = <0x3c>;
> + gpio-controller;
> + #gpio-cells = <2>;
> + };
> +};
> +
> +&pcie {
> + iommu-map = <0x0 &apps_smmu 0x0800 0x0 0x1>,
> + <0x100 &apps_smmu 0x0801 0x0 0x1>;
> + vddpe-3v3-supply = <&m2_keye_3p3>;
> +};
> +
> +&pcie_port0 {
> + compatible = "pciclass,0604";
> + reset-gpios = <&tlmm 118 GPIO_ACTIVE_LOW>;
> +
> + port {
> + pcie_port0_ep: endpoint {
> + remote-endpoint = <&m2_e_pcie_ep>;
> + };
> + };
> +};
> +
> +&tc9563 {
> + status = "disabled";
> +};
> +
> +&uart8 {
> + bluetooth {
> + status = "disabled";
> + };
> +
> + port {
> + uart8_ep: endpoint {
> + remote-endpoint = <&m2_e_uart_ep>;
> + };
> + };

How does the UART switch from the onboard WiFi/BT card to the M.2 slot?
Is ther an automatic switch?

> +};
> +
> +&wifi {
> + status = "disabled";
> +};
> --
> 2.43.0

--
With best wishes
Dmitry