* [PATCH v2 0/8] arm64: dts: qcom: Devicetree support for Kaanapali GPU
@ 2026-07-05 8:00 Akhil P Oommen
2026-07-05 8:00 ` [PATCH v2 1/8] drm/msm/a6xx: Increase HFI GX perf level limit to 24 Akhil P Oommen
` (7 more replies)
0 siblings, 8 replies; 16+ messages in thread
From: Akhil P Oommen @ 2026-07-05 8:00 UTC (permalink / raw)
To: Will Deacon, Robin Murphy, Joerg Roedel, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Bjorn Andersson, Konrad Dybcio,
Rob Clark, Dmitry Baryshkov, Abhinav Kumar, Jessica Zhang,
Marijn Suijten, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter
Cc: Sean Paul, linux-arm-kernel, iommu, devicetree, linux-kernel,
linux-arm-msm, freedreno, dri-devel, Akhil P Oommen,
Qingqing Zhou, Jingyi Wang, Dmitry Baryshkov, Gaurav Kohli,
Konrad Dybcio
This series adds the necessary Device Tree bits to enable GPU support
on the Kaanapali-based devices. The Adreno 840 GPU present in Kaanapali
chipsets is based on the new Adreno A8x family of GPUs. It features a
new slice architecture with 3 slices, raytracing support and other
improvements.
This series includes patches that updates DT schema, add GPU SMMU,
GPU/GMU support, GPU cooling, and enables the GPU on Kaanapali MTP and
QRD platforms.
Signed-off-by: Akhil P Oommen <akhilpo@oss.qualcomm.com>
---
Changes in v2:
- Fix formatting in DT patches (Dmitry/Konrad)
- Update cooling patch to lower the polling delay (Dmitry)
- Keep both passive and hot thermal trip points (Dmitry)
- Update GPU OPP table to match latest downstream version (Konrad)
- Add a new patch to allow HFI related structs to accomodate >16 GX levels
- Drop the smmu binding doc patch as it is already addressed in linux-next
- Link to v1: https://lore.kernel.org/r/20260512-kaana-gpu-dt-v1-0-13e1c07c2050@oss.qualcomm.com
---
Akhil P Oommen (5):
drm/msm/a6xx: Increase HFI GX perf level limit to 24
dt-bindings: display/msm: gpu: Document Adreno 840
arm64: dts: qcom: Add GPU support for Kaanapali
arm64: dts: qcom: kaanapali-mtp: Enable GPU
arm64: dts: qcom: kaanapali-qrd: Enable GPU
Gaurav Kohli (1):
arm64: dts: qcom: kaanapali: Add GPU cooling
Jingyi Wang (1):
arm64: dts: qcom: kaanapali: Add QFPROM node
Qingqing Zhou (1):
arm64: dts: qcom: kaanapali: add the GPU SMMU node
.../devicetree/bindings/display/msm/gpu.yaml | 2 +
arch/arm64/boot/dts/qcom/kaanapali-mtp.dts | 8 +
arch/arm64/boot/dts/qcom/kaanapali-qrd.dts | 8 +
arch/arm64/boot/dts/qcom/kaanapali.dtsi | 461 +++++++++++++++++++++
drivers/gpu/drm/msm/adreno/a6xx_gmu.h | 2 +-
drivers/gpu/drm/msm/adreno/a6xx_hfi.h | 7 +-
6 files changed, 484 insertions(+), 4 deletions(-)
---
base-commit: b96de4afaea292f70aec05d40def1d993c04d71c
change-id: 20260412-kaana-gpu-dt-968a70134c22
Best regards,
--
Akhil P Oommen <akhilpo@oss.qualcomm.com>
^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH v2 1/8] drm/msm/a6xx: Increase HFI GX perf level limit to 24
2026-07-05 8:00 [PATCH v2 0/8] arm64: dts: qcom: Devicetree support for Kaanapali GPU Akhil P Oommen
@ 2026-07-05 8:00 ` Akhil P Oommen
2026-07-05 8:17 ` sashiko-bot
2026-07-05 12:08 ` Akhil P Oommen
2026-07-05 8:00 ` [PATCH v2 2/8] dt-bindings: display/msm: gpu: Document Adreno 840 Akhil P Oommen
` (6 subsequent siblings)
7 siblings, 2 replies; 16+ messages in thread
From: Akhil P Oommen @ 2026-07-05 8:00 UTC (permalink / raw)
To: Will Deacon, Robin Murphy, Joerg Roedel, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Bjorn Andersson, Konrad Dybcio,
Rob Clark, Dmitry Baryshkov, Abhinav Kumar, Jessica Zhang,
Marijn Suijten, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter
Cc: Sean Paul, linux-arm-kernel, iommu, devicetree, linux-kernel,
linux-arm-msm, freedreno, dri-devel, Akhil P Oommen
Newer Adreno GPUs expose more than 16 GX frequency levels. Introduce
HFI_MAX_GX_LEVELS and use it to size the perf-table and bandwidth-table
GX vote arrays, and to derive GMU_MAX_GX_FREQS, so these levels are not
truncated.
Signed-off-by: Akhil P Oommen <akhilpo@oss.qualcomm.com>
---
drivers/gpu/drm/msm/adreno/a6xx_gmu.h | 2 +-
drivers/gpu/drm/msm/adreno/a6xx_hfi.h | 7 ++++---
2 files changed, 5 insertions(+), 4 deletions(-)
diff --git a/drivers/gpu/drm/msm/adreno/a6xx_gmu.h b/drivers/gpu/drm/msm/adreno/a6xx_gmu.h
index 3f96b10b5f61..62e3fb230cd3 100644
--- a/drivers/gpu/drm/msm/adreno/a6xx_gmu.h
+++ b/drivers/gpu/drm/msm/adreno/a6xx_gmu.h
@@ -20,7 +20,7 @@ struct a6xx_gmu_bo {
u64 iova;
};
-#define GMU_MAX_GX_FREQS 32
+#define GMU_MAX_GX_FREQS HFI_MAX_GX_LEVELS
#define GMU_MAX_CX_FREQS 6
#define GMU_MAX_BCMS 3
diff --git a/drivers/gpu/drm/msm/adreno/a6xx_hfi.h b/drivers/gpu/drm/msm/adreno/a6xx_hfi.h
index e10d32ce93e0..f4da73a555c6 100644
--- a/drivers/gpu/drm/msm/adreno/a6xx_hfi.h
+++ b/drivers/gpu/drm/msm/adreno/a6xx_hfi.h
@@ -5,6 +5,7 @@
#define _A6XX_HFI_H_
#define HFI_MAX_QUEUES 3
+#define HFI_MAX_GX_LEVELS 24
struct a6xx_hfi_queue_table_header {
u32 version;
@@ -119,7 +120,7 @@ struct a6xx_hfi_msg_perf_table_v1 {
u32 num_gpu_levels;
u32 num_gmu_levels;
- struct perf_level gx_votes[16];
+ struct perf_level gx_votes[HFI_MAX_GX_LEVELS];
struct perf_level cx_votes[4];
} __packed;
@@ -128,7 +129,7 @@ struct a6xx_hfi_msg_perf_table {
u32 num_gpu_levels;
u32 num_gmu_levels;
- struct perf_gx_level gx_votes[16];
+ struct perf_gx_level gx_votes[HFI_MAX_GX_LEVELS];
struct perf_level cx_votes[4];
} __packed;
@@ -144,7 +145,7 @@ struct a6xx_hfi_msg_bw_table {
u32 cnoc_cmds_addrs[6];
u32 cnoc_cmds_data[2][6];
u32 ddr_cmds_addrs[8];
- u32 ddr_cmds_data[16][8];
+ u32 ddr_cmds_data[HFI_MAX_GX_LEVELS][8];
} __packed;
#define HFI_H2F_MSG_TEST 5
--
2.54.0
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v2 2/8] dt-bindings: display/msm: gpu: Document Adreno 840
2026-07-05 8:00 [PATCH v2 0/8] arm64: dts: qcom: Devicetree support for Kaanapali GPU Akhil P Oommen
2026-07-05 8:00 ` [PATCH v2 1/8] drm/msm/a6xx: Increase HFI GX perf level limit to 24 Akhil P Oommen
@ 2026-07-05 8:00 ` Akhil P Oommen
2026-07-06 6:36 ` Krzysztof Kozlowski
2026-07-05 8:00 ` [PATCH v2 3/8] arm64: dts: qcom: kaanapali: add the GPU SMMU node Akhil P Oommen
` (5 subsequent siblings)
7 siblings, 1 reply; 16+ messages in thread
From: Akhil P Oommen @ 2026-07-05 8:00 UTC (permalink / raw)
To: Will Deacon, Robin Murphy, Joerg Roedel, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Bjorn Andersson, Konrad Dybcio,
Rob Clark, Dmitry Baryshkov, Abhinav Kumar, Jessica Zhang,
Marijn Suijten, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter
Cc: Sean Paul, linux-arm-kernel, iommu, devicetree, linux-kernel,
linux-arm-msm, freedreno, dri-devel, Akhil P Oommen
Adreno 840 GPU found in Kaanapali chipsets belongs to the A8x family.
It is a new IP which features the new slice architecture with 3 slices,
raytracing support, and the highest GMEM size seen so far on a Snapdragon
mobile chipsets. Update the dt bindings documentation to describe this GPU.
Signed-off-by: Akhil P Oommen <akhilpo@oss.qualcomm.com>
---
Documentation/devicetree/bindings/display/msm/gpu.yaml | 2 ++
1 file changed, 2 insertions(+)
diff --git a/Documentation/devicetree/bindings/display/msm/gpu.yaml b/Documentation/devicetree/bindings/display/msm/gpu.yaml
index dbbd8b814189..d0b7304c17af 100644
--- a/Documentation/devicetree/bindings/display/msm/gpu.yaml
+++ b/Documentation/devicetree/bindings/display/msm/gpu.yaml
@@ -413,6 +413,7 @@ allOf:
contains:
enum:
- qcom,adreno-44010000
+ - qcom,adreno-44050a01
- qcom,adreno-44070001
then:
properties:
@@ -448,6 +449,7 @@ allOf:
- qcom,adreno-43050c01
- qcom,adreno-43051401
- qcom,adreno-44010000
+ - qcom,adreno-44050a01
- qcom,adreno-44070001
then: # Starting with A6xx, the clocks are usually defined in the GMU node
--
2.54.0
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v2 3/8] arm64: dts: qcom: kaanapali: add the GPU SMMU node
2026-07-05 8:00 [PATCH v2 0/8] arm64: dts: qcom: Devicetree support for Kaanapali GPU Akhil P Oommen
2026-07-05 8:00 ` [PATCH v2 1/8] drm/msm/a6xx: Increase HFI GX perf level limit to 24 Akhil P Oommen
2026-07-05 8:00 ` [PATCH v2 2/8] dt-bindings: display/msm: gpu: Document Adreno 840 Akhil P Oommen
@ 2026-07-05 8:00 ` Akhil P Oommen
2026-07-06 9:33 ` Konrad Dybcio
2026-07-05 8:00 ` [PATCH v2 4/8] arm64: dts: qcom: kaanapali: Add QFPROM node Akhil P Oommen
` (4 subsequent siblings)
7 siblings, 1 reply; 16+ messages in thread
From: Akhil P Oommen @ 2026-07-05 8:00 UTC (permalink / raw)
To: Will Deacon, Robin Murphy, Joerg Roedel, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Bjorn Andersson, Konrad Dybcio,
Rob Clark, Dmitry Baryshkov, Abhinav Kumar, Jessica Zhang,
Marijn Suijten, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter
Cc: Sean Paul, linux-arm-kernel, iommu, devicetree, linux-kernel,
linux-arm-msm, freedreno, dri-devel, Akhil P Oommen,
Qingqing Zhou
From: Qingqing Zhou <quic_qqzhou@quicinc.com>
Add the Adreno GPU SMMU node for kaanapali platform.
Signed-off-by: Qingqing Zhou <quic_qqzhou@quicinc.com>
Signed-off-by: Akhil P Oommen <akhilpo@oss.qualcomm.com>
---
arch/arm64/boot/dts/qcom/kaanapali.dtsi | 43 +++++++++++++++++++++++++++++++++
1 file changed, 43 insertions(+)
diff --git a/arch/arm64/boot/dts/qcom/kaanapali.dtsi b/arch/arm64/boot/dts/qcom/kaanapali.dtsi
index 7aa9653bd456..19eceecc2a19 100644
--- a/arch/arm64/boot/dts/qcom/kaanapali.dtsi
+++ b/arch/arm64/boot/dts/qcom/kaanapali.dtsi
@@ -2601,6 +2601,49 @@ gpucc: clock-controller@3d90000 {
#power-domain-cells = <1>;
};
+ adreno_smmu: iommu@3da0000 {
+ compatible = "qcom,kaanapali-smmu-500",
+ "qcom,adreno-smmu",
+ "qcom,smmu-500",
+ "arm,mmu-500";
+ reg = <0x0 0x03da0000 0x0 0x40000>;
+ #iommu-cells = <2>;
+ #global-interrupts = <1>;
+ dma-coherent;
+
+ power-domains = <&gpucc GPU_CC_CX_GDSC>;
+
+ clocks = <&gpucc GPU_CC_GPU_SMMU_VOTE_CLK>;
+ clock-names = "hlos";
+
+ interrupts = <GIC_SPI 674 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 678 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 679 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 680 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 681 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 682 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 683 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 684 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 685 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 686 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 687 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 688 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 422 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 476 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 574 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 575 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 576 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 577 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 660 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 662 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 665 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 666 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 667 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 669 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 670 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 700 IRQ_TYPE_LEVEL_HIGH>;
+ };
+
remoteproc_adsp: remoteproc@6800000 {
compatible = "qcom,kaanapali-adsp-pas", "qcom,sm8550-adsp-pas";
reg = <0x0 0x06800000 0x0 0x10000>;
--
2.54.0
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v2 4/8] arm64: dts: qcom: kaanapali: Add QFPROM node
2026-07-05 8:00 [PATCH v2 0/8] arm64: dts: qcom: Devicetree support for Kaanapali GPU Akhil P Oommen
` (2 preceding siblings ...)
2026-07-05 8:00 ` [PATCH v2 3/8] arm64: dts: qcom: kaanapali: add the GPU SMMU node Akhil P Oommen
@ 2026-07-05 8:00 ` Akhil P Oommen
2026-07-06 9:35 ` Konrad Dybcio
2026-07-05 8:00 ` [PATCH v2 5/8] arm64: dts: qcom: Add GPU support for Kaanapali Akhil P Oommen
` (3 subsequent siblings)
7 siblings, 1 reply; 16+ messages in thread
From: Akhil P Oommen @ 2026-07-05 8:00 UTC (permalink / raw)
To: Will Deacon, Robin Murphy, Joerg Roedel, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Bjorn Andersson, Konrad Dybcio,
Rob Clark, Dmitry Baryshkov, Abhinav Kumar, Jessica Zhang,
Marijn Suijten, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter
Cc: Sean Paul, linux-arm-kernel, iommu, devicetree, linux-kernel,
linux-arm-msm, freedreno, dri-devel, Akhil P Oommen, Jingyi Wang
From: Jingyi Wang <jingyi.wang@oss.qualcomm.com>
Add the QFPROM node and GPU related subnodes on Kaanapali SoC.
Signed-off-by: Jingyi Wang <jingyi.wang@oss.qualcomm.com>
Signed-off-by: Akhil P Oommen <akhilpo@oss.qualcomm.com>
---
arch/arm64/boot/dts/qcom/kaanapali.dtsi | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/arch/arm64/boot/dts/qcom/kaanapali.dtsi b/arch/arm64/boot/dts/qcom/kaanapali.dtsi
index 19eceecc2a19..8f71f9dc26e6 100644
--- a/arch/arm64/boot/dts/qcom/kaanapali.dtsi
+++ b/arch/arm64/boot/dts/qcom/kaanapali.dtsi
@@ -5874,6 +5874,18 @@ rpmhpd_opp_super_turbo_no_cpr: opp-480 {
};
};
+ efuse@221c8000 {
+ compatible = "qcom,kaanapali-qfprom", "qcom,qfprom";
+ reg = <0x0 0x221c8000 0x0 0x1000>;
+ #address-cells = <1>;
+ #size-cells = <1>;
+
+ gpu_speed_bin: gpu-speed-bin@142 {
+ reg = <0x142 0x2>;
+ bits = <3 9>;
+ };
+ };
+
nsp_noc: interconnect@260c0000 {
compatible = "qcom,kaanapali-nsp-noc";
reg = <0x0 0x260c0000 0x0 0x21280>;
--
2.54.0
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v2 5/8] arm64: dts: qcom: Add GPU support for Kaanapali
2026-07-05 8:00 [PATCH v2 0/8] arm64: dts: qcom: Devicetree support for Kaanapali GPU Akhil P Oommen
` (3 preceding siblings ...)
2026-07-05 8:00 ` [PATCH v2 4/8] arm64: dts: qcom: kaanapali: Add QFPROM node Akhil P Oommen
@ 2026-07-05 8:00 ` Akhil P Oommen
2026-07-06 9:37 ` Konrad Dybcio
2026-07-05 8:00 ` [PATCH v2 6/8] arm64: dts: qcom: kaanapali: Add GPU cooling Akhil P Oommen
` (2 subsequent siblings)
7 siblings, 1 reply; 16+ messages in thread
From: Akhil P Oommen @ 2026-07-05 8:00 UTC (permalink / raw)
To: Will Deacon, Robin Murphy, Joerg Roedel, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Bjorn Andersson, Konrad Dybcio,
Rob Clark, Dmitry Baryshkov, Abhinav Kumar, Jessica Zhang,
Marijn Suijten, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter
Cc: Sean Paul, linux-arm-kernel, iommu, devicetree, linux-kernel,
linux-arm-msm, freedreno, dri-devel, Akhil P Oommen,
Dmitry Baryshkov
Adreno 840 present in Kaanapali SoC is the second generation GPU in
A8x family. It is based on the new slice architecture with 3 slices,
higher GMEM/caches etc.
There is some re-arrangement in the reglist to properly cover maximum
register region. Other than this, the DT description is mostly similar
to the existing chipsets except the OPP tables.
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
Signed-off-by: Akhil P Oommen <akhilpo@oss.qualcomm.com>
---
arch/arm64/boot/dts/qcom/kaanapali.dtsi | 240 ++++++++++++++++++++++++++++++++
1 file changed, 240 insertions(+)
diff --git a/arch/arm64/boot/dts/qcom/kaanapali.dtsi b/arch/arm64/boot/dts/qcom/kaanapali.dtsi
index 8f71f9dc26e6..009f0ae1ee16 100644
--- a/arch/arm64/boot/dts/qcom/kaanapali.dtsi
+++ b/arch/arm64/boot/dts/qcom/kaanapali.dtsi
@@ -2577,6 +2577,246 @@ videocc: clock-controller@20f0000 {
#power-domain-cells = <1>;
};
+ gpu: gpu@3d00000 {
+ compatible = "qcom,adreno-44050a01", "qcom,adreno";
+ reg = <0x0 0x03d00000 0x0 0x6c000>,
+ <0x0 0x03d9e000 0x0 0x2000>;
+ reg-names = "kgsl_3d0_reg_memory",
+ "cx_mem";
+
+ interrupts = <GIC_SPI 300 IRQ_TYPE_LEVEL_HIGH>;
+
+ iommus = <&adreno_smmu 0 0x0>,
+ <&adreno_smmu 1 0x0>;
+
+ operating-points-v2 = <&gpu_opp_table>;
+
+ qcom,gmu = <&gmu>;
+ #cooling-cells = <2>;
+
+ nvmem-cells = <&gpu_speed_bin>;
+ nvmem-cell-names = "speed_bin";
+
+ interconnects = <&gem_noc MASTER_GFX3D QCOM_ICC_TAG_ALWAYS
+ &mc_virt SLAVE_EBI1 QCOM_ICC_TAG_ALWAYS>;
+ interconnect-names = "gfx-mem";
+
+ gpu_zap_shader: zap-shader {
+ memory-region = <&gpu_microcode_mem>;
+ };
+
+ gpu_opp_table: opp-table {
+ compatible = "operating-points-v2-adreno",
+ "operating-points-v2";
+
+ opp-160000000 {
+ opp-hz = /bits/ 64 <160000000>;
+ opp-level = <RPMH_REGULATOR_LEVEL_LOW_SVS_D3>;
+ opp-peak-kBps = <2136718>;
+ opp-supported-hw = <0x0f>;
+ /* ACD is disabled */
+ };
+
+ opp-191000000 {
+ opp-hz = /bits/ 64 <191000000>;
+ opp-level = <RPMH_REGULATOR_LEVEL_LOW_SVS_D2_1>;
+ opp-peak-kBps = <2136718>;
+ opp-supported-hw = <0x0f>;
+ /* ACD is disabled */
+ };
+
+ opp-222000000 {
+ opp-hz = /bits/ 64 <222000000>;
+ opp-level = <RPMH_REGULATOR_LEVEL_LOW_SVS_D2>;
+ opp-peak-kBps = <2136718>;
+ opp-supported-hw = <0x0f>;
+ /* ACD is disabled */
+ };
+
+ opp-282000000 {
+ opp-hz = /bits/ 64 <282000000>;
+ opp-level = <RPMH_REGULATOR_LEVEL_LOW_SVS_D1_1>;
+ opp-peak-kBps = <5285156>;
+ opp-supported-hw = <0x0f>;
+ qcom,opp-acd-level = <0xca2e5ffd>;
+ };
+
+ opp-342000000 {
+ opp-hz = /bits/ 64 <342000000>;
+ opp-level = <RPMH_REGULATOR_LEVEL_LOW_SVS_D1>;
+ opp-peak-kBps = <5285156>;
+ opp-supported-hw = <0x0f>;
+ qcom,opp-acd-level = <0xe22a5ffd>;
+ };
+
+ opp-382000000 {
+ opp-hz = /bits/ 64 <382000000>;
+ opp-level = <RPMH_REGULATOR_LEVEL_LOW_SVS_D0>;
+ opp-peak-kBps = <5285156>;
+ opp-supported-hw = <0x0f>;
+ qcom,opp-acd-level = <0xa22c5ffd>;
+ };
+
+ opp-422000000 {
+ opp-hz = /bits/ 64 <422000000>;
+ opp-level = <RPMH_REGULATOR_LEVEL_LOW_SVS>;
+ opp-peak-kBps = <6074218>;
+ opp-supported-hw = <0x0f>;
+ qcom,opp-acd-level = <0xa22c5ffd>;
+ };
+
+ opp-461000000 {
+ opp-hz = /bits/ 64 <461000000>;
+ opp-level = <RPMH_REGULATOR_LEVEL_LOW_SVS_L0>;
+ opp-peak-kBps = <6074218>;
+ opp-supported-hw = <0x0f>;
+ qcom,opp-acd-level = <0xe82e5ffd>;
+ };
+
+ opp-500000000 {
+ opp-hz = /bits/ 64 <500000000>;
+ opp-level = <RPMH_REGULATOR_LEVEL_LOW_SVS_L1>;
+ opp-peak-kBps = <6074218>;
+ opp-supported-hw = <0x0f>;
+ qcom,opp-acd-level = <0xe82c5ffd>;
+ };
+
+ opp-578000000 {
+ opp-hz = /bits/ 64 <578000000>;
+ opp-level = <RPMH_REGULATOR_LEVEL_SVS>;
+ opp-peak-kBps = <6074218>;
+ opp-supported-hw = <0x0f>;
+ qcom,opp-acd-level = <0xc02c5ffd>;
+ };
+
+ opp-646000000 {
+ opp-hz = /bits/ 64 <646000000>;
+ opp-level = <RPMH_REGULATOR_LEVEL_SVS_L0>;
+ opp-peak-kBps = <8171875>;
+ opp-supported-hw = <0x0f>;
+ qcom,opp-acd-level = <0xc02c5ffd>;
+ };
+
+ opp-726000000 {
+ opp-hz = /bits/ 64 <726000000>;
+ opp-level = <RPMH_REGULATOR_LEVEL_SVS_L1>;
+ opp-peak-kBps = <8171875>;
+ opp-supported-hw = <0x0f>;
+ qcom,opp-acd-level = <0x882f5ffd>;
+ };
+
+ opp-826000000 {
+ opp-hz = /bits/ 64 <826000000>;
+ opp-level = <RPMH_REGULATOR_LEVEL_SVS_L2>;
+ opp-peak-kBps = <12449218>;
+ opp-supported-hw = <0x0f>;
+ qcom,opp-acd-level = <0xa82c5ffd>;
+ };
+
+ opp-902000000 {
+ opp-hz = /bits/ 64 <902000000>;
+ opp-level = <RPMH_REGULATOR_LEVEL_NOM>;
+ opp-peak-kBps = <12449218>;
+ opp-supported-hw = <0x0f>;
+ qcom,opp-acd-level = <0xa82b5ffd>;
+ };
+
+ opp-1000000000 {
+ opp-hz = /bits/ 64 <1000000000>;
+ opp-level = <RPMH_REGULATOR_LEVEL_TURBO>;
+ opp-peak-kBps = <12449218>;
+ opp-supported-hw = <0x0f>;
+ qcom,opp-acd-level = <0x882a5ffd>;
+ };
+
+ opp-1050000000 {
+ opp-hz = /bits/ 64 <1050000000>;
+ opp-level = <RPMH_REGULATOR_LEVEL_TURBO_L1>;
+ opp-peak-kBps = <20832031>;
+ opp-supported-hw = <0x0f>;
+ qcom,opp-acd-level = <0x88295ffd>;
+ };
+
+ opp-1200000000 {
+ opp-hz = /bits/ 64 <1200000000>;
+ opp-level = <RPMH_REGULATOR_LEVEL_TURBO_L3>;
+ opp-peak-kBps = <20832031>;
+ opp-supported-hw = <0x07>;
+ qcom,opp-acd-level = <0xa02e5ffd>;
+ };
+
+ opp-1300000000 {
+ opp-hz = /bits/ 64 <1300000000>;
+ opp-level = <RPMH_REGULATOR_LEVEL_TURBO_L4>;
+ opp-peak-kBps = <20832031>;
+ opp-supported-hw = <0x03>;
+ qcom,opp-acd-level = <0x802d5ffd>;
+ };
+ };
+ };
+
+ gmu: gmu@3d6c000 {
+ compatible = "qcom,adreno-gmu-840.1", "qcom,adreno-gmu";
+
+ reg = <0x0 0x03d6c000 0x0 0x68000>;
+ reg-names = "gmu";
+
+ interrupts = <GIC_SPI 304 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 305 IRQ_TYPE_LEVEL_HIGH>;
+ interrupt-names = "hfi", "gmu";
+
+ clocks = <&gpucc GPU_CC_AHB_CLK>,
+ <&gpucc GPU_CC_CX_GMU_CLK>,
+ <&gpucc GPU_CC_CXO_CLK>,
+ <&gcc GCC_GPU_GEMNOC_GFX_CLK>,
+ <&gpucc GPU_CC_HUB_CX_INT_CLK>;
+ clock-names = "ahb",
+ "gmu",
+ "cxo",
+ "memnoc",
+ "hub";
+
+ power-domains = <&gpucc GPU_CC_CX_GDSC>,
+ <&gxclkctl GX_CLKCTL_GX_GDSC>;
+ power-domain-names = "cx",
+ "gx";
+
+ iommus = <&adreno_smmu 5 0x0>;
+
+ qcom,qmp = <&aoss_qmp>;
+
+ operating-points-v2 = <&gmu_opp_table>;
+
+ gmu_opp_table: opp-table {
+ compatible = "operating-points-v2";
+
+ opp-475000000 {
+ opp-hz = /bits/ 64 <475000000>;
+ opp-level = <RPMH_REGULATOR_LEVEL_LOW_SVS_D1>;
+ };
+
+ opp-575000000 {
+ opp-hz = /bits/ 64 <575000000>;
+ opp-level = <RPMH_REGULATOR_LEVEL_LOW_SVS>;
+ };
+
+ opp-700000000 {
+ opp-hz = /bits/ 64 <700000000>;
+ opp-level = <RPMH_REGULATOR_LEVEL_SVS>;
+ };
+
+ opp-725000000 {
+ opp-hz = /bits/ 64 <725000000>;
+ opp-level = <RPMH_REGULATOR_LEVEL_SVS_L1>;
+ };
+
+ opp-750000000 {
+ opp-hz = /bits/ 64 <750000000>;
+ opp-level = <RPMH_REGULATOR_LEVEL_NOM>;
+ };
+ };
+ };
+
gxclkctl: clock-controller@3d64000 {
compatible = "qcom,kaanapali-gxclkctl";
reg = <0x0 0x03d64000 0x0 0x6000>;
--
2.54.0
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v2 6/8] arm64: dts: qcom: kaanapali: Add GPU cooling
2026-07-05 8:00 [PATCH v2 0/8] arm64: dts: qcom: Devicetree support for Kaanapali GPU Akhil P Oommen
` (4 preceding siblings ...)
2026-07-05 8:00 ` [PATCH v2 5/8] arm64: dts: qcom: Add GPU support for Kaanapali Akhil P Oommen
@ 2026-07-05 8:00 ` Akhil P Oommen
2026-07-06 9:39 ` Konrad Dybcio
2026-07-05 8:00 ` [PATCH v2 7/8] arm64: dts: qcom: kaanapali-mtp: Enable GPU Akhil P Oommen
2026-07-05 8:00 ` [PATCH v2 8/8] arm64: dts: qcom: kaanapali-qrd: " Akhil P Oommen
7 siblings, 1 reply; 16+ messages in thread
From: Akhil P Oommen @ 2026-07-05 8:00 UTC (permalink / raw)
To: Will Deacon, Robin Murphy, Joerg Roedel, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Bjorn Andersson, Konrad Dybcio,
Rob Clark, Dmitry Baryshkov, Abhinav Kumar, Jessica Zhang,
Marijn Suijten, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter
Cc: Sean Paul, linux-arm-kernel, iommu, devicetree, linux-kernel,
linux-arm-msm, freedreno, dri-devel, Akhil P Oommen, Gaurav Kohli
From: Gaurav Kohli <gaurav.kohli@oss.qualcomm.com>
Unlike the CPU, the GPU does not throttle its speed automatically when
it reaches high temperatures. Set up GPU cooling by throttling the GPU
speed when reaching 105°C.
Introduce a passive polling delay to ensure more than one "passive"
thermal point is considered when throttling the GPU thermal zones.
Signed-off-by: Gaurav Kohli <gaurav.kohli@oss.qualcomm.com>
---
arch/arm64/boot/dts/qcom/kaanapali.dtsi | 166 ++++++++++++++++++++++++++++++++
1 file changed, 166 insertions(+)
diff --git a/arch/arm64/boot/dts/qcom/kaanapali.dtsi b/arch/arm64/boot/dts/qcom/kaanapali.dtsi
index 009f0ae1ee16..b8acd9665575 100644
--- a/arch/arm64/boot/dts/qcom/kaanapali.dtsi
+++ b/arch/arm64/boot/dts/qcom/kaanapali.dtsi
@@ -26,6 +26,7 @@
#include <dt-bindings/soc/qcom,gpr.h>
#include <dt-bindings/soc/qcom,rpmh-rsc.h>
#include <dt-bindings/sound/qcom,q6dsp-lpass-ports.h>
+#include <dt-bindings/thermal/thermal.h>
#include "kaanapali-ipcc.h"
@@ -7059,9 +7060,17 @@ nsphmx-3-critical {
};
gpuss-0-thermal {
+ polling-delay-passive = <10>;
+
thermal-sensors = <&tsens5 0>;
trips {
+ gpuss_0_alert0: gpuss-0-alert0 {
+ temperature = <105000>;
+ hysteresis = <5000>;
+ type = "passive";
+ };
+
gpuss-0-hot {
temperature = <120000>;
hysteresis = <5000>;
@@ -7074,12 +7083,27 @@ gpuss-0-critical {
type = "critical";
};
};
+
+ cooling-maps {
+ map0 {
+ trip = <&gpuss_0_alert0>;
+ cooling-device = <&gpu THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+ };
+ };
};
gpuss-1-thermal {
+ polling-delay-passive = <10>;
+
thermal-sensors = <&tsens5 1>;
trips {
+ gpuss_1_alert0: gpuss-1-alert0 {
+ temperature = <105000>;
+ hysteresis = <5000>;
+ type = "passive";
+ };
+
gpuss-1-hot {
temperature = <120000>;
hysteresis = <5000>;
@@ -7092,12 +7116,27 @@ gpuss-1-critical {
type = "critical";
};
};
+
+ cooling-maps {
+ map0 {
+ trip = <&gpuss_1_alert0>;
+ cooling-device = <&gpu THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+ };
+ };
};
gpuss-2-thermal {
+ polling-delay-passive = <10>;
+
thermal-sensors = <&tsens5 2>;
trips {
+ gpuss_2_alert0: gpuss-2-alert0 {
+ temperature = <105000>;
+ hysteresis = <5000>;
+ type = "passive";
+ };
+
gpuss-2-hot {
temperature = <120000>;
hysteresis = <5000>;
@@ -7110,12 +7149,27 @@ gpuss-2-critical {
type = "critical";
};
};
+
+ cooling-maps {
+ map0 {
+ trip = <&gpuss_2_alert0>;
+ cooling-device = <&gpu THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+ };
+ };
};
gpuss-3-thermal {
+ polling-delay-passive = <10>;
+
thermal-sensors = <&tsens5 3>;
trips {
+ gpuss_3_alert0: gpuss-3-alert0 {
+ temperature = <105000>;
+ hysteresis = <5000>;
+ type = "passive";
+ };
+
gpuss-3-hot {
temperature = <120000>;
hysteresis = <5000>;
@@ -7128,12 +7182,27 @@ gpuss-3-critical {
type = "critical";
};
};
+
+ cooling-maps {
+ map0 {
+ trip = <&gpuss_3_alert0>;
+ cooling-device = <&gpu THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+ };
+ };
};
gpuss-4-thermal {
+ polling-delay-passive = <10>;
+
thermal-sensors = <&tsens5 4>;
trips {
+ gpuss_4_alert0: gpuss-4-alert0 {
+ temperature = <105000>;
+ hysteresis = <5000>;
+ type = "passive";
+ };
+
gpuss-4-hot {
temperature = <120000>;
hysteresis = <5000>;
@@ -7146,12 +7215,27 @@ gpuss-4-critical {
type = "critical";
};
};
+
+ cooling-maps {
+ map0 {
+ trip = <&gpuss_4_alert0>;
+ cooling-device = <&gpu THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+ };
+ };
};
gpuss-5-thermal {
+ polling-delay-passive = <10>;
+
thermal-sensors = <&tsens5 5>;
trips {
+ gpuss_5_alert0: gpuss-5-alert0 {
+ temperature = <105000>;
+ hysteresis = <5000>;
+ type = "passive";
+ };
+
gpuss-5-hot {
temperature = <120000>;
hysteresis = <5000>;
@@ -7164,12 +7248,27 @@ gpuss-5-critical {
type = "critical";
};
};
+
+ cooling-maps {
+ map0 {
+ trip = <&gpuss_5_alert0>;
+ cooling-device = <&gpu THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+ };
+ };
};
gpuss-6-thermal {
+ polling-delay-passive = <10>;
+
thermal-sensors = <&tsens5 6>;
trips {
+ gpuss_6_alert0: gpuss-6-alert0 {
+ temperature = <105000>;
+ hysteresis = <5000>;
+ type = "passive";
+ };
+
gpuss-6-hot {
temperature = <120000>;
hysteresis = <5000>;
@@ -7182,12 +7281,27 @@ gpuss-6-critical {
type = "critical";
};
};
+
+ cooling-maps {
+ map0 {
+ trip = <&gpuss_6_alert0>;
+ cooling-device = <&gpu THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+ };
+ };
};
gpuss-7-thermal {
+ polling-delay-passive = <10>;
+
thermal-sensors = <&tsens5 7>;
trips {
+ gpuss_7_alert0: gpuss-7-alert0 {
+ temperature = <105000>;
+ hysteresis = <5000>;
+ type = "passive";
+ };
+
gpuss-7-hot {
temperature = <120000>;
hysteresis = <5000>;
@@ -7200,12 +7314,27 @@ gpuss-7-critical {
type = "critical";
};
};
+
+ cooling-maps {
+ map0 {
+ trip = <&gpuss_7_alert0>;
+ cooling-device = <&gpu THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+ };
+ };
};
gpuss-8-thermal {
+ polling-delay-passive = <10>;
+
thermal-sensors = <&tsens5 8>;
trips {
+ gpuss_8_alert0: gpuss-8-alert0 {
+ temperature = <105000>;
+ hysteresis = <5000>;
+ type = "passive";
+ };
+
gpuss-8-hot {
temperature = <120000>;
hysteresis = <5000>;
@@ -7218,12 +7347,27 @@ gpuss-8-critical {
type = "critical";
};
};
+
+ cooling-maps {
+ map0 {
+ trip = <&gpuss_8_alert0>;
+ cooling-device = <&gpu THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+ };
+ };
};
gpuss-9-thermal {
+ polling-delay-passive = <10>;
+
thermal-sensors = <&tsens5 9>;
trips {
+ gpuss_9_alert0: gpuss-9-alert0 {
+ temperature = <105000>;
+ hysteresis = <5000>;
+ type = "passive";
+ };
+
gpuss-9-hot {
temperature = <120000>;
hysteresis = <5000>;
@@ -7236,12 +7380,27 @@ gpuss-9-critical {
type = "critical";
};
};
+
+ cooling-maps {
+ map0 {
+ trip = <&gpuss_9_alert0>;
+ cooling-device = <&gpu THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+ };
+ };
};
gpuss-10-thermal {
+ polling-delay-passive = <10>;
+
thermal-sensors = <&tsens5 10>;
trips {
+ gpuss_10_alert0: gpuss-10-alert0 {
+ temperature = <105000>;
+ hysteresis = <5000>;
+ type = "passive";
+ };
+
gpuss-10-hot {
temperature = <120000>;
hysteresis = <5000>;
@@ -7254,6 +7413,13 @@ gpuss-10-critical {
type = "critical";
};
};
+
+ cooling-maps {
+ map0 {
+ trip = <&gpuss_10_alert0>;
+ cooling-device = <&gpu THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+ };
+ };
};
ddr-thermal {
--
2.54.0
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v2 7/8] arm64: dts: qcom: kaanapali-mtp: Enable GPU
2026-07-05 8:00 [PATCH v2 0/8] arm64: dts: qcom: Devicetree support for Kaanapali GPU Akhil P Oommen
` (5 preceding siblings ...)
2026-07-05 8:00 ` [PATCH v2 6/8] arm64: dts: qcom: kaanapali: Add GPU cooling Akhil P Oommen
@ 2026-07-05 8:00 ` Akhil P Oommen
2026-07-05 8:00 ` [PATCH v2 8/8] arm64: dts: qcom: kaanapali-qrd: " Akhil P Oommen
7 siblings, 0 replies; 16+ messages in thread
From: Akhil P Oommen @ 2026-07-05 8:00 UTC (permalink / raw)
To: Will Deacon, Robin Murphy, Joerg Roedel, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Bjorn Andersson, Konrad Dybcio,
Rob Clark, Dmitry Baryshkov, Abhinav Kumar, Jessica Zhang,
Marijn Suijten, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter
Cc: Sean Paul, linux-arm-kernel, iommu, devicetree, linux-kernel,
linux-arm-msm, freedreno, dri-devel, Akhil P Oommen,
Dmitry Baryshkov, Konrad Dybcio
Add the secure firmware name property and enable GPU support on
Kaanapali MTP device.
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Signed-off-by: Akhil P Oommen <akhilpo@oss.qualcomm.com>
---
arch/arm64/boot/dts/qcom/kaanapali-mtp.dts | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/arch/arm64/boot/dts/qcom/kaanapali-mtp.dts b/arch/arm64/boot/dts/qcom/kaanapali-mtp.dts
index f9b5b5718b90..ba256039dd3c 100644
--- a/arch/arm64/boot/dts/qcom/kaanapali-mtp.dts
+++ b/arch/arm64/boot/dts/qcom/kaanapali-mtp.dts
@@ -865,6 +865,14 @@ vreg_l7n_3p3: ldo7 {
};
};
+&gpu {
+ status = "okay";
+};
+
+&gpu_zap_shader {
+ firmware-name = "qcom/kaanapali/gen80200_zap.mbn";
+};
+
&lpass_vamacro {
pinctrl-0 = <&dmic01_default>, <&dmic23_default>;
pinctrl-names = "default";
--
2.54.0
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v2 8/8] arm64: dts: qcom: kaanapali-qrd: Enable GPU
2026-07-05 8:00 [PATCH v2 0/8] arm64: dts: qcom: Devicetree support for Kaanapali GPU Akhil P Oommen
` (6 preceding siblings ...)
2026-07-05 8:00 ` [PATCH v2 7/8] arm64: dts: qcom: kaanapali-mtp: Enable GPU Akhil P Oommen
@ 2026-07-05 8:00 ` Akhil P Oommen
7 siblings, 0 replies; 16+ messages in thread
From: Akhil P Oommen @ 2026-07-05 8:00 UTC (permalink / raw)
To: Will Deacon, Robin Murphy, Joerg Roedel, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Bjorn Andersson, Konrad Dybcio,
Rob Clark, Dmitry Baryshkov, Abhinav Kumar, Jessica Zhang,
Marijn Suijten, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter
Cc: Sean Paul, linux-arm-kernel, iommu, devicetree, linux-kernel,
linux-arm-msm, freedreno, dri-devel, Akhil P Oommen,
Dmitry Baryshkov, Konrad Dybcio
Add the secure firmware name property and enable GPU support on
Kaanapali QRD device.
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Signed-off-by: Akhil P Oommen <akhilpo@oss.qualcomm.com>
---
arch/arm64/boot/dts/qcom/kaanapali-qrd.dts | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/arch/arm64/boot/dts/qcom/kaanapali-qrd.dts b/arch/arm64/boot/dts/qcom/kaanapali-qrd.dts
index 55d02219ef4e..6bef8ec151f8 100644
--- a/arch/arm64/boot/dts/qcom/kaanapali-qrd.dts
+++ b/arch/arm64/boot/dts/qcom/kaanapali-qrd.dts
@@ -693,6 +693,14 @@ vreg_l7n_3p3: ldo7 {
};
};
+&gpu {
+ status = "okay";
+};
+
+&gpu_zap_shader {
+ firmware-name = "qcom/kaanapali/gen80200_zap.mbn";
+};
+
&pmh0101_flash {
status = "okay";
--
2.54.0
^ permalink raw reply related [flat|nested] 16+ messages in thread
* Re: [PATCH v2 1/8] drm/msm/a6xx: Increase HFI GX perf level limit to 24
2026-07-05 8:00 ` [PATCH v2 1/8] drm/msm/a6xx: Increase HFI GX perf level limit to 24 Akhil P Oommen
@ 2026-07-05 8:17 ` sashiko-bot
2026-07-05 12:08 ` Akhil P Oommen
1 sibling, 0 replies; 16+ messages in thread
From: sashiko-bot @ 2026-07-05 8:17 UTC (permalink / raw)
To: Akhil P Oommen; +Cc: devicetree, robh, dri-devel, conor+dt
Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
New issues:
- [High] Expanding fixed-size arrays in packed HFI structures silently shifts the offsets of subsequent fields, breaking communication with older GMU firmwares.
Pre-existing issues:
- [Critical] Out-of-bounds stack write in `a6xx_hfi_send_perf_table` and `a6xx_hfi_send_perf_table_v1` due to a mismatch between `GMU_MAX_CX_FREQS` and the `cx_votes` array size.
--
commit b7dcd380638139f2d4f6982c947797f34b9ff256
Author: Akhil P Oommen <akhilpo@oss.qualcomm.com>
drm/msm/a6xx: Increase HFI GX perf level limit to 24
Newer Adreno GPUs expose more than 16 GX frequency levels. Introduce
HFI_MAX_GX_LEVELS and use it to size the perf-table and bandwidth-table
GX vote arrays, and to derive GMU_MAX_GX_FREQS, so these levels are not
truncated.
> diff --git a/drivers/gpu/drm/msm/adreno/a6xx_gmu.h b/drivers/gpu/drm/msm/adreno/a6xx_gmu.h
> index 3f96b10b5f61a..62e3fb230cd3a 100644
> --- a/drivers/gpu/drm/msm/adreno/a6xx_gmu.h
> +++ b/drivers/gpu/drm/msm/adreno/a6xx_gmu.h
> @@ -20,7 +20,7 @@ struct a6xx_gmu_bo {
> u64 iova;
> };
>
> -#define GMU_MAX_GX_FREQS 32
> +#define GMU_MAX_GX_FREQS HFI_MAX_GX_LEVELS
> #define GMU_MAX_CX_FREQS 6
> #define GMU_MAX_BCMS 3
>
> diff --git a/drivers/gpu/drm/msm/adreno/a6xx_hfi.h b/drivers/gpu/drm/msm/adreno/a6xx_hfi.h
> index e10d32ce93e0c..f4da73a555c65 100644
> --- a/drivers/gpu/drm/msm/adreno/a6xx_hfi.h
> +++ b/drivers/gpu/drm/msm/adreno/a6xx_hfi.h
> @@ -5,6 +5,7 @@
> #define _A6XX_HFI_H_
>
> #define HFI_MAX_QUEUES 3
> +#define HFI_MAX_GX_LEVELS 24
>
> struct a6xx_hfi_queue_table_header {
> u32 version;
[ ... ]
> @@ -119,7 +120,7 @@ struct a6xx_hfi_msg_perf_table_v1 {
> u32 num_gpu_levels;
> u32 num_gmu_levels;
>
> - struct perf_level gx_votes[16];
> + struct perf_level gx_votes[HFI_MAX_GX_LEVELS];
> struct perf_level cx_votes[4];
[Severity: High]
Does expanding this fixed-size array in a packed structure break compatibility
with older GMU firmwares?
Because a6xx_hfi_msg_perf_table_v1 is a packed structure, increasing the size
of gx_votes from 16 to 24 elements shifts the offset of cx_votes. During driver
initialization on older Adreno GPUs, firmwares expecting the previous fixed-size
v1 performance tables might read cx_votes at the old offset and receive
uninitialized zeros instead of the actual frequencies, which can cause system
instability.
This same offset shift appears to happen below in struct a6xx_hfi_msg_perf_table
as well.
[Severity: Critical]
This is a pre-existing issue, but can this cause a stack buffer overflow?
The cx_votes array is hardcoded to a size of 4 here. However, in
drivers/gpu/drm/msm/adreno/a6xx_gmu.h, GMU_MAX_CX_FREQS is defined as 6.
During initialization, a6xx_hfi_send_perf_table_v1() iterates up to
gmu->nr_gmu_freqs (which can be up to 6 on newer platforms with more OPPs)
and writes to msg.cx_votes[i] on the stack:
drivers/gpu/drm/msm/adreno/a6xx_hfi.c:a6xx_hfi_send_perf_table_v1() {
...
for (i = 0; i < gmu->nr_gmu_freqs; i++) {
msg.cx_votes[i].vote = gmu->cx_arc_votes[i];
msg.cx_votes[i].freq = gmu->gmu_freqs[i] / 1000;
}
...
}
If gmu->nr_gmu_freqs exceeds 4, this loop appears to write out-of-bounds on
the stack, which can corrupt memory. This identical loop is also present in
a6xx_hfi_send_perf_table().
> } __packed;
>
> @@ -128,7 +129,7 @@ struct a6xx_hfi_msg_perf_table {
> u32 num_gpu_levels;
> u32 num_gmu_levels;
>
> - struct perf_gx_level gx_votes[16];
> + struct perf_gx_level gx_votes[HFI_MAX_GX_LEVELS];
> struct perf_level cx_votes[4];
> } __packed;
>
> @@ -144,7 +145,7 @@ struct a6xx_hfi_msg_bw_table {
> u32 cnoc_cmds_addrs[6];
> u32 cnoc_cmds_data[2][6];
> u32 ddr_cmds_addrs[8];
> - u32 ddr_cmds_data[16][8];
> + u32 ddr_cmds_data[HFI_MAX_GX_LEVELS][8];
[Severity: High]
Does increasing the size of ddr_cmds_data risk breaking length validation
on older firmwares?
Expanding this array increases the overall message size by 256 bytes, which
older GMU firmwares might reject if they strictly validate the length of the
bandwidth table message.
> } __packed;
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260705-kaana-gpu-dt-v2-0-6ac53de56314@oss.qualcomm.com?part=1
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH v2 1/8] drm/msm/a6xx: Increase HFI GX perf level limit to 24
2026-07-05 8:00 ` [PATCH v2 1/8] drm/msm/a6xx: Increase HFI GX perf level limit to 24 Akhil P Oommen
2026-07-05 8:17 ` sashiko-bot
@ 2026-07-05 12:08 ` Akhil P Oommen
1 sibling, 0 replies; 16+ messages in thread
From: Akhil P Oommen @ 2026-07-05 12:08 UTC (permalink / raw)
To: Will Deacon, Robin Murphy, Joerg Roedel, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Bjorn Andersson, Konrad Dybcio,
Rob Clark, Dmitry Baryshkov, Abhinav Kumar, Jessica Zhang,
Marijn Suijten, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter
Cc: Sean Paul, linux-arm-kernel, iommu, devicetree, linux-kernel,
linux-arm-msm, freedreno, dri-devel
On 7/5/2026 1:30 PM, Akhil P Oommen wrote:
> Newer Adreno GPUs expose more than 16 GX frequency levels. Introduce
> HFI_MAX_GX_LEVELS and use it to size the perf-table and bandwidth-table
> GX vote arrays, and to derive GMU_MAX_GX_FREQS, so these levels are not
> truncated.
>
> Signed-off-by: Akhil P Oommen <akhilpo@oss.qualcomm.com>
> ---
> drivers/gpu/drm/msm/adreno/a6xx_gmu.h | 2 +-
> drivers/gpu/drm/msm/adreno/a6xx_hfi.h | 7 ++++---
> 2 files changed, 5 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/gpu/drm/msm/adreno/a6xx_gmu.h b/drivers/gpu/drm/msm/adreno/a6xx_gmu.h
> index 3f96b10b5f61..62e3fb230cd3 100644
> --- a/drivers/gpu/drm/msm/adreno/a6xx_gmu.h
> +++ b/drivers/gpu/drm/msm/adreno/a6xx_gmu.h
> @@ -20,7 +20,7 @@ struct a6xx_gmu_bo {
> u64 iova;
> };
>
> -#define GMU_MAX_GX_FREQS 32
> +#define GMU_MAX_GX_FREQS HFI_MAX_GX_LEVELS
> #define GMU_MAX_CX_FREQS 6
> #define GMU_MAX_BCMS 3
>
> diff --git a/drivers/gpu/drm/msm/adreno/a6xx_hfi.h b/drivers/gpu/drm/msm/adreno/a6xx_hfi.h
> index e10d32ce93e0..f4da73a555c6 100644
> --- a/drivers/gpu/drm/msm/adreno/a6xx_hfi.h
> +++ b/drivers/gpu/drm/msm/adreno/a6xx_hfi.h
> @@ -5,6 +5,7 @@
> #define _A6XX_HFI_H_
>
> #define HFI_MAX_QUEUES 3
> +#define HFI_MAX_GX_LEVELS 24
>
> struct a6xx_hfi_queue_table_header {
> u32 version;
> @@ -119,7 +120,7 @@ struct a6xx_hfi_msg_perf_table_v1 {
> u32 num_gpu_levels;
> u32 num_gmu_levels;
>
> - struct perf_level gx_votes[16];
> + struct perf_level gx_votes[HFI_MAX_GX_LEVELS];
This will break older firmwares (A7x/6x). Luckily, A8x uses
HFI_TABLE_GPU_PERF interface instead of this, which is more flexible.
Will drop this patch.
-Akhil.
> struct perf_level cx_votes[4];
> } __packed;
>
> @@ -128,7 +129,7 @@ struct a6xx_hfi_msg_perf_table {
> u32 num_gpu_levels;
> u32 num_gmu_levels;
>
> - struct perf_gx_level gx_votes[16];
> + struct perf_gx_level gx_votes[HFI_MAX_GX_LEVELS];
> struct perf_level cx_votes[4];
> } __packed;
>
> @@ -144,7 +145,7 @@ struct a6xx_hfi_msg_bw_table {
> u32 cnoc_cmds_addrs[6];
> u32 cnoc_cmds_data[2][6];
> u32 ddr_cmds_addrs[8];
> - u32 ddr_cmds_data[16][8];
> + u32 ddr_cmds_data[HFI_MAX_GX_LEVELS][8];
> } __packed;
>
> #define HFI_H2F_MSG_TEST 5
>
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH v2 2/8] dt-bindings: display/msm: gpu: Document Adreno 840
2026-07-05 8:00 ` [PATCH v2 2/8] dt-bindings: display/msm: gpu: Document Adreno 840 Akhil P Oommen
@ 2026-07-06 6:36 ` Krzysztof Kozlowski
0 siblings, 0 replies; 16+ messages in thread
From: Krzysztof Kozlowski @ 2026-07-06 6:36 UTC (permalink / raw)
To: Akhil P Oommen
Cc: Will Deacon, Robin Murphy, Joerg Roedel, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Bjorn Andersson, Konrad Dybcio,
Rob Clark, Dmitry Baryshkov, Abhinav Kumar, Jessica Zhang,
Marijn Suijten, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Sean Paul,
linux-arm-kernel, iommu, devicetree, linux-kernel, linux-arm-msm,
freedreno, dri-devel
On Sun, Jul 05, 2026 at 01:30:06PM +0530, Akhil P Oommen wrote:
> Adreno 840 GPU found in Kaanapali chipsets belongs to the A8x family.
> It is a new IP which features the new slice architecture with 3 slices,
> raytracing support, and the highest GMEM size seen so far on a Snapdragon
> mobile chipsets. Update the dt bindings documentation to describe this GPU.
>
> Signed-off-by: Akhil P Oommen <akhilpo@oss.qualcomm.com>
> ---
> Documentation/devicetree/bindings/display/msm/gpu.yaml | 2 ++
> 1 file changed, 2 insertions(+)
Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.com>
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH v2 3/8] arm64: dts: qcom: kaanapali: add the GPU SMMU node
2026-07-05 8:00 ` [PATCH v2 3/8] arm64: dts: qcom: kaanapali: add the GPU SMMU node Akhil P Oommen
@ 2026-07-06 9:33 ` Konrad Dybcio
0 siblings, 0 replies; 16+ messages in thread
From: Konrad Dybcio @ 2026-07-06 9:33 UTC (permalink / raw)
To: Akhil P Oommen, Will Deacon, Robin Murphy, Joerg Roedel,
Rob Herring, Krzysztof Kozlowski, Conor Dooley, Bjorn Andersson,
Konrad Dybcio, Rob Clark, Dmitry Baryshkov, Abhinav Kumar,
Jessica Zhang, Marijn Suijten, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter
Cc: Sean Paul, linux-arm-kernel, iommu, devicetree, linux-kernel,
linux-arm-msm, freedreno, dri-devel, Qingqing Zhou
On 7/5/26 10:00 AM, Akhil P Oommen wrote:
> From: Qingqing Zhou <quic_qqzhou@quicinc.com>
>
> Add the Adreno GPU SMMU node for kaanapali platform.
>
> Signed-off-by: Qingqing Zhou <quic_qqzhou@quicinc.com>
> Signed-off-by: Akhil P Oommen <akhilpo@oss.qualcomm.com>
> ---
> arch/arm64/boot/dts/qcom/kaanapali.dtsi | 43 +++++++++++++++++++++++++++++++++
> 1 file changed, 43 insertions(+)
>
> diff --git a/arch/arm64/boot/dts/qcom/kaanapali.dtsi b/arch/arm64/boot/dts/qcom/kaanapali.dtsi
> index 7aa9653bd456..19eceecc2a19 100644
> --- a/arch/arm64/boot/dts/qcom/kaanapali.dtsi
> +++ b/arch/arm64/boot/dts/qcom/kaanapali.dtsi
> @@ -2601,6 +2601,49 @@ gpucc: clock-controller@3d90000 {
> #power-domain-cells = <1>;
> };
>
> + adreno_smmu: iommu@3da0000 {
> + compatible = "qcom,kaanapali-smmu-500",
> + "qcom,adreno-smmu",
> + "qcom,smmu-500",
> + "arm,mmu-500";
> + reg = <0x0 0x03da0000 0x0 0x40000>;
> + #iommu-cells = <2>;
> + #global-interrupts = <1>;
> + dma-coherent;
> +
> + power-domains = <&gpucc GPU_CC_CX_GDSC>;
> +
> + clocks = <&gpucc GPU_CC_GPU_SMMU_VOTE_CLK>;
> + clock-names = "hlos";
Let's match the property order of glymur.dtsi
for the contents
Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Konrad
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH v2 4/8] arm64: dts: qcom: kaanapali: Add QFPROM node
2026-07-05 8:00 ` [PATCH v2 4/8] arm64: dts: qcom: kaanapali: Add QFPROM node Akhil P Oommen
@ 2026-07-06 9:35 ` Konrad Dybcio
0 siblings, 0 replies; 16+ messages in thread
From: Konrad Dybcio @ 2026-07-06 9:35 UTC (permalink / raw)
To: Akhil P Oommen, Will Deacon, Robin Murphy, Joerg Roedel,
Rob Herring, Krzysztof Kozlowski, Conor Dooley, Bjorn Andersson,
Konrad Dybcio, Rob Clark, Dmitry Baryshkov, Abhinav Kumar,
Jessica Zhang, Marijn Suijten, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter
Cc: Sean Paul, linux-arm-kernel, iommu, devicetree, linux-kernel,
linux-arm-msm, freedreno, dri-devel, Jingyi Wang
On 7/5/26 10:00 AM, Akhil P Oommen wrote:
> From: Jingyi Wang <jingyi.wang@oss.qualcomm.com>
>
> Add the QFPROM node and GPU related subnodes on Kaanapali SoC.
>
> Signed-off-by: Jingyi Wang <jingyi.wang@oss.qualcomm.com>
> Signed-off-by: Akhil P Oommen <akhilpo@oss.qualcomm.com>
> ---
Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Konrad
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH v2 5/8] arm64: dts: qcom: Add GPU support for Kaanapali
2026-07-05 8:00 ` [PATCH v2 5/8] arm64: dts: qcom: Add GPU support for Kaanapali Akhil P Oommen
@ 2026-07-06 9:37 ` Konrad Dybcio
0 siblings, 0 replies; 16+ messages in thread
From: Konrad Dybcio @ 2026-07-06 9:37 UTC (permalink / raw)
To: Akhil P Oommen, Will Deacon, Robin Murphy, Joerg Roedel,
Rob Herring, Krzysztof Kozlowski, Conor Dooley, Bjorn Andersson,
Konrad Dybcio, Rob Clark, Dmitry Baryshkov, Abhinav Kumar,
Jessica Zhang, Marijn Suijten, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter
Cc: Sean Paul, linux-arm-kernel, iommu, devicetree, linux-kernel,
linux-arm-msm, freedreno, dri-devel, Dmitry Baryshkov
On 7/5/26 10:00 AM, Akhil P Oommen wrote:
> Adreno 840 present in Kaanapali SoC is the second generation GPU in
> A8x family. It is based on the new slice architecture with 3 slices,
> higher GMEM/caches etc.
>
> There is some re-arrangement in the reglist to properly cover maximum
> register region. Other than this, the DT description is mostly similar
> to the existing chipsets except the OPP tables.
>
> Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
> Signed-off-by: Akhil P Oommen <akhilpo@oss.qualcomm.com>
> ---
[...]
> + qcom,gmu = <&gmu>;
> + #cooling-cells = <2>;
> +
> + nvmem-cells = <&gpu_speed_bin>;
> + nvmem-cell-names = "speed_bin";
This looks good to me, but I thought that on a8x, we're supposed to use
the freq limiting register in CX_MISC - is either of them preferred?
Or are they just hardwired to the same thing by chance
Konrad
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH v2 6/8] arm64: dts: qcom: kaanapali: Add GPU cooling
2026-07-05 8:00 ` [PATCH v2 6/8] arm64: dts: qcom: kaanapali: Add GPU cooling Akhil P Oommen
@ 2026-07-06 9:39 ` Konrad Dybcio
0 siblings, 0 replies; 16+ messages in thread
From: Konrad Dybcio @ 2026-07-06 9:39 UTC (permalink / raw)
To: Akhil P Oommen, Will Deacon, Robin Murphy, Joerg Roedel,
Rob Herring, Krzysztof Kozlowski, Conor Dooley, Bjorn Andersson,
Konrad Dybcio, Rob Clark, Dmitry Baryshkov, Abhinav Kumar,
Jessica Zhang, Marijn Suijten, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter
Cc: Sean Paul, linux-arm-kernel, iommu, devicetree, linux-kernel,
linux-arm-msm, freedreno, dri-devel, Gaurav Kohli
On 7/5/26 10:00 AM, Akhil P Oommen wrote:
> From: Gaurav Kohli <gaurav.kohli@oss.qualcomm.com>
>
> Unlike the CPU, the GPU does not throttle its speed automatically when
> it reaches high temperatures. Set up GPU cooling by throttling the GPU
> speed when reaching 105°C.
>
> Introduce a passive polling delay to ensure more than one "passive"
> thermal point is considered when throttling the GPU thermal zones.
>
> Signed-off-by: Gaurav Kohli <gaurav.kohli@oss.qualcomm.com>
> ---
Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Konrad
^ permalink raw reply [flat|nested] 16+ messages in thread
end of thread, other threads:[~2026-07-06 9:39 UTC | newest]
Thread overview: 16+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-07-05 8:00 [PATCH v2 0/8] arm64: dts: qcom: Devicetree support for Kaanapali GPU Akhil P Oommen
2026-07-05 8:00 ` [PATCH v2 1/8] drm/msm/a6xx: Increase HFI GX perf level limit to 24 Akhil P Oommen
2026-07-05 8:17 ` sashiko-bot
2026-07-05 12:08 ` Akhil P Oommen
2026-07-05 8:00 ` [PATCH v2 2/8] dt-bindings: display/msm: gpu: Document Adreno 840 Akhil P Oommen
2026-07-06 6:36 ` Krzysztof Kozlowski
2026-07-05 8:00 ` [PATCH v2 3/8] arm64: dts: qcom: kaanapali: add the GPU SMMU node Akhil P Oommen
2026-07-06 9:33 ` Konrad Dybcio
2026-07-05 8:00 ` [PATCH v2 4/8] arm64: dts: qcom: kaanapali: Add QFPROM node Akhil P Oommen
2026-07-06 9:35 ` Konrad Dybcio
2026-07-05 8:00 ` [PATCH v2 5/8] arm64: dts: qcom: Add GPU support for Kaanapali Akhil P Oommen
2026-07-06 9:37 ` Konrad Dybcio
2026-07-05 8:00 ` [PATCH v2 6/8] arm64: dts: qcom: kaanapali: Add GPU cooling Akhil P Oommen
2026-07-06 9:39 ` Konrad Dybcio
2026-07-05 8:00 ` [PATCH v2 7/8] arm64: dts: qcom: kaanapali-mtp: Enable GPU Akhil P Oommen
2026-07-05 8:00 ` [PATCH v2 8/8] arm64: dts: qcom: kaanapali-qrd: " Akhil P Oommen
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox