|
|
@@ -3819,11 +3819,13 @@ irqreturn_t wm_adsp2_bus_error(struct wm_adsp *dsp)
|
|
|
struct regmap *regmap = dsp->regmap;
|
|
|
int ret = 0;
|
|
|
|
|
|
+ mutex_lock(&dsp->pwr_lock);
|
|
|
+
|
|
|
ret = regmap_read(regmap, dsp->base + ADSP2_LOCK_REGION_CTRL, &val);
|
|
|
if (ret) {
|
|
|
adsp_err(dsp,
|
|
|
"Failed to read Region Lock Ctrl register: %d\n", ret);
|
|
|
- return IRQ_HANDLED;
|
|
|
+ goto error;
|
|
|
}
|
|
|
|
|
|
if (val & ADSP2_WDT_TIMEOUT_STS_MASK) {
|
|
|
@@ -3842,7 +3844,7 @@ irqreturn_t wm_adsp2_bus_error(struct wm_adsp *dsp)
|
|
|
adsp_err(dsp,
|
|
|
"Failed to read Bus Err Addr register: %d\n",
|
|
|
ret);
|
|
|
- return IRQ_HANDLED;
|
|
|
+ goto error;
|
|
|
}
|
|
|
|
|
|
adsp_err(dsp, "bus error address = 0x%x\n",
|
|
|
@@ -3855,7 +3857,7 @@ irqreturn_t wm_adsp2_bus_error(struct wm_adsp *dsp)
|
|
|
adsp_err(dsp,
|
|
|
"Failed to read Pmem Xmem Err Addr register: %d\n",
|
|
|
ret);
|
|
|
- return IRQ_HANDLED;
|
|
|
+ goto error;
|
|
|
}
|
|
|
|
|
|
adsp_err(dsp, "xmem error address = 0x%x\n",
|
|
|
@@ -3868,6 +3870,9 @@ irqreturn_t wm_adsp2_bus_error(struct wm_adsp *dsp)
|
|
|
regmap_update_bits(regmap, dsp->base + ADSP2_LOCK_REGION_CTRL,
|
|
|
ADSP2_CTRL_ERR_EINT, ADSP2_CTRL_ERR_EINT);
|
|
|
|
|
|
+error:
|
|
|
+ mutex_unlock(&dsp->pwr_lock);
|
|
|
+
|
|
|
return IRQ_HANDLED;
|
|
|
}
|
|
|
EXPORT_SYMBOL_GPL(wm_adsp2_bus_error);
|