* [PATCH v2 1/4] drm/msm: Fix bootup splat with separate_gpu_drm modparam
2025-09-10 20:44 [PATCH v2 0/4] drm/msm: Assorted fixes and changes Akhil P Oommen
@ 2025-09-10 20:44 ` Akhil P Oommen
2025-09-10 20:44 ` [PATCH v2 2/4] drm/msm/a6xx: Fix GMU firmware parser Akhil P Oommen
` (4 subsequent siblings)
5 siblings, 0 replies; 8+ messages in thread
From: Akhil P Oommen @ 2025-09-10 20:44 UTC (permalink / raw)
To: Rob Clark, Dmitry Baryshkov, Abhinav Kumar, Jessica Zhang,
Sean Paul, Marijn Suijten, David Airlie, Simona Vetter,
Konrad Dybcio, Jordan Crouse, Jonathan Marek, Maarten Lankhorst,
Maxime Ripard, Thomas Zimmermann
Cc: Dmitry Baryshkov, linux-arm-msm, dri-devel, freedreno,
linux-kernel, Akhil P Oommen
The drm_gem_for_each_gpuvm_bo() call from lookup_vma() accesses
drm_gem_obj.gpuva.list, which is not initialized when the drm driver
does not support DRIVER_GEM_GPUVA feature. Enable it for msm_kms
drm driver to fix the splat seen when msm.separate_gpu_drm=1 modparam
is set. Also, update the description of DRIVER_GEM_GPUVA flag to
reflect that it is also used by DRM drivers which doesn't support user
defined GPUVA bindings. For eg: msm_kms driver.
Unable to handle kernel paging request at virtual address fffffffffffffff0
Mem abort info:
ESR = 0x0000000096000006
EC = 0x25: DABT (current EL), IL = 32 bits
SET = 0, FnV = 0
EA = 0, S1PTW = 0
FSC = 0x06: level 2 translation fault
Data abort info:
ISV = 0, ISS = 0x00000006, ISS2 = 0x00000000
CM = 0, WnR = 0, TnD = 0, TagAccess = 0
GCS = 0, Overlay = 0, DirtyBit = 0, Xs = 0
swapper pgtable: 4k pages, 48-bit VAs, pgdp=0000000ad370f000
[fffffffffffffff0] pgd=0000000000000000, p4d=0000000ad4787403, pud=0000000ad4788403, pmd=0000000000000000
Internal error: Oops: 0000000096000006 [#1] SMP
CPU: 9 UID: 0 PID: 448 Comm: (udev-worker) Not tainted 6.17.0-rc4-assorted-fix-00005-g0e9bb53a2282-dirty #3 PREEMPT
pstate: a1400005 (NzCv daif +PAN -UAO -TCO +DIT -SSBS BTYPE=--)
pc : lookup_vma+0x28/0xe0 [msm]
lr : get_vma_locked+0x2c/0x128 [msm]
sp : ffff800082dab460
Call trace:
lookup_vma+0x28/0xe0 [msm] (P)
get_vma_locked+0x2c/0x128 [msm]
msm_gem_get_and_pin_iova_range+0x68/0x11c [msm]
msm_gem_get_and_pin_iova+0x18/0x24 [msm]
msm_fbdev_driver_fbdev_probe+0xd0/0x258 [msm]
__drm_fb_helper_initial_config_and_unlock+0x288/0x528 [drm_kms_helper]
drm_fb_helper_initial_config+0x44/0x54 [drm_kms_helper]
drm_fbdev_client_hotplug+0x84/0xd4 [drm_client_lib]
drm_client_register+0x58/0x9c [drm]
drm_fbdev_client_setup+0xe8/0xcf0 [drm_client_lib]
drm_client_setup+0xb4/0xd8 [drm_client_lib]
msm_drm_kms_post_init+0x2c/0x3c [msm]
msm_drm_init+0x1a8/0x22c [msm]
msm_drm_bind+0x30/0x3c [msm]
try_to_bring_up_aggregate_device+0x168/0x1d4
__component_add+0xa4/0x170
component_add+0x14/0x20
msm_dp_display_probe_tail+0x4c/0xac [msm]
msm_dp_auxbus_done_probe+0x14/0x20 [msm]
dp_aux_ep_probe+0x4c/0xf0 [drm_dp_aux_bus]
really_probe+0xbc/0x298
__driver_probe_device+0x78/0x12c
driver_probe_device+0x40/0x160
__driver_attach+0x94/0x19c
bus_for_each_dev+0x74/0xd4
driver_attach+0x24/0x30
bus_add_driver+0xe4/0x208
driver_register+0x60/0x128
__dp_aux_dp_driver_register+0x24/0x30 [drm_dp_aux_bus]
atana33xc20_init+0x20/0x1000 [panel_samsung_atna33xc20]
do_one_initcall+0x6c/0x1b0
do_init_module+0x58/0x234
load_module+0x19cc/0x1bd4
init_module_from_file+0x84/0xc4
__arm64_sys_finit_module+0x1b8/0x2cc
invoke_syscall+0x48/0x110
el0_svc_common.constprop.0+0xc8/0xe8
do_el0_svc+0x20/0x2c
el0_svc+0x34/0xf0
el0t_64_sync_handler+0xa0/0xe4
el0t_64_sync+0x198/0x19c
Code: eb0000bf 54000480 d100a003 aa0303e2 (f8418c44)
---[ end trace 0000000000000000 ]---
Fixes: 217ed15bd399 ("drm/msm: enable separate binding of GPU and display devices")
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
Signed-off-by: Akhil P Oommen <akhilpo@oss.qualcomm.com>
---
drivers/gpu/drm/msm/msm_drv.c | 1 +
include/drm/drm_drv.h | 3 ++-
2 files changed, 3 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/msm/msm_drv.c b/drivers/gpu/drm/msm/msm_drv.c
index 9dcc7a596a11d9342a515dab694bac93dc2805cb..7e977fec4100792394dccf59097a01c2b2556608 100644
--- a/drivers/gpu/drm/msm/msm_drv.c
+++ b/drivers/gpu/drm/msm/msm_drv.c
@@ -826,6 +826,7 @@ static const struct file_operations fops = {
#define DRIVER_FEATURES_KMS ( \
DRIVER_GEM | \
+ DRIVER_GEM_GPUVA | \
DRIVER_ATOMIC | \
DRIVER_MODESET | \
0 )
diff --git a/include/drm/drm_drv.h b/include/drm/drm_drv.h
index 42fc085f986dee9261f8b08c4fc7d93b8d6d9769..8729c88fd12ba76eb0084fc1a2ebccaabf377995 100644
--- a/include/drm/drm_drv.h
+++ b/include/drm/drm_drv.h
@@ -110,7 +110,8 @@ enum drm_driver_feature {
/**
* @DRIVER_GEM_GPUVA:
*
- * Driver supports user defined GPU VA bindings for GEM objects.
+ * Driver uses the drm_gpuvm infrastructure for managing GPU virtual
+ * address mappings of GEM objects.
*/
DRIVER_GEM_GPUVA = BIT(8),
/**
--
2.50.1
^ permalink raw reply [flat|nested] 8+ messages in thread* [PATCH v2 2/4] drm/msm/a6xx: Fix GMU firmware parser
2025-09-10 20:44 [PATCH v2 0/4] drm/msm: Assorted fixes and changes Akhil P Oommen
2025-09-10 20:44 ` [PATCH v2 1/4] drm/msm: Fix bootup splat with separate_gpu_drm modparam Akhil P Oommen
@ 2025-09-10 20:44 ` Akhil P Oommen
2025-09-12 12:40 ` Konrad Dybcio
2025-09-10 20:44 ` [PATCH v2 3/4] drm/msm/adreno: Add a modparam to skip GPU Akhil P Oommen
` (3 subsequent siblings)
5 siblings, 1 reply; 8+ messages in thread
From: Akhil P Oommen @ 2025-09-10 20:44 UTC (permalink / raw)
To: Rob Clark, Dmitry Baryshkov, Abhinav Kumar, Jessica Zhang,
Sean Paul, Marijn Suijten, David Airlie, Simona Vetter,
Konrad Dybcio, Jordan Crouse, Jonathan Marek, Maarten Lankhorst,
Maxime Ripard, Thomas Zimmermann
Cc: Dmitry Baryshkov, linux-arm-msm, dri-devel, freedreno,
linux-kernel, Akhil P Oommen
Current parser logic for GMU firmware assumes a dword aligned payload
size for every block. This is not true for all GMU firmwares. So, fix
this by using correct 'size' value in the calculation for the offset
for the next block's header.
Fixes: c6ed04f856a4 ("drm/msm/a6xx: A640/A650 GMU firmware path")
Signed-off-by: Akhil P Oommen <akhilpo@oss.qualcomm.com>
---
drivers/gpu/drm/msm/adreno/a6xx_gmu.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/msm/adreno/a6xx_gmu.c b/drivers/gpu/drm/msm/adreno/a6xx_gmu.c
index 28e6705c6da682c7b41c748e375dda59a6551898..4c0510cc784864da990af8cad086176a5d92ae8a 100644
--- a/drivers/gpu/drm/msm/adreno/a6xx_gmu.c
+++ b/drivers/gpu/drm/msm/adreno/a6xx_gmu.c
@@ -758,6 +758,9 @@ static bool fw_block_mem(struct a6xx_gmu_bo *bo, const struct block_header *blk)
return true;
}
+#define NEXT_BLK(blk) \
+ ((const struct block_header *)((const char *)(blk) + sizeof(*(blk)) + (blk)->size))
+
static int a6xx_gmu_fw_load(struct a6xx_gmu *gmu)
{
struct a6xx_gpu *a6xx_gpu = container_of(gmu, struct a6xx_gpu, gmu);
@@ -789,7 +792,7 @@ static int a6xx_gmu_fw_load(struct a6xx_gmu *gmu)
for (blk = (const struct block_header *) fw_image->data;
(const u8*) blk < fw_image->data + fw_image->size;
- blk = (const struct block_header *) &blk->data[blk->size >> 2]) {
+ blk = NEXT_BLK(blk)) {
if (blk->size == 0)
continue;
--
2.50.1
^ permalink raw reply [flat|nested] 8+ messages in thread* Re: [PATCH v2 2/4] drm/msm/a6xx: Fix GMU firmware parser
2025-09-10 20:44 ` [PATCH v2 2/4] drm/msm/a6xx: Fix GMU firmware parser Akhil P Oommen
@ 2025-09-12 12:40 ` Konrad Dybcio
0 siblings, 0 replies; 8+ messages in thread
From: Konrad Dybcio @ 2025-09-12 12:40 UTC (permalink / raw)
To: Akhil P Oommen, Rob Clark, Dmitry Baryshkov, Abhinav Kumar,
Jessica Zhang, Sean Paul, Marijn Suijten, David Airlie,
Simona Vetter, Konrad Dybcio, Jordan Crouse, Jonathan Marek,
Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann
Cc: Dmitry Baryshkov, linux-arm-msm, dri-devel, freedreno, linux-kernel
On 9/10/25 10:44 PM, Akhil P Oommen wrote:
> Current parser logic for GMU firmware assumes a dword aligned payload
> size for every block. This is not true for all GMU firmwares. So, fix
> this by using correct 'size' value in the calculation for the offset
> for the next block's header.
>
> Fixes: c6ed04f856a4 ("drm/msm/a6xx: A640/A650 GMU firmware path")
> Signed-off-by: Akhil P Oommen <akhilpo@oss.qualcomm.com>
> ---
I'm not sure what memcpy translates into for unaligned addresses,
but I'm going to assume it's handled properly..
Acked-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Konrad
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH v2 3/4] drm/msm/adreno: Add a modparam to skip GPU
2025-09-10 20:44 [PATCH v2 0/4] drm/msm: Assorted fixes and changes Akhil P Oommen
2025-09-10 20:44 ` [PATCH v2 1/4] drm/msm: Fix bootup splat with separate_gpu_drm modparam Akhil P Oommen
2025-09-10 20:44 ` [PATCH v2 2/4] drm/msm/a6xx: Fix GMU firmware parser Akhil P Oommen
@ 2025-09-10 20:44 ` Akhil P Oommen
2025-09-10 20:44 ` [PATCH v2 4/4] drm/msm/a6xx: Add a comment to acd_probe() Akhil P Oommen
` (2 subsequent siblings)
5 siblings, 0 replies; 8+ messages in thread
From: Akhil P Oommen @ 2025-09-10 20:44 UTC (permalink / raw)
To: Rob Clark, Dmitry Baryshkov, Abhinav Kumar, Jessica Zhang,
Sean Paul, Marijn Suijten, David Airlie, Simona Vetter,
Konrad Dybcio, Jordan Crouse, Jonathan Marek, Maarten Lankhorst,
Maxime Ripard, Thomas Zimmermann
Cc: Dmitry Baryshkov, linux-arm-msm, dri-devel, freedreno,
linux-kernel, Akhil P Oommen
During bringup of a new GPU support, it is convenient to have knob to
quickly disable GPU, but keep the display support. This helps to
fallback to 'kms_swrast' in case of bootup issues due to GPU. Add a
modparam to support this.
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
Signed-off-by: Akhil P Oommen <akhilpo@oss.qualcomm.com>
---
drivers/gpu/drm/msm/adreno/adreno_device.c | 13 +++++++++++++
1 file changed, 13 insertions(+)
diff --git a/drivers/gpu/drm/msm/adreno/adreno_device.c b/drivers/gpu/drm/msm/adreno/adreno_device.c
index 50945bfe9b4992118f23db3cd17ac348be9f9c9d..28f744f3caf7c59412aab06f912cd09a01e185ea 100644
--- a/drivers/gpu/drm/msm/adreno/adreno_device.c
+++ b/drivers/gpu/drm/msm/adreno/adreno_device.c
@@ -24,6 +24,10 @@ bool disable_acd;
MODULE_PARM_DESC(disable_acd, "Forcefully disable GPU ACD");
module_param_unsafe(disable_acd, bool, 0400);
+static bool skip_gpu;
+MODULE_PARM_DESC(no_gpu, "Disable GPU driver register (0=enable GPU driver register (default), 1=skip GPU driver register");
+module_param(skip_gpu, bool, 0400);
+
extern const struct adreno_gpulist a2xx_gpulist;
extern const struct adreno_gpulist a3xx_gpulist;
extern const struct adreno_gpulist a4xx_gpulist;
@@ -184,6 +188,9 @@ bool adreno_has_gpu(struct device_node *node)
uint32_t chip_id;
int ret;
+ if (skip_gpu)
+ return false;
+
ret = find_chipid(node, &chip_id);
if (ret)
return false;
@@ -404,10 +411,16 @@ static struct platform_driver adreno_driver = {
void __init adreno_register(void)
{
+ if (skip_gpu)
+ return;
+
platform_driver_register(&adreno_driver);
}
void __exit adreno_unregister(void)
{
+ if (skip_gpu)
+ return;
+
platform_driver_unregister(&adreno_driver);
}
--
2.50.1
^ permalink raw reply [flat|nested] 8+ messages in thread* [PATCH v2 4/4] drm/msm/a6xx: Add a comment to acd_probe()
2025-09-10 20:44 [PATCH v2 0/4] drm/msm: Assorted fixes and changes Akhil P Oommen
` (2 preceding siblings ...)
2025-09-10 20:44 ` [PATCH v2 3/4] drm/msm/adreno: Add a modparam to skip GPU Akhil P Oommen
@ 2025-09-10 20:44 ` Akhil P Oommen
2025-09-10 20:50 ` [PATCH v2 0/4] drm/msm: Assorted fixes and changes Akhil P Oommen
2025-09-10 20:55 ` Dmitry Baryshkov
5 siblings, 0 replies; 8+ messages in thread
From: Akhil P Oommen @ 2025-09-10 20:44 UTC (permalink / raw)
To: Rob Clark, Dmitry Baryshkov, Abhinav Kumar, Jessica Zhang,
Sean Paul, Marijn Suijten, David Airlie, Simona Vetter,
Konrad Dybcio, Jordan Crouse, Jonathan Marek, Maarten Lankhorst,
Maxime Ripard, Thomas Zimmermann
Cc: Dmitry Baryshkov, linux-arm-msm, dri-devel, freedreno,
linux-kernel, Akhil P Oommen, Konrad Dybcio
It is not obvious why we can skip error checking of
dev_pm_opp_find_freq_exact() API. Add a comment explaining it.
Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Signed-off-by: Akhil P Oommen <akhilpo@oss.qualcomm.com>
---
drivers/gpu/drm/msm/adreno/a6xx_gmu.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/drivers/gpu/drm/msm/adreno/a6xx_gmu.c b/drivers/gpu/drm/msm/adreno/a6xx_gmu.c
index 4c0510cc784864da990af8cad086176a5d92ae8a..f81e28fb6f2ac4b1ac15fe50cfb488572009003d 100644
--- a/drivers/gpu/drm/msm/adreno/a6xx_gmu.c
+++ b/drivers/gpu/drm/msm/adreno/a6xx_gmu.c
@@ -1695,6 +1695,10 @@ static int a6xx_gmu_acd_probe(struct a6xx_gmu *gmu)
u32 val;
freq = gmu->gpu_freqs[i];
+ /*
+ * This is not expected to fail because we are passing back a
+ * frequency which was retrieved just a bit earlier
+ */
opp = dev_pm_opp_find_freq_exact(&gpu->pdev->dev, freq, true);
np = dev_pm_opp_get_of_node(opp);
--
2.50.1
^ permalink raw reply [flat|nested] 8+ messages in thread* Re: [PATCH v2 0/4] drm/msm: Assorted fixes and changes
2025-09-10 20:44 [PATCH v2 0/4] drm/msm: Assorted fixes and changes Akhil P Oommen
` (3 preceding siblings ...)
2025-09-10 20:44 ` [PATCH v2 4/4] drm/msm/a6xx: Add a comment to acd_probe() Akhil P Oommen
@ 2025-09-10 20:50 ` Akhil P Oommen
2025-09-10 20:55 ` Dmitry Baryshkov
5 siblings, 0 replies; 8+ messages in thread
From: Akhil P Oommen @ 2025-09-10 20:50 UTC (permalink / raw)
To: Rob Clark, Dmitry Baryshkov, Abhinav Kumar, Jessica Zhang,
Sean Paul, Marijn Suijten, David Airlie, Simona Vetter,
Konrad Dybcio, Jordan Crouse, Jonathan Marek, Maarten Lankhorst,
Maxime Ripard, Thomas Zimmermann
Cc: Dmitry Baryshkov, linux-arm-msm, dri-devel, freedreno,
linux-kernel, Konrad Dybcio
On 9/11/2025 2:14 AM, Akhil P Oommen wrote:
> A few changes and fixes that were lying in my stack.
>
> Signed-off-by: Akhil P Oommen <akhilpo@oss.qualcomm.com>
> ---
> Changes in v2:
> - EDITME: describe what is new in this series revision.
> - EDITME: use bulletpoints and terse descriptions.
Oops, sent it too soon before updating the changelog:
Changes in v2:
- Update the documentation for DRM_GEM_GPUVA flag (Rob)
- Use parenthesis in Macro definition (Konrad)
- Reworded the comment in acd_probe() (Rob)
-Akhil.
> - Link to v1: https://lore.kernel.org/r/20250902-assorted-sept-1-v1-0-f3ec9baed513@oss.qualcomm.com
>
> ---
> Akhil P Oommen (4):
> drm/msm: Fix bootup splat with separate_gpu_drm modparam
> drm/msm/a6xx: Fix GMU firmware parser
> drm/msm/adreno: Add a modparam to skip GPU
> drm/msm/a6xx: Add a comment to acd_probe()
>
> drivers/gpu/drm/msm/adreno/a6xx_gmu.c | 9 ++++++++-
> drivers/gpu/drm/msm/adreno/adreno_device.c | 13 +++++++++++++
> drivers/gpu/drm/msm/msm_drv.c | 1 +
> include/drm/drm_drv.h | 3 ++-
> 4 files changed, 24 insertions(+), 2 deletions(-)
> ---
> base-commit: 5cc61f86dff464a63b6a6e4758f26557fda4d494
> change-id: 20250901-assorted-sept-1-5556f15236b8
>
> Best regards,
^ permalink raw reply [flat|nested] 8+ messages in thread* Re: [PATCH v2 0/4] drm/msm: Assorted fixes and changes
2025-09-10 20:44 [PATCH v2 0/4] drm/msm: Assorted fixes and changes Akhil P Oommen
` (4 preceding siblings ...)
2025-09-10 20:50 ` [PATCH v2 0/4] drm/msm: Assorted fixes and changes Akhil P Oommen
@ 2025-09-10 20:55 ` Dmitry Baryshkov
5 siblings, 0 replies; 8+ messages in thread
From: Dmitry Baryshkov @ 2025-09-10 20:55 UTC (permalink / raw)
To: Akhil P Oommen
Cc: Rob Clark, Dmitry Baryshkov, Abhinav Kumar, Jessica Zhang,
Sean Paul, Marijn Suijten, David Airlie, Simona Vetter,
Konrad Dybcio, Jordan Crouse, Jonathan Marek, Maarten Lankhorst,
Maxime Ripard, Thomas Zimmermann, linux-arm-msm, dri-devel,
freedreno, linux-kernel, Konrad Dybcio
On Thu, Sep 11, 2025 at 02:14:03AM +0530, Akhil P Oommen wrote:
> A few changes and fixes that were lying in my stack.
>
> Signed-off-by: Akhil P Oommen <akhilpo@oss.qualcomm.com>
> ---
> Changes in v2:
> - EDITME: describe what is new in this series revision.
> - EDITME: use bulletpoints and terse descriptions.
Wink-wink
> - Link to v1: https://lore.kernel.org/r/20250902-assorted-sept-1-v1-0-f3ec9baed513@oss.qualcomm.com
>
> ---
> Akhil P Oommen (4):
> drm/msm: Fix bootup splat with separate_gpu_drm modparam
> drm/msm/a6xx: Fix GMU firmware parser
> drm/msm/adreno: Add a modparam to skip GPU
> drm/msm/a6xx: Add a comment to acd_probe()
>
> drivers/gpu/drm/msm/adreno/a6xx_gmu.c | 9 ++++++++-
> drivers/gpu/drm/msm/adreno/adreno_device.c | 13 +++++++++++++
> drivers/gpu/drm/msm/msm_drv.c | 1 +
> include/drm/drm_drv.h | 3 ++-
> 4 files changed, 24 insertions(+), 2 deletions(-)
> ---
> base-commit: 5cc61f86dff464a63b6a6e4758f26557fda4d494
> change-id: 20250901-assorted-sept-1-5556f15236b8
>
> Best regards,
> --
> Akhil P Oommen <akhilpo@oss.qualcomm.com>
>
--
With best wishes
Dmitry
^ permalink raw reply [flat|nested] 8+ messages in thread