static void modem_wdog_check(struct work_struct *work) { void __iomem *q6_sw_wdog_addr; u32 regval; q6_sw_wdog_addr = ioremap_nocache(Q6_SW_WDOG_ENABLE, 4); if (!q6_sw_wdog_addr) panic("Unable to check modem watchdog status.\n"); regval = readl_relaxed(q6_sw_wdog_addr); if (!regval) { #ifdef FEATURE_MODEM_RESTART_MONITOR if(get_kttech_recovery_mode() || (++modem_restart_num < MAX_MODEM_RESTART_NUM)) { pr_err("modem-8960: Modem watchdog wasn't activated!. Restarting the modem now. restart num = %d \n", modem_restart_num); restart_modem(); } else { panic("Unable to complete restarting modem \n"); } #else pr_err("modem-8960: Modem watchdog wasn't activated!. Restarting the modem now.\n"); restart_modem(); #endif } #ifdef FEATURE_MODEM_RESTART_MONITOR else { printk("modem-8960: modem watchdog status check complete"); modem_restart_num = 0; } #endif iounmap(q6_sw_wdog_addr); }
static irqreturn_t modem_wdog_bite_irq(int irq, void *dev_id) { switch (irq) { case Q6SW_WDOG_EXPIRED_IRQ: pr_err("Watchdog bite received from modem software!\n"); #ifdef FEATURE_PANTECH_WLAN_QCOM_PATCH //lee.eunsuk 20120423, SSR log_modem_sfr(); panic(MODULE_NAME "Modem crashed."); #else restart_modem(); #endif break; case Q6FW_WDOG_EXPIRED_IRQ: pr_err("Watchdog bite received from modem firmware!\n"); #ifdef FEATURE_PANTECH_WLAN_QCOM_PATCH //lee.eunsuk 20120423, SSR log_modem_sfr(); panic(MODULE_NAME "Modem crashed."); #else restart_modem(); #endif break; break; default: pr_err("%s: Unknown IRQ!\n", __func__); } return IRQ_HANDLED; }
static irqreturn_t modem_wdog_bite_irq(int irq, void *dev_id) { switch (irq) { case Q6SW_WDOG_EXPIRED_IRQ: pr_err("Watchdog bite received from modem software!\n"); if (get_restart_level() == RESET_SOC) ssr_set_restart_reason( "modem fatal: Modem SW Watchdog Bite!"); restart_modem(); break; case Q6FW_WDOG_EXPIRED_IRQ: pr_err("Watchdog bite received from modem firmware!\n"); if (get_restart_level() == RESET_SOC) ssr_set_restart_reason( "modem fatal: Modem FW Watchdog Bite!"); restart_modem(); break; break; default: pr_err("%s: Unknown IRQ!\n", __func__); } return IRQ_HANDLED; }
static irqreturn_t modem_wdog_bite_intr_handler(int irq, void *dev_id) { struct modem_data *drv = subsys_to_drv(dev_id); if (drv->ignore_errors) return IRQ_HANDLED; pr_err("Watchdog bite received from modem software!\n"); subsys_set_crash_status(drv->subsys, true); restart_modem(drv); return IRQ_HANDLED; }
static void smsm_state_cb(void *data, uint32_t old_state, uint32_t new_state) { /* Ignore if we're the one that set SMSM_RESET */ if (crash_shutdown) return; if (new_state & SMSM_RESET) { pr_err("Probable fatal error on the modem.\n"); restart_modem(); } }
static irqreturn_t modem_wdog_bite_irq(int irq, void *dev_id) { switch (irq) { case Q6SW_WDOG_EXPIRED_IRQ: pr_err("Watchdog bite received from modem software!\n"); restart_modem(); break; case Q6FW_WDOG_EXPIRED_IRQ: pr_err("Watchdog bite received from modem firmware!\n"); restart_modem(); break; break; default: pr_err("%s: Unknown IRQ!\n", __func__); } return IRQ_HANDLED; }
static irqreturn_t modem_err_fatal_intr_handler(int irq, void *dev_id) { struct modem_data *drv = subsys_to_drv(dev_id); /* Ignore if we're the one that set the force stop GPIO */ if (drv->crash_shutdown) return IRQ_HANDLED; pr_err("Fatal error on the modem.\n"); subsys_set_crash_status(drv->subsys, true); restart_modem(drv); return IRQ_HANDLED; }
static void smsm_state_cb(void *data, uint32_t old_state, uint32_t new_state) { /* Ignore if we're the one that set SMSM_RESET */ if (crash_shutdown) return; if (new_state & SMSM_RESET) { pr_err("Probable fatal error on the modem.\n"); #ifdef CONFIG_ZTE_PLATFORM smd_diag(); #endif restart_modem(); } }
static irqreturn_t modem_wdog_bite_intr_handler(int irq, void *dev_id) { struct modem_data *drv = subsys_to_drv(dev_id); if (drv->ignore_errors) return IRQ_HANDLED; pr_err("Watchdog bite received from modem software!\n"); if (drv->subsys_desc.system_debug && !gpio_get_value(drv->subsys_desc.err_fatal_gpio)) panic("%s: System ramdump requested. Triggering device restart!\n", __func__); subsys_set_crash_status(drv->subsys, true); restart_modem(drv); return IRQ_HANDLED; }
static irqreturn_t modem_wdog_bite_irq(int irq, void *dev_id) { /* Ignore if we're the one that set SMSM_RESET */ if (crash_shutdown) return IRQ_HANDLED; switch (irq) { case Q6SW_WDOG_EXPIRED_IRQ: pr_err("Watchdog bite received from modem software!\n"); restart_modem(); break; case Q6FW_WDOG_EXPIRED_IRQ: pr_err("Watchdog bite received from modem firmware!\n"); restart_modem(); break; break; default: pr_err("%s: Unknown IRQ!\n", __func__); } return IRQ_HANDLED; }
static void smsm_state_cb(void *data, uint32_t old_state, uint32_t new_state) { /* Ignore if we're the one that set SMSM_RESET */ if (crash_shutdown) return; if (new_state & SMSM_RESET) { pr_err("Probable fatal error on the modem.\n"); #ifdef FEATURE_PANTECH_WLAN_QCOM_PATCH //lee.eunsuk 20120423, SSR log_modem_sfr(); panic(MODULE_NAME "Modem crashed."); #else restart_modem(); #endif } }
static void modem_wdog_check(struct work_struct *work) { void __iomem *q6_sw_wdog_addr; u32 regval; q6_sw_wdog_addr = ioremap_nocache(Q6_SW_WDOG_ENABLE, 4); if (!q6_sw_wdog_addr) panic("Unable to check modem watchdog status.\n"); regval = readl_relaxed(q6_sw_wdog_addr); if (!regval) { pr_err("modem-8960: Modem watchdog wasn't activated!. Restarting the modem now.\n"); restart_modem(); } iounmap(q6_sw_wdog_addr); }
static irqreturn_t modem_err_fatal_intr_handler(int irq, void *dev_id) { struct modem_data *drv = subsys_to_drv(dev_id); /* */ if (drv->crash_shutdown) return IRQ_HANDLED; pr_err("Fatal error on the modem.\n"); subsys_set_crash_status(drv->subsys, true); if (check_modem_reset(drv) == 0) return IRQ_HANDLED; restart_modem(drv); return IRQ_HANDLED; }
static irqreturn_t modem_err_fatal_intr_handler(int irq, void *dev_id) { struct modem_data *drv = subsys_to_drv(dev_id); /* Ignore if we're the one that set the force stop GPIO */ if (drv->crash_shutdown) return IRQ_HANDLED; pr_err("Fatal error on the modem.\n"); subsys_set_crash_status(drv->subsys, true); restart_modem(drv); //S [VY52/VY55][bug_486] Frank_Chan add schedule_delayed_work(&drv->subsys_crash_work, msecs_to_jiffies(5000)); //E [VY52/VY55][bug_486] Frank_Chan add return IRQ_HANDLED; }
static irqreturn_t modem_err_fatal_intr_handler(int irq, void *dev_id) { struct modem_data *drv = subsys_to_drv(dev_id); /* Ignore if we're the one that set the force stop GPIO */ if (drv->crash_shutdown) return IRQ_HANDLED; if (check_modem_reset(drv) == 0) return IRQ_HANDLED; pr_err("Fatal error on the modem.\n"); #if defined(CONFIG_PRE_SELF_DIAGNOSIS) lge_pre_self_diagnosis((char *) "modem", 2, (char *) "modem fatal", (char *) "_", 20000); #endif subsys_set_crash_status(drv->subsys, true); restart_modem(drv); return IRQ_HANDLED; }
static void modem_wdog_check(struct work_struct *work) { void __iomem *q6_sw_wdog_addr; u32 regval; q6_sw_wdog_addr = ioremap_nocache(Q6_SW_WDOG_ENABLE, 4); if (!q6_sw_wdog_addr) panic("Unable to check modem watchdog status.\n"); regval = readl_relaxed(q6_sw_wdog_addr); if (!regval) { pr_err("modem-8960: Modem watchdog wasn't activated!. Restarting the modem now.\n"); #ifdef FEATURE_PANTECH_WLAN_QCOM_PATCH //lee.eunsuk 20120423, SSR log_modem_sfr(); panic(MODULE_NAME "Modem crashed."); #else restart_modem(); #endif } iounmap(q6_sw_wdog_addr); }
static irqreturn_t modem_wdog_bite_intr_handler(int irq, void *dev_id) { struct modem_data *drv = subsys_to_drv(dev_id); if (drv->ignore_errors) return IRQ_HANDLED; pr_err("Watchdog bite received from modem software!\n"); if (drv->subsys_desc.system_debug && !gpio_get_value(drv->subsys_desc.err_fatal_gpio)) panic("%s: System ramdump requested. Triggering device restart!\n", __func__); subsys_set_crash_status(drv->subsys, true); restart_modem(drv); #ifdef FEATURE_LGE_MODEM_DEBUG_INFO modem_debug.modem_ssr_level = subsys_get_restart_level(drv->subsys); if (modem_debug.modem_ssr_level != RESET_SOC) { modem_debug.modem_ssr_event = MODEM_SSR_WATCHDOG_BITE; queue_work(modem_debug.modem_ssr_queue, &modem_debug.modem_ssr_report_work); } #endif return IRQ_HANDLED; }
static irqreturn_t modem_wdog_bite_irq(int irq, void *dev_id) { struct q6v4_modem *drv = dev_id; restart_modem(drv); return IRQ_HANDLED; }
static irqreturn_t modem_wdog_bite_irq(int irq, void *dev_id) { pr_err("Watchdog bite received from modem software!\n"); restart_modem(); return IRQ_HANDLED; }
static void modem_crash_shutdown(const struct subsys_desc *subsys) { struct modem_data *drv = subsys_to_drv(subsys); drv->crash_shutdown = true; #ifdef CONFIG_LGE_HANDLE_PANIC if (!subsys_get_crash_status(drv->subsys) && (lge_get_modem_panic() != 3)) { #else if (!subsys_get_crash_status(drv->subsys)) { #endif gpio_set_value(subsys->force_stop_gpio, 1); mdelay(STOP_ACK_TIMEOUT_MS); } } static int modem_ramdump(int enable, const struct subsys_desc *subsys) { struct modem_data *drv = subsys_to_drv(subsys); int ret; if (!enable) return 0; ret = pil_boot(&drv->q6->desc); if (ret) return ret; ret = pil_do_ramdump(&drv->mba->desc, drv->ramdump_dev); if (ret < 0) pr_err("Unable to dump modem fw memory (rc = %d).\n", ret); pil_shutdown(&drv->q6->desc); return ret; } static int adsp_state_notifier_fn(struct notifier_block *this, unsigned long code, void *ss_handle) { int ret; ret = sysmon_send_event(SYSMON_SS_MODEM, "adsp", code); if (ret < 0) pr_err("%s: sysmon_send_event failed (%d).", __func__, ret); return NOTIFY_DONE; } static struct notifier_block adsp_state_notifier_block = { .notifier_call = adsp_state_notifier_fn, }; static irqreturn_t modem_wdog_bite_intr_handler(int irq, void *dev_id) { struct modem_data *drv = subsys_to_drv(dev_id); if (drv->ignore_errors) return IRQ_HANDLED; /* START : subsys_modem_restart : testmode */ if (ignore_errors_by_subsys_modem_restart) { pr_err("IGNORE watchdog bite received from modem software!\n"); return IRQ_HANDLED; } /* END : subsys_modem_restart : testmode */ if (check_modem_reset(drv) == 0) { pr_err("IGNORE watchdog bite received from modem software during check_modem_reset!\n"); return IRQ_HANDLED; } pr_err("Watchdog bite received from modem software!\n"); #if defined(CONFIG_PRE_SELF_DIAGNOSIS) lge_pre_self_diagnosis((char *) "modem", 2, (char *) "Watchdog bite Intr", (char *) "_", 20000); #endif subsys_set_crash_status(drv->subsys, true); restart_modem(drv); return IRQ_HANDLED; } static int mss_start(const struct subsys_desc *desc) { int ret; struct modem_data *drv = subsys_to_drv(desc); if (desc->is_not_loadable) return 0; INIT_COMPLETION(drv->stop_ack); ret = pil_boot(&drv->q6->desc); if (ret) return ret; ret = pil_boot(&drv->mba->desc); if (ret) pil_shutdown(&drv->q6->desc); return ret; }