From: Marcin Koƛcielnicki Date: Sun, 28 Feb 2010 23:45:38 +0000 (+0000) Subject: drm/nv50: Make ctxprog wait until interrupt handler is done. X-Git-Tag: v3.0~5042^2~84^2~9 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=3bf777bf0ab112527cea103c3681934a9f41c03d;p=platform%2Fkernel%2Flinux-amlogic.git drm/nv50: Make ctxprog wait until interrupt handler is done. This will fix races between generated ctxprogs and interrupt handler. Signed-off-by: Marcin Koƛcielnicki Signed-off-by: Ben Skeggs --- diff --git a/drivers/gpu/drm/nouveau/nv50_grctx.c b/drivers/gpu/drm/nouveau/nv50_grctx.c index d105fcd..9f909ab 100644 --- a/drivers/gpu/drm/nouveau/nv50_grctx.c +++ b/drivers/gpu/drm/nouveau/nv50_grctx.c @@ -64,6 +64,9 @@ #define CP_FLAG_ALWAYS ((2 * 32) + 13) #define CP_FLAG_ALWAYS_FALSE 0 #define CP_FLAG_ALWAYS_TRUE 1 +#define CP_FLAG_INTR ((2 * 32) + 15) +#define CP_FLAG_INTR_NOT_PENDING 0 +#define CP_FLAG_INTR_PENDING 1 #define CP_CTX 0x00100000 #define CP_CTX_COUNT 0x000f0000 @@ -214,6 +217,8 @@ nv50_grctx_init(struct nouveau_grctx *ctx) cp_name(ctx, cp_setup_save); cp_set (ctx, UNK1D, SET); cp_wait(ctx, STATUS, BUSY); + cp_wait(ctx, INTR, PENDING); + cp_bra (ctx, STATUS, BUSY, cp_setup_save); cp_set (ctx, UNK01, SET); cp_set (ctx, SWAP_DIRECTION, SAVE);