|
@@ -1651,17 +1651,21 @@ DEFINE_SIMPLE_ATTRIBUTE(spufs_decr_ops, spufs_decr_get, spufs_decr_set,
|
|
static void spufs_decr_status_set(void *data, u64 val)
|
|
static void spufs_decr_status_set(void *data, u64 val)
|
|
{
|
|
{
|
|
struct spu_context *ctx = data;
|
|
struct spu_context *ctx = data;
|
|
- struct spu_lscsa *lscsa = ctx->csa.lscsa;
|
|
|
|
spu_acquire_saved(ctx);
|
|
spu_acquire_saved(ctx);
|
|
- lscsa->decr_status.slot[0] = (u32) val;
|
|
|
|
|
|
+ if (val)
|
|
|
|
+ ctx->csa.priv2.mfc_control_RW |= MFC_CNTL_DECREMENTER_RUNNING;
|
|
|
|
+ else
|
|
|
|
+ ctx->csa.priv2.mfc_control_RW &= ~MFC_CNTL_DECREMENTER_RUNNING;
|
|
spu_release_saved(ctx);
|
|
spu_release_saved(ctx);
|
|
}
|
|
}
|
|
|
|
|
|
static u64 __spufs_decr_status_get(void *data)
|
|
static u64 __spufs_decr_status_get(void *data)
|
|
{
|
|
{
|
|
struct spu_context *ctx = data;
|
|
struct spu_context *ctx = data;
|
|
- struct spu_lscsa *lscsa = ctx->csa.lscsa;
|
|
|
|
- return lscsa->decr_status.slot[0];
|
|
|
|
|
|
+ if (ctx->csa.priv2.mfc_control_RW & MFC_CNTL_DECREMENTER_RUNNING)
|
|
|
|
+ return SPU_DECR_STATUS_RUNNING;
|
|
|
|
+ else
|
|
|
|
+ return 0;
|
|
}
|
|
}
|
|
|
|
|
|
static u64 spufs_decr_status_get(void *data)
|
|
static u64 spufs_decr_status_get(void *data)
|