[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:
committed by
Arnd Bergmann
parent
a103f347a5
commit
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;
|
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)
|
|||||||
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)
|
|||||||
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. */
|
||||||
|
Reference in New Issue
Block a user