[CELL] spufs: dont halt decrementer at restore step 47
No need to halt the SPE decrementer at context restore step 47, it will be done in step 7. Signed-off-by: Masato Noguchi <Masato.Noguchi@jp.sony.com> Signed-off-by: Jeremy Kerr <jk@ozlabs.org> Signed-off-by: Arnd Bergmann <arnd.bergmann@de.ibm.com>
This commit is contained in:
Родитель
a103f347a5
Коммит
cf17df223c
|
@ -974,13 +974,13 @@ static inline void terminate_spu_app(struct spu_state *csa, struct spu *spu)
|
|||
*/
|
||||
}
|
||||
|
||||
static inline void suspend_mfc(struct spu_state *csa, struct spu *spu)
|
||||
static inline void suspend_mfc_and_halt_decr(struct spu_state *csa,
|
||||
struct spu *spu)
|
||||
{
|
||||
struct spu_priv2 __iomem *priv2 = spu->priv2;
|
||||
|
||||
/* Restore, Step 7:
|
||||
* Restore, Step 47.
|
||||
* Write MFC_Cntl[Dh,Sc]='1','1' to suspend
|
||||
* Write MFC_Cntl[Dh,Sc,Sm]='1','1','0' to suspend
|
||||
* the queue and halt the decrementer.
|
||||
*/
|
||||
out_be64(&priv2->mfc_control_RW, MFC_CNTL_SUSPEND_DMA_QUEUE |
|
||||
|
@ -1397,6 +1397,18 @@ static inline void restore_ls_16kb(struct spu_state *csa, struct spu *spu)
|
|||
send_mfc_dma(spu, addr, ls_offset, size, tag, rclass, cmd);
|
||||
}
|
||||
|
||||
static inline void suspend_mfc(struct spu_state *csa, struct spu *spu)
|
||||
{
|
||||
struct spu_priv2 __iomem *priv2 = spu->priv2;
|
||||
|
||||
/* Restore, Step 47.
|
||||
* Write MFC_Cntl[Sc,Sm]='1','0' to suspend
|
||||
* the queue.
|
||||
*/
|
||||
out_be64(&priv2->mfc_control_RW, MFC_CNTL_SUSPEND_DMA_QUEUE);
|
||||
eieio();
|
||||
}
|
||||
|
||||
static inline void clear_interrupts(struct spu_state *csa, struct spu *spu)
|
||||
{
|
||||
/* Restore, Step 49:
|
||||
|
@ -1926,7 +1938,7 @@ static void harvest(struct spu_state *prev, struct spu *spu)
|
|||
set_switch_pending(prev, spu); /* Step 5. */
|
||||
stop_spu_isolate(spu); /* NEW. */
|
||||
remove_other_spu_access(prev, spu); /* Step 6. */
|
||||
suspend_mfc(prev, spu); /* Step 7. */
|
||||
suspend_mfc_and_halt_decr(prev, spu); /* Step 7. */
|
||||
wait_suspend_mfc_complete(prev, spu); /* Step 8. */
|
||||
if (!suspend_spe(prev, spu)) /* Step 9. */
|
||||
clear_spu_status(prev, spu); /* Step 10. */
|
||||
|
|
Загрузка…
Ссылка в новой задаче