OSDN Git Service

drm/msm: a5xx: Make preemption reset case reentrant
authorMarijn Suijten <marijn.suijten@somainline.org>
Mon, 2 Nov 2020 20:02:25 +0000 (21:02 +0100)
committerRob Clark <robdclark@chromium.org>
Sat, 5 Dec 2020 16:19:15 +0000 (08:19 -0800)
commit7cc29fcdfcc8784e97c5151c848e193800ec79ac
tree4a46137d14a7da1d8f043b829ee57bca266ec057
parent05ae91d960fd2b60199ab7b671efd7868948d961
drm/msm: a5xx: Make preemption reset case reentrant

nr_rings is reset to 1, but when this function is called for a second
(and third!) time nr_rings > 1 is false, thus the else case is entered
to set up a buffer for the RPTR shadow and consequently written to
RB_RPTR_ADDR, hanging platforms without WHERE_AM_I firmware support.

Restructure the condition in such a way that shadow buffer setup only
ever happens when has_whereami is true; otherwise preemption is only
finalized when the number of ring buffers has not been reset to 1 yet.

Fixes: 8907afb476ac ("drm/msm: Allow a5xx to mark the RPTR shadow as privileged")
Signed-off-by: Marijn Suijten <marijn.suijten@somainline.org>
Tested-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@somainline.org>
Reviewed-by: Jordan Crouse <jcrouse@codeaurora.org>
Signed-off-by: Rob Clark <robdclark@chromium.org>
drivers/gpu/drm/msm/adreno/a5xx_gpu.c