|
@@ -622,12 +622,17 @@ static inline void save_ppuint_mb(struct spu_state *csa, struct spu *spu)
|
|
static inline void save_ch_part1(struct spu_state *csa, struct spu *spu)
|
|
static inline void save_ch_part1(struct spu_state *csa, struct spu *spu)
|
|
{
|
|
{
|
|
struct spu_priv2 __iomem *priv2 = spu->priv2;
|
|
struct spu_priv2 __iomem *priv2 = spu->priv2;
|
|
- u64 idx, ch_indices[7] = { 0UL, 1UL, 3UL, 4UL, 24UL, 25UL, 27UL };
|
|
|
|
|
|
+ u64 idx, ch_indices[7] = { 0UL, 3UL, 4UL, 24UL, 25UL, 27UL };
|
|
int i;
|
|
int i;
|
|
|
|
|
|
/* Save, Step 42:
|
|
/* Save, Step 42:
|
|
- * Save the following CH: [0,1,3,4,24,25,27]
|
|
|
|
*/
|
|
*/
|
|
|
|
+
|
|
|
|
+ /* Save CH 1, without channel count */
|
|
|
|
+ out_be64(&priv2->spu_chnlcntptr_RW, 1);
|
|
|
|
+ csa->spu_chnldata_RW[1] = in_be64(&priv2->spu_chnldata_RW);
|
|
|
|
+
|
|
|
|
+ /* Save the following CH: [0,3,4,24,25,27] */
|
|
for (i = 0; i < 7; i++) {
|
|
for (i = 0; i < 7; i++) {
|
|
idx = ch_indices[i];
|
|
idx = ch_indices[i];
|
|
out_be64(&priv2->spu_chnlcntptr_RW, idx);
|
|
out_be64(&priv2->spu_chnlcntptr_RW, idx);
|
|
@@ -1105,13 +1110,18 @@ static inline void clear_spu_status(struct spu_state *csa, struct spu *spu)
|
|
static inline void reset_ch_part1(struct spu_state *csa, struct spu *spu)
|
|
static inline void reset_ch_part1(struct spu_state *csa, struct spu *spu)
|
|
{
|
|
{
|
|
struct spu_priv2 __iomem *priv2 = spu->priv2;
|
|
struct spu_priv2 __iomem *priv2 = spu->priv2;
|
|
- u64 ch_indices[7] = { 0UL, 1UL, 3UL, 4UL, 24UL, 25UL, 27UL };
|
|
|
|
|
|
+ u64 ch_indices[7] = { 0UL, 3UL, 4UL, 24UL, 25UL, 27UL };
|
|
u64 idx;
|
|
u64 idx;
|
|
int i;
|
|
int i;
|
|
|
|
|
|
/* Restore, Step 20:
|
|
/* Restore, Step 20:
|
|
- * Reset the following CH: [0,1,3,4,24,25,27]
|
|
|
|
*/
|
|
*/
|
|
|
|
+
|
|
|
|
+ /* Reset CH 1 */
|
|
|
|
+ out_be64(&priv2->spu_chnlcntptr_RW, 1);
|
|
|
|
+ out_be64(&priv2->spu_chnldata_RW, 0UL);
|
|
|
|
+
|
|
|
|
+ /* Reset the following CH: [0,3,4,24,25,27] */
|
|
for (i = 0; i < 7; i++) {
|
|
for (i = 0; i < 7; i++) {
|
|
idx = ch_indices[i];
|
|
idx = ch_indices[i];
|
|
out_be64(&priv2->spu_chnlcntptr_RW, idx);
|
|
out_be64(&priv2->spu_chnlcntptr_RW, idx);
|
|
@@ -1572,12 +1582,17 @@ static inline void restore_decr_wrapped(struct spu_state *csa, struct spu *spu)
|
|
static inline void restore_ch_part1(struct spu_state *csa, struct spu *spu)
|
|
static inline void restore_ch_part1(struct spu_state *csa, struct spu *spu)
|
|
{
|
|
{
|
|
struct spu_priv2 __iomem *priv2 = spu->priv2;
|
|
struct spu_priv2 __iomem *priv2 = spu->priv2;
|
|
- u64 idx, ch_indices[7] = { 0UL, 1UL, 3UL, 4UL, 24UL, 25UL, 27UL };
|
|
|
|
|
|
+ u64 idx, ch_indices[7] = { 0UL, 3UL, 4UL, 24UL, 25UL, 27UL };
|
|
int i;
|
|
int i;
|
|
|
|
|
|
/* Restore, Step 59:
|
|
/* Restore, Step 59:
|
|
- * Restore the following CH: [0,1,3,4,24,25,27]
|
|
|
|
*/
|
|
*/
|
|
|
|
+
|
|
|
|
+ /* Restore CH 1 without count */
|
|
|
|
+ out_be64(&priv2->spu_chnlcntptr_RW, 1);
|
|
|
|
+ out_be64(&priv2->spu_chnldata_RW, csa->spu_chnldata_RW[1]);
|
|
|
|
+
|
|
|
|
+ /* Restore the following CH: [0,3,4,24,25,27] */
|
|
for (i = 0; i < 7; i++) {
|
|
for (i = 0; i < 7; i++) {
|
|
idx = ch_indices[i];
|
|
idx = ch_indices[i];
|
|
out_be64(&priv2->spu_chnlcntptr_RW, idx);
|
|
out_be64(&priv2->spu_chnlcntptr_RW, idx);
|