From d0a38827aece6d9d752824086dd9d70279507030 Mon Sep 17 00:00:00 2001 From: Mukesh Ojha Date: Wed, 24 Jun 2026 12:09:52 +0530 Subject: [PATCH] FROMLIST: arm64: dts: qcom: kodiak: Add EL2 overlay All the existing variants Kodiak boards are using Gunyah hypervisor which means that, so far, Linux-based OS could only boot in EL1 on those devices. However, it is possible for us to boot Linux at EL2 on these devices [1]. When running under Gunyah, the remote processor firmware IOMMU streams are controlled by Gunyah. However, without Gunyah, the IOMMU is managed by the consumer of this DeviceTree. Therefore, describe the firmware streams for each remote processor. Add a EL2-specific DT overlay and apply it to Kodiak IOT variant devices to create -el2.dtb for each of them alongside "normal" dtb. Note that modem and media subsystems haven't been supported yet due to missing dependencies. For GPU to work, zap shader is disabled and in EL2 mode the kernel owns hardware watchdog which is enabled here. And for wifi to work wpss copy engine memory need to be mapped for WPSS firmware to work which is aligning with sc7280 chrome. [1] https://docs.qualcomm.com/bundle/publicresource/topics/80-70020-4/boot-developer-touchpoints.html#uefi Link: https://lore.kernel.org/all/20260624063952.2242702-1-mukesh.ojha@oss.qualcomm.com/ Co-developed-by: Sumit Garg Signed-off-by: Sumit Garg Signed-off-by: Mukesh Ojha --- arch/arm64/boot/dts/qcom/kodiak-el2.dtso | 21 +++++++++++++++++---- arch/arm64/boot/dts/qcom/sc7280.dtsi | 2 +- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/arch/arm64/boot/dts/qcom/kodiak-el2.dtso b/arch/arm64/boot/dts/qcom/kodiak-el2.dtso index 96501dd3033a1..5cab90b6a9dd2 100644 --- a/arch/arm64/boot/dts/qcom/kodiak-el2.dtso +++ b/arch/arm64/boot/dts/qcom/kodiak-el2.dtso @@ -5,7 +5,6 @@ * Kodiak specific modifications required to boot in EL2. */ - /dts-v1/; /plugin/; @@ -21,9 +20,14 @@ iommus = <&apps_smmu 0x11a0 0x0400>; }; -&remoteproc_wpss { - iommus = <&apps_smmu 0x1c03 0x1>, - <&apps_smmu 0x1c83 0x1>; +&reserved_memory { + #address-cells = <2>; + #size-cells = <2>; + + wlan_ce_mem: wlan-ce@4cd000 { + no-map; + reg = <0x0 0x004cd000 0x0 0x1000>; + }; }; &venus { @@ -36,3 +40,12 @@ &watchdog { status = "okay"; }; + +&wifi { + memory-region = <&wlan_fw_mem>, <&wlan_ce_mem>; + status = "okay"; + + wifi-firmware { + iommus = <&apps_smmu 0x1c02 0x1>; + }; +}; diff --git a/arch/arm64/boot/dts/qcom/sc7280.dtsi b/arch/arm64/boot/dts/qcom/sc7280.dtsi index e23bc90d0eae7..7822a68091761 100644 --- a/arch/arm64/boot/dts/qcom/sc7280.dtsi +++ b/arch/arm64/boot/dts/qcom/sc7280.dtsi @@ -91,7 +91,7 @@ }; }; - reserved-memory { + reserved_memory: reserved-memory { #address-cells = <2>; #size-cells = <2>; ranges;