summaryrefslogtreecommitdiff
path: root/drivers/staging
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/staging')
-rw-r--r--drivers/staging/fsl_qbman/bman_config.c13
-rw-r--r--drivers/staging/fsl_qbman/qman_config.c12
2 files changed, 21 insertions, 4 deletions
diff --git a/drivers/staging/fsl_qbman/bman_config.c b/drivers/staging/fsl_qbman/bman_config.c
index efba359..b52f77b 100644
--- a/drivers/staging/fsl_qbman/bman_config.c
+++ b/drivers/staging/fsl_qbman/bman_config.c
@@ -670,14 +670,23 @@ static u32 saved_isdr;
static int bman_pm_suspend_noirq(struct device *dev)
{
+ uint32_t idle_state;
+
suspend_unused_bportal();
/* save isdr, disable all, clear isr */
saved_isdr = bm_err_isr_disable_read(bm);
bm_err_isr_disable_write(bm, 0xffffffff);
bm_err_isr_status_clear(bm, 0xffffffff);
- /* should be idle, otherwise abort ? */
+
+ idle_state = bm_in(STATE_IDLE);
+ if (!(idle_state & 0x1)) {
+ pr_err("Bman not idle 0x%x aborting\n", idle_state);
+ bm_err_isr_disable_write(bm, saved_isdr);
+ resume_unused_bportal();
+ return -EBUSY;
+ }
#ifdef CONFIG_PM_DEBUG
- pr_info("Bman suspend code, IDLE_STAT = 0x%x\n", bm_in(STATE_IDLE));
+ pr_info("Bman suspend code, IDLE_STAT = 0x%x\n", idle_state);
#endif
return 0;
}
diff --git a/drivers/staging/fsl_qbman/qman_config.c b/drivers/staging/fsl_qbman/qman_config.c
index 706d3ec..1056383 100644
--- a/drivers/staging/fsl_qbman/qman_config.c
+++ b/drivers/staging/fsl_qbman/qman_config.c
@@ -1094,14 +1094,22 @@ MODULE_DEVICE_TABLE(of, of_fsl_qman_ids);
static u32 saved_isdr;
static int qman_pm_suspend_noirq(struct device *dev)
{
+ uint32_t idle_state;
+
suspend_unused_qportal();
/* save isdr, disable all, clear isr */
saved_isdr = qm_err_isr_disable_read(qm);
qm_err_isr_disable_write(qm, 0xffffffff);
qm_err_isr_status_clear(qm, 0xffffffff);
- /* should be idle, otherwise abort ? */
+ idle_state = qm_in(IDLE_STAT);
+ if (!(idle_state & 0x1)) {
+ pr_err("Qman not idle 0x%x aborting\n", idle_state);
+ qm_err_isr_disable_write(qm, saved_isdr);
+ resume_unused_qportal();
+ return -EBUSY;
+ }
#ifdef CONFIG_PM_DEBUG
- pr_info("Qman suspend code, IDLE_STAT = 0x%x\n", qm_in(IDLE_STAT));
+ pr_info("Qman suspend code, IDLE_STAT = 0x%x\n", idle_state);
#endif
return 0;
}