diff options
author | Masato Noguchi <Masato.Noguchi@jp.sony.com> | 2008-02-07 23:50:41 -0500 |
---|---|---|
committer | Paul Mackerras <paulus@samba.org> | 2008-02-08 03:52:35 -0500 |
commit | 732377c5f5335e227171c76532613f45b4067f25 (patch) | |
tree | e0e40dea216d78612518de311880fca9495de71a /arch/powerpc/platforms/cell | |
parent | eebead5b8ff89340dc18ceec996157d0eb7d0287 (diff) |
[POWERPC] spufs: Update SPU_Status[CISHP] in backing runcntl write
Currently, the kernel may fail to restart a SPE context which
has stopped and been swapped out.
This changes spu_backing_runcntl_write to emulate the real
SPU_Status register exactly. When the SPU Run Control register
is written with SPU_RunCntl[Run] set to '1', the physical SPU
automatically sets SPU_Status[R] and clears SPU_Status[CISHP].
Signed-off-by: Masato Noguchi <Masato.Noguchi@jp.sony.com>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
Signed-off-by: Paul Mackerras <paulus@samba.org>
Diffstat (limited to 'arch/powerpc/platforms/cell')
-rw-r--r-- | arch/powerpc/platforms/cell/spufs/backing_ops.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/arch/powerpc/platforms/cell/spufs/backing_ops.c b/arch/powerpc/platforms/cell/spufs/backing_ops.c index 50d98a154aaf..64eb15b22040 100644 --- a/arch/powerpc/platforms/cell/spufs/backing_ops.c +++ b/arch/powerpc/platforms/cell/spufs/backing_ops.c | |||
@@ -288,6 +288,12 @@ static void spu_backing_runcntl_write(struct spu_context *ctx, u32 val) | |||
288 | spin_lock(&ctx->csa.register_lock); | 288 | spin_lock(&ctx->csa.register_lock); |
289 | ctx->csa.prob.spu_runcntl_RW = val; | 289 | ctx->csa.prob.spu_runcntl_RW = val; |
290 | if (val & SPU_RUNCNTL_RUNNABLE) { | 290 | if (val & SPU_RUNCNTL_RUNNABLE) { |
291 | ctx->csa.prob.spu_status_R &= | ||
292 | ~SPU_STATUS_STOPPED_BY_STOP & | ||
293 | ~SPU_STATUS_STOPPED_BY_HALT & | ||
294 | ~SPU_STATUS_SINGLE_STEP & | ||
295 | ~SPU_STATUS_INVALID_INSTR & | ||
296 | ~SPU_STATUS_INVALID_CH; | ||
291 | ctx->csa.prob.spu_status_R |= SPU_STATUS_RUNNING; | 297 | ctx->csa.prob.spu_status_R |= SPU_STATUS_RUNNING; |
292 | } else { | 298 | } else { |
293 | ctx->csa.prob.spu_status_R &= ~SPU_STATUS_RUNNING; | 299 | ctx->csa.prob.spu_status_R &= ~SPU_STATUS_RUNNING; |