forked from Minki/linux
[CELL] spufs: Avoid unexpectedly restaring MFC during context save
The current SPU context saving procedure in SPUFS unexpectedly restarts MFC when halting decrementer, because MFC_CNTL[Dh] is set without MFC_CNTL[Sm]. This bug causes, for example, saving broken DMA queues. Here is a patch to fix the problem. Signed-off-by: Kazunori Asayama <asayama@sm.sony.co.jp> Signed-off-by: Jeremy Kerr <jk@ozlabs.org> Signed-off-by: Arnd Bergmann <arnd.bergmann@de.ibm.com>
This commit is contained in:
parent
d145031755
commit
49776d30ae
@ -271,7 +271,8 @@ static inline void halt_mfc_decr(struct spu_state *csa, struct spu *spu)
|
||||
* Write MFC_CNTL[Dh] set to a '1' to halt
|
||||
* the decrementer.
|
||||
*/
|
||||
out_be64(&priv2->mfc_control_RW, MFC_CNTL_DECREMENTER_HALTED);
|
||||
out_be64(&priv2->mfc_control_RW,
|
||||
MFC_CNTL_DECREMENTER_HALTED | MFC_CNTL_SUSPEND_MASK);
|
||||
eieio();
|
||||
}
|
||||
|
||||
|
@ -411,6 +411,7 @@ struct spu_priv2 {
|
||||
#define MFC_CNTL_RESUME_DMA_QUEUE (0ull << 0)
|
||||
#define MFC_CNTL_SUSPEND_DMA_QUEUE (1ull << 0)
|
||||
#define MFC_CNTL_SUSPEND_DMA_QUEUE_MASK (1ull << 0)
|
||||
#define MFC_CNTL_SUSPEND_MASK (1ull << 4)
|
||||
#define MFC_CNTL_NORMAL_DMA_QUEUE_OPERATION (0ull << 8)
|
||||
#define MFC_CNTL_SUSPEND_IN_PROGRESS (1ull << 8)
|
||||
#define MFC_CNTL_SUSPEND_COMPLETE (3ull << 8)
|
||||
|
Loading…
Reference in New Issue
Block a user