* [PATCH 0/4] drm/msm/adreno: Add Adreno 620
@ 2026-10-16 12:53 Ishu Brar via B4 Relay
2026-10-16 12:53 ` [PATCH 1/4] dt-bindings: display: msm: Document Adreno 620 and its GMU Ishu Brar via B4 Relay
` (3 more replies)
0 siblings, 4 replies; 9+ messages in thread
From: Ishu Brar via B4 Relay @ 2026-10-16 12:53 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
Cc: linux-arm-msm, dri-devel, freedreno, devicetree, linux-kernel, Ishu Brar
This adds Adreno 620 GPU found in Qualcomm SM7250 (Snapdragon
765/765G/768G) to msm driver. It is A650 derivative using
a650 SQE/GMU firmware and a620_zap.mbn. On top of catalog entry it
needs two A620 specific GMU changes:
- A620 has no PDC setup from AOP, so PDC sequencer is
programmed from driver (xo/mx/cx addresses from cmd-db). Without
it RSC never acks second power-up and device hangs.
- A bandwidth table with BCM addresses of this SoC. The generic
A630 one does not exist on SM7250, so first GX performance vote
times out.
Tested on OnePlus Nord (SM7250) running mainline: the GPU, GMU and
Vulkan work. This needs the SM7250 SMMU series [1] as well, otherwise
the device is reset when the first per-process pagetable is created.
The SoC devicetree nodes are not part of this series; they will be sent
separately once the SoC dtsi is accepted.
[1] https://lore.kernel.org/all/20261016-smmu-sm7250-v1-0-e11fc0384cfa@brar.si/
Signed-off-by: Ishu Brar <patches@brar.si>
---
Ishu Brar (4):
dt-bindings: display: msm: Document Adreno 620 and its GMU
drm/msm/a6xx: Add a bandwidth table for the Adreno 620 GMU
drm/msm/a6xx: Program the PDC sequencer on Adreno 620
drm/msm/adreno: Add Adreno 620
.../devicetree/bindings/display/msm/gmu.yaml | 2 ++
.../devicetree/bindings/display/msm/gpu.yaml | 1 +
drivers/gpu/drm/msm/adreno/a6xx_catalog.c | 25 ++++++++++++++++
drivers/gpu/drm/msm/adreno/a6xx_gmu.c | 22 +++++++++++----
drivers/gpu/drm/msm/adreno/a6xx_hfi.c | 33 ++++++++++++++++++++++
drivers/gpu/drm/msm/adreno/adreno_gpu.h | 5 ++++
6 files changed, 82 insertions(+), 6 deletions(-)
---
base-commit: d024361c631b3f020a26c07d683e5103404b0fbf
change-id: 20261016-adreno-a620-faee699b382f
Best regards,
--
Ishu Brar <patches@brar.si>
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 1/4] dt-bindings: display: msm: Document Adreno 620 and its GMU
2026-10-16 12:53 [PATCH 0/4] drm/msm/adreno: Add Adreno 620 Ishu Brar via B4 Relay
@ 2026-10-16 12:53 ` Ishu Brar via B4 Relay
2026-10-17 17:47 ` Krzysztof Kozlowski
2026-10-16 12:53 ` [PATCH 2/4] drm/msm/a6xx: Add a bandwidth table for the Adreno 620 GMU Ishu Brar via B4 Relay
` (2 subsequent siblings)
3 siblings, 1 reply; 9+ messages in thread
From: Ishu Brar via B4 Relay @ 2026-10-16 12:53 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
Cc: linux-arm-msm, dri-devel, freedreno, devicetree, linux-kernel, Ishu Brar
From: Ishu Brar <patches@brar.si>
Add the Adreno 620 found in the Qualcomm SM7250 and its GMU. The GMU
has the same registers, clocks, interrupts and power domains as the
650.2 one. As on the other A6xx parts, the GPU clocks are defined in
the GMU node, so the GPU node has none.
Signed-off-by: Ishu Brar <patches@brar.si>
---
Documentation/devicetree/bindings/display/msm/gmu.yaml | 2 ++
Documentation/devicetree/bindings/display/msm/gpu.yaml | 1 +
2 files changed, 3 insertions(+)
diff --git a/Documentation/devicetree/bindings/display/msm/gmu.yaml b/Documentation/devicetree/bindings/display/msm/gmu.yaml
index 07f0e547b..3478adebd 100644
--- a/Documentation/devicetree/bindings/display/msm/gmu.yaml
+++ b/Documentation/devicetree/bindings/display/msm/gmu.yaml
@@ -217,6 +217,7 @@ allOf:
compatible:
contains:
enum:
+ - qcom,adreno-gmu-620.0
- qcom,adreno-gmu-650.2
then:
properties:
@@ -238,6 +239,7 @@ allOf:
compatible:
contains:
enum:
+ - qcom,adreno-gmu-620.0
- qcom,adreno-gmu-640.1
- qcom,adreno-gmu-650.2
then:
diff --git a/Documentation/devicetree/bindings/display/msm/gpu.yaml b/Documentation/devicetree/bindings/display/msm/gpu.yaml
index c30de7feb..cf015fdee 100644
--- a/Documentation/devicetree/bindings/display/msm/gpu.yaml
+++ b/Documentation/devicetree/bindings/display/msm/gpu.yaml
@@ -435,6 +435,7 @@ allOf:
- qcom,adreno-615.0
- qcom,adreno-618.0
- qcom,adreno-619.0
+ - qcom,adreno-620.0
- qcom,adreno-621.0
- qcom,adreno-623.0
- qcom,adreno-630.2
--
2.56.0
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 2/4] drm/msm/a6xx: Add a bandwidth table for the Adreno 620 GMU
2026-10-16 12:53 [PATCH 0/4] drm/msm/adreno: Add Adreno 620 Ishu Brar via B4 Relay
2026-10-16 12:53 ` [PATCH 1/4] dt-bindings: display: msm: Document Adreno 620 and its GMU Ishu Brar via B4 Relay
@ 2026-10-16 12:53 ` Ishu Brar via B4 Relay
2026-10-19 12:38 ` Konrad Dybcio
2026-10-16 12:53 ` [PATCH 3/4] drm/msm/a6xx: Program the PDC sequencer on Adreno 620 Ishu Brar via B4 Relay
2026-10-16 12:53 ` [PATCH 4/4] drm/msm/adreno: Add " Ishu Brar via B4 Relay
3 siblings, 1 reply; 9+ messages in thread
From: Ishu Brar via B4 Relay @ 2026-10-16 12:53 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
Cc: linux-arm-msm, dri-devel, freedreno, devicetree, linux-kernel, Ishu Brar
From: Ishu Brar <patches@brar.si>
Without an A620 specific table the GMU falls back to the generic A630
one, whose BCM addresses do not exist on SM7250, and the first GX
performance vote times out.
Like the A650 one, send a single "off" entry just to get things running,
with the BCM addresses looked up in cmd-db. Add adreno_is_a620() for the
selection.
Assisted-by: Claude
Signed-off-by: Ishu Brar <patches@brar.si>
---
drivers/gpu/drm/msm/adreno/a6xx_hfi.c | 33 +++++++++++++++++++++++++++++++++
drivers/gpu/drm/msm/adreno/adreno_gpu.h | 5 +++++
2 files changed, 38 insertions(+)
diff --git a/drivers/gpu/drm/msm/adreno/a6xx_hfi.c b/drivers/gpu/drm/msm/adreno/a6xx_hfi.c
index 6b34e704a..cab7ffc63 100644
--- a/drivers/gpu/drm/msm/adreno/a6xx_hfi.c
+++ b/drivers/gpu/drm/msm/adreno/a6xx_hfi.c
@@ -553,6 +553,37 @@ static void a650_build_bw_table(struct a6xx_hfi_msg_bw_table *msg)
msg->cnoc_cmds_data[1][0] = 0x60000001;
}
+static void a620_build_bw_table(struct a6xx_hfi_msg_bw_table *msg)
+{
+ /*
+ * Send a single "off" entry just to get things running
+ * TODO: bus scaling
+ */
+ msg->bw_level_num = 1;
+
+ msg->ddr_cmds_num = 3;
+ msg->ddr_wait_bitmask = 0x01;
+
+ msg->ddr_cmds_addrs[0] = cmd_db_read_addr("MC0");
+ msg->ddr_cmds_addrs[1] = cmd_db_read_addr("SH0");
+ msg->ddr_cmds_addrs[2] = cmd_db_read_addr("ACV");
+
+ msg->ddr_cmds_data[0][0] = 0x40000000;
+ msg->ddr_cmds_data[0][1] = 0x40000000;
+ msg->ddr_cmds_data[0][2] = 0x40000000;
+
+ /*
+ * These are the CX (CNOC) votes - these are used by the GMU but the
+ * votes are known and fixed for the target
+ */
+ msg->cnoc_cmds_num = 1;
+ msg->cnoc_wait_bitmask = 0x01;
+
+ msg->cnoc_cmds_addrs[0] = cmd_db_read_addr("CN0");
+ msg->cnoc_cmds_data[0][0] = 0x40000000;
+ msg->cnoc_cmds_data[1][0] = 0x60000001;
+}
+
static void a690_build_bw_table(struct a6xx_hfi_msg_bw_table *msg)
{
/*
@@ -818,6 +849,8 @@ static int a6xx_hfi_send_bw_table(struct a6xx_gmu *gmu)
a619_build_bw_table(msg);
else if (adreno_is_a640_family(adreno_gpu))
a640_build_bw_table(msg);
+ else if (adreno_is_a620(adreno_gpu))
+ a620_build_bw_table(msg);
else if (adreno_is_a650(adreno_gpu))
a650_build_bw_table(msg);
else if (adreno_is_7c3(adreno_gpu))
diff --git a/drivers/gpu/drm/msm/adreno/adreno_gpu.h b/drivers/gpu/drm/msm/adreno/adreno_gpu.h
index 4b2156825..b77502446 100644
--- a/drivers/gpu/drm/msm/adreno/adreno_gpu.h
+++ b/drivers/gpu/drm/msm/adreno/adreno_gpu.h
@@ -443,6 +443,11 @@ static inline int adreno_is_a619_holi(const struct adreno_gpu *gpu)
return adreno_is_a619(gpu) && adreno_has_gmu_wrapper(gpu);
}
+static inline int adreno_is_a620(const struct adreno_gpu *gpu)
+{
+ return gpu->info->chip_ids[0] == 0x06020000;
+}
+
static inline int adreno_is_a621(const struct adreno_gpu *gpu)
{
return gpu->info->chip_ids[0] == 0x06020100;
--
2.56.0
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 3/4] drm/msm/a6xx: Program the PDC sequencer on Adreno 620
2026-10-16 12:53 [PATCH 0/4] drm/msm/adreno: Add Adreno 620 Ishu Brar via B4 Relay
2026-10-16 12:53 ` [PATCH 1/4] dt-bindings: display: msm: Document Adreno 620 and its GMU Ishu Brar via B4 Relay
2026-10-16 12:53 ` [PATCH 2/4] drm/msm/a6xx: Add a bandwidth table for the Adreno 620 GMU Ishu Brar via B4 Relay
@ 2026-10-16 12:53 ` Ishu Brar via B4 Relay
2026-10-19 13:12 ` Konrad Dybcio
2026-10-16 12:53 ` [PATCH 4/4] drm/msm/adreno: Add " Ishu Brar via B4 Relay
3 siblings, 1 reply; 9+ messages in thread
From: Ishu Brar via B4 Relay @ 2026-10-16 12:53 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
Cc: linux-arm-msm, dri-devel, freedreno, devicetree, linux-kernel, Ishu Brar
From: Ishu Brar <patches@brar.si>
Unlike the rest of the A650 family, the A620 does not get its PDC set up
by AOP (the downstream devicetree has no pdc_in_aop for it). Without the
sequence, the RSC never acks the second power-up ("Unable to power on
the GPU RSC") and the device hangs.
Program the sequence from the driver, taking the xo, mx and cx resource
addresses from cmd-db instead of the hardcoded ones.
Assisted-by: Claude
Signed-off-by: Ishu Brar <patches@brar.si>
---
drivers/gpu/drm/msm/adreno/a6xx_gmu.c | 22 ++++++++++++++++------
1 file changed, 16 insertions(+), 6 deletions(-)
diff --git a/drivers/gpu/drm/msm/adreno/a6xx_gmu.c b/drivers/gpu/drm/msm/adreno/a6xx_gmu.c
index 662f09bec..e567e8027 100644
--- a/drivers/gpu/drm/msm/adreno/a6xx_gmu.c
+++ b/drivers/gpu/drm/msm/adreno/a6xx_gmu.c
@@ -686,6 +686,7 @@ static void a6xx_gmu_rpmh_init(struct a6xx_gmu *gmu)
u32 seqmem0_drv0_reg = REG_A6XX_RSCC_SEQ_MEM_0_DRV0;
void __iomem *seqptr = NULL;
uint32_t pdc_address_offset;
+ u32 mx_addr = 0x30010, cx_addr = 0x30000;
void __iomem *pdcptr;
bool pdc_in_aop = false;
@@ -697,8 +698,17 @@ static void a6xx_gmu_rpmh_init(struct a6xx_gmu *gmu)
if (IS_ERR(pdcptr))
return;
- if (adreno_is_a650_family(adreno_gpu) ||
- adreno_is_a7xx(adreno_gpu))
+ /* Unlike the rest of the A650 family, A620 has no PDC setup from AOP */
+ if (adreno_is_a620(adreno_gpu)) {
+ pdc_address_offset = cmd_db_read_addr("xo.lvl");
+ mx_addr = cmd_db_read_addr("mx.lvl");
+ cx_addr = cmd_db_read_addr("cx.lvl");
+ if (!pdc_address_offset || !mx_addr || !cx_addr) {
+ DRM_DEV_ERROR(gmu->dev, "No PDC resource addresses in cmd-db\n");
+ return;
+ }
+ } else if (adreno_is_a650_family(adreno_gpu) ||
+ adreno_is_a7xx(adreno_gpu))
pdc_in_aop = true;
else if (adreno_is_a618(adreno_gpu) || adreno_is_a640_family(adreno_gpu))
pdc_address_offset = 0x30090;
@@ -766,10 +776,10 @@ static void a6xx_gmu_rpmh_init(struct a6xx_gmu *gmu)
pdc_write(pdcptr, REG_A6XX_PDC_GPU_TCS1_CMD_WAIT_FOR_CMPL_BANK, 0);
pdc_write(pdcptr, REG_A6XX_PDC_GPU_TCS1_CONTROL, 0);
pdc_write(pdcptr, REG_A6XX_PDC_GPU_TCS1_CMD0_MSGID, 0x10108);
- pdc_write(pdcptr, REG_A6XX_PDC_GPU_TCS1_CMD0_ADDR, 0x30010);
+ pdc_write(pdcptr, REG_A6XX_PDC_GPU_TCS1_CMD0_ADDR, mx_addr);
pdc_write(pdcptr, REG_A6XX_PDC_GPU_TCS1_CMD0_DATA, 1);
pdc_write(pdcptr, REG_A6XX_PDC_GPU_TCS1_CMD0_MSGID + 4, 0x10108);
- pdc_write(pdcptr, REG_A6XX_PDC_GPU_TCS1_CMD0_ADDR + 4, 0x30000);
+ pdc_write(pdcptr, REG_A6XX_PDC_GPU_TCS1_CMD0_ADDR + 4, cx_addr);
pdc_write(pdcptr, REG_A6XX_PDC_GPU_TCS1_CMD0_DATA + 4, 0x0);
pdc_write(pdcptr, REG_A6XX_PDC_GPU_TCS1_CMD0_MSGID + 8, 0x10108);
@@ -780,11 +790,11 @@ static void a6xx_gmu_rpmh_init(struct a6xx_gmu *gmu)
pdc_write(pdcptr, REG_A6XX_PDC_GPU_TCS3_CMD_WAIT_FOR_CMPL_BANK, 0);
pdc_write(pdcptr, REG_A6XX_PDC_GPU_TCS3_CONTROL, 0);
pdc_write(pdcptr, REG_A6XX_PDC_GPU_TCS3_CMD0_MSGID, 0x10108);
- pdc_write(pdcptr, REG_A6XX_PDC_GPU_TCS3_CMD0_ADDR, 0x30010);
+ pdc_write(pdcptr, REG_A6XX_PDC_GPU_TCS3_CMD0_ADDR, mx_addr);
pdc_write(pdcptr, REG_A6XX_PDC_GPU_TCS3_CMD0_DATA, 2);
pdc_write(pdcptr, REG_A6XX_PDC_GPU_TCS3_CMD0_MSGID + 4, 0x10108);
- pdc_write(pdcptr, REG_A6XX_PDC_GPU_TCS3_CMD0_ADDR + 4, 0x30000);
+ pdc_write(pdcptr, REG_A6XX_PDC_GPU_TCS3_CMD0_ADDR + 4, cx_addr);
if (adreno_is_a618(adreno_gpu) || adreno_is_a619(adreno_gpu) ||
adreno_is_a650_family(adreno_gpu))
pdc_write(pdcptr, REG_A6XX_PDC_GPU_TCS3_CMD0_DATA + 4, 0x2);
--
2.56.0
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 4/4] drm/msm/adreno: Add Adreno 620
2026-10-16 12:53 [PATCH 0/4] drm/msm/adreno: Add Adreno 620 Ishu Brar via B4 Relay
` (2 preceding siblings ...)
2026-10-16 12:53 ` [PATCH 3/4] drm/msm/a6xx: Program the PDC sequencer on Adreno 620 Ishu Brar via B4 Relay
@ 2026-10-16 12:53 ` Ishu Brar via B4 Relay
2026-10-19 13:23 ` Konrad Dybcio
3 siblings, 1 reply; 9+ messages in thread
From: Ishu Brar via B4 Relay @ 2026-10-16 12:53 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
Cc: linux-arm-msm, dri-devel, freedreno, devicetree, linux-kernel, Ishu Brar
From: Ishu Brar <patches@brar.si>
Add the catalog entry for the Adreno 620 (chip id 0x06020000) found in
the Snapdragon 765/765G/768G (SM7250). It is an A650 derivative and
uses its SQE and GMU firmware and protect table, together with the A620
zap shader.
The speed-bin fuse values map to the OPP bins as in the downstream
"lito" devicetree: fuse 0 is the default bin and fuse 132 and 115 are
the two alternate ones.
Tested on a OnePlus Nord (SM7250) with Vulkan.
Signed-off-by: Ishu Brar <patches@brar.si>
---
drivers/gpu/drm/msm/adreno/a6xx_catalog.c | 25 +++++++++++++++++++++++++
1 file changed, 25 insertions(+)
diff --git a/drivers/gpu/drm/msm/adreno/a6xx_catalog.c b/drivers/gpu/drm/msm/adreno/a6xx_catalog.c
index 4ef2bd6e7..45480dbf4 100644
--- a/drivers/gpu/drm/msm/adreno/a6xx_catalog.c
+++ b/drivers/gpu/drm/msm/adreno/a6xx_catalog.c
@@ -943,6 +943,31 @@ static const struct adreno_info a6xx_gpus[] = {
{ 169, 2 },
{ 180, 1 },
),
+ }, {
+ .chip_ids = ADRENO_CHIP_IDS(0x06020000),
+ .family = ADRENO_6XX_GEN3,
+ .fw = {
+ [ADRENO_FW_SQE] = "a650_sqe.fw",
+ [ADRENO_FW_GMU] = "a650_gmu.bin",
+ },
+ .gmem = SZ_512K,
+ .inactive_period = DRM_MSM_INACTIVE_PERIOD,
+ .quirks = ADRENO_QUIRK_HAS_CACHED_COHERENT |
+ ADRENO_QUIRK_HAS_HW_APRIV,
+ .funcs = &a6xx_gpu_funcs,
+ .zapfw = "a620_zap.mbn",
+ .a6xx = &(const struct a6xx_info) {
+ .hwcg = a620_hwcg,
+ .protect = &a650_protect,
+ .gbif_cx = a640_gbif,
+ .gmu_cgc_mode = 0x00020200,
+ .prim_fifo_threshold = 0x00010000,
+ },
+ .speedbins = ADRENO_SPEEDBINS(
+ { 0, 0 },
+ { 132, 1 },
+ { 115, 3 },
+ ),
}, {
.chip_ids = ADRENO_CHIP_IDS(0x06020100),
.family = ADRENO_6XX_GEN3,
--
2.56.0
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 1/4] dt-bindings: display: msm: Document Adreno 620 and its GMU
2026-10-16 12:53 ` [PATCH 1/4] dt-bindings: display: msm: Document Adreno 620 and its GMU Ishu Brar via B4 Relay
@ 2026-10-17 17:47 ` Krzysztof Kozlowski
0 siblings, 0 replies; 9+ messages in thread
From: Krzysztof Kozlowski @ 2026-10-17 17:47 UTC (permalink / raw)
To: Ishu Brar
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,
linux-arm-msm, dri-devel, freedreno, devicetree, linux-kernel
On Fri, Oct 16, 2026 at 06:23:11PM +0530, Ishu Brar wrote:
> Add the Adreno 620 found in the Qualcomm SM7250 and its GMU. The GMU
> has the same registers, clocks, interrupts and power domains as the
> 650.2 one. As on the other A6xx parts, the GPU clocks are defined in
> the GMU node, so the GPU node has none.
>
> Signed-off-by: Ishu Brar <patches@brar.si>
> ---
> Documentation/devicetree/bindings/display/msm/gmu.yaml | 2 ++
> Documentation/devicetree/bindings/display/msm/gpu.yaml | 1 +
> 2 files changed, 3 insertions(+)
Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.com>
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 2/4] drm/msm/a6xx: Add a bandwidth table for the Adreno 620 GMU
2026-10-16 12:53 ` [PATCH 2/4] drm/msm/a6xx: Add a bandwidth table for the Adreno 620 GMU Ishu Brar via B4 Relay
@ 2026-10-19 12:38 ` Konrad Dybcio
0 siblings, 0 replies; 9+ messages in thread
From: Konrad Dybcio @ 2026-10-19 12:38 UTC (permalink / raw)
To: patches, 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
Cc: linux-arm-msm, dri-devel, freedreno, devicetree, linux-kernel
On 10/16/26 2:53 PM, Ishu Brar via B4 Relay wrote:
> From: Ishu Brar <patches@brar.si>
>
> Without an A620 specific table the GMU falls back to the generic A630
> one, whose BCM addresses do not exist on SM7250, and the first GX
> performance vote times out.
>
> Like the A650 one, send a single "off" entry just to get things running,
> with the BCM addresses looked up in cmd-db. Add adreno_is_a620() for the
> selection.
>
> Assisted-by: Claude
> Signed-off-by: Ishu Brar <patches@brar.si>
> ---
> drivers/gpu/drm/msm/adreno/a6xx_hfi.c | 33 +++++++++++++++++++++++++++++++++
> drivers/gpu/drm/msm/adreno/adreno_gpu.h | 5 +++++
> 2 files changed, 38 insertions(+)
>
> diff --git a/drivers/gpu/drm/msm/adreno/a6xx_hfi.c b/drivers/gpu/drm/msm/adreno/a6xx_hfi.c
> index 6b34e704a..cab7ffc63 100644
> --- a/drivers/gpu/drm/msm/adreno/a6xx_hfi.c
> +++ b/drivers/gpu/drm/msm/adreno/a6xx_hfi.c
> @@ -553,6 +553,37 @@ static void a650_build_bw_table(struct a6xx_hfi_msg_bw_table *msg)
> msg->cnoc_cmds_data[1][0] = 0x60000001;
> }
>
> +static void a620_build_bw_table(struct a6xx_hfi_msg_bw_table *msg)
This is no longer necessary if you add .bcms in the catalog,
see a6xx_generate_bw_table()
Konrad
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 3/4] drm/msm/a6xx: Program the PDC sequencer on Adreno 620
2026-10-16 12:53 ` [PATCH 3/4] drm/msm/a6xx: Program the PDC sequencer on Adreno 620 Ishu Brar via B4 Relay
@ 2026-10-19 13:12 ` Konrad Dybcio
0 siblings, 0 replies; 9+ messages in thread
From: Konrad Dybcio @ 2026-10-19 13:12 UTC (permalink / raw)
To: patches, 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
Cc: linux-arm-msm, dri-devel, freedreno, devicetree, linux-kernel
On 10/16/26 2:53 PM, Ishu Brar via B4 Relay wrote:
> From: Ishu Brar <patches@brar.si>
>
> Unlike the rest of the A650 family, the A620 does not get its PDC set up
> by AOP (the downstream devicetree has no pdc_in_aop for it). Without the
> sequence, the RSC never acks the second power-up ("Unable to power on
> the GPU RSC") and the device hangs.
>
> Program the sequence from the driver, taking the xo, mx and cx resource
> addresses from cmd-db instead of the hardcoded ones.
>
> Assisted-by: Claude
> Signed-off-by: Ishu Brar <patches@brar.si>
> ---
There's also this hunk in kgsl:
_regwrite(cfg, PDC_GPU_TCS1_CMD0_ADDR + PDC_CMD_OFFSET * 2,
xo_resource_addr);
_regwrite(cfg, PDC_GPU_TCS1_CMD0_DATA + PDC_CMD_OFFSET * 2, 0x0);
====
if (vrm_resource_addr && adreno_is_a620(adreno_dev)) {
_regwrite(cfg, PDC_GPU_TCS1_CMD0_MSGID + PDC_CMD_OFFSET * 3,
0x10108);
_regwrite(cfg, PDC_GPU_TCS1_CMD0_ADDR + PDC_CMD_OFFSET * 3,
vrm_resource_addr + 0x4);
_regwrite(cfg, PDC_GPU_TCS1_CMD0_DATA + PDC_CMD_OFFSET * 3,
0x0);
}
====
_regwrite(cfg, PDC_GPU_TCS3_CMD_ENABLE_BANK, 7);
_regwrite(cfg, PDC_GPU_TCS3_CMD_WAIT_FOR_CMPL_BANK, 0);
_regwrite(cfg, PDC_GPU_TCS3_CONTROL, 0);
_regwrite(cfg, PDC_GPU_TCS3_CMD0_MSGID, 0x10108);
if vrm.soc exists (presumably because a620 shipped on a number of socs?)
Konrad
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 4/4] drm/msm/adreno: Add Adreno 620
2026-10-16 12:53 ` [PATCH 4/4] drm/msm/adreno: Add " Ishu Brar via B4 Relay
@ 2026-10-19 13:23 ` Konrad Dybcio
0 siblings, 0 replies; 9+ messages in thread
From: Konrad Dybcio @ 2026-10-19 13:23 UTC (permalink / raw)
To: patches, 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
Cc: linux-arm-msm, dri-devel, freedreno, devicetree, linux-kernel
On 10/16/26 2:53 PM, Ishu Brar via B4 Relay wrote:
> From: Ishu Brar <patches@brar.si>
>
> Add the catalog entry for the Adreno 620 (chip id 0x06020000) found in
> the Snapdragon 765/765G/768G (SM7250). It is an A650 derivative and
> uses its SQE and GMU firmware and protect table, together with the A620
> zap shader.
>
> The speed-bin fuse values map to the OPP bins as in the downstream
> "lito" devicetree: fuse 0 is the default bin and fuse 132 and 115 are
> the two alternate ones.
>
> Tested on a OnePlus Nord (SM7250) with Vulkan.
>
> Signed-off-by: Ishu Brar <patches@brar.si>
> ---
The protect maps differ a little, GPT says this:
- Downstream entry: {0x1c800, 0x1e7ff, NORDWR}.
- Mainline: NORDWR(0x1a800, 0x1fff) ends at 0x1c7ff. The next mainline entry is NORDWR(0x1f400, 0x443). So nothing covers 0x1c800–0x1e7ff.
- Registers there (from generated/a6xx_gmu.xml.h):
- GMU_NMI_CONTROL_STATUS (0x1cbf0)
- GMU_BOOT_SLUMBER_OPTION (0x1cbf8)
- GMU_GX_VOTE_IDX (0x1cbf9), GMU_MX_VOTE_IDX (0x1cbfa)
- GMU_DCVS_ACK_OPTION (0x1cbfc), GMU_DCVS_PERF_SETTING (0x1cbfd), GMU_DCVS_BW_SETTING (0x1cbfe), GMU_DCVS_RETURN (0x1cbff)
- GMU_CORE_FW_VERSION (0x1d3f8)
and it turns out that a650 should naturally reserve those too..
so please just add a
+ A6XX_PROTECT_NORDWR(0x1c800, 0x1fff),
in a separate commit there
Konrad
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2026-10-19 13:23 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-10-16 12:53 [PATCH 0/4] drm/msm/adreno: Add Adreno 620 Ishu Brar via B4 Relay
2026-10-16 12:53 ` [PATCH 1/4] dt-bindings: display: msm: Document Adreno 620 and its GMU Ishu Brar via B4 Relay
2026-10-17 17:47 ` Krzysztof Kozlowski
2026-10-16 12:53 ` [PATCH 2/4] drm/msm/a6xx: Add a bandwidth table for the Adreno 620 GMU Ishu Brar via B4 Relay
2026-10-19 12:38 ` Konrad Dybcio
2026-10-16 12:53 ` [PATCH 3/4] drm/msm/a6xx: Program the PDC sequencer on Adreno 620 Ishu Brar via B4 Relay
2026-10-19 13:12 ` Konrad Dybcio
2026-10-16 12:53 ` [PATCH 4/4] drm/msm/adreno: Add " Ishu Brar via B4 Relay
2026-10-19 13:23 ` Konrad Dybcio
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®