Loading sound/soc/codecs/wm_adsp.c +29 −0 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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 */ Loading Loading @@ -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) { Loading Loading @@ -4379,6 +4391,22 @@ irqreturn_t wm_halo_bus_error(struct wm_adsp *dsp) } 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, Loading Loading @@ -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, Loading sound/soc/codecs/wm_adsp.h +1 −0 Original line number Diff line number Diff line Loading @@ -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); Loading Loading
sound/soc/codecs/wm_adsp.c +29 −0 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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 */ Loading Loading @@ -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) { Loading Loading @@ -4379,6 +4391,22 @@ irqreturn_t wm_halo_bus_error(struct wm_adsp *dsp) } 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, Loading Loading @@ -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, Loading
sound/soc/codecs/wm_adsp.h +1 −0 Original line number Diff line number Diff line Loading @@ -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); Loading