mirror of
https://github.com/torvalds/linux.git
synced 2026-05-27 16:44:58 +02:00
drm/msm: adreno: fix deferencing ifpc_reglist when not declared
On plaforms with an a7xx GPU not supporting IFPC, the ifpc_reglist
if still deferenced in a7xx_patch_pwrup_reglist() which causes
a kernel crash:
Unable to handle kernel NULL pointer dereference at virtual address 0000000000000008
...
pc : a6xx_hw_init+0x155c/0x1e4c [msm]
lr : a6xx_hw_init+0x9a8/0x1e4c [msm]
...
Call trace:
a6xx_hw_init+0x155c/0x1e4c [msm] (P)
msm_gpu_hw_init+0x58/0x88 [msm]
adreno_load_gpu+0x94/0x1fc [msm]
msm_open+0xe4/0xf4 [msm]
drm_file_alloc+0x1a0/0x2e4 [drm]
drm_client_init+0x7c/0x104 [drm]
drm_fbdev_client_setup+0x94/0xcf0 [drm_client_lib]
drm_client_setup+0xb4/0xd8 [drm_client_lib]
msm_drm_kms_post_init+0x2c/0x3c [msm]
msm_drm_init+0x1a4/0x228 [msm]
msm_drm_bind+0x30/0x3c [msm]
...
Check the validity of ifpc_reglist before deferencing the table
to setup the register values.
Fixes: a6a0157cc6 ("drm/msm/a6xx: Enable IFPC on Adreno X1-85")
Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
Reviewed-by: Akhil P Oommen <akhilpo@oss.qualcomm.com>
Patchwork: https://patchwork.freedesktop.org/patch/688944/
Message-ID: <20251117-topic-sm8x50-fix-a6xx-non-ifpc-v1-1-e4473cbf5903@linaro.org>
Signed-off-by: Rob Clark <robin.clark@oss.qualcomm.com>
This commit is contained in:
parent
7bc29d5fb6
commit
129049d4fe
|
|
@ -873,15 +873,17 @@ static void a7xx_patch_pwrup_reglist(struct msm_gpu *gpu)
|
|||
lock->gpu_req = lock->cpu_req = lock->turn = 0;
|
||||
|
||||
reglist = adreno_gpu->info->a6xx->ifpc_reglist;
|
||||
lock->ifpc_list_len = reglist->count;
|
||||
if (reglist) {
|
||||
lock->ifpc_list_len = reglist->count;
|
||||
|
||||
/*
|
||||
* For each entry in each of the lists, write the offset and the current
|
||||
* register value into the GPU buffer
|
||||
*/
|
||||
for (i = 0; i < reglist->count; i++) {
|
||||
*dest++ = reglist->regs[i];
|
||||
*dest++ = gpu_read(gpu, reglist->regs[i]);
|
||||
/*
|
||||
* For each entry in each of the lists, write the offset and the current
|
||||
* register value into the GPU buffer
|
||||
*/
|
||||
for (i = 0; i < reglist->count; i++) {
|
||||
*dest++ = reglist->regs[i];
|
||||
*dest++ = gpu_read(gpu, reglist->regs[i]);
|
||||
}
|
||||
}
|
||||
|
||||
reglist = adreno_gpu->info->a6xx->pwrup_reglist;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user