* [PATCH RFC v4 0/7] Add support for Adreno 810 GPU
@ 2026-04-16 11:04 Alexander Koskovich
2026-04-16 11:04 ` [PATCH RFC v4 1/7] dt-bindings: display/msm/gmu: Document Adreno 810 GMU Alexander Koskovich
` (6 more replies)
0 siblings, 7 replies; 15+ messages in thread
From: Alexander Koskovich @ 2026-04-16 11:04 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
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].
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/20260331-milos-qfprom-v1-0-36017cc642db@pm.me
[3]: 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 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 | 296 +++++++++++++++++++++
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, 532 insertions(+), 38 deletions(-)
---
base-commit: 5fe4fcc47bbe1ee4474e743378c1b296a0b40e4c
change-id: 20260330-adreno-810-5a47525522cd
Best regards,
--
Alexander Koskovich <akoskovich@pm.me>
^ permalink raw reply [flat|nested] 15+ messages in thread* [PATCH RFC v4 1/7] dt-bindings: display/msm/gmu: Document Adreno 810 GMU 2026-04-16 11:04 [PATCH RFC v4 0/7] Add support for Adreno 810 GPU Alexander Koskovich @ 2026-04-16 11:04 ` Alexander Koskovich 2026-04-16 11:05 ` [PATCH RFC v4 2/7] dt-bindings: display/msm/gpu: Document A810 GPU Alexander Koskovich ` (5 subsequent siblings) 6 siblings, 0 replies; 15+ messages in thread From: Alexander Koskovich @ 2026-04-16 11:04 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 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] 15+ messages in thread
* [PATCH RFC v4 2/7] dt-bindings: display/msm/gpu: Document A810 GPU 2026-04-16 11:04 [PATCH RFC v4 0/7] Add support for Adreno 810 GPU Alexander Koskovich 2026-04-16 11:04 ` [PATCH RFC v4 1/7] dt-bindings: display/msm/gmu: Document Adreno 810 GMU Alexander Koskovich @ 2026-04-16 11:05 ` Alexander Koskovich 2026-04-16 11:05 ` [PATCH RFC v4 3/7] drm/msm/adreno: rename llc_mmio to cx_misc_mmio Alexander Koskovich ` (4 subsequent siblings) 6 siblings, 0 replies; 15+ messages in thread From: Alexander Koskovich @ 2026-04-16 11:05 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 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 | 1 + 1 file changed, 1 insertion(+) diff --git a/Documentation/devicetree/bindings/display/msm/gpu.yaml b/Documentation/devicetree/bindings/display/msm/gpu.yaml index 04b2328903ca..1875a3b9f688 100644 --- a/Documentation/devicetree/bindings/display/msm/gpu.yaml +++ b/Documentation/devicetree/bindings/display/msm/gpu.yaml @@ -434,6 +434,7 @@ allOf: - qcom,adreno-43050a01 - qcom,adreno-43050c01 - qcom,adreno-43051401 + - qcom,adreno-44010000 then: # Starting with A6xx, the clocks are usually defined in the GMU node properties: -- 2.53.0 ^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH RFC v4 3/7] drm/msm/adreno: rename llc_mmio to cx_misc_mmio 2026-04-16 11:04 [PATCH RFC v4 0/7] Add support for Adreno 810 GPU Alexander Koskovich 2026-04-16 11:04 ` [PATCH RFC v4 1/7] dt-bindings: display/msm/gmu: Document Adreno 810 GMU Alexander Koskovich 2026-04-16 11:05 ` [PATCH RFC v4 2/7] dt-bindings: display/msm/gpu: Document A810 GPU Alexander Koskovich @ 2026-04-16 11:05 ` Alexander Koskovich 2026-04-16 11:05 ` [PATCH RFC v4 4/7] drm/msm/adreno: set cx_misc_mmio regardless of if platform has LLCC Alexander Koskovich ` (3 subsequent siblings) 6 siblings, 0 replies; 15+ messages in thread From: Alexander Koskovich @ 2026-04-16 11:05 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, 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 b7166a883b01..6a369682bb80 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] 15+ messages in thread
* [PATCH RFC v4 4/7] drm/msm/adreno: set cx_misc_mmio regardless of if platform has LLCC 2026-04-16 11:04 [PATCH RFC v4 0/7] Add support for Adreno 810 GPU Alexander Koskovich ` (2 preceding siblings ...) 2026-04-16 11:05 ` [PATCH RFC v4 3/7] drm/msm/adreno: rename llc_mmio to cx_misc_mmio Alexander Koskovich @ 2026-04-16 11:05 ` Alexander Koskovich 2026-04-16 11:05 ` [PATCH RFC v4 5/7] drm/msm/a8xx: use pipe protect slot 15 for last-span-unbound feature Alexander Koskovich ` (2 subsequent siblings) 6 siblings, 0 replies; 15+ messages in thread From: Alexander Koskovich @ 2026-04-16 11:05 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, 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] 15+ messages in thread
* [PATCH RFC v4 5/7] drm/msm/a8xx: use pipe protect slot 15 for last-span-unbound feature 2026-04-16 11:04 [PATCH RFC v4 0/7] Add support for Adreno 810 GPU Alexander Koskovich ` (3 preceding siblings ...) 2026-04-16 11:05 ` [PATCH RFC v4 4/7] drm/msm/adreno: set cx_misc_mmio regardless of if platform has LLCC Alexander Koskovich @ 2026-04-16 11:05 ` Alexander Koskovich 2026-04-16 11:05 ` [PATCH RFC v4 6/7] drm/msm/adreno: add Adreno 810 GPU support Alexander Koskovich 2026-04-16 11:05 ` [PATCH RFC v4 7/7] arm64: dts: qcom: milos: Add Adreno 810 GPU and GMU nodes Alexander Koskovich 6 siblings, 0 replies; 15+ messages in thread From: Alexander Koskovich @ 2026-04-16 11:05 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, 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] 15+ messages in thread
* [PATCH RFC v4 6/7] drm/msm/adreno: add Adreno 810 GPU support 2026-04-16 11:04 [PATCH RFC v4 0/7] Add support for Adreno 810 GPU Alexander Koskovich ` (4 preceding siblings ...) 2026-04-16 11:05 ` [PATCH RFC v4 5/7] drm/msm/a8xx: use pipe protect slot 15 for last-span-unbound feature Alexander Koskovich @ 2026-04-16 11:05 ` Alexander Koskovich 2026-04-22 13:04 ` Konrad Dybcio 2026-04-22 13:04 ` Konrad Dybcio 2026-04-16 11:05 ` [PATCH RFC v4 7/7] arm64: dts: qcom: milos: Add Adreno 810 GPU and GMU nodes Alexander Koskovich 6 siblings, 2 replies; 15+ messages in thread From: Alexander Koskovich @ 2026-04-16 11:05 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 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 | 296 ++++++++++++++++++++++++++++++ drivers/gpu/drm/msm/adreno/adreno_gpu.h | 5 + 2 files changed, 301 insertions(+) diff --git a/drivers/gpu/drm/msm/adreno/a6xx_catalog.c b/drivers/gpu/drm/msm/adreno/a6xx_catalog.c index 550ff3a9b82e..1190804632d6 100644 --- a/drivers/gpu/drm/msm/adreno/a6xx_catalog.c +++ b/drivers/gpu/drm/msm/adreno/a6xx_catalog.c @@ -1799,6 +1799,259 @@ 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) }, + { 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_A7XX_SP_READ_SEL, 0x0001ff00, BIT(PIPE_NONE) }, + { REG_A6XX_TPL1_DBG_ECO_CNTL, 0x10000000, BIT(PIPE_NONE) }, + { REG_A6XX_TPL1_DBG_ECO_CNTL1, 0x00000724, 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) }, + { REG_A8XX_UCHE_CACHE_WAYS, 0x00080000, 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_VSC_BIN_SIZE, 0x00010001, BIT(PIPE_NONE) }, + { 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_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_VSC_BIN_SIZE, + 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_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_A6XX_TPL1_NC_MODE_CNTL, + REG_A6XX_TPL1_DBG_ECO_CNTL, + REG_A6XX_TPL1_DBG_ECO_CNTL1, + 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_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 +2446,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 +2500,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] 15+ messages in thread
* Re: [PATCH RFC v4 6/7] drm/msm/adreno: add Adreno 810 GPU support 2026-04-16 11:05 ` [PATCH RFC v4 6/7] drm/msm/adreno: add Adreno 810 GPU support Alexander Koskovich @ 2026-04-22 13:04 ` Konrad Dybcio 2026-04-23 20:27 ` Alexander Koskovich 2026-04-22 13:04 ` Konrad Dybcio 1 sibling, 1 reply; 15+ messages in thread From: Konrad Dybcio @ 2026-04-22 13:04 UTC (permalink / raw) To: Alexander Koskovich, 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 On 16-Apr-26 13:05, Alexander Koskovich wrote: > 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 | 296 ++++++++++++++++++++++++++++++ > drivers/gpu/drm/msm/adreno/adreno_gpu.h | 5 + > 2 files changed, 301 insertions(+) > > diff --git a/drivers/gpu/drm/msm/adreno/a6xx_catalog.c b/drivers/gpu/drm/msm/adreno/a6xx_catalog.c > index 550ff3a9b82e..1190804632d6 100644 > --- a/drivers/gpu/drm/msm/adreno/a6xx_catalog.c > +++ b/drivers/gpu/drm/msm/adreno/a6xx_catalog.c > @@ -1799,6 +1799,259 @@ 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[] = { To align with the latest kgsl which includes all the latest recommendations, remove: { REG_A8XX_SP_READ_SEL, 0x0001ff00, BIT(PIPE_NONE) }, { REG_A8XX_TPL1_DBG_ECO_CNTL, 0x10000000, BIT(PIPE_NONE) }, { REG_A8XX_TPL1_DBG_ECO_CNTL1, 0x00000724, BIT(PIPE_NONE) }, { REG_A8XX_UCHE_CACHE_WAYS, 0x00080000, BIT(PIPE_NONE) }, { REG_A8XX_VSC_BIN_SIZE, 0x00010001, BIT(PIPE_NONE) }, and add: (below RB_CCU_CNTL) { REG_A8XX_RB_CCU_DBG_ECO_CNTL, 0x00002200, BIT(PIPE_BR) }, (swap in place) { REG_A8XX_TPL1_DBG_ECO_CNTL, 0x10100000, BIT(PIPE_NONE) }, { REG_A8XX_TPL1_DBG_ECO_CNTL1, 0x04000724, BIT(PIPE_NONE) }, (below UCHE_CCHE_CACHE_WAYS) { REG_A8XX_UCHE_HW_DBG_CNTL, BIT(8), BIT(PIPE_NONE) }, (below RB_GC_GMEM_PROTECT) { REG_A8XX_RB_CCU_DBG_ECO_CNTL, 0x00002200, BIT(PIPE_BR) }, (The order doesn't actually matter but it'll be easier to diff) Konrad ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH RFC v4 6/7] drm/msm/adreno: add Adreno 810 GPU support 2026-04-22 13:04 ` Konrad Dybcio @ 2026-04-23 20:27 ` Alexander Koskovich 2026-04-24 9:42 ` Konrad Dybcio 0 siblings, 1 reply; 15+ messages in thread From: Alexander Koskovich @ 2026-04-23 20:27 UTC (permalink / raw) To: Konrad Dybcio Cc: 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, Luca Weiss, linux-arm-msm, dri-devel, freedreno, devicetree, linux-kernel On Wednesday, April 22nd, 2026 at 9:04 AM, Konrad Dybcio <konrad.dybcio@oss.qualcomm.com> wrote: > > > On 16-Apr-26 13:05, Alexander Koskovich wrote: > > 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 | 296 ++++++++++++++++++++++++++++++ > > drivers/gpu/drm/msm/adreno/adreno_gpu.h | 5 + > > 2 files changed, 301 insertions(+) > > > > diff --git a/drivers/gpu/drm/msm/adreno/a6xx_catalog.c b/drivers/gpu/drm/msm/adreno/a6xx_catalog.c > > index 550ff3a9b82e..1190804632d6 100644 > > --- a/drivers/gpu/drm/msm/adreno/a6xx_catalog.c > > +++ b/drivers/gpu/drm/msm/adreno/a6xx_catalog.c > > @@ -1799,6 +1799,259 @@ 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[] = { > > To align with the latest kgsl which includes all the latest > recommendations, remove: > > { REG_A8XX_SP_READ_SEL, 0x0001ff00, BIT(PIPE_NONE) }, > > { REG_A8XX_TPL1_DBG_ECO_CNTL, 0x10000000, BIT(PIPE_NONE) }, > { REG_A8XX_TPL1_DBG_ECO_CNTL1, 0x00000724, BIT(PIPE_NONE) }, > > { REG_A8XX_UCHE_CACHE_WAYS, 0x00080000, BIT(PIPE_NONE) }, > > { REG_A8XX_VSC_BIN_SIZE, 0x00010001, BIT(PIPE_NONE) }, > > and add: > > (below RB_CCU_CNTL) > { REG_A8XX_RB_CCU_DBG_ECO_CNTL, 0x00002200, BIT(PIPE_BR) }, > > (swap in place) > { REG_A8XX_TPL1_DBG_ECO_CNTL, 0x10100000, BIT(PIPE_NONE) }, > { REG_A8XX_TPL1_DBG_ECO_CNTL1, 0x04000724, BIT(PIPE_NONE) }, > > (below UCHE_CCHE_CACHE_WAYS) > { REG_A8XX_UCHE_HW_DBG_CNTL, BIT(8), BIT(PIPE_NONE) }, > > (below RB_GC_GMEM_PROTECT) > { REG_A8XX_RB_CCU_DBG_ECO_CNTL, 0x00002200, BIT(PIPE_BR) }, Just wanted to clarify if this was a typo, since you also asked for RB_CCU_DBG_ECO_CNTL below RB_CCU_CNTL as well. > > (The order doesn't actually matter but it'll be easier to diff) > > Konrad > Thanks, Alex ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH RFC v4 6/7] drm/msm/adreno: add Adreno 810 GPU support 2026-04-23 20:27 ` Alexander Koskovich @ 2026-04-24 9:42 ` Konrad Dybcio 0 siblings, 0 replies; 15+ messages in thread From: Konrad Dybcio @ 2026-04-24 9:42 UTC (permalink / raw) To: Alexander Koskovich Cc: 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, Luca Weiss, linux-arm-msm, dri-devel, freedreno, devicetree, linux-kernel On 4/23/26 10:27 PM, Alexander Koskovich wrote: > On Wednesday, April 22nd, 2026 at 9:04 AM, Konrad Dybcio <konrad.dybcio@oss.qualcomm.com> wrote: > >> >> >> On 16-Apr-26 13:05, Alexander Koskovich wrote: >>> 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 | 296 ++++++++++++++++++++++++++++++ >>> drivers/gpu/drm/msm/adreno/adreno_gpu.h | 5 + >>> 2 files changed, 301 insertions(+) >>> >>> diff --git a/drivers/gpu/drm/msm/adreno/a6xx_catalog.c b/drivers/gpu/drm/msm/adreno/a6xx_catalog.c >>> index 550ff3a9b82e..1190804632d6 100644 >>> --- a/drivers/gpu/drm/msm/adreno/a6xx_catalog.c >>> +++ b/drivers/gpu/drm/msm/adreno/a6xx_catalog.c >>> @@ -1799,6 +1799,259 @@ 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[] = { >> >> To align with the latest kgsl which includes all the latest >> recommendations, remove: >> >> { REG_A8XX_SP_READ_SEL, 0x0001ff00, BIT(PIPE_NONE) }, >> >> { REG_A8XX_TPL1_DBG_ECO_CNTL, 0x10000000, BIT(PIPE_NONE) }, >> { REG_A8XX_TPL1_DBG_ECO_CNTL1, 0x00000724, BIT(PIPE_NONE) }, >> >> { REG_A8XX_UCHE_CACHE_WAYS, 0x00080000, BIT(PIPE_NONE) }, >> >> { REG_A8XX_VSC_BIN_SIZE, 0x00010001, BIT(PIPE_NONE) }, >> >> and add: >> >> (below RB_CCU_CNTL) >> { REG_A8XX_RB_CCU_DBG_ECO_CNTL, 0x00002200, BIT(PIPE_BR) }, >> >> (swap in place) >> { REG_A8XX_TPL1_DBG_ECO_CNTL, 0x10100000, BIT(PIPE_NONE) }, >> { REG_A8XX_TPL1_DBG_ECO_CNTL1, 0x04000724, BIT(PIPE_NONE) }, >> >> (below UCHE_CCHE_CACHE_WAYS) >> { REG_A8XX_UCHE_HW_DBG_CNTL, BIT(8), BIT(PIPE_NONE) }, >> >> (below RB_GC_GMEM_PROTECT) >> { REG_A8XX_RB_CCU_DBG_ECO_CNTL, 0x00002200, BIT(PIPE_BR) }, > > Just wanted to clarify if this was a typo, since you also asked for RB_CCU_DBG_ECO_CNTL below RB_CCU_CNTL as well. Looks like kgsl has a duplicate entry here. Just one is enough! Konrad ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH RFC v4 6/7] drm/msm/adreno: add Adreno 810 GPU support 2026-04-16 11:05 ` [PATCH RFC v4 6/7] drm/msm/adreno: add Adreno 810 GPU support Alexander Koskovich 2026-04-22 13:04 ` Konrad Dybcio @ 2026-04-22 13:04 ` Konrad Dybcio 2026-04-23 20:34 ` Alexander Koskovich 1 sibling, 1 reply; 15+ messages in thread From: Konrad Dybcio @ 2026-04-22 13:04 UTC (permalink / raw) To: Alexander Koskovich, 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 On 4/16/26 1:05 PM, Alexander Koskovich wrote: > 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> > --- [...] > +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_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_VSC_BIN_SIZE, This REG_A8XX_VSC_BIN_SIZE is removed from all lists for all chips in newer kgsl > + 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, Somewhat similarly, TPL1_NC_MODE_CNTL TPL1_DBG_ECO_CNTL TPL1_DBG_ECO_CNTL1 should be preempt+ifpc for all targets, it seems [...] > +static const u32 a810_ifpc_reglist_regs[] = { > + REG_A8XX_RBBM_NC_MODE_CNTL, > + REG_A8XX_RBBM_PERFCTR_CNTL, This list matches the expectations, modulo this RBBM_PERFCTR_CNTL and the registers I mentioned above that should be moved to the first list [...] > +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) }, + RB_CCU_DBG_ECO_CNTL to BR [...] > + .speedbins = ADRENO_SPEEDBINS( > + { 0, 0 }, > + { 242, 1 }, > + { 221, 2 }, > + ), The DTs I have all point to SMEM-based SKU checks. Did you find these numbers empirically? Konrad ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH RFC v4 6/7] drm/msm/adreno: add Adreno 810 GPU support 2026-04-22 13:04 ` Konrad Dybcio @ 2026-04-23 20:34 ` Alexander Koskovich 2026-04-24 9:40 ` Konrad Dybcio 0 siblings, 1 reply; 15+ messages in thread From: Alexander Koskovich @ 2026-04-23 20:34 UTC (permalink / raw) To: Konrad Dybcio Cc: 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, Luca Weiss, linux-arm-msm, dri-devel, freedreno, devicetree, linux-kernel On Wednesday, April 22nd, 2026 at 9:04 AM, Konrad Dybcio <konrad.dybcio@oss.qualcomm.com> wrote: > On 4/16/26 1:05 PM, Alexander Koskovich wrote: > > 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> > > --- > > [...] > > > +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_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_VSC_BIN_SIZE, > > This REG_A8XX_VSC_BIN_SIZE is removed from all lists for all chips > in newer kgsl > > > + 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, > > Somewhat similarly, > > TPL1_NC_MODE_CNTL > TPL1_DBG_ECO_CNTL > TPL1_DBG_ECO_CNTL1 > > should be preempt+ifpc for all targets, it seems > > [...] > > > +static const u32 a810_ifpc_reglist_regs[] = { > > + REG_A8XX_RBBM_NC_MODE_CNTL, > > + REG_A8XX_RBBM_PERFCTR_CNTL, > > This list matches the expectations, modulo this RBBM_PERFCTR_CNTL Note on this, added this shortly before submitting this series as requested by Akhil: https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/40613#note_3395308 Though, I've seen some perfctr stuff on list so not sure if this should be removed soon... > and the registers I mentioned above that should be moved to the > first list > > [...] > > +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) }, > > + RB_CCU_DBG_ECO_CNTL to BR > > [...] > > > + .speedbins = ADRENO_SPEEDBINS( > > + { 0, 0 }, > > + { 242, 1 }, > > + { 221, 2 }, > > + ), > > The DTs I have all point to SMEM-based SKU checks. Did you find these > numbers empirically? Yes, and I used speedbin instead as upstream doesn't support the SKU checks downstream does. Utilizing GPU_CC_FREQ_LIMIT_VAL to serve as speedbin on this platform. > > Konrad > ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH RFC v4 6/7] drm/msm/adreno: add Adreno 810 GPU support 2026-04-23 20:34 ` Alexander Koskovich @ 2026-04-24 9:40 ` Konrad Dybcio 0 siblings, 0 replies; 15+ messages in thread From: Konrad Dybcio @ 2026-04-24 9:40 UTC (permalink / raw) To: Alexander Koskovich Cc: 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, Luca Weiss, linux-arm-msm, dri-devel, freedreno, devicetree, linux-kernel On 4/23/26 10:34 PM, Alexander Koskovich wrote: > On Wednesday, April 22nd, 2026 at 9:04 AM, Konrad Dybcio <konrad.dybcio@oss.qualcomm.com> wrote: > >> On 4/16/26 1:05 PM, Alexander Koskovich wrote: >>> 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> >>> --- [...] >>> +static const u32 a810_ifpc_reglist_regs[] = { >>> + REG_A8XX_RBBM_NC_MODE_CNTL, >>> + REG_A8XX_RBBM_PERFCTR_CNTL, >> >> This list matches the expectations, modulo this RBBM_PERFCTR_CNTL > > Note on this, added this shortly before submitting this series as requested by Akhil: > https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/40613#note_3395308 Yes, I forgot about that bit. So it's OK. [...] >>> + .speedbins = ADRENO_SPEEDBINS( >>> + { 0, 0 }, >>> + { 242, 1 }, >>> + { 221, 2 }, >>> + ), >> >> The DTs I have all point to SMEM-based SKU checks. Did you find these >> numbers empirically? > > Yes, and I used speedbin instead as upstream doesn't support the SKU checks > downstream does. Utilizing GPU_CC_FREQ_LIMIT_VAL to serve as speedbin > on this platform. Hm, I'm not sure whether it's a stable identifier on this platform, or whether it just worked by change. Akhil? Konrad ^ permalink raw reply [flat|nested] 15+ messages in thread
* [PATCH RFC v4 7/7] arm64: dts: qcom: milos: Add Adreno 810 GPU and GMU nodes 2026-04-16 11:04 [PATCH RFC v4 0/7] Add support for Adreno 810 GPU Alexander Koskovich ` (5 preceding siblings ...) 2026-04-16 11:05 ` [PATCH RFC v4 6/7] drm/msm/adreno: add Adreno 810 GPU support Alexander Koskovich @ 2026-04-16 11:05 ` Alexander Koskovich 2026-04-18 17:53 ` Dmitry Baryshkov 6 siblings, 1 reply; 15+ messages in thread From: Alexander Koskovich @ 2026-04-16 11:05 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 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 | 166 ++++++++++++++++++++++++++++++++++++ 1 file changed, 166 insertions(+) diff --git a/arch/arm64/boot/dts/qcom/milos.dtsi b/arch/arm64/boot/dts/qcom/milos.dtsi index 0e7cfc12b0d2..4abaef42d7d4 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,171 @@ lpass_ag_noc: interconnect@3c40000 { qcom,bcm-voters = <&apps_bcm_voter>; }; + gpu: gpu@3d00000 { + compatible = "qcom,adreno-44010000", "qcom,adreno"; + reg = <0x0 0x03d00000 0x0 0x40000>, + <0x0 0x03d9e000 0x0 0x2000>, + <0x0 0x03d61000 0x0 0x800>; + reg-names = "kgsl_3d0_reg_memory", + "cx_mem", + "cx_dbgc"; + + 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>; + }; + }; + }; + + gmu: gmu@3d37000 { + compatible = "qcom,adreno-gmu-810.0", "qcom,adreno-gmu"; + reg = <0x0 0x03d37000 0x0 0x68000>; + 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>; + }; + }; + }; + gxclkctl: clock-controller@3d64000 { compatible = "qcom,milos-gxclkctl"; reg = <0x0 0x03d64000 0x0 0x6000>; -- 2.53.0 ^ permalink raw reply related [flat|nested] 15+ messages in thread
* Re: [PATCH RFC v4 7/7] arm64: dts: qcom: milos: Add Adreno 810 GPU and GMU nodes 2026-04-16 11:05 ` [PATCH RFC v4 7/7] arm64: dts: qcom: milos: Add Adreno 810 GPU and GMU nodes Alexander Koskovich @ 2026-04-18 17:53 ` Dmitry Baryshkov 0 siblings, 0 replies; 15+ messages in thread From: Dmitry Baryshkov @ 2026-04-18 17:53 UTC (permalink / raw) To: Alexander Koskovich Cc: 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, Luca Weiss, linux-arm-msm, dri-devel, freedreno, devicetree, linux-kernel On Thu, Apr 16, 2026 at 11:05:57AM +0000, Alexander Koskovich wrote: > 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 | 166 ++++++++++++++++++++++++++++++++++++ > 1 file changed, 166 insertions(+) > Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com> -- With best wishes Dmitry ^ permalink raw reply [flat|nested] 15+ messages in thread
end of thread, other threads:[~2026-04-24 9:43 UTC | newest] Thread overview: 15+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2026-04-16 11:04 [PATCH RFC v4 0/7] Add support for Adreno 810 GPU Alexander Koskovich 2026-04-16 11:04 ` [PATCH RFC v4 1/7] dt-bindings: display/msm/gmu: Document Adreno 810 GMU Alexander Koskovich 2026-04-16 11:05 ` [PATCH RFC v4 2/7] dt-bindings: display/msm/gpu: Document A810 GPU Alexander Koskovich 2026-04-16 11:05 ` [PATCH RFC v4 3/7] drm/msm/adreno: rename llc_mmio to cx_misc_mmio Alexander Koskovich 2026-04-16 11:05 ` [PATCH RFC v4 4/7] drm/msm/adreno: set cx_misc_mmio regardless of if platform has LLCC Alexander Koskovich 2026-04-16 11:05 ` [PATCH RFC v4 5/7] drm/msm/a8xx: use pipe protect slot 15 for last-span-unbound feature Alexander Koskovich 2026-04-16 11:05 ` [PATCH RFC v4 6/7] drm/msm/adreno: add Adreno 810 GPU support Alexander Koskovich 2026-04-22 13:04 ` Konrad Dybcio 2026-04-23 20:27 ` Alexander Koskovich 2026-04-24 9:42 ` Konrad Dybcio 2026-04-22 13:04 ` Konrad Dybcio 2026-04-23 20:34 ` Alexander Koskovich 2026-04-24 9:40 ` Konrad Dybcio 2026-04-16 11:05 ` [PATCH RFC v4 7/7] arm64: dts: qcom: milos: Add Adreno 810 GPU and GMU nodes Alexander Koskovich 2026-04-18 17:53 ` Dmitry Baryshkov
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox