* [PATCH RFC v6 0/7] Add support for Adreno 810 GPU
@ 2026-05-15 5:08 Alexander Koskovich
2026-05-15 5:08 ` [PATCH RFC v6 1/7] dt-bindings: display/msm/gmu: Document Adreno 810 GMU Alexander Koskovich
` (8 more replies)
0 siblings, 9 replies; 19+ messages in thread
From: Alexander Koskovich @ 2026-05-15 5:08 UTC (permalink / raw)
To: Rob Clark, Dmitry Baryshkov, Abhinav Kumar, Jessica Zhang,
Sean Paul, Marijn Suijten, David Airlie, Simona Vetter,
Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Konrad Dybcio, Akhil P Oommen,
Bjorn Andersson
Cc: Luca Weiss, linux-arm-msm, dri-devel, freedreno, devicetree,
linux-kernel, Alexander Koskovich, Krzysztof Kozlowski,
Konrad Dybcio
Adreno 810 is present in the Milos SoC and is the first GPU to be released in
the A8x family.
This series is marked as RFC because it depends on a few other in review
series, GPU GX GDSC handling [1], QFPROM efuse for Milos [2], and devicetree
support for Glymur [3] (for a8xx RSCC offset fix and X2-185 bindings change).
Also depends on the GXCLKCTL block for Milos [4], but this is no longer in
review and has been applied.
[1]: https://lore.kernel.org/linux-arm-msm/20260427-gfx-clk-fixes-v2-0-797e54b3d464@oss.qualcomm.com
[2]: https://lore.kernel.org/linux-arm-msm/20260331-milos-qfprom-v1-0-36017cc642db@pm.me
[3]: https://lore.kernel.org/linux-arm-msm/20260513-glymur-gpu-dt-v4-0-f83832c3bc9a@oss.qualcomm.com
[4]: https://lore.kernel.org/linux-arm-msm/20260417-milos-gxclkctl-v3-0-08f5988c43a2@fairphone.com
Signed-off-by: Alexander Koskovich <akoskovich@pm.me>
---
Changes in v6:
- Re-jigged the register ranges for GPU/GMU to match Glymur
- Depend on RSCC offset fix
- Fix bindings to add constraints for reg list
- Link to v5: https://lore.kernel.org/r/20260502-adreno-810-v5-0-bc9fd2bb788d@pm.me
Changes in v5:
- Sync with latest kgsl
- Link to v4: https://lore.kernel.org/r/20260416-adreno-810-v4-0-61676e073f8a@pm.me
Changes in v4:
- Add 1150MHz speedbin
- Rebase on next-20260415
- Add dep on efuse patchset
- Link to v3: https://lore.kernel.org/r/20260407-adreno-810-v3-0-30cb7f196ed4@pm.me
Changes in v3:
- Drop DEMET from GMU clocks (not required on A810)
- Document qcom,adreno-44010000 compatible (regex is gone in 7.0+)
- Drop zeroed out CP_PROTECT_REG[46, 62] range, not required
- Add a810_protect to __build_asserts
- Add UCHE_CCHE_TRAP_BASE_[LO|HI] and UCHE_CCHE_WRITE_THRU_BASE_[LO|HI] to a810_pwrup_reglist_regs
- Move TPL1 registers to a810_pwrup_reglist_regs
- Include all protect registers in a810_ifpc_reglist_regs
- Revert pipe reg comment, just copied it from downstream but original also works
- Link to v2: https://lore.kernel.org/r/20260402-adreno-810-v2-0-ce337ca87a9e@pm.me
Changes in v2:
- Mark as RFC due to dependency on in-review changes
- Explain in DTS commit why qcom,kaanapali-gxclkctl.h and not qcom,milos-gxclkctl.h
- cx_mmio -> cx_misc_mmio
- Sync a810_nonctxt_regs with GRAPHICS.LA.14.0.r5-03100-lanai.0
- Link to v1: https://lore.kernel.org/r/20260331-adreno-810-v1-0-725801dbb12b@pm.me
---
Alexander Koskovich (7):
dt-bindings: display/msm/gmu: Document Adreno 810 GMU
dt-bindings: display/msm/gpu: Document Adreno 810 GPU
drm/msm/adreno: rename llc_mmio to cx_misc_mmio
drm/msm/adreno: set cx_misc_mmio regardless of if platform has LLCC
drm/msm/a8xx: use pipe protect slot 15 for last-span-unbound feature
drm/msm/adreno: add Adreno 810 GPU support
arm64: dts: qcom: milos: Add Adreno 810 GPU and GMU nodes
.../devicetree/bindings/display/msm/gmu.yaml | 30 +++
.../devicetree/bindings/display/msm/gpu.yaml | 5 +-
arch/arm64/boot/dts/qcom/milos.dtsi | 165 ++++++++++++
drivers/gpu/drm/msm/adreno/a6xx_catalog.c | 298 +++++++++++++++++++++
drivers/gpu/drm/msm/adreno/a6xx_gmu.c | 8 +-
drivers/gpu/drm/msm/adreno/a6xx_gpu.c | 44 ++-
drivers/gpu/drm/msm/adreno/a6xx_gpu.h | 14 +-
drivers/gpu/drm/msm/adreno/a8xx_gpu.c | 6 +-
drivers/gpu/drm/msm/adreno/adreno_gpu.h | 5 +
9 files changed, 536 insertions(+), 39 deletions(-)
---
base-commit: 2ca0470eca8b4cee27aeeb39bd93c1f4c96b7e7b
change-id: 20260330-adreno-810-5a47525522cd
Best regards,
--
Alexander Koskovich <akoskovich@pm.me>
^ permalink raw reply [flat|nested] 19+ messages in thread* [PATCH RFC v6 1/7] dt-bindings: display/msm/gmu: Document Adreno 810 GMU 2026-05-15 5:08 [PATCH RFC v6 0/7] Add support for Adreno 810 GPU Alexander Koskovich @ 2026-05-15 5:08 ` Alexander Koskovich 2026-05-16 0:05 ` Claude review: " Claude Code Review Bot 2026-05-15 5:08 ` [PATCH RFC v6 2/7] dt-bindings: display/msm/gpu: Document Adreno 810 GPU Alexander Koskovich ` (7 subsequent siblings) 8 siblings, 1 reply; 19+ messages in thread From: Alexander Koskovich @ 2026-05-15 5:08 UTC (permalink / raw) To: Rob Clark, Dmitry Baryshkov, Abhinav Kumar, Jessica Zhang, Sean Paul, Marijn Suijten, David Airlie, Simona Vetter, Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, Rob Herring, Krzysztof Kozlowski, Conor Dooley, Konrad Dybcio, Akhil P Oommen, Bjorn Andersson Cc: Luca Weiss, linux-arm-msm, dri-devel, freedreno, devicetree, linux-kernel, Alexander Koskovich, Krzysztof Kozlowski Document Adreno 810 GMU in the dt-binding specification. Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.com> Signed-off-by: Alexander Koskovich <akoskovich@pm.me> --- .../devicetree/bindings/display/msm/gmu.yaml | 30 ++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/Documentation/devicetree/bindings/display/msm/gmu.yaml b/Documentation/devicetree/bindings/display/msm/gmu.yaml index 93e5e6e19754..8578c2f8122e 100644 --- a/Documentation/devicetree/bindings/display/msm/gmu.yaml +++ b/Documentation/devicetree/bindings/display/msm/gmu.yaml @@ -300,6 +300,36 @@ allOf: required: - qcom,qmp + - if: + properties: + compatible: + contains: + const: qcom,adreno-gmu-810.0 + then: + properties: + reg: + items: + - description: Core GMU registers + reg-names: + items: + - const: gmu + clocks: + items: + - description: GPU AHB clock + - description: GMU clock + - description: GPU CX clock + - description: GPU AXI clock + - description: GPU MEMNOC clock + - description: GMU HUB clock + clock-names: + items: + - const: ahb + - const: gmu + - const: cxo + - const: axi + - const: memnoc + - const: hub + - if: properties: compatible: -- 2.53.0 ^ permalink raw reply related [flat|nested] 19+ messages in thread
* Claude review: dt-bindings: display/msm/gmu: Document Adreno 810 GMU 2026-05-15 5:08 ` [PATCH RFC v6 1/7] dt-bindings: display/msm/gmu: Document Adreno 810 GMU Alexander Koskovich @ 2026-05-16 0:05 ` Claude Code Review Bot 0 siblings, 0 replies; 19+ messages in thread From: Claude Code Review Bot @ 2026-05-16 0:05 UTC (permalink / raw) To: dri-devel-reviews Patch Review **Status: Looks good** Straightforward addition of the A810 GMU compatible `qcom,adreno-gmu-810.0` with appropriate register and clock definitions. The clock list (ahb, gmu, cxo, axi, memnoc, hub) with 6 items and single GMU register region is consistent with the DTS in patch 7. Notably, this drops DEMET from the clock list compared to other A8XX GMU definitions, which is called out in the v3 changelog. Already has `Reviewed-by: Krzysztof Kozlowski`. No issues. --- Generated by Claude Code Patch Reviewer ^ permalink raw reply [flat|nested] 19+ messages in thread
* [PATCH RFC v6 2/7] dt-bindings: display/msm/gpu: Document Adreno 810 GPU 2026-05-15 5:08 [PATCH RFC v6 0/7] Add support for Adreno 810 GPU Alexander Koskovich 2026-05-15 5:08 ` [PATCH RFC v6 1/7] dt-bindings: display/msm/gmu: Document Adreno 810 GMU Alexander Koskovich @ 2026-05-15 5:08 ` Alexander Koskovich 2026-05-16 0:05 ` Claude review: " Claude Code Review Bot 2026-05-15 5:08 ` [PATCH RFC v6 3/7] drm/msm/adreno: rename llc_mmio to cx_misc_mmio Alexander Koskovich ` (6 subsequent siblings) 8 siblings, 1 reply; 19+ messages in thread From: Alexander Koskovich @ 2026-05-15 5:08 UTC (permalink / raw) To: Rob Clark, Dmitry Baryshkov, Abhinav Kumar, Jessica Zhang, Sean Paul, Marijn Suijten, David Airlie, Simona Vetter, Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, Rob Herring, Krzysztof Kozlowski, Conor Dooley, Konrad Dybcio, Akhil P Oommen, Bjorn Andersson Cc: Luca Weiss, linux-arm-msm, dri-devel, freedreno, devicetree, linux-kernel, Alexander Koskovich Document the GPU compatible string used for the Adreno 810. Signed-off-by: Alexander Koskovich <akoskovich@pm.me> --- Documentation/devicetree/bindings/display/msm/gpu.yaml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Documentation/devicetree/bindings/display/msm/gpu.yaml b/Documentation/devicetree/bindings/display/msm/gpu.yaml index e67cd708dda2..1ee2f1d57f12 100644 --- a/Documentation/devicetree/bindings/display/msm/gpu.yaml +++ b/Documentation/devicetree/bindings/display/msm/gpu.yaml @@ -415,7 +415,9 @@ allOf: properties: compatible: contains: - const: qcom,adreno-44070001 + enum: + - qcom,adreno-44010000 + - qcom,adreno-44070001 then: properties: reg: @@ -450,6 +452,7 @@ allOf: - qcom,adreno-43050a01 - qcom,adreno-43050c01 - qcom,adreno-43051401 + - qcom,adreno-44010000 - qcom,adreno-44070001 then: # Starting with A6xx, the clocks are usually defined in the GMU node -- 2.53.0 ^ permalink raw reply related [flat|nested] 19+ messages in thread
* Claude review: dt-bindings: display/msm/gpu: Document Adreno 810 GPU 2026-05-15 5:08 ` [PATCH RFC v6 2/7] dt-bindings: display/msm/gpu: Document Adreno 810 GPU Alexander Koskovich @ 2026-05-16 0:05 ` Claude Code Review Bot 0 siblings, 0 replies; 19+ messages in thread From: Claude Code Review Bot @ 2026-05-16 0:05 UTC (permalink / raw) To: dri-devel-reviews Patch Review **Status: Looks good** Adds the `qcom,adreno-44010000` compatible string in two places: 1. Shares the register layout constraint block with `qcom,adreno-44070001` (X285) by converting from `const` to `enum`: ``` - const: qcom,adreno-44070001 + enum: + - qcom,adreno-44010000 + - qcom,adreno-44070001 ``` 2. Adds the compatible to the list of GPUs whose clocks are defined in the GMU node. Both additions are correct. The register layout sharing with X285 is consistent with the DTS in patch 7 which uses the same reg-names (`kgsl_3d0_reg_memory`, `cx_mem`). --- Generated by Claude Code Patch Reviewer ^ permalink raw reply [flat|nested] 19+ messages in thread
* [PATCH RFC v6 3/7] drm/msm/adreno: rename llc_mmio to cx_misc_mmio 2026-05-15 5:08 [PATCH RFC v6 0/7] Add support for Adreno 810 GPU Alexander Koskovich 2026-05-15 5:08 ` [PATCH RFC v6 1/7] dt-bindings: display/msm/gmu: Document Adreno 810 GMU Alexander Koskovich 2026-05-15 5:08 ` [PATCH RFC v6 2/7] dt-bindings: display/msm/gpu: Document Adreno 810 GPU Alexander Koskovich @ 2026-05-15 5:08 ` Alexander Koskovich 2026-05-16 0:05 ` Claude review: " Claude Code Review Bot 2026-05-15 5:08 ` [PATCH RFC v6 4/7] drm/msm/adreno: set cx_misc_mmio regardless of if platform has LLCC Alexander Koskovich ` (5 subsequent siblings) 8 siblings, 1 reply; 19+ messages in thread From: Alexander Koskovich @ 2026-05-15 5:08 UTC (permalink / raw) To: Rob Clark, Dmitry Baryshkov, Abhinav Kumar, Jessica Zhang, Sean Paul, Marijn Suijten, David Airlie, Simona Vetter, Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, Rob Herring, Krzysztof Kozlowski, Conor Dooley, Konrad Dybcio, Akhil P Oommen, Bjorn Andersson Cc: Luca Weiss, linux-arm-msm, dri-devel, freedreno, devicetree, linux-kernel, Alexander Koskovich, Konrad Dybcio This region is used for more than just LLCC, it also provides access to software fuse values (raytracing, etc). Rename relevant symbols from _llc to _cx_misc for use in a follow up change that decouples this from LLCC. Reviewed-by: Akhil P Oommen <akhilpo@oss.qualcomm.com> Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com> Signed-off-by: Alexander Koskovich <akoskovich@pm.me> --- drivers/gpu/drm/msm/adreno/a6xx_gmu.c | 8 ++++---- drivers/gpu/drm/msm/adreno/a6xx_gpu.c | 16 ++++++++-------- drivers/gpu/drm/msm/adreno/a6xx_gpu.h | 14 +++++++------- drivers/gpu/drm/msm/adreno/a8xx_gpu.c | 2 +- 4 files changed, 20 insertions(+), 20 deletions(-) diff --git a/drivers/gpu/drm/msm/adreno/a6xx_gmu.c b/drivers/gpu/drm/msm/adreno/a6xx_gmu.c index 616198a836a4..515656ec06bb 100644 --- a/drivers/gpu/drm/msm/adreno/a6xx_gmu.c +++ b/drivers/gpu/drm/msm/adreno/a6xx_gmu.c @@ -947,7 +947,7 @@ static int a6xx_gmu_fw_start(struct a6xx_gmu *gmu, unsigned int state) /* Turn on TCM (Tightly Coupled Memory) retention */ if (adreno_is_a7xx(adreno_gpu)) - a6xx_llc_write(a6xx_gpu, REG_A7XX_CX_MISC_TCM_RET_CNTL, 1); + a6xx_cx_misc_write(a6xx_gpu, REG_A7XX_CX_MISC_TCM_RET_CNTL, 1); else if (!adreno_is_a8xx(adreno_gpu)) gmu_write(gmu, REG_A6XX_GMU_GENERAL_7, 1); @@ -1215,7 +1215,7 @@ static int a6xx_gmu_secure_init(struct a6xx_gpu *a6xx_gpu) if (!qcom_scm_is_available()) { dev_warn_once(gpu->dev->dev, "SCM is not available, poking fuse register\n"); - a6xx_llc_write(a6xx_gpu, REG_A7XX_CX_MISC_SW_FUSE_VALUE, + a6xx_cx_misc_write(a6xx_gpu, REG_A7XX_CX_MISC_SW_FUSE_VALUE, A7XX_CX_MISC_SW_FUSE_VALUE_RAYTRACING | A7XX_CX_MISC_SW_FUSE_VALUE_FASTBLEND | A7XX_CX_MISC_SW_FUSE_VALUE_LPAC); @@ -1236,7 +1236,7 @@ static int a6xx_gmu_secure_init(struct a6xx_gpu *a6xx_gpu) * firmware, find out whether that's the case. The scm call * above sets the fuse register. */ - fuse_val = a6xx_llc_read(a6xx_gpu, + fuse_val = a6xx_cx_misc_read(a6xx_gpu, REG_A7XX_CX_MISC_SW_FUSE_VALUE); adreno_gpu->has_ray_tracing = !!(fuse_val & A7XX_CX_MISC_SW_FUSE_VALUE_RAYTRACING); @@ -1343,7 +1343,7 @@ int a6xx_gmu_resume(struct a6xx_gpu *a6xx_gpu) /* Check to see if we are doing a cold or warm boot */ if (adreno_is_a7xx(adreno_gpu) || adreno_is_a8xx(adreno_gpu)) { - status = a6xx_llc_read(a6xx_gpu, REG_A7XX_CX_MISC_TCM_RET_CNTL) == 1 ? + status = a6xx_cx_misc_read(a6xx_gpu, REG_A7XX_CX_MISC_TCM_RET_CNTL) == 1 ? GMU_WARM_BOOT : GMU_COLD_BOOT; } else if (gmu->legacy) { status = gmu_read(gmu, REG_A6XX_GMU_GENERAL_7) == 1 ? diff --git a/drivers/gpu/drm/msm/adreno/a6xx_gpu.c b/drivers/gpu/drm/msm/adreno/a6xx_gpu.c index d5aba072f44c..4275c1d726b2 100644 --- a/drivers/gpu/drm/msm/adreno/a6xx_gpu.c +++ b/drivers/gpu/drm/msm/adreno/a6xx_gpu.c @@ -2039,7 +2039,7 @@ static void a6xx_llc_activate(struct a6xx_gpu *a6xx_gpu) struct msm_gpu *gpu = &adreno_gpu->base; u32 cntl1_regval = 0; - if (IS_ERR(a6xx_gpu->llc_mmio)) + if (IS_ERR(a6xx_gpu->cx_misc_mmio)) return; if (!llcc_slice_activate(a6xx_gpu->llc_slice)) { @@ -2078,14 +2078,14 @@ static void a6xx_llc_activate(struct a6xx_gpu *a6xx_gpu) * pagetables */ if (!a6xx_gpu->have_mmu500) { - a6xx_llc_write(a6xx_gpu, + a6xx_cx_misc_write(a6xx_gpu, REG_A6XX_CX_MISC_SYSTEM_CACHE_CNTL_1, cntl1_regval); /* * Program cacheability overrides to not allocate cache * lines on a write miss */ - a6xx_llc_rmw(a6xx_gpu, + a6xx_cx_misc_rmw(a6xx_gpu, REG_A6XX_CX_MISC_SYSTEM_CACHE_CNTL_0, 0xF, 0x03); return; } @@ -2098,7 +2098,7 @@ static void a7xx_llc_activate(struct a6xx_gpu *a6xx_gpu) struct adreno_gpu *adreno_gpu = &a6xx_gpu->base; struct msm_gpu *gpu = &adreno_gpu->base; - if (IS_ERR(a6xx_gpu->llc_mmio)) + if (IS_ERR(a6xx_gpu->cx_misc_mmio)) return; if (!llcc_slice_activate(a6xx_gpu->llc_slice)) { @@ -2151,15 +2151,15 @@ static void a6xx_llc_slices_init(struct platform_device *pdev, of_node_put(phandle); if (is_a7xx || !a6xx_gpu->have_mmu500) - a6xx_gpu->llc_mmio = msm_ioremap(pdev, "cx_mem"); + a6xx_gpu->cx_misc_mmio = msm_ioremap(pdev, "cx_mem"); else - a6xx_gpu->llc_mmio = NULL; + a6xx_gpu->cx_misc_mmio = NULL; a6xx_gpu->llc_slice = llcc_slice_getd(LLCC_GPU); a6xx_gpu->htw_llc_slice = llcc_slice_getd(LLCC_GPUHTW); if (IS_ERR_OR_NULL(a6xx_gpu->llc_slice) && IS_ERR_OR_NULL(a6xx_gpu->htw_llc_slice)) - a6xx_gpu->llc_mmio = ERR_PTR(-EINVAL); + a6xx_gpu->cx_misc_mmio = ERR_PTR(-EINVAL); } #define GBIF_CLIENT_HALT_MASK BIT(0) @@ -2560,7 +2560,7 @@ static int a6xx_read_speedbin(struct device *dev, struct a6xx_gpu *a6xx_gpu, return ret; if (info->quirks & ADRENO_QUIRK_SOFTFUSE) { - *speedbin = a6xx_llc_read(a6xx_gpu, REG_A8XX_CX_MISC_SW_FUSE_FREQ_LIMIT_STATUS); + *speedbin = a6xx_cx_misc_read(a6xx_gpu, REG_A8XX_CX_MISC_SW_FUSE_FREQ_LIMIT_STATUS); *speedbin = A8XX_CX_MISC_SW_FUSE_FREQ_LIMIT_STATUS_FINALFREQLIMIT(*speedbin); return 0; } diff --git a/drivers/gpu/drm/msm/adreno/a6xx_gpu.h b/drivers/gpu/drm/msm/adreno/a6xx_gpu.h index eb431e5e00b1..648608c1c98e 100644 --- a/drivers/gpu/drm/msm/adreno/a6xx_gpu.h +++ b/drivers/gpu/drm/msm/adreno/a6xx_gpu.h @@ -102,7 +102,7 @@ struct a6xx_gpu { bool has_whereami; - void __iomem *llc_mmio; + void __iomem *cx_misc_mmio; void *llc_slice; void *htw_llc_slice; bool have_mmu500; @@ -240,19 +240,19 @@ static inline bool a6xx_has_gbif(struct adreno_gpu *gpu) return true; } -static inline void a6xx_llc_rmw(struct a6xx_gpu *a6xx_gpu, u32 reg, u32 mask, u32 or) +static inline void a6xx_cx_misc_rmw(struct a6xx_gpu *a6xx_gpu, u32 reg, u32 mask, u32 or) { - return msm_rmw(a6xx_gpu->llc_mmio + (reg << 2), mask, or); + return msm_rmw(a6xx_gpu->cx_misc_mmio + (reg << 2), mask, or); } -static inline u32 a6xx_llc_read(struct a6xx_gpu *a6xx_gpu, u32 reg) +static inline u32 a6xx_cx_misc_read(struct a6xx_gpu *a6xx_gpu, u32 reg) { - return readl(a6xx_gpu->llc_mmio + (reg << 2)); + return readl(a6xx_gpu->cx_misc_mmio + (reg << 2)); } -static inline void a6xx_llc_write(struct a6xx_gpu *a6xx_gpu, u32 reg, u32 value) +static inline void a6xx_cx_misc_write(struct a6xx_gpu *a6xx_gpu, u32 reg, u32 value) { - writel(value, a6xx_gpu->llc_mmio + (reg << 2)); + writel(value, a6xx_gpu->cx_misc_mmio + (reg << 2)); } #define shadowptr(_a6xx_gpu, _ring) ((_a6xx_gpu)->shadow_iova + \ diff --git a/drivers/gpu/drm/msm/adreno/a8xx_gpu.c b/drivers/gpu/drm/msm/adreno/a8xx_gpu.c index 9b99ec5ceeb5..d519a29573a1 100644 --- a/drivers/gpu/drm/msm/adreno/a8xx_gpu.c +++ b/drivers/gpu/drm/msm/adreno/a8xx_gpu.c @@ -104,7 +104,7 @@ void a8xx_gpu_get_slice_info(struct msm_gpu *gpu) return; } - slice_mask &= a6xx_llc_read(a6xx_gpu, + slice_mask &= a6xx_cx_misc_read(a6xx_gpu, REG_A8XX_CX_MISC_SLICE_ENABLE_FINAL); a6xx_gpu->slice_mask = slice_mask; -- 2.53.0 ^ permalink raw reply related [flat|nested] 19+ messages in thread
* Claude review: drm/msm/adreno: rename llc_mmio to cx_misc_mmio 2026-05-15 5:08 ` [PATCH RFC v6 3/7] drm/msm/adreno: rename llc_mmio to cx_misc_mmio Alexander Koskovich @ 2026-05-16 0:05 ` Claude Code Review Bot 0 siblings, 0 replies; 19+ messages in thread From: Claude Code Review Bot @ 2026-05-16 0:05 UTC (permalink / raw) To: dri-devel-reviews Patch Review **Status: Looks good** Purely mechanical rename: `llc_mmio` → `cx_misc_mmio`, `a6xx_llc_read/write/rmw` → `a6xx_cx_misc_read/write/rmw`. The rename is well-motivated — this region provides access to software fuse values and other CX_MISC registers, not just LLC configuration. The rename is complete across all files (a6xx_gmu.c, a6xx_gpu.c, a6xx_gpu.h, a8xx_gpu.c). Has reviews from both Akhil P Oommen and Konrad Dybcio. --- Generated by Claude Code Patch Reviewer ^ permalink raw reply [flat|nested] 19+ messages in thread
* [PATCH RFC v6 4/7] drm/msm/adreno: set cx_misc_mmio regardless of if platform has LLCC 2026-05-15 5:08 [PATCH RFC v6 0/7] Add support for Adreno 810 GPU Alexander Koskovich ` (2 preceding siblings ...) 2026-05-15 5:08 ` [PATCH RFC v6 3/7] drm/msm/adreno: rename llc_mmio to cx_misc_mmio Alexander Koskovich @ 2026-05-15 5:08 ` Alexander Koskovich 2026-05-16 0:05 ` Claude review: " Claude Code Review Bot 2026-05-15 5:09 ` [PATCH RFC v6 5/7] drm/msm/a8xx: use pipe protect slot 15 for last-span-unbound feature Alexander Koskovich ` (4 subsequent siblings) 8 siblings, 1 reply; 19+ messages in thread From: Alexander Koskovich @ 2026-05-15 5:08 UTC (permalink / raw) To: Rob Clark, Dmitry Baryshkov, Abhinav Kumar, Jessica Zhang, Sean Paul, Marijn Suijten, David Airlie, Simona Vetter, Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, Rob Herring, Krzysztof Kozlowski, Conor Dooley, Konrad Dybcio, Akhil P Oommen, Bjorn Andersson Cc: Luca Weiss, linux-arm-msm, dri-devel, freedreno, devicetree, linux-kernel, Alexander Koskovich, Konrad Dybcio Platforms without a LLCC (e.g. milos) still need to be able to read and write to the cx_mem region. Previously if LLCC slices were unavailable the cx_misc_mmio mapping was overwritten with ERR_PTR, causing a crash when the GMU later accessed cx_mem. Move the cx_misc_mmio mapping out of a6xx_llc_slices_init() into a6xx_gpu_init() so that cx_mem mapping is independent of LLCC. Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com> Reviewed-by: Akhil P Oommen <akhilpo@oss.qualcomm.com> Signed-off-by: Alexander Koskovich <akoskovich@pm.me> --- drivers/gpu/drm/msm/adreno/a6xx_gpu.c | 38 ++++++++++++++++------------------- 1 file changed, 17 insertions(+), 21 deletions(-) diff --git a/drivers/gpu/drm/msm/adreno/a6xx_gpu.c b/drivers/gpu/drm/msm/adreno/a6xx_gpu.c index 4275c1d726b2..533272e11111 100644 --- a/drivers/gpu/drm/msm/adreno/a6xx_gpu.c +++ b/drivers/gpu/drm/msm/adreno/a6xx_gpu.c @@ -2039,7 +2039,7 @@ static void a6xx_llc_activate(struct a6xx_gpu *a6xx_gpu) struct msm_gpu *gpu = &adreno_gpu->base; u32 cntl1_regval = 0; - if (IS_ERR(a6xx_gpu->cx_misc_mmio)) + if (IS_ERR_OR_NULL(a6xx_gpu->llc_slice) && IS_ERR_OR_NULL(a6xx_gpu->htw_llc_slice)) return; if (!llcc_slice_activate(a6xx_gpu->llc_slice)) { @@ -2098,7 +2098,7 @@ static void a7xx_llc_activate(struct a6xx_gpu *a6xx_gpu) struct adreno_gpu *adreno_gpu = &a6xx_gpu->base; struct msm_gpu *gpu = &adreno_gpu->base; - if (IS_ERR(a6xx_gpu->cx_misc_mmio)) + if (IS_ERR_OR_NULL(a6xx_gpu->llc_slice) && IS_ERR_OR_NULL(a6xx_gpu->htw_llc_slice)) return; if (!llcc_slice_activate(a6xx_gpu->llc_slice)) { @@ -2135,31 +2135,12 @@ static void a6xx_llc_slices_destroy(struct a6xx_gpu *a6xx_gpu) static void a6xx_llc_slices_init(struct platform_device *pdev, struct a6xx_gpu *a6xx_gpu, bool is_a7xx) { - struct device_node *phandle; - /* No LLCC on non-RPMh (and by extension, non-GMU) SoCs */ if (adreno_has_gmu_wrapper(&a6xx_gpu->base)) return; - /* - * There is a different programming path for A6xx targets with an - * mmu500 attached, so detect if that is the case - */ - phandle = of_parse_phandle(pdev->dev.of_node, "iommus", 0); - a6xx_gpu->have_mmu500 = (phandle && - of_device_is_compatible(phandle, "arm,mmu-500")); - of_node_put(phandle); - - if (is_a7xx || !a6xx_gpu->have_mmu500) - a6xx_gpu->cx_misc_mmio = msm_ioremap(pdev, "cx_mem"); - else - a6xx_gpu->cx_misc_mmio = NULL; - a6xx_gpu->llc_slice = llcc_slice_getd(LLCC_GPU); a6xx_gpu->htw_llc_slice = llcc_slice_getd(LLCC_GPUHTW); - - if (IS_ERR_OR_NULL(a6xx_gpu->llc_slice) && IS_ERR_OR_NULL(a6xx_gpu->htw_llc_slice)) - a6xx_gpu->cx_misc_mmio = ERR_PTR(-EINVAL); } #define GBIF_CLIENT_HALT_MASK BIT(0) @@ -2621,6 +2602,7 @@ static struct msm_gpu *a6xx_gpu_init(struct drm_device *dev) struct platform_device *pdev = priv->gpu_pdev; struct adreno_platform_config *config = pdev->dev.platform_data; const struct adreno_info *info = config->info; + struct device_node *phandle; struct device_node *node; struct a6xx_gpu *a6xx_gpu; struct adreno_gpu *adreno_gpu; @@ -2657,6 +2639,20 @@ static struct msm_gpu *a6xx_gpu_init(struct drm_device *dev) a6xx_llc_slices_init(pdev, a6xx_gpu, is_a7xx); + /* + * There is a different programming path for A6xx targets with an + * mmu500 attached, so detect if that is the case + */ + phandle = of_parse_phandle(pdev->dev.of_node, "iommus", 0); + a6xx_gpu->have_mmu500 = (phandle && + of_device_is_compatible(phandle, "arm,mmu-500")); + of_node_put(phandle); + + if (is_a7xx || !a6xx_gpu->have_mmu500) + a6xx_gpu->cx_misc_mmio = msm_ioremap(pdev, "cx_mem"); + else + a6xx_gpu->cx_misc_mmio = NULL; + ret = a6xx_set_supported_hw(&pdev->dev, a6xx_gpu, info); if (ret) { a6xx_llc_slices_destroy(a6xx_gpu); -- 2.53.0 ^ permalink raw reply related [flat|nested] 19+ messages in thread
* Claude review: drm/msm/adreno: set cx_misc_mmio regardless of if platform has LLCC 2026-05-15 5:08 ` [PATCH RFC v6 4/7] drm/msm/adreno: set cx_misc_mmio regardless of if platform has LLCC Alexander Koskovich @ 2026-05-16 0:05 ` Claude Code Review Bot 0 siblings, 0 replies; 19+ messages in thread From: Claude Code Review Bot @ 2026-05-16 0:05 UTC (permalink / raw) To: dri-devel-reviews Patch Review **Status: Mostly good, one concern** This patch decouples `cx_misc_mmio` mapping from LLCC slice availability. The motivation is clear: Milos has no LLCC but still needs to access `cx_mem` for fuse reads, TCM retention control, etc. Previously, if LLCC slices were unavailable, `cx_misc_mmio` was overwritten with `ERR_PTR(-EINVAL)`. The approach is to: 1. Move MMU500 detection and `cx_misc_mmio` mapping from `a6xx_llc_slices_init()` into `a6xx_gpu_init()` 2. Change the early-return guard in `a6xx_llc_activate()` and `a7xx_llc_activate()` from checking `cx_misc_mmio` to checking both LLC slices directly **Concern**: After this patch, if `cx_misc_mmio` mapping fails (msm_ioremap returns ERR_PTR) but LLCC slices succeed, the LLC activate functions would proceed to dereference an invalid `cx_misc_mmio` pointer via `a6xx_cx_misc_write()`/`a6xx_cx_misc_rmw()`. In practice this is unlikely (a platform with LLCC would have cx_mem), but the original code was more defensive by using `cx_misc_mmio` validity as the gatekeeper. Consider adding a check for `IS_ERR_OR_NULL(a6xx_gpu->cx_misc_mmio)` in the activate paths, or at least in `a6xx_gpu_init()` after the mapping. --- Generated by Claude Code Patch Reviewer ^ permalink raw reply [flat|nested] 19+ messages in thread
* [PATCH RFC v6 5/7] drm/msm/a8xx: use pipe protect slot 15 for last-span-unbound feature 2026-05-15 5:08 [PATCH RFC v6 0/7] Add support for Adreno 810 GPU Alexander Koskovich ` (3 preceding siblings ...) 2026-05-15 5:08 ` [PATCH RFC v6 4/7] drm/msm/adreno: set cx_misc_mmio regardless of if platform has LLCC Alexander Koskovich @ 2026-05-15 5:09 ` Alexander Koskovich 2026-05-16 0:05 ` Claude review: " Claude Code Review Bot 2026-05-15 5:09 ` [PATCH RFC v6 6/7] drm/msm/adreno: add Adreno 810 GPU support Alexander Koskovich ` (3 subsequent siblings) 8 siblings, 1 reply; 19+ messages in thread From: Alexander Koskovich @ 2026-05-15 5:09 UTC (permalink / raw) To: Rob Clark, Dmitry Baryshkov, Abhinav Kumar, Jessica Zhang, Sean Paul, Marijn Suijten, David Airlie, Simona Vetter, Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, Rob Herring, Krzysztof Kozlowski, Conor Dooley, Konrad Dybcio, Akhil P Oommen, Bjorn Andersson Cc: Luca Weiss, linux-arm-msm, dri-devel, freedreno, devicetree, linux-kernel, Alexander Koskovich, Konrad Dybcio A8XX GPUs have two sets of protect registers: 64 global slots and 16 pipe specific slots. The last-span-unbound feature is only available on pipe protect registers, and should always target pipe slot 15. This matches the downstream driver which hardcodes pipe slot 15 for all A8XX GPUs (GRAPHICS.LA.15.0.r1) and resolves protect errors on A810. Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com> Reviewed-by: Akhil P Oommen <akhilpo@oss.qualcomm.com> Signed-off-by: Alexander Koskovich <akoskovich@pm.me> --- drivers/gpu/drm/msm/adreno/a8xx_gpu.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/msm/adreno/a8xx_gpu.c b/drivers/gpu/drm/msm/adreno/a8xx_gpu.c index d519a29573a1..74802f330ae9 100644 --- a/drivers/gpu/drm/msm/adreno/a8xx_gpu.c +++ b/drivers/gpu/drm/msm/adreno/a8xx_gpu.c @@ -265,8 +265,8 @@ static void a8xx_set_cp_protect(struct msm_gpu *gpu) * Last span feature is only supported on PIPE specific register. * So update those here */ - a8xx_write_pipe(gpu, PIPE_BR, REG_A8XX_CP_PROTECT_PIPE(protect->count_max), final_cfg); - a8xx_write_pipe(gpu, PIPE_BV, REG_A8XX_CP_PROTECT_PIPE(protect->count_max), final_cfg); + a8xx_write_pipe(gpu, PIPE_BR, REG_A8XX_CP_PROTECT_PIPE(15), final_cfg); + a8xx_write_pipe(gpu, PIPE_BV, REG_A8XX_CP_PROTECT_PIPE(15), final_cfg); a8xx_aperture_clear(gpu); } -- 2.53.0 ^ permalink raw reply related [flat|nested] 19+ messages in thread
* Claude review: drm/msm/a8xx: use pipe protect slot 15 for last-span-unbound feature 2026-05-15 5:09 ` [PATCH RFC v6 5/7] drm/msm/a8xx: use pipe protect slot 15 for last-span-unbound feature Alexander Koskovich @ 2026-05-16 0:05 ` Claude Code Review Bot 0 siblings, 0 replies; 19+ messages in thread From: Claude Code Review Bot @ 2026-05-16 0:05 UTC (permalink / raw) To: dri-devel-reviews Patch Review **Status: Correct fix, but exposes a pre-existing design issue** The change from `protect->count_max` to hardcoded `15`: ```c - a8xx_write_pipe(gpu, PIPE_BR, REG_A8XX_CP_PROTECT_PIPE(protect->count_max), final_cfg); + a8xx_write_pipe(gpu, PIPE_BR, REG_A8XX_CP_PROTECT_PIPE(15), final_cfg); ``` This is necessary because A810 sets `count_max=64` (for its 64 global protect slots), but pipe protect registers only have 16 slots (0-15). The existing X285/A840 coincidentally worked because their `count_max=15` happened to be the correct pipe slot. **Observation**: After this patch, `count_max` for X285 (15) and A840 (15) is technically wrong — they have 52+ global protect entries but `count_max=15`, which would fail a `BUILD_BUG_ON(count > count_max)` check if one were added. The reason it works is that `__build_asserts()` only checks a660/a690/a730 protect tables, not X285/A840. Consider updating X285 and A840 to `count_max=64` as well for consistency, since the field now only serves the BUILD_BUG_ON purpose. The fix itself is correct and matches the downstream driver behavior per the commit message. --- Generated by Claude Code Patch Reviewer ^ permalink raw reply [flat|nested] 19+ messages in thread
* [PATCH RFC v6 6/7] drm/msm/adreno: add Adreno 810 GPU support 2026-05-15 5:08 [PATCH RFC v6 0/7] Add support for Adreno 810 GPU Alexander Koskovich ` (4 preceding siblings ...) 2026-05-15 5:09 ` [PATCH RFC v6 5/7] drm/msm/a8xx: use pipe protect slot 15 for last-span-unbound feature Alexander Koskovich @ 2026-05-15 5:09 ` Alexander Koskovich 2026-05-16 0:05 ` Claude review: " Claude Code Review Bot 2026-05-15 5:09 ` [PATCH RFC v6 7/7] arm64: dts: qcom: milos: Add Adreno 810 GPU and GMU nodes Alexander Koskovich ` (2 subsequent siblings) 8 siblings, 1 reply; 19+ messages in thread From: Alexander Koskovich @ 2026-05-15 5:09 UTC (permalink / raw) To: Rob Clark, Dmitry Baryshkov, Abhinav Kumar, Jessica Zhang, Sean Paul, Marijn Suijten, David Airlie, Simona Vetter, Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, Rob Herring, Krzysztof Kozlowski, Conor Dooley, Konrad Dybcio, Akhil P Oommen, Bjorn Andersson Cc: Luca Weiss, linux-arm-msm, dri-devel, freedreno, devicetree, linux-kernel, Alexander Koskovich Add catalog entry and register configuration for the Adreno 810 found in Qualcomm SM7635 (Milos) based devices. Signed-off-by: Alexander Koskovich <akoskovich@pm.me> --- drivers/gpu/drm/msm/adreno/a6xx_catalog.c | 298 ++++++++++++++++++++++++++++++ drivers/gpu/drm/msm/adreno/adreno_gpu.h | 5 + 2 files changed, 303 insertions(+) diff --git a/drivers/gpu/drm/msm/adreno/a6xx_catalog.c b/drivers/gpu/drm/msm/adreno/a6xx_catalog.c index 550ff3a9b82e..3e6f409d13a2 100644 --- a/drivers/gpu/drm/msm/adreno/a6xx_catalog.c +++ b/drivers/gpu/drm/msm/adreno/a6xx_catalog.c @@ -1799,6 +1799,261 @@ static const struct adreno_reglist_pipe x285_dyn_pwrup_reglist_regs[] = { }; DECLARE_ADRENO_REGLIST_PIPE_LIST(x285_dyn_pwrup_reglist); +static const struct adreno_reglist_pipe a810_nonctxt_regs[] = { + { REG_A8XX_CP_SMMU_STREAM_ID_LPAC, 0x00000101, BIT(PIPE_NONE) }, + { REG_A8XX_GRAS_DBG_ECO_CNTL, 0x00f80800, BIT(PIPE_BV) | BIT(PIPE_BR) }, + { REG_A6XX_PC_AUTO_VERTEX_STRIDE, 0x00000001, BIT(PIPE_BV) | BIT(PIPE_BR) }, + { REG_A8XX_PC_VIS_STREAM_CNTL, 0x10010000, BIT(PIPE_BV) | BIT(PIPE_BR) }, + { REG_A8XX_PC_CONTEXT_SWITCH_STABILIZE_CNTL_1, 0x00000002, BIT(PIPE_BV) | BIT(PIPE_BR) }, + { REG_A8XX_PC_CHICKEN_BITS_1, 0x00000003, BIT(PIPE_BR) }, + { REG_A8XX_PC_CHICKEN_BITS_1, 0x00000023, BIT(PIPE_BV) }, /* Avoid partial waves at VFD */ + { REG_A8XX_PC_CHICKEN_BITS_2, 0x00000200, BIT(PIPE_BV) | BIT(PIPE_BR) }, + { REG_A8XX_PC_CHICKEN_BITS_3, 0x00500000, BIT(PIPE_BV) | BIT(PIPE_BR) }, + { REG_A8XX_PC_CHICKEN_BITS_4, 0x00500050, BIT(PIPE_BV) | BIT(PIPE_BR) }, + { REG_A7XX_RB_CCU_CNTL, 0x00000068, BIT(PIPE_BR) }, + /* Partially enable perf clear, Disable DINT to c/z be data forwarding */ + { REG_A7XX_RB_CCU_DBG_ECO_CNTL, 0x00002200, BIT(PIPE_BR) }, + { REG_A8XX_RB_RESOLVE_PREFETCH_CNTL, 0x00000007, BIT(PIPE_BR) }, + { REG_A8XX_RB_CMP_DBG_ECO_CNTL, 0x00004000, BIT(PIPE_BR) }, + { REG_A8XX_RBBM_NC_MODE_CNTL, 0x00000001, BIT(PIPE_NONE) }, + { REG_A8XX_RBBM_SLICE_NC_MODE_CNTL, 0x00000001, BIT(PIPE_NONE) }, + { REG_A8XX_RBBM_WAIT_IDLE_CLOCKS_CNTL, 0x00000030, BIT(PIPE_NONE) }, + { REG_A8XX_RBBM_WAIT_IDLE_CLOCKS_CNTL2, 0x00000030, BIT(PIPE_NONE) }, + { REG_A8XX_UCHE_GBIF_GX_CONFIG, 0x010240e0, BIT(PIPE_NONE) }, + { REG_A8XX_RBBM_GBIF_CLIENT_QOS_CNTL, 0x22122212, BIT(PIPE_NONE) }, + { REG_A8XX_RBBM_CGC_P2S_CNTL, 0x00000040, BIT(PIPE_NONE) }, + /* + * BIT(22): Disable PS out of order retire + * BIT(23): Enable half wave mode and MM instruction src&dst is half precision + */ + { REG_A7XX_SP_CHICKEN_BITS_2, BIT(22) | BIT(23), BIT(PIPE_NONE) }, + { REG_A7XX_SP_CHICKEN_BITS_3, 0x00300000, BIT(PIPE_NONE) }, + { REG_A6XX_SP_PERFCTR_SHADER_MASK, 0x0000003f, BIT(PIPE_NONE) }, + { REG_A7XX_SP_HLSQ_TIMEOUT_THRESHOLD_DP, 0x00000080, BIT(PIPE_NONE) }, + { REG_A6XX_TPL1_DBG_ECO_CNTL, 0x10100000, BIT(PIPE_NONE) }, + { REG_A6XX_TPL1_DBG_ECO_CNTL1, 0x04000724, BIT(PIPE_NONE) }, + { REG_A6XX_UCHE_MODE_CNTL, 0x00020000, BIT(PIPE_NONE) }, + { REG_A8XX_UCHE_CCHE_MODE_CNTL, 0x00001000, BIT(PIPE_NONE) }, + { REG_A8XX_UCHE_CCHE_CACHE_WAYS, 0x00000800, BIT(PIPE_NONE) }, + /* Disable write slow pointer in data phase queue */ + { REG_A8XX_UCHE_HW_DBG_CNTL, BIT(8), BIT(PIPE_NONE) }, + { REG_A8XX_UCHE_VARB_IDLE_TIMEOUT, 0x00000020, BIT(PIPE_NONE) }, + { REG_A7XX_VFD_DBG_ECO_CNTL, 0x00008000, BIT(PIPE_BV) | BIT(PIPE_BR) }, + { REG_A8XX_VFD_CB_BV_THRESHOLD, 0x00500050, BIT(PIPE_BV) | BIT(PIPE_BR) }, + { REG_A8XX_VFD_CB_BR_THRESHOLD, 0x00600060, BIT(PIPE_BV) | BIT(PIPE_BR) }, + { REG_A8XX_VFD_CB_BUSY_REQ_CNT, 0x00200020, BIT(PIPE_BV) | BIT(PIPE_BR) }, + { REG_A8XX_VFD_CB_LP_REQ_CNT, 0x00100020, BIT(PIPE_BV) | BIT(PIPE_BR) }, + { REG_A8XX_VPC_FLATSHADE_MODE_CNTL, 0x00000001, BIT(PIPE_BV) | BIT(PIPE_BR) }, + { REG_A8XX_RB_GC_GMEM_PROTECT, 0x00900000, BIT(PIPE_BR) }, + { }, +}; + +static const u32 a810_protect_regs[] = { + A6XX_PROTECT_RDONLY(0x00000, 0x03a3), + A6XX_PROTECT_RDONLY(0x003b4, 0x008b), + A6XX_PROTECT_NORDWR(0x00440, 0x001f), + A6XX_PROTECT_RDONLY(0x00580, 0x005f), + A6XX_PROTECT_NORDWR(0x005e0, 0x011f), + A6XX_PROTECT_RDONLY(0x0074a, 0x0005), + A6XX_PROTECT_RDONLY(0x00759, 0x0026), + A6XX_PROTECT_RDONLY(0x00789, 0x0000), + A6XX_PROTECT_RDONLY(0x0078c, 0x0013), + A6XX_PROTECT_NORDWR(0x00800, 0x0029), + A6XX_PROTECT_NORDWR(0x00837, 0x00af), + A6XX_PROTECT_RDONLY(0x008e7, 0x00c9), + A6XX_PROTECT_NORDWR(0x008ec, 0x00c3), + A6XX_PROTECT_NORDWR(0x009b1, 0x0250), + A6XX_PROTECT_RDONLY(0x00ce0, 0x0001), + A6XX_PROTECT_RDONLY(0x00df0, 0x0000), + A6XX_PROTECT_NORDWR(0x00df1, 0x0000), + A6XX_PROTECT_NORDWR(0x00e01, 0x0000), + A6XX_PROTECT_NORDWR(0x00e03, 0x1fff), + A6XX_PROTECT_NORDWR(0x03c00, 0x00c5), + A6XX_PROTECT_RDONLY(0x03cc6, 0x1fff), + A6XX_PROTECT_NORDWR(0x08600, 0x01ff), + A6XX_PROTECT_NORDWR(0x08e00, 0x00ff), + A6XX_PROTECT_RDONLY(0x08f00, 0x0000), + A6XX_PROTECT_NORDWR(0x08f01, 0x01be), + A6XX_PROTECT_NORDWR(0x09600, 0x01ff), + A6XX_PROTECT_RDONLY(0x0981a, 0x02e5), + A6XX_PROTECT_NORDWR(0x09e00, 0x01ff), + A6XX_PROTECT_NORDWR(0x0a600, 0x01ff), + A6XX_PROTECT_NORDWR(0x0ae00, 0x0006), + A6XX_PROTECT_NORDWR(0x0ae08, 0x0006), + A6XX_PROTECT_NORDWR(0x0ae10, 0x036f), + A6XX_PROTECT_NORDWR(0x0b600, 0x1fff), + A6XX_PROTECT_NORDWR(0x0dc00, 0x1fff), + A6XX_PROTECT_RDONLY(0x0fc00, 0x1fff), + A6XX_PROTECT_NORDWR(0x18400, 0x003f), + A6XX_PROTECT_RDONLY(0x18440, 0x013f), + A6XX_PROTECT_NORDWR(0x18580, 0x1fff), + A6XX_PROTECT_NORDWR(0x1b400, 0x1fff), + A6XX_PROTECT_NORDWR(0x1f400, 0x0477), + A6XX_PROTECT_RDONLY(0x1f878, 0x0787), + A6XX_PROTECT_NORDWR(0x1f930, 0x0329), + A6XX_PROTECT_NORDWR(0x20000, 0x1fff), + A6XX_PROTECT_NORDWR(0x27800, 0x007f), + A6XX_PROTECT_RDONLY(0x27880, 0x0381), + A6XX_PROTECT_NORDWR(0x27882, 0x0001), + A6XX_PROTECT_NORDWR(0x27c02, 0x0000), +}; +DECLARE_ADRENO_PROTECT(a810_protect, 64); + +static const uint32_t a810_pwrup_reglist_regs[] = { + REG_A6XX_UCHE_MODE_CNTL, + REG_A8XX_UCHE_VARB_IDLE_TIMEOUT, + REG_A8XX_UCHE_GBIF_GX_CONFIG, + REG_A8XX_UCHE_CACHE_WAYS, + REG_A8XX_UCHE_CCHE_MODE_CNTL, + REG_A8XX_UCHE_CCHE_CACHE_WAYS, + REG_A8XX_UCHE_CCHE_GC_GMEM_RANGE_MIN, + REG_A8XX_UCHE_CCHE_GC_GMEM_RANGE_MIN + 1, + REG_A8XX_UCHE_CCHE_TRAP_BASE, + REG_A8XX_UCHE_CCHE_TRAP_BASE + 1, + REG_A8XX_UCHE_CCHE_WRITE_THRU_BASE, + REG_A8XX_UCHE_CCHE_WRITE_THRU_BASE + 1, + REG_A8XX_UCHE_HW_DBG_CNTL, + REG_A8XX_UCHE_WRITE_THRU_BASE, + REG_A8XX_UCHE_WRITE_THRU_BASE + 1, + REG_A8XX_UCHE_TRAP_BASE, + REG_A8XX_UCHE_TRAP_BASE + 1, + REG_A8XX_UCHE_CLIENT_PF, + REG_A8XX_RB_CMP_NC_MODE_CNTL, + REG_A7XX_SP_HLSQ_TIMEOUT_THRESHOLD_DP, + REG_A8XX_SP_HLSQ_GC_GMEM_RANGE_MIN, + REG_A8XX_SP_HLSQ_GC_GMEM_RANGE_MIN + 1, + REG_A7XX_SP_READ_SEL, + REG_A6XX_TPL1_NC_MODE_CNTL, + REG_A6XX_TPL1_DBG_ECO_CNTL, + REG_A6XX_TPL1_DBG_ECO_CNTL1, + REG_A8XX_TPL1_BICUBIC_WEIGHTS_TABLE(1), + REG_A8XX_TPL1_BICUBIC_WEIGHTS_TABLE(2), + REG_A8XX_TPL1_BICUBIC_WEIGHTS_TABLE(3), + REG_A8XX_TPL1_BICUBIC_WEIGHTS_TABLE(4), + REG_A8XX_TPL1_BICUBIC_WEIGHTS_TABLE(5), + REG_A8XX_TPL1_BICUBIC_WEIGHTS_TABLE(6), + REG_A8XX_TPL1_BICUBIC_WEIGHTS_TABLE(7), + REG_A8XX_TPL1_BICUBIC_WEIGHTS_TABLE(8), + REG_A8XX_TPL1_BICUBIC_WEIGHTS_TABLE(9), + REG_A8XX_TPL1_BICUBIC_WEIGHTS_TABLE(10), + REG_A8XX_TPL1_BICUBIC_WEIGHTS_TABLE(11), + REG_A8XX_TPL1_BICUBIC_WEIGHTS_TABLE(12), + REG_A8XX_TPL1_BICUBIC_WEIGHTS_TABLE(13), + REG_A8XX_TPL1_BICUBIC_WEIGHTS_TABLE(14), + REG_A8XX_TPL1_BICUBIC_WEIGHTS_TABLE(15), + REG_A8XX_TPL1_BICUBIC_WEIGHTS_TABLE(16), + REG_A8XX_TPL1_BICUBIC_WEIGHTS_TABLE(17), + REG_A8XX_TPL1_BICUBIC_WEIGHTS_TABLE(18), + REG_A8XX_TPL1_BICUBIC_WEIGHTS_TABLE(19), +}; +DECLARE_ADRENO_REGLIST_LIST(a810_pwrup_reglist); + +static const u32 a810_ifpc_reglist_regs[] = { + REG_A8XX_RBBM_NC_MODE_CNTL, + REG_A8XX_RBBM_PERFCTR_CNTL, + REG_A8XX_RBBM_SLICE_INTERFACE_HANG_INT_CNTL, + REG_A8XX_RBBM_SLICE_NC_MODE_CNTL, + REG_A6XX_SP_NC_MODE_CNTL, + REG_A7XX_SP_CHICKEN_BITS_2, + REG_A7XX_SP_CHICKEN_BITS_3, + REG_A6XX_SP_PERFCTR_SHADER_MASK, + REG_A8XX_CP_PROTECT_GLOBAL(0), + REG_A8XX_CP_PROTECT_GLOBAL(1), + REG_A8XX_CP_PROTECT_GLOBAL(2), + REG_A8XX_CP_PROTECT_GLOBAL(3), + REG_A8XX_CP_PROTECT_GLOBAL(4), + REG_A8XX_CP_PROTECT_GLOBAL(5), + REG_A8XX_CP_PROTECT_GLOBAL(6), + REG_A8XX_CP_PROTECT_GLOBAL(7), + REG_A8XX_CP_PROTECT_GLOBAL(8), + REG_A8XX_CP_PROTECT_GLOBAL(9), + REG_A8XX_CP_PROTECT_GLOBAL(10), + REG_A8XX_CP_PROTECT_GLOBAL(11), + REG_A8XX_CP_PROTECT_GLOBAL(12), + REG_A8XX_CP_PROTECT_GLOBAL(13), + REG_A8XX_CP_PROTECT_GLOBAL(14), + REG_A8XX_CP_PROTECT_GLOBAL(15), + REG_A8XX_CP_PROTECT_GLOBAL(16), + REG_A8XX_CP_PROTECT_GLOBAL(17), + REG_A8XX_CP_PROTECT_GLOBAL(18), + REG_A8XX_CP_PROTECT_GLOBAL(19), + REG_A8XX_CP_PROTECT_GLOBAL(20), + REG_A8XX_CP_PROTECT_GLOBAL(21), + REG_A8XX_CP_PROTECT_GLOBAL(22), + REG_A8XX_CP_PROTECT_GLOBAL(23), + REG_A8XX_CP_PROTECT_GLOBAL(24), + REG_A8XX_CP_PROTECT_GLOBAL(25), + REG_A8XX_CP_PROTECT_GLOBAL(26), + REG_A8XX_CP_PROTECT_GLOBAL(27), + REG_A8XX_CP_PROTECT_GLOBAL(28), + REG_A8XX_CP_PROTECT_GLOBAL(29), + REG_A8XX_CP_PROTECT_GLOBAL(30), + REG_A8XX_CP_PROTECT_GLOBAL(31), + REG_A8XX_CP_PROTECT_GLOBAL(32), + REG_A8XX_CP_PROTECT_GLOBAL(33), + REG_A8XX_CP_PROTECT_GLOBAL(34), + REG_A8XX_CP_PROTECT_GLOBAL(35), + REG_A8XX_CP_PROTECT_GLOBAL(36), + REG_A8XX_CP_PROTECT_GLOBAL(37), + REG_A8XX_CP_PROTECT_GLOBAL(38), + REG_A8XX_CP_PROTECT_GLOBAL(39), + REG_A8XX_CP_PROTECT_GLOBAL(40), + REG_A8XX_CP_PROTECT_GLOBAL(41), + REG_A8XX_CP_PROTECT_GLOBAL(42), + REG_A8XX_CP_PROTECT_GLOBAL(43), + REG_A8XX_CP_PROTECT_GLOBAL(44), + REG_A8XX_CP_PROTECT_GLOBAL(45), + REG_A8XX_CP_PROTECT_GLOBAL(46), + REG_A8XX_CP_PROTECT_GLOBAL(47), + REG_A8XX_CP_PROTECT_GLOBAL(48), + REG_A8XX_CP_PROTECT_GLOBAL(49), + REG_A8XX_CP_PROTECT_GLOBAL(50), + REG_A8XX_CP_PROTECT_GLOBAL(51), + REG_A8XX_CP_PROTECT_GLOBAL(52), + REG_A8XX_CP_PROTECT_GLOBAL(53), + REG_A8XX_CP_PROTECT_GLOBAL(54), + REG_A8XX_CP_PROTECT_GLOBAL(55), + REG_A8XX_CP_PROTECT_GLOBAL(56), + REG_A8XX_CP_PROTECT_GLOBAL(57), + REG_A8XX_CP_PROTECT_GLOBAL(58), + REG_A8XX_CP_PROTECT_GLOBAL(59), + REG_A8XX_CP_PROTECT_GLOBAL(60), + REG_A8XX_CP_PROTECT_GLOBAL(61), + REG_A8XX_CP_PROTECT_GLOBAL(62), + REG_A8XX_CP_PROTECT_GLOBAL(63), +}; +DECLARE_ADRENO_REGLIST_LIST(a810_ifpc_reglist); + +static const struct adreno_reglist_pipe a810_dyn_pwrup_reglist_regs[] = { + { REG_A8XX_CP_PROTECT_CNTL_PIPE, 0, BIT(PIPE_BR) | BIT(PIPE_BV) }, + { REG_A8XX_CP_PROTECT_PIPE(15), 0, BIT(PIPE_BR) | BIT(PIPE_BV) }, + { REG_A8XX_GRAS_TSEFE_DBG_ECO_CNTL, 0, BIT(PIPE_BV) | BIT(PIPE_BR) }, + { REG_A8XX_GRAS_NC_MODE_CNTL, 0, BIT(PIPE_BV) | BIT(PIPE_BR) }, + { REG_A8XX_GRAS_DBG_ECO_CNTL, 0, BIT(PIPE_BV) | BIT(PIPE_BR) }, + { REG_A7XX_RB_CCU_CNTL, 0, BIT(PIPE_BR) }, + { REG_A7XX_RB_CCU_DBG_ECO_CNTL, 0, BIT(PIPE_BR) }, + { REG_A8XX_RB_CCU_NC_MODE_CNTL, 0, BIT(PIPE_BR) }, + { REG_A8XX_RB_CMP_NC_MODE_CNTL, 0, BIT(PIPE_BR) }, + { REG_A8XX_RB_RESOLVE_PREFETCH_CNTL, 0, BIT(PIPE_BR) }, + { REG_A8XX_RB_CMP_DBG_ECO_CNTL, 0, BIT(PIPE_BR) }, + { REG_A8XX_RB_GC_GMEM_PROTECT, 0, BIT(PIPE_BR) }, + { REG_A6XX_RB_CONTEXT_SWITCH_GMEM_SAVE_RESTORE_ENABLE, 0, BIT(PIPE_BR) }, + { REG_A8XX_VPC_FLATSHADE_MODE_CNTL, 0, BIT(PIPE_BV) | BIT(PIPE_BR) }, + { REG_A8XX_PC_CHICKEN_BITS_1, 0, BIT(PIPE_BV) | BIT(PIPE_BR) }, + { REG_A8XX_PC_CHICKEN_BITS_2, 0, BIT(PIPE_BV) | BIT(PIPE_BR) }, + { REG_A8XX_PC_CHICKEN_BITS_3, 0, BIT(PIPE_BV) | BIT(PIPE_BR) }, + { REG_A8XX_PC_CHICKEN_BITS_4, 0, BIT(PIPE_BV) | BIT(PIPE_BR) }, + { REG_A6XX_PC_AUTO_VERTEX_STRIDE, 0, BIT(PIPE_BR) | BIT(PIPE_BV) }, + { REG_A8XX_PC_VIS_STREAM_CNTL, 0, BIT(PIPE_BR) | BIT(PIPE_BV) }, + { REG_A8XX_PC_CONTEXT_SWITCH_STABILIZE_CNTL_1, 0, BIT(PIPE_BR) | BIT(PIPE_BV) }, + { REG_A8XX_VFD_CB_BV_THRESHOLD, 0, BIT(PIPE_BV) | BIT(PIPE_BR) }, + { REG_A8XX_VFD_CB_BR_THRESHOLD, 0, BIT(PIPE_BV) | BIT(PIPE_BR) }, + { REG_A8XX_VFD_CB_BUSY_REQ_CNT, 0, BIT(PIPE_BV) | BIT(PIPE_BR) }, + { REG_A8XX_VFD_CB_LP_REQ_CNT, 0, BIT(PIPE_BV) | BIT(PIPE_BR) }, + { REG_A7XX_VFD_DBG_ECO_CNTL, 0, BIT(PIPE_BR) | BIT(PIPE_BV) }, +}; +DECLARE_ADRENO_REGLIST_PIPE_LIST(a810_dyn_pwrup_reglist); + static const struct adreno_reglist_pipe a840_nonctxt_regs[] = { { REG_A8XX_CP_SMMU_STREAM_ID_LPAC, 0x00000101, BIT(PIPE_NONE) }, { REG_A8XX_GRAS_DBG_ECO_CNTL, 0x00000800, BIT(PIPE_BV) | BIT(PIPE_BR) }, @@ -2193,6 +2448,48 @@ static const struct adreno_info a8xx_gpus[] = { { 252, 2 }, { 221, 3 }, ), + }, { + .chip_ids = ADRENO_CHIP_IDS(0x44010000), + .family = ADRENO_8XX_GEN1, + .fw = { + [ADRENO_FW_SQE] = "gen80300_sqe.fw", + [ADRENO_FW_GMU] = "gen80300_gmu.bin", + }, + .gmem = SZ_512K + SZ_64K, + .inactive_period = DRM_MSM_INACTIVE_PERIOD, + .quirks = ADRENO_QUIRK_HAS_CACHED_COHERENT | + ADRENO_QUIRK_HAS_HW_APRIV | + ADRENO_QUIRK_PREEMPTION | + ADRENO_QUIRK_IFPC, + .funcs = &a8xx_gpu_funcs, + .zapfw = "gen80300_zap.mbn", + .a6xx = &(const struct a6xx_info) { + .protect = &a810_protect, + .nonctxt_reglist = a810_nonctxt_regs, + .pwrup_reglist = &a810_pwrup_reglist, + .dyn_pwrup_reglist = &a810_dyn_pwrup_reglist, + .ifpc_reglist = &a810_ifpc_reglist, + .gbif_cx = a840_gbif, + .max_slices = 1, + .gmu_chipid = 0x8030000, + .bcms = (const struct a6xx_bcm[]) { + { .name = "SH0", .buswidth = 16 }, + { .name = "MC0", .buswidth = 4 }, + { + .name = "ACV", + .fixed = true, + .perfmode = BIT(2), + .perfmode_bw = 10687500, + }, + { /* sentinel */ }, + }, + }, + .preempt_record_size = 4558 * SZ_1K, + .speedbins = ADRENO_SPEEDBINS( + { 0, 0 }, + { 242, 1 }, + { 221, 2 }, + ), } }; @@ -2205,4 +2502,5 @@ static inline __always_unused void __build_asserts(void) BUILD_BUG_ON(a660_protect.count > a660_protect.count_max); BUILD_BUG_ON(a690_protect.count > a690_protect.count_max); BUILD_BUG_ON(a730_protect.count > a730_protect.count_max); + BUILD_BUG_ON(a810_protect.count > a810_protect.count_max); } diff --git a/drivers/gpu/drm/msm/adreno/adreno_gpu.h b/drivers/gpu/drm/msm/adreno/adreno_gpu.h index ec643b84646b..d88eb8ecf417 100644 --- a/drivers/gpu/drm/msm/adreno/adreno_gpu.h +++ b/drivers/gpu/drm/msm/adreno/adreno_gpu.h @@ -592,6 +592,11 @@ static inline int adreno_is_a8xx(struct adreno_gpu *gpu) return gpu->info->family >= ADRENO_8XX_GEN1; } +static inline int adreno_is_a810(struct adreno_gpu *gpu) +{ + return gpu->info->chip_ids[0] == 0x44010000; +} + static inline int adreno_is_x285(struct adreno_gpu *gpu) { return gpu->info->chip_ids[0] == 0x44070001; -- 2.53.0 ^ permalink raw reply related [flat|nested] 19+ messages in thread
* Claude review: drm/msm/adreno: add Adreno 810 GPU support 2026-05-15 5:09 ` [PATCH RFC v6 6/7] drm/msm/adreno: add Adreno 810 GPU support Alexander Koskovich @ 2026-05-16 0:05 ` Claude Code Review Bot 0 siblings, 0 replies; 19+ messages in thread From: Claude Code Review Bot @ 2026-05-16 0:05 UTC (permalink / raw) To: dri-devel-reviews Patch Review **Status: Mostly good, minor issues** This is the main enablement patch adding the catalog entry, register lists, and helper function. **Catalog entry** (`adreno_info` for chip_id `0x44010000`): - Family `ADRENO_8XX_GEN1` — correct, this is the first GEN1 device - Firmware `gen80300_*` — distinct from X285 (gen80100) and A840 (gen80200), no AQE firmware - GMEM `SZ_512K + SZ_64K` = 576K — significantly smaller than X285 (21MB) and A840 (18MB), consistent with a mid-range part - Quirks include `ADRENO_QUIRK_IFPC` but not `ADRENO_QUIRK_SOFTFUSE` — correct, uses regular efuse per the DTS - Reuses `a840_gbif` for `.gbif_cx` — seems intentional - `max_slices = 1` — simpler than X285 (4) and A840 (3) - `gmu_chipid = 0x8030000` — the zero minor/revision fields are noted - `preempt_record_size = 4558 * SZ_1K` — specific to this GPU **Unused helper**: `adreno_is_a810()` is defined but never called in this series. While `adreno_is_a840()` and `adreno_is_x285()` have existing callers, adding an unused function is unnecessary — it can be added when actually needed. **RSCC question**: The existing code at `a6xx_gmu.c:648` uses `adreno_is_a840()` to select `BIT(30)` vs `BIT(16)` for RSCC status polling. Does A810 need the `BIT(30)` path? This may be handled by the dependent RSCC offset fix series, but worth confirming. **Register lists** look thorough: - `a810_nonctxt_regs`: Well-commented entries for ECO controls and chicken bits - `a810_protect_regs`: 47 entries with `DECLARE_ADRENO_PROTECT(a810_protect, 64)` — correctly sized - `a810_ifpc_reglist_regs`: Includes all 64 `CP_PROTECT_GLOBAL` entries (0-63) for IFPC preservation - `a810_dyn_pwrup_reglist_regs`: Includes the hardcoded `CP_PROTECT_PIPE(15)` matching the fix in patch 5 --- Generated by Claude Code Patch Reviewer ^ permalink raw reply [flat|nested] 19+ messages in thread
* [PATCH RFC v6 7/7] arm64: dts: qcom: milos: Add Adreno 810 GPU and GMU nodes 2026-05-15 5:08 [PATCH RFC v6 0/7] Add support for Adreno 810 GPU Alexander Koskovich ` (5 preceding siblings ...) 2026-05-15 5:09 ` [PATCH RFC v6 6/7] drm/msm/adreno: add Adreno 810 GPU support Alexander Koskovich @ 2026-05-15 5:09 ` Alexander Koskovich 2026-05-16 0:05 ` Claude review: " Claude Code Review Bot 2026-05-15 22:22 ` [PATCH RFC v6 0/7] Add support for Adreno 810 GPU Akhil P Oommen 2026-05-16 0:05 ` Claude review: " Claude Code Review Bot 8 siblings, 1 reply; 19+ messages in thread From: Alexander Koskovich @ 2026-05-15 5:09 UTC (permalink / raw) To: Rob Clark, Dmitry Baryshkov, Abhinav Kumar, Jessica Zhang, Sean Paul, Marijn Suijten, David Airlie, Simona Vetter, Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, Rob Herring, Krzysztof Kozlowski, Conor Dooley, Konrad Dybcio, Akhil P Oommen, Bjorn Andersson Cc: Luca Weiss, linux-arm-msm, dri-devel, freedreno, devicetree, linux-kernel, Alexander Koskovich Add GPU and GMU devicetree nodes for the Adreno 810 GPU found on Qualcomm SM7635 (Milos) based devices. The qcom,kaanapali-gxclkctl.h header can be reused here because Milos uses the same driver and the GX_CLKCTL_GX_GDSC definition is identical. Signed-off-by: Alexander Koskovich <akoskovich@pm.me> --- arch/arm64/boot/dts/qcom/milos.dtsi | 165 ++++++++++++++++++++++++++++++++++++ 1 file changed, 165 insertions(+) diff --git a/arch/arm64/boot/dts/qcom/milos.dtsi b/arch/arm64/boot/dts/qcom/milos.dtsi index 0e7cfc12b0d2..71fff0f35093 100644 --- a/arch/arm64/boot/dts/qcom/milos.dtsi +++ b/arch/arm64/boot/dts/qcom/milos.dtsi @@ -3,6 +3,7 @@ * Copyright (c) 2025, Luca Weiss <luca.weiss@fairphone.com> */ +#include <dt-bindings/clock/qcom,kaanapali-gxclkctl.h> #include <dt-bindings/clock/qcom,milos-camcc.h> #include <dt-bindings/clock/qcom,milos-dispcc.h> #include <dt-bindings/clock/qcom,milos-gcc.h> @@ -1554,6 +1555,121 @@ lpass_ag_noc: interconnect@3c40000 { qcom,bcm-voters = <&apps_bcm_voter>; }; + gpu: gpu@3d00000 { + compatible = "qcom,adreno-44010000", "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 0>; + + iommus = <&adreno_smmu 0 0x0>; + + operating-points-v2 = <&gpu_opp_table>; + + nvmem-cells = <&gpu_speed_bin>; + nvmem-cell-names = "speed_bin"; + + qcom,gmu = <&gmu>; + #cooling-cells = <2>; + + interconnects = <&gem_noc MASTER_GFX3D QCOM_ICC_TAG_ALWAYS + &mc_virt SLAVE_EBI1 QCOM_ICC_TAG_ALWAYS>; + interconnect-names = "gfx-mem"; + + status = "disabled"; + + gpu_zap_shader: zap-shader { + memory-region = <&gpu_microcode_mem>; + }; + + gpu_opp_table: opp-table { + compatible = "operating-points-v2-adreno", + "operating-points-v2"; + + opp-264000000 { + opp-hz = /bits/ 64 <264000000>; + opp-level = <RPMH_REGULATOR_LEVEL_LOW_SVS_D1>; + opp-peak-kBps = <2136718>; + opp-supported-hw = <0x7>; + qcom,opp-acd-level = <0xc8295ffd>; + }; + + opp-362000000 { + opp-hz = /bits/ 64 <362000000>; + opp-level = <RPMH_REGULATOR_LEVEL_LOW_SVS>; + opp-peak-kBps = <2136718>; + opp-supported-hw = <0x7>; + qcom,opp-acd-level = <0xc02c5ffd>; + }; + + opp-510000000 { + opp-hz = /bits/ 64 <510000000>; + opp-level = <RPMH_REGULATOR_LEVEL_SVS>; + opp-peak-kBps = <3972656>; + opp-supported-hw = <0x7>; + qcom,opp-acd-level = <0x882b5ffd>; + }; + + opp-644000000 { + opp-hz = /bits/ 64 <644000000>; + opp-level = <RPMH_REGULATOR_LEVEL_SVS_L1>; + opp-peak-kBps = <5285156>; + opp-supported-hw = <0x7>; + qcom,opp-acd-level = <0x882a5ffd>; + }; + + opp-688000000 { + opp-hz = /bits/ 64 <688000000>; + opp-level = <RPMH_REGULATOR_LEVEL_SVS_L2>; + opp-peak-kBps = <6074218>; + opp-supported-hw = <0x7>; + qcom,opp-acd-level = <0x882a5ffd>; + }; + + opp-763000000 { + opp-hz = /bits/ 64 <763000000>; + opp-level = <RPMH_REGULATOR_LEVEL_NOM>; + opp-peak-kBps = <6671875>; + opp-supported-hw = <0x7>; + qcom,opp-acd-level = <0xa8295ffd>; + }; + + opp-895000000 { + opp-hz = /bits/ 64 <895000000>; + opp-level = <RPMH_REGULATOR_LEVEL_NOM_L1>; + opp-peak-kBps = <8171875>; + opp-supported-hw = <0x7>; + qcom,opp-acd-level = <0x88295ffd>; + }; + + opp-960000000 { + opp-hz = /bits/ 64 <960000000>; + opp-level = <RPMH_REGULATOR_LEVEL_TURBO>; + opp-peak-kBps = <8171875>; + opp-supported-hw = <0x7>; + qcom,opp-acd-level = <0xa8285ffd>; + }; + + opp-1050000000 { + opp-hz = /bits/ 64 <1050000000>; + opp-level = <RPMH_REGULATOR_LEVEL_TURBO_L1>; + opp-peak-kBps = <18597656>; + opp-supported-hw = <0x7>; + qcom,opp-acd-level = <0x88285ffd>; + }; + + opp-1150000000 { + opp-hz = /bits/ 64 <1150000000>; + opp-level = <RPMH_REGULATOR_LEVEL_TURBO_L2>; + opp-peak-kBps = <18597656>; + opp-supported-hw = <0x3>; + qcom,opp-acd-level = <0xa02f5ffd>; + }; + }; + }; + gxclkctl: clock-controller@3d64000 { compatible = "qcom,milos-gxclkctl"; reg = <0x0 0x03d64000 0x0 0x6000>; @@ -1564,6 +1680,55 @@ gxclkctl: clock-controller@3d64000 { #power-domain-cells = <1>; }; + gmu: gmu@3d6c000 { + compatible = "qcom,adreno-gmu-810.0", "qcom,adreno-gmu"; + reg = <0x0 0x03d6c000 0x0 0x32000>; + reg-names = "gmu"; + + interrupts = <GIC_SPI 304 IRQ_TYPE_LEVEL_HIGH 0>, + <GIC_SPI 305 IRQ_TYPE_LEVEL_HIGH 0>; + interrupt-names = "hfi", + "gmu"; + + clocks = <&gpucc GPU_CC_AHB_CLK>, + <&gpucc GPU_CC_CX_GMU_CLK>, + <&gpucc GPU_CC_CXO_CLK>, + <&gcc GCC_DDRSS_GPU_AXI_CLK>, + <&gcc GCC_GPU_MEMNOC_GFX_CLK>, + <&gpucc GPU_CC_HUB_CX_INT_CLK>; + clock-names = "ahb", + "gmu", + "cxo", + "axi", + "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-350000000 { + opp-hz = /bits/ 64 <350000000>; + opp-level = <RPMH_REGULATOR_LEVEL_LOW_SVS>; + }; + + opp-650000000 { + opp-hz = /bits/ 64 <650000000>; + opp-level = <RPMH_REGULATOR_LEVEL_SVS>; + }; + }; + }; + gpucc: clock-controller@3d90000 { compatible = "qcom,milos-gpucc"; reg = <0x0 0x03d90000 0x0 0x9800>; -- 2.53.0 ^ permalink raw reply related [flat|nested] 19+ messages in thread
* Claude review: arm64: dts: qcom: milos: Add Adreno 810 GPU and GMU nodes 2026-05-15 5:09 ` [PATCH RFC v6 7/7] arm64: dts: qcom: milos: Add Adreno 810 GPU and GMU nodes Alexander Koskovich @ 2026-05-16 0:05 ` Claude Code Review Bot 0 siblings, 0 replies; 19+ messages in thread From: Claude Code Review Bot @ 2026-05-16 0:05 UTC (permalink / raw) To: dri-devel-reviews Patch Review **Status: Looks good, standard DTS enablement** Adds GPU and GMU nodes for Milos. Notable aspects: - **Register regions**: GPU at `0x03d00000` (0x6c000), cx_mem at `0x03d9e000` (0x2000), GMU at `0x03d6c000` (0x32000) — these are contiguous (GPU ends where GMU starts, GMU ends where cx_mem starts) - **OPP table**: 10 operating points from 264MHz to 1150MHz. Highest OPP (1150MHz) has `opp-supported-hw = <0x3>` limiting it to speedbins 0 and 1, while other OPPs have `<0x7>` (all 3 bins). Consistent with 3 speedbin entries in patch 6 - **GMU OPPs**: Two levels (350MHz low SVS, 650MHz SVS) - **Power domains**: CX from gpucc, GX from gxclkctl with `GX_CLKCTL_GX_GDSC` - **Header reuse**: `qcom,kaanapali-gxclkctl.h` is documented as reusable because Milos uses the same driver with identical `GX_CLKCTL_GX_GDSC` definition - **No LLCC**: No `llcc` property present, confirming the motivation for patch 4 - **Status disabled**: Correctly starts disabled, to be enabled per-board The `qcom,opp-acd-level` values are present on all OPPs for ACD (Adaptive Clock Distribution) configuration. --- Generated by Claude Code Patch Reviewer ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH RFC v6 0/7] Add support for Adreno 810 GPU 2026-05-15 5:08 [PATCH RFC v6 0/7] Add support for Adreno 810 GPU Alexander Koskovich ` (6 preceding siblings ...) 2026-05-15 5:09 ` [PATCH RFC v6 7/7] arm64: dts: qcom: milos: Add Adreno 810 GPU and GMU nodes Alexander Koskovich @ 2026-05-15 22:22 ` Akhil P Oommen 2026-05-16 0:05 ` Claude review: " Claude Code Review Bot 8 siblings, 0 replies; 19+ messages in thread From: Akhil P Oommen @ 2026-05-15 22:22 UTC (permalink / raw) To: Alexander Koskovich, Rob Clark, Dmitry Baryshkov, Abhinav Kumar, Jessica Zhang, Sean Paul, Marijn Suijten, David Airlie, Simona Vetter, Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, Rob Herring, Krzysztof Kozlowski, Conor Dooley, Konrad Dybcio, Bjorn Andersson Cc: Luca Weiss, linux-arm-msm, dri-devel, freedreno, devicetree, linux-kernel, Krzysztof Kozlowski, Konrad Dybcio On 5/15/2026 10:38 AM, Alexander Koskovich wrote: > Adreno 810 is present in the Milos SoC and is the first GPU to be released in > the A8x family. > > This series is marked as RFC because it depends on a few other in review > series, GPU GX GDSC handling [1], QFPROM efuse for Milos [2], and devicetree > support for Glymur [3] (for a8xx RSCC offset fix and X2-185 bindings change). > > Also depends on the GXCLKCTL block for Milos [4], but this is no longer in > review and has been applied. > > [1]: https://lore.kernel.org/linux-arm-msm/20260427-gfx-clk-fixes-v2-0-797e54b3d464@oss.qualcomm.com > [2]: https://lore.kernel.org/linux-arm-msm/20260331-milos-qfprom-v1-0-36017cc642db@pm.me > [3]: https://lore.kernel.org/linux-arm-msm/20260513-glymur-gpu-dt-v4-0-f83832c3bc9a@oss.qualcomm.com > [4]: https://lore.kernel.org/linux-arm-msm/20260417-milos-gxclkctl-v3-0-08f5988c43a2@fairphone.com > > Signed-off-by: Alexander Koskovich <akoskovich@pm.me> Reviewed-by: Akhil P Oommen <akhilpo@oss.qualcomm.com> For the rest of the patches that doesn't have my R-b tag in this series. -Akhil > --- > Changes in v6: > - Re-jigged the register ranges for GPU/GMU to match Glymur > - Depend on RSCC offset fix > - Fix bindings to add constraints for reg list > - Link to v5: https://lore.kernel.org/r/20260502-adreno-810-v5-0-bc9fd2bb788d@pm.me > > Changes in v5: > - Sync with latest kgsl > - Link to v4: https://lore.kernel.org/r/20260416-adreno-810-v4-0-61676e073f8a@pm.me > > Changes in v4: > - Add 1150MHz speedbin > - Rebase on next-20260415 > - Add dep on efuse patchset > - Link to v3: https://lore.kernel.org/r/20260407-adreno-810-v3-0-30cb7f196ed4@pm.me > > Changes in v3: > - Drop DEMET from GMU clocks (not required on A810) > - Document qcom,adreno-44010000 compatible (regex is gone in 7.0+) > - Drop zeroed out CP_PROTECT_REG[46, 62] range, not required > - Add a810_protect to __build_asserts > - Add UCHE_CCHE_TRAP_BASE_[LO|HI] and UCHE_CCHE_WRITE_THRU_BASE_[LO|HI] to a810_pwrup_reglist_regs > - Move TPL1 registers to a810_pwrup_reglist_regs > - Include all protect registers in a810_ifpc_reglist_regs > - Revert pipe reg comment, just copied it from downstream but original also works > - Link to v2: https://lore.kernel.org/r/20260402-adreno-810-v2-0-ce337ca87a9e@pm.me > > Changes in v2: > - Mark as RFC due to dependency on in-review changes > - Explain in DTS commit why qcom,kaanapali-gxclkctl.h and not qcom,milos-gxclkctl.h > - cx_mmio -> cx_misc_mmio > - Sync a810_nonctxt_regs with GRAPHICS.LA.14.0.r5-03100-lanai.0 > - Link to v1: https://lore.kernel.org/r/20260331-adreno-810-v1-0-725801dbb12b@pm.me > > --- > Alexander Koskovich (7): > dt-bindings: display/msm/gmu: Document Adreno 810 GMU > dt-bindings: display/msm/gpu: Document Adreno 810 GPU > drm/msm/adreno: rename llc_mmio to cx_misc_mmio > drm/msm/adreno: set cx_misc_mmio regardless of if platform has LLCC > drm/msm/a8xx: use pipe protect slot 15 for last-span-unbound feature > drm/msm/adreno: add Adreno 810 GPU support > arm64: dts: qcom: milos: Add Adreno 810 GPU and GMU nodes > > .../devicetree/bindings/display/msm/gmu.yaml | 30 +++ > .../devicetree/bindings/display/msm/gpu.yaml | 5 +- > arch/arm64/boot/dts/qcom/milos.dtsi | 165 ++++++++++++ > drivers/gpu/drm/msm/adreno/a6xx_catalog.c | 298 +++++++++++++++++++++ > drivers/gpu/drm/msm/adreno/a6xx_gmu.c | 8 +- > drivers/gpu/drm/msm/adreno/a6xx_gpu.c | 44 ++- > drivers/gpu/drm/msm/adreno/a6xx_gpu.h | 14 +- > drivers/gpu/drm/msm/adreno/a8xx_gpu.c | 6 +- > drivers/gpu/drm/msm/adreno/adreno_gpu.h | 5 + > 9 files changed, 536 insertions(+), 39 deletions(-) > --- > base-commit: 2ca0470eca8b4cee27aeeb39bd93c1f4c96b7e7b > change-id: 20260330-adreno-810-5a47525522cd > > Best regards, ^ permalink raw reply [flat|nested] 19+ messages in thread
* Claude review: Add support for Adreno 810 GPU 2026-05-15 5:08 [PATCH RFC v6 0/7] Add support for Adreno 810 GPU Alexander Koskovich ` (7 preceding siblings ...) 2026-05-15 22:22 ` [PATCH RFC v6 0/7] Add support for Adreno 810 GPU Akhil P Oommen @ 2026-05-16 0:05 ` Claude Code Review Bot 8 siblings, 0 replies; 19+ messages in thread From: Claude Code Review Bot @ 2026-05-16 0:05 UTC (permalink / raw) To: dri-devel-reviews Overall Series Review Subject: Add support for Adreno 810 GPU Author: Alexander Koskovich <akoskovich@pm.me> Patches: 9 Reviewed: 2026-05-16T10:05:40.670319 --- This is a well-structured 7-patch RFC series adding Adreno 810 GPU support for the Qualcomm SM7635 (Milos) SoC. The series follows the established patterns for A8XX GPU enablement, building on the existing X285 and A840 support. The preparatory patches (3-5) are cleanly separated and make the subsequent enablement patch possible. The series is in good shape overall. The main technical concern is around patch 5 (pipe protect slot hardcoding) — while the fix is correct, the `count_max` field now has inconsistent semantics across A8XX GPUs and the existing X285/A840 entries should arguably be updated to match. There's also an unused helper function added in patch 6. The series has appropriate review tags from Qualcomm engineers on the preparatory patches. Patch 6 (the main enablement) and patch 7 (DTS) still need reviews. --- --- Generated by Claude Code Patch Reviewer ^ permalink raw reply [flat|nested] 19+ messages in thread
* [PATCH RFC v5 0/7] Add support for Adreno 810 GPU
@ 2026-05-02 8:07 Alexander Koskovich
2026-05-04 22:55 ` Claude review: " Claude Code Review Bot
0 siblings, 1 reply; 19+ messages in thread
From: Alexander Koskovich @ 2026-05-02 8:07 UTC (permalink / raw)
To: Rob Clark, Dmitry Baryshkov, Abhinav Kumar, Jessica Zhang,
Sean Paul, Marijn Suijten, David Airlie, Simona Vetter,
Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Konrad Dybcio, Akhil P Oommen,
Bjorn Andersson
Cc: Luca Weiss, linux-arm-msm, dri-devel, freedreno, devicetree,
linux-kernel, Alexander Koskovich, Krzysztof Kozlowski,
Konrad Dybcio, Dmitry Baryshkov
Adreno 810 is present in the Milos SoC and is the first GPU to be released in
the A8x family.
This series is marked as RFC because it depends on a few other in review
series, GPU GX GDSC handling [1], QFPROM efuse for Milos [2] and the GXCLKCTL
block for Milos [3].
[1]: https://lore.kernel.org/linux-arm-msm/20260427-gfx-clk-fixes-v2-0-797e54b3d464@oss.qualcomm.com
[2]: https://lore.kernel.org/linux-arm-msm/20260331-milos-qfprom-v1-0-36017cc642db@pm.me
[3]: https://lore.kernel.org/linux-arm-msm/20260417-milos-gxclkctl-v3-0-08f5988c43a2@fairphone.com
Signed-off-by: Alexander Koskovich <akoskovich@pm.me>
---
Changes in v5:
- Sync with latest kgsl
- Link to v4: https://lore.kernel.org/r/20260416-adreno-810-v4-0-61676e073f8a@pm.me
Changes in v4:
- Add 1150MHz speedbin
- Rebase on next-20260415
- Add dep on efuse patchset
- Link to v3: https://lore.kernel.org/r/20260407-adreno-810-v3-0-30cb7f196ed4@pm.me
Changes in v3:
- Drop DEMET from GMU clocks (not required on A810)
- Document qcom,adreno-44010000 compatible (regex is gone in 7.0+)
- Drop zeroed out CP_PROTECT_REG[46, 62] range, not required
- Add a810_protect to __build_asserts
- Add UCHE_CCHE_TRAP_BASE_[LO|HI] and UCHE_CCHE_WRITE_THRU_BASE_[LO|HI] to a810_pwrup_reglist_regs
- Move TPL1 registers to a810_pwrup_reglist_regs
- Include all protect registers in a810_ifpc_reglist_regs
- Revert pipe reg comment, just copied it from downstream but original also works
- Link to v2: https://lore.kernel.org/r/20260402-adreno-810-v2-0-ce337ca87a9e@pm.me
Changes in v2:
- Mark as RFC due to dependency on in-review changes
- Explain in DTS commit why qcom,kaanapali-gxclkctl.h and not qcom,milos-gxclkctl.h
- cx_mmio -> cx_misc_mmio
- Sync a810_nonctxt_regs with GRAPHICS.LA.14.0.r5-03100-lanai.0
- Link to v1: https://lore.kernel.org/r/20260331-adreno-810-v1-0-725801dbb12b@pm.me
---
Alexander Koskovich (7):
dt-bindings: display/msm/gmu: Document Adreno 810 GMU
dt-bindings: display/msm/gpu: Document A810 GPU
drm/msm/adreno: rename llc_mmio to cx_misc_mmio
drm/msm/adreno: set cx_misc_mmio regardless of if platform has LLCC
drm/msm/a8xx: use pipe protect slot 15 for last-span-unbound feature
drm/msm/adreno: add Adreno 810 GPU support
arm64: dts: qcom: milos: Add Adreno 810 GPU and GMU nodes
.../devicetree/bindings/display/msm/gmu.yaml | 30 +++
.../devicetree/bindings/display/msm/gpu.yaml | 1 +
arch/arm64/boot/dts/qcom/milos.dtsi | 166 ++++++++++++
drivers/gpu/drm/msm/adreno/a6xx_catalog.c | 298 +++++++++++++++++++++
drivers/gpu/drm/msm/adreno/a6xx_gmu.c | 8 +-
drivers/gpu/drm/msm/adreno/a6xx_gpu.c | 44 ++-
drivers/gpu/drm/msm/adreno/a6xx_gpu.h | 14 +-
drivers/gpu/drm/msm/adreno/a8xx_gpu.c | 6 +-
drivers/gpu/drm/msm/adreno/adreno_gpu.h | 5 +
9 files changed, 534 insertions(+), 38 deletions(-)
---
base-commit: 968e97b00af4380a718e0badc978470e4587a50b
change-id: 20260330-adreno-810-5a47525522cd
Best regards,
--
Alexander Koskovich <akoskovich@pm.me>
^ permalink raw reply [flat|nested] 19+ messages in thread* Claude review: Add support for Adreno 810 GPU 2026-05-02 8:07 [PATCH RFC v5 0/7] " Alexander Koskovich @ 2026-05-04 22:55 ` Claude Code Review Bot 0 siblings, 0 replies; 19+ messages in thread From: Claude Code Review Bot @ 2026-05-04 22:55 UTC (permalink / raw) To: dri-devel-reviews Overall Series Review Subject: Add support for Adreno 810 GPU Author: Alexander Koskovich <akoskovich@pm.me> Patches: 8 Reviewed: 2026-05-05T08:55:16.085792 --- This is a well-structured 7-patch series adding Adreno 810 GPU support (Qualcomm SM7635/Milos) to the MSM DRM driver. The series is logically ordered: dt-bindings first, then preparatory refactoring (rename `llc_mmio` to `cx_misc_mmio`, decouple cx_misc from LLCC), a targeted fix for pipe protect slot indexing, the main GPU catalog entry, and finally the device tree node. The preparatory patches (3 and 4) are the most architecturally significant — they fix a real problem where platforms without LLCC (like Milos) would crash because `cx_misc_mmio` was tied to LLCC slice availability. The approach is clean and correct. **One notable concern**: Patch 5 hardcodes pipe protect slot 15 to fix an out-of-bounds issue caused by `count_max` having dual semantics (global protect slot count vs. pipe slot index). While the fix is correct and matches downstream, it papers over the underlying API confusion. The `count_max` field is used as a slot index in `a8xx_set_cp_protect()` but as a capacity limit elsewhere — this should eventually be cleaned up. The series has Reviewed-by tags from Qualcomm engineers (Akhil P Oommen, Konrad Dybcio) on most patches, and dt-bindings have Krzysztof Kozlowski's review. Patch 6 (the main catalog entry) and patch 7 (DTS) lack driver maintainer Reviewed-by tags but have been through 5 revisions. Overall: series looks ready for merge once dependencies land. --- --- Generated by Claude Code Patch Reviewer ^ permalink raw reply [flat|nested] 19+ messages in thread
* [PATCH RFC v3 0/7] Add support for Adreno 810 GPU
@ 2026-04-08 1:45 Alexander Koskovich
2026-04-12 3:17 ` Claude review: " Claude Code Review Bot
0 siblings, 1 reply; 19+ messages in thread
From: Alexander Koskovich @ 2026-04-08 1:45 UTC (permalink / raw)
To: Rob Clark, Dmitry Baryshkov, Abhinav Kumar, Jessica Zhang,
Sean Paul, Marijn Suijten, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Konrad Dybcio, Akhil P Oommen,
Bjorn Andersson
Cc: Luca Weiss, linux-arm-msm, dri-devel, freedreno, devicetree,
linux-kernel, Alexander Koskovich, Krzysztof Kozlowski,
Konrad Dybcio, Dmitry Baryshkov
Adreno 810 is present in the Milos SoC and is the first GPU to be released in
the A8x family.
Note that the OPP table is limited to 1050MHz to start with as the only Milos
device I have is limited to that speed in GPU_CC_FREQ_LIMIT_VAL.
This series is marked as RFC because it depends on a couple other in review
series, GPU GX GDSC handling [1] and the GXCLKCTL block for Milos [2].
Also depends on A8x batch 2 but it looks like that made it into linux-next.
[1]: https://lore.kernel.org/linux-arm-msm/20260407-gfx-clk-fixes-v1-0-4bb5583a5054@oss.qualcomm.com
[2]: https://lore.kernel.org/linux-arm-msm/20260403-milos-gxclkctl-v2-0-95eb94a7d0a4@fairphone.com
Signed-off-by: Alexander Koskovich <akoskovich@pm.me>
---
Changes in v3:
- Drop DEMET from GMU clocks (not required on A810)
- Document qcom,adreno-44010000 compatible (regex is gone in 7.0+)
- Drop zeroed out CP_PROTECT_REG[46, 62] range, not required
- Add a810_protect to __build_asserts
- Add UCHE_CCHE_TRAP_BASE_[LO|HI] and UCHE_CCHE_WRITE_THRU_BASE_[LO|HI] to a810_pwrup_reglist_regs
- Move TPL1 registers to a810_pwrup_reglist_regs
- Include all protect registers in a810_ifpc_reglist_regs
- Revert pipe reg comment, just copied it from downstream but original also works
- Link to v2: https://lore.kernel.org/r/20260402-adreno-810-v2-0-ce337ca87a9e@pm.me
Changes in v2:
- Mark as RFC due to dependency on in-review changes
- Explain in DTS commit why qcom,kaanapali-gxclkctl.h and not qcom,milos-gxclkctl.h
- cx_mmio -> cx_misc_mmio
- Sync a810_nonctxt_regs with GRAPHICS.LA.14.0.r5-03100-lanai.0
- Link to v1: https://lore.kernel.org/r/20260331-adreno-810-v1-0-725801dbb12b@pm.me
---
Alexander Koskovich (7):
dt-bindings: display/msm/gmu: Document Adreno 810 GMU
dt-bindings: display/msm/gpu: Document A810 GPU
drm/msm/adreno: rename llc_mmio to cx_misc_mmio
drm/msm/adreno: set cx_misc_mmio regardless of if platform has LLCC
drm/msm/a8xx: use pipe protect slot 15 for last-span-unbound feature
drm/msm/adreno: add Adreno 810 GPU support
arm64: dts: qcom: milos: Add Adreno 810 GPU and GMU nodes
.../devicetree/bindings/display/msm/gmu.yaml | 30 +++
.../devicetree/bindings/display/msm/gpu.yaml | 1 +
arch/arm64/boot/dts/qcom/milos.dtsi | 146 +++++++++++
drivers/gpu/drm/msm/adreno/a6xx_catalog.c | 291 +++++++++++++++++++++
drivers/gpu/drm/msm/adreno/a6xx_gmu.c | 8 +-
drivers/gpu/drm/msm/adreno/a6xx_gpu.c | 44 ++--
drivers/gpu/drm/msm/adreno/a6xx_gpu.h | 14 +-
drivers/gpu/drm/msm/adreno/a8xx_gpu.c | 6 +-
drivers/gpu/drm/msm/adreno/adreno_gpu.h | 5 +
9 files changed, 507 insertions(+), 38 deletions(-)
---
base-commit: afed2755f671a38114a907c0bff6d35c3a76ef40
change-id: 20260330-adreno-810-5a47525522cd
Best regards,
--
Alexander Koskovich <akoskovich@pm.me>
^ permalink raw reply [flat|nested] 19+ messages in thread* Claude review: Add support for Adreno 810 GPU 2026-04-08 1:45 [PATCH RFC v3 0/7] " Alexander Koskovich @ 2026-04-12 3:17 ` Claude Code Review Bot 0 siblings, 0 replies; 19+ messages in thread From: Claude Code Review Bot @ 2026-04-12 3:17 UTC (permalink / raw) To: dri-devel-reviews Overall Series Review Subject: Add support for Adreno 810 GPU Author: Alexander Koskovich <akoskovich@pm.me> Patches: 9 Reviewed: 2026-04-12T13:17:00.559830 --- This 7-patch RFC series adds support for the Adreno 810 GPU (chip ID 0x44010000) found in Qualcomm SM7635 (Milos). The series is well-structured: patches 1-2 add DT bindings, patches 3-4 refactor cx_misc_mmio handling to decouple it from LLCC (needed because Milos has no LLCC), patch 5 fixes the pipe protect slot addressing to accommodate A810's different protect count_max, patch 6 adds the main catalog entry, and patch 7 adds the DTS nodes. The series is logically ordered and the prerequisite patches (3-5) are correctly sequenced before the GPU support patch (6). The RFC status is appropriate given the external dependencies on GX GDSC and GXCLKCTL series. **One significant concern:** Patch 5 changes the meaning of `count_max` for A8xx GPUs. Before patch 5, `count_max` was used as the pipe protect slot index (always 15). After patch 5, it's no longer used for the pipe slot. The A810 entry then sets `count_max = 64` (the global protect slot maximum), which is semantically different from the existing x285/a840 `count_max = 15`. The x285 and a840 entries should probably be updated to `count_max = 64` as well for consistency, and their BUILD_BUG_ON checks should be added to `__build_asserts`. Overall the series looks reasonable for an RFC. A few minor points noted per-patch below. --- Generated by Claude Code Patch Reviewer ^ permalink raw reply [flat|nested] 19+ messages in thread
end of thread, other threads:[~2026-05-16 0:05 UTC | newest] Thread overview: 19+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2026-05-15 5:08 [PATCH RFC v6 0/7] Add support for Adreno 810 GPU Alexander Koskovich 2026-05-15 5:08 ` [PATCH RFC v6 1/7] dt-bindings: display/msm/gmu: Document Adreno 810 GMU Alexander Koskovich 2026-05-16 0:05 ` Claude review: " Claude Code Review Bot 2026-05-15 5:08 ` [PATCH RFC v6 2/7] dt-bindings: display/msm/gpu: Document Adreno 810 GPU Alexander Koskovich 2026-05-16 0:05 ` Claude review: " Claude Code Review Bot 2026-05-15 5:08 ` [PATCH RFC v6 3/7] drm/msm/adreno: rename llc_mmio to cx_misc_mmio Alexander Koskovich 2026-05-16 0:05 ` Claude review: " Claude Code Review Bot 2026-05-15 5:08 ` [PATCH RFC v6 4/7] drm/msm/adreno: set cx_misc_mmio regardless of if platform has LLCC Alexander Koskovich 2026-05-16 0:05 ` Claude review: " Claude Code Review Bot 2026-05-15 5:09 ` [PATCH RFC v6 5/7] drm/msm/a8xx: use pipe protect slot 15 for last-span-unbound feature Alexander Koskovich 2026-05-16 0:05 ` Claude review: " Claude Code Review Bot 2026-05-15 5:09 ` [PATCH RFC v6 6/7] drm/msm/adreno: add Adreno 810 GPU support Alexander Koskovich 2026-05-16 0:05 ` Claude review: " Claude Code Review Bot 2026-05-15 5:09 ` [PATCH RFC v6 7/7] arm64: dts: qcom: milos: Add Adreno 810 GPU and GMU nodes Alexander Koskovich 2026-05-16 0:05 ` Claude review: " Claude Code Review Bot 2026-05-15 22:22 ` [PATCH RFC v6 0/7] Add support for Adreno 810 GPU Akhil P Oommen 2026-05-16 0:05 ` Claude review: " Claude Code Review Bot -- strict thread matches above, loose matches on Subject: below -- 2026-05-02 8:07 [PATCH RFC v5 0/7] " Alexander Koskovich 2026-05-04 22:55 ` Claude review: " Claude Code Review Bot 2026-04-08 1:45 [PATCH RFC v3 0/7] " Alexander Koskovich 2026-04-12 3:17 ` Claude review: " Claude Code Review Bot
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox