[PATCH 2/2] drm/msm/a7xx: Call CP_RESET_CONTEXT_STATE
Konrad Dybcio
konrad.dybcio at oss.qualcomm.com
Thu May 22 15:46:43 UTC 2025
On 5/21/25 12:28 AM, Connor Abbott wrote:
> Calling this packet is necessary when we switch contexts because there
> are various pieces of state used by userspace to synchronize between BR
> and BV that are persistent across submits and we need to make sure that
> they are in a "safe" state when switching contexts. Otherwise a
> userspace submission in one context could cause another context to
> function incorrectly and hang, effectively a denial of service (although
> without leaking data). This was missed during initial a7xx bringup.
>
> Fixes: af66706accdf ("drm/msm/a6xx: Add skeleton A7xx support")
> Signed-off-by: Connor Abbott <cwabbott0 at gmail.com>
> ---
> drivers/gpu/drm/msm/adreno/a6xx_gpu.c | 14 ++++++++++++++
> 1 file changed, 14 insertions(+)
>
> diff --git a/drivers/gpu/drm/msm/adreno/a6xx_gpu.c b/drivers/gpu/drm/msm/adreno/a6xx_gpu.c
> index 06465bc2d0b4b128cddfcfcaf1fe4252632b6777..f776e9ce43a7cdbb4ef769606ec851909b0c4cdd 100644
> --- a/drivers/gpu/drm/msm/adreno/a6xx_gpu.c
> +++ b/drivers/gpu/drm/msm/adreno/a6xx_gpu.c
> @@ -130,6 +130,20 @@ static void a6xx_set_pagetable(struct a6xx_gpu *a6xx_gpu,
> OUT_RING(ring, lower_32_bits(rbmemptr(ring, fence)));
> OUT_RING(ring, upper_32_bits(rbmemptr(ring, fence)));
> OUT_RING(ring, submit->seqno - 1);
> +
> + OUT_PKT7(ring, CP_THREAD_CONTROL, 1);
> + OUT_RING(ring, CP_SET_THREAD_BOTH);
Downstream does CP_SYNC_THREADS | CP_SET_THREAD_BOTH, fwiw
Konrad
> +
> + /* Reset state used to synchronize BR and BV */
> + OUT_PKT7(ring, CP_RESET_CONTEXT_STATE, 1);
> + OUT_RING(ring,
> + CP_RESET_CONTEXT_STATE_0_CLEAR_ON_CHIP_TS |
> + CP_RESET_CONTEXT_STATE_0_CLEAR_RESOURCE_TABLE |
> + CP_RESET_CONTEXT_STATE_0_CLEAR_BV_BR_COUNTER |
> + CP_RESET_CONTEXT_STATE_0_RESET_GLOBAL_LOCAL_TS);
> +
> + OUT_PKT7(ring, CP_THREAD_CONTROL, 1);
> + OUT_RING(ring, CP_SET_THREAD_BR);
> }
>
> if (!sysprof) {
>
More information about the dri-devel
mailing list