summaryrefslogtreecommitdiff
path: root/drivers/staging/fsl_pme2/pme2_ctrl.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/staging/fsl_pme2/pme2_ctrl.c')
-rw-r--r--drivers/staging/fsl_pme2/pme2_ctrl.c23
1 files changed, 20 insertions, 3 deletions
diff --git a/drivers/staging/fsl_pme2/pme2_ctrl.c b/drivers/staging/fsl_pme2/pme2_ctrl.c
index 9901fe6..016648c 100644
--- a/drivers/staging/fsl_pme2/pme2_ctrl.c
+++ b/drivers/staging/fsl_pme2/pme2_ctrl.c
@@ -340,8 +340,8 @@ static int of_fsl_pme_probe(struct platform_device *ofdev)
if (likely(pme_err_irq != NO_IRQ)) {
/* Register the pme ISR handler */
- err = request_irq(pme_err_irq, pme_isr, IRQF_SHARED, "pme-err",
- dev);
+ err = request_irq(pme_err_irq, pme_isr,
+ IRQF_SHARED | IRQF_PERCPU, "pme-err", dev);
if (err) {
dev_err(dev, "request_irq() failed\n");
goto out_unmap_ctrl_region;
@@ -473,14 +473,31 @@ void restore_all_ccsr(struct ccsr_backup_info *save_ccsr,
{
int i;
int num_regs = sizeof(save_ccsr->regdb)/sizeof(uint32_t);
-
uint32_t *pme_reg = &save_ccsr->regdb.pmfa.isr;
+#ifdef CONFIG_PM_DEBUG
+ int diff_count = 0;
+#endif
for (i = 0; i < num_regs; i++) {
+#ifdef CONFIG_PM_DEBUG
+ /* skip enable register */
+ if ((pme_reg + i) != (&save_ccsr->regdb.pmfa.faconf)) {
+ uint32_t pme_reg_val;
+ pme_reg_val = in_be32(regs + i);
+ if (pme_reg_val != *(pme_reg + i))
+ diff_count++;
+ out_be32(regs + i, *(pme_reg + i));
+ }
+#else
/* skip enable register */
if ((pme_reg + i) != (&save_ccsr->regdb.pmfa.faconf))
out_be32(regs + i, *(pme_reg + i));
+#endif
}
+
+#ifdef CONFIG_PM_DEBUG
+ pr_info("pme ccsr restore: %d registers were different\n", diff_count);
+#endif
}
void save_all_ccsr(struct ccsr_backup_info *save_ccsr, uint32_t __iomem *regs)