ASoC: wm_adsp: Add WDT expiry IRQ handling support for Halo core
Signed-off-by: Stuart Henderson <stuarth@opensource.cirrus.com> Signed-off-by: Charles Keepax <ckeepax@opensource.cirrus.com> Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
Родитель
2ae581380e
Коммит
8bc144f90b
|
@ -242,6 +242,7 @@
|
|||
#define HALO_SCRATCH4 0x005d8
|
||||
#define HALO_CCM_CORE_CONTROL 0x41000
|
||||
#define HALO_CORE_SOFT_RESET 0x00010
|
||||
#define HALO_WDT_CONTROL 0x47000
|
||||
|
||||
/*
|
||||
* HALO MPU banks
|
||||
|
@ -291,6 +292,11 @@
|
|||
*/
|
||||
#define HALO_CORE_SOFT_RESET_MASK 0x00000001
|
||||
|
||||
/*
|
||||
* HALO_WDT_CONTROL
|
||||
*/
|
||||
#define HALO_WDT_EN_MASK 0x00000001
|
||||
|
||||
/*
|
||||
* HALO_MPU_?M_VIO_STATUS
|
||||
*/
|
||||
|
@ -3083,6 +3089,12 @@ static void wm_adsp_stop_watchdog(struct wm_adsp *dsp)
|
|||
ADSP2_WDT_ENA_MASK, 0);
|
||||
}
|
||||
|
||||
static void wm_halo_stop_watchdog(struct wm_adsp *dsp)
|
||||
{
|
||||
regmap_update_bits(dsp->regmap, dsp->base + HALO_WDT_CONTROL,
|
||||
HALO_WDT_EN_MASK, 0);
|
||||
}
|
||||
|
||||
int wm_adsp_early_event(struct snd_soc_dapm_widget *w,
|
||||
struct snd_kcontrol *kcontrol, int event)
|
||||
{
|
||||
|
@ -4379,6 +4391,22 @@ exit_unlock:
|
|||
}
|
||||
EXPORT_SYMBOL_GPL(wm_halo_bus_error);
|
||||
|
||||
irqreturn_t wm_halo_wdt_expire(int irq, void *data)
|
||||
{
|
||||
struct wm_adsp *dsp = data;
|
||||
|
||||
mutex_lock(&dsp->pwr_lock);
|
||||
|
||||
adsp_warn(dsp, "WDT Expiry Fault\n");
|
||||
wm_halo_stop_watchdog(dsp);
|
||||
wm_adsp_fatal_error(dsp);
|
||||
|
||||
mutex_unlock(&dsp->pwr_lock);
|
||||
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(wm_halo_wdt_expire);
|
||||
|
||||
struct wm_adsp_ops wm_adsp1_ops = {
|
||||
.validate_version = wm_adsp_validate_version,
|
||||
.parse_sizes = wm_adsp1_parse_sizes,
|
||||
|
@ -4454,6 +4482,7 @@ struct wm_adsp_ops wm_halo_ops = {
|
|||
.region_to_reg = wm_halo_region_to_reg,
|
||||
|
||||
.show_fw_status = wm_halo_show_fw_status,
|
||||
.stop_watchdog = wm_halo_stop_watchdog,
|
||||
|
||||
.lock_memory = wm_halo_configure_mpu,
|
||||
|
||||
|
|
|
@ -176,6 +176,7 @@ int wm_adsp_early_event(struct snd_soc_dapm_widget *w,
|
|||
|
||||
irqreturn_t wm_adsp2_bus_error(struct wm_adsp *adsp);
|
||||
irqreturn_t wm_halo_bus_error(struct wm_adsp *dsp);
|
||||
irqreturn_t wm_halo_wdt_expire(int irq, void *data);
|
||||
|
||||
int wm_adsp_event(struct snd_soc_dapm_widget *w,
|
||||
struct snd_kcontrol *kcontrol, int event);
|
||||
|
|
Загрузка…
Ссылка в новой задаче