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 void modem_sw_fatal_fn(struct work_struct *work)
{
	uint32_t panic_smsm_states = SMSM_RESET | SMSM_SYSTEM_DOWNLOAD;
	uint32_t reset_smsm_states = SMSM_SYSTEM_REBOOT_USR |
					SMSM_SYSTEM_PWRDWN_USR;
	uint32_t modem_state;

	pr_err("Watchdog bite received from modem SW!\n");

	modem_state = smsm_get_state(SMSM_MODEM_STATE);

	if (modem_state & panic_smsm_states) {

		pr_err("Modem SMSM state changed to SMSM_RESET.\n"
			"Probable err_fatal on the modem. "
			"Calling subsystem restart...\n");
		log_modem_sfr();
		subsystem_restart("modem");

	} else if (modem_state & reset_smsm_states) {

		pr_err("%s: User-invoked system reset/powerdown. "
			"Resetting the SoC now.\n",
			__func__);
		kernel_restart(NULL);
	} else {
		log_modem_sfr();
		subsystem_restart("modem");
	}
}
Пример #3
0
static void restart_modem(struct modem_data *drv)
{

#ifdef FEATURE_LGE_MODEM_DEBUG_INFO
    modem_debug.modem_ssr_level = subsys_get_restart_level(drv->subsys);
#endif

	log_modem_sfr();
	drv->ignore_errors = true;
	subsystem_restart_dev(drv->subsys);
}
Пример #4
0
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");
		log_modem_sfr();
		subsystem_restart("modem");
	}
}
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
	}
}
Пример #6
0
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");
		log_modem_sfr();
		subsystem_restart("modem");
	}

	iounmap(q6_sw_wdog_addr);
}
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 void restart_modem(struct modem_data *drv)
{
	log_modem_sfr();
	drv->ignore_errors = true;
	subsystem_restart_dev(drv->subsys);
}
Пример #9
0
static void restart_modem(struct q6v4_modem *drv)
{
	log_modem_sfr();
	subsystem_restart_dev(drv->subsys);
}
static void restart_modem(void)
{
    log_modem_sfr();
    subsystem_restart("modem");
}
static void restart_modem(void)
{
	log_modem_sfr();
	subsystem_restart_dev(modem_8960_dev);
}
Пример #12
0
static void modem_fw_fatal_fn(struct work_struct *work)
{
	pr_err("Watchdog bite received from modem FW!\n");
	log_modem_sfr();
	subsystem_restart("modem");
}
Пример #13
0
static void restart_modem(void)
{
	log_modem_sfr();
	crashdebug_crash("modem");
}