Commit cf17df22 authored by Masato Noguchi's avatar Masato Noguchi Committed by Arnd Bergmann

[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: default avatarMasato Noguchi <Masato.Noguchi@jp.sony.com>
Signed-off-by: default avatarJeremy Kerr <jk@ozlabs.org>
Signed-off-by: default avatarArnd Bergmann <arnd.bergmann@de.ibm.com>
parent a103f347
...@@ -974,13 +974,13 @@ static inline void terminate_spu_app(struct spu_state *csa, struct spu *spu) ...@@ -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; struct spu_priv2 __iomem *priv2 = spu->priv2;
/* Restore, Step 7: /* Restore, Step 7:
* Restore, Step 47. * Write MFC_Cntl[Dh,Sc,Sm]='1','1','0' to suspend
* Write MFC_Cntl[Dh,Sc]='1','1' to suspend
* the queue and halt the decrementer. * the queue and halt the decrementer.
*/ */
out_be64(&priv2->mfc_control_RW, MFC_CNTL_SUSPEND_DMA_QUEUE | 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) ...@@ -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); 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) static inline void clear_interrupts(struct spu_state *csa, struct spu *spu)
{ {
/* Restore, Step 49: /* Restore, Step 49:
...@@ -1926,7 +1938,7 @@ static void harvest(struct spu_state *prev, struct spu *spu) ...@@ -1926,7 +1938,7 @@ static void harvest(struct spu_state *prev, struct spu *spu)
set_switch_pending(prev, spu); /* Step 5. */ set_switch_pending(prev, spu); /* Step 5. */
stop_spu_isolate(spu); /* NEW. */ stop_spu_isolate(spu); /* NEW. */
remove_other_spu_access(prev, spu); /* Step 6. */ 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. */ wait_suspend_mfc_complete(prev, spu); /* Step 8. */
if (!suspend_spe(prev, spu)) /* Step 9. */ if (!suspend_spe(prev, spu)) /* Step 9. */
clear_spu_status(prev, spu); /* Step 10. */ clear_spu_status(prev, spu); /* Step 10. */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment