[PATCH 6/7] lite5200b suspend: PIC
Domen Puncer
domen.puncer at telargo.com
Thu Mar 1 18:57:16 EST 2007
Save and restore MPC52xx PIC registers.
Signed-off-by: Domen Puncer <domen.puncer at telargo.com>
Index: grant.git/arch/powerpc/platforms/52xx/mpc52xx_pic.c
===================================================================
--- grant.git.orig/arch/powerpc/platforms/52xx/mpc52xx_pic.c
+++ grant.git/arch/powerpc/platforms/52xx/mpc52xx_pic.c
@@ -471,3 +471,45 @@ unsigned int mpc52xx_get_irq(void)
return irq_linear_revmap(mpc52xx_irqhost, irq);
}
+
+#ifdef CONFIG_PM
+/* save and restore registers for suspend to ram */
+static struct mpc52xx_intr saved_intr;
+void mpc52xx_pic_suspend(void)
+{
+ saved_intr.per_mask = in_be32(&intr->per_mask);
+ saved_intr.per_pri1 = in_be32(&intr->per_pri1);
+ saved_intr.per_pri2 = in_be32(&intr->per_pri2);
+ saved_intr.per_pri3 = in_be32(&intr->per_pri3);
+ saved_intr.ctrl = in_be32(&intr->ctrl);
+ saved_intr.main_mask = in_be32(&intr->main_mask);
+ saved_intr.main_pri1 = in_be32(&intr->main_pri1);
+ saved_intr.main_pri2 = in_be32(&intr->main_pri2);
+ saved_intr.reserved1 = in_be32(&intr->reserved1);
+ saved_intr.enc_status = in_be32(&intr->enc_status);
+ saved_intr.crit_status = in_be32(&intr->crit_status);
+ saved_intr.main_status = in_be32(&intr->main_status);
+ saved_intr.per_status = in_be32(&intr->per_status);
+ saved_intr.reserved2 = in_be32(&intr->reserved2);
+ saved_intr.per_error = in_be32(&intr->per_error);
+}
+
+void mpc52xx_pic_resume(void)
+{
+ out_be32(&intr->per_mask, saved_intr.per_mask);
+ out_be32(&intr->per_pri1, saved_intr.per_pri1);
+ out_be32(&intr->per_pri2, saved_intr.per_pri2);
+ out_be32(&intr->per_pri3, saved_intr.per_pri3);
+ out_be32(&intr->ctrl, saved_intr.ctrl);
+ out_be32(&intr->main_mask, saved_intr.main_mask);
+ out_be32(&intr->main_pri1, saved_intr.main_pri1);
+ out_be32(&intr->main_pri2, saved_intr.main_pri2);
+ out_be32(&intr->reserved1, saved_intr.reserved1);
+ out_be32(&intr->enc_status, saved_intr.enc_status);
+ out_be32(&intr->crit_status, saved_intr.crit_status);
+ out_be32(&intr->main_status, saved_intr.main_status);
+ out_be32(&intr->per_status, saved_intr.per_status);
+ out_be32(&intr->reserved2, saved_intr.reserved2);
+ out_be32(&intr->per_error, saved_intr.per_error);
+}
+#endif
More information about the Linuxppc-embedded
mailing list