static int modem_shutdown(const struct subsys_desc *subsys)
{
	void __iomem *q6_fw_wdog_addr;
	void __iomem *q6_sw_wdog_addr;

	/*
	 * Disable the modem watchdog since it keeps running even after the
	 * modem is shutdown.
	 */
	q6_fw_wdog_addr = ioremap_nocache(Q6_FW_WDOG_ENABLE, 4);
	if (!q6_fw_wdog_addr)
		return -ENOMEM;

	q6_sw_wdog_addr = ioremap_nocache(Q6_SW_WDOG_ENABLE, 4);
	if (!q6_sw_wdog_addr) {
		iounmap(q6_fw_wdog_addr);
		return -ENOMEM;
	}

	writel_relaxed(0x0, q6_fw_wdog_addr);
	writel_relaxed(0x0, q6_sw_wdog_addr);
	mb();
	iounmap(q6_sw_wdog_addr);
	iounmap(q6_fw_wdog_addr);

	pil_force_shutdown("modem");
	pil_force_shutdown("modem_fw");
	disable_irq_nosync(Q6FW_WDOG_EXPIRED_IRQ);
	disable_irq_nosync(Q6SW_WDOG_EXPIRED_IRQ);

	return 0;
}
Example #2
0
static int modem_shutdown(const struct subsys_data *subsys)
{
	void __iomem *q6_fw_wdog_addr;
	void __iomem *q6_sw_wdog_addr;
	int smsm_notif_unregistered = 0;

	if (!(smsm_get_state(SMSM_MODEM_STATE) & SMSM_RESET)) {
		smsm_state_cb_deregister(SMSM_MODEM_STATE, SMSM_RESET,
			smsm_state_cb, 0);
		smsm_notif_unregistered = 1;
		smsm_reset_modem(SMSM_RESET);
	}

	/*
	 * Cancel any pending wdog_check work items, since we're shutting
	 * down anyway.
	 */
	cancel_delayed_work(&modem_wdog_check_work);

	/*
	 * Disable the modem watchdog since it keeps running even after the
	 * modem is shutdown.
	 */
	q6_fw_wdog_addr = ioremap_nocache(Q6_FW_WDOG_ENABLE, 4);
	if (!q6_fw_wdog_addr)
		return -ENOMEM;

	q6_sw_wdog_addr = ioremap_nocache(Q6_SW_WDOG_ENABLE, 4);
	if (!q6_sw_wdog_addr) {
		iounmap(q6_fw_wdog_addr);
		return -ENOMEM;
	}

	writel_relaxed(0x0, q6_fw_wdog_addr);
	writel_relaxed(0x0, q6_sw_wdog_addr);
	mb();
	iounmap(q6_sw_wdog_addr);
	iounmap(q6_fw_wdog_addr);

	pil_force_shutdown("modem");
	pil_force_shutdown("modem_fw");
	disable_irq_nosync(Q6FW_WDOG_EXPIRED_IRQ);
	disable_irq_nosync(Q6SW_WDOG_EXPIRED_IRQ);

	if (smsm_notif_unregistered)
		smsm_state_cb_register(SMSM_MODEM_STATE, SMSM_RESET,
			smsm_state_cb, 0);

	return 0;
}
Example #3
0
static int gss_shutdown(const struct subsys_data *subsys)
{
	pil_force_shutdown("gss");
	disable_irq_nosync(GSS_A5_WDOG_EXPIRED);

	return 0;
}
Example #4
0
/* Subsystem handlers */
static int riva_shutdown(const struct subsys_data *subsys)
{
	pil_force_shutdown("wcnss");
	flush_delayed_work(&cancel_vote_work);

	return 0;
}
Example #5
0
static int dsps_shutdown(const struct subsys_data *subsys)
{
	pr_debug("%s\n", __func__);
	disable_irq_nosync(drv->wdog_irq);
	pil_force_shutdown(drv->pdata->pil_name);
	dsps_power_off_handler();
	return 0;
}
Example #6
0
/**
 *  Shutdown function
 * called by the restart notifier
 *
 */
static int dsps_shutdown(const struct subsys_data *subsys)
{
	pr_debug("%s\n", __func__);
	dsps_suspend();
	pil_force_shutdown(drv->pdata->pil_name);
	dsps_power_off_handler();
	return 0;
}
Example #7
0
static int riva_shutdown(const struct subsys_data *subsys)
{
	pil_force_shutdown("wcnss");
	flush_delayed_work(&cancel_vote_work);
	disable_irq_nosync(RIVA_APSS_WDOG_BITE_RESET_RDY_IRQ);

	return 0;
}
Example #8
0
/* Subsystem handlers */
static int riva_shutdown(const struct subsys_data *subsys)
{
	pil_force_shutdown("wcnss");
	pr_info("[SSR] pil_force_shutdown is finished\n");
	flush_delayed_work(&cancel_vote_work);
	pr_info("[SSR] flush_delayed_work(vote) for shutdown is finished\n");

	return 0;
}
Example #9
0
static int modem_shutdown(const struct subsys_desc *subsys)
{
	struct q6v4_modem *drv = desc_to_modem(subsys);

	/* The watchdogs keep running even after the modem is shutdown */
	writel_relaxed(0x0, drv->q6_fw.wdog_base + 0x24);
	writel_relaxed(0x0, drv->q6_sw.wdog_base + 0x24);
	mb();

	if (drv->loadable) {
		pil_force_shutdown("modem");
		pil_force_shutdown("modem_fw");
	}

	disable_irq_nosync(drv->q6_fw.wdog_irq);
	disable_irq_nosync(drv->q6_sw.wdog_irq);

	return 0;
}
/* Subsystem handlers */
static int riva_shutdown(const struct subsys_desc *subsys)
{
	pr_info(MODULE_NAME "%s + \n", __FUNCTION__);
	pil_force_shutdown("wcnss");
	pr_info(MODULE_NAME "%s  pil_force_shutdown done \n", __FUNCTION__);
	flush_delayed_work(&cancel_vote_work);
	wcnss_flush_delayed_boot_votes();
	disable_irq_nosync(RIVA_APSS_WDOG_BITE_RESET_RDY_IRQ);
	pr_info(MODULE_NAME "%s - \n", __FUNCTION__);
	return 0;
}
Example #11
0
static int modem_shutdown(const struct subsys_data *subsys)
{
	void __iomem *q6_fw_wdog_addr;
	void __iomem *q6_sw_wdog_addr;

	/*
	 * Cancel any pending wdog_check work items, since we're shutting
	 * down anyway.
	 */
	cancel_delayed_work(&modem_wdog_check_work);

	/*
	 * Disable the modem watchdog since it keeps running even after the
	 * modem is shutdown.
	 */
	q6_fw_wdog_addr = ioremap_nocache(Q6_FW_WDOG_ENABLE, 4);
	if (!q6_fw_wdog_addr)
		return -ENOMEM;

	q6_sw_wdog_addr = ioremap_nocache(Q6_SW_WDOG_ENABLE, 4);
	if (!q6_sw_wdog_addr) {
		iounmap(q6_fw_wdog_addr);
		return -ENOMEM;
	}

	msm_xo_mode_vote(xo1, MSM_XO_MODE_ON);
	msm_xo_mode_vote(xo2, MSM_XO_MODE_ON);

	writel_relaxed(0x0, q6_fw_wdog_addr);
	writel_relaxed(0x0, q6_sw_wdog_addr);
	mb();
	iounmap(q6_sw_wdog_addr);
	iounmap(q6_fw_wdog_addr);

	pil_force_shutdown("modem");
	pil_force_shutdown("modem_fw");
	disable_irq_nosync(Q6FW_WDOG_EXPIRED_IRQ);
	disable_irq_nosync(Q6SW_WDOG_EXPIRED_IRQ);

	return 0;
}
Example #12
0
/**
 *  Shutdown function
 * called by the restart notifier
 *
 */
static int dsps_shutdown(const struct subsys_desc *subsys)
{
	pr_debug("%s\n", __func__);
	disable_irq_nosync(drv->wdog_irq);
	if (drv->pdata->ppss_wdog_unmasked_int_en_reg) {
		writel_relaxed(0, (drv->ppss_base+
			drv->pdata->ppss_wdog_unmasked_int_en_reg));
		mb(); /* Make sure wdog is disabled before shutting down */
	}
	pil_force_shutdown(drv->pdata->pil_name);
	dsps_power_off_handler();
	return 0;
}
Example #13
0
/* Subsystem handlers */
static int riva_shutdown(const struct subsys_data *subsys)
{
	struct platform_device *pdev = wcnss_get_platform_device();
	struct wcnss_wlan_config *pwlanconfig = wcnss_get_wlan_config();
	int    ret = -1;

	pil_force_shutdown("wcnss");

	/* proxy vote on behalf of Riva */
	if (pdev && pwlanconfig)
		ret = wcnss_wlan_power(&pdev->dev, pwlanconfig,
					WCNSS_WLAN_SWITCH_OFF);
	return ret;
}
/* Subsystem handlers */
static int riva_shutdown(const struct subsys_data *subsys)
{
    pr_info(MODULE_NAME ": riva_shutdown.\n");

    //ASUS_BSP+++ "for /data/log/ASUSEvtlog"
    ASUSEvtlog("[wcnss]: riva_shutdown.\n");
    //ASUS_BSP--- "for /data/log/ASUSEvtlog"

	pil_force_shutdown("wcnss");
	flush_delayed_work(&cancel_vote_work);
	wcnss_flush_delayed_boot_votes();
	disable_irq_nosync(RIVA_APSS_WDOG_BITE_RESET_RDY_IRQ);

	return 0;
}
Example #15
0
int subsys_q6_shutdown(const struct subsys_data *crashed_subsys)
{
    void __iomem *q6_wdog_addr =
        ioremap_nocache(Q6SS_WDOG_ENABLE, 8);

    send_q6_nmi();
    writel_relaxed(0x0, q6_wdog_addr);

    mb();
    iounmap(q6_wdog_addr);

    pil_force_shutdown("q6");
    disable_irq_nosync(LPASS_Q6SS_WDOG_EXPIRED);

    return 0;
}
int subsys_q6_shutdown(const char * const crashed_subsys)
{
    void __iomem *q6_wdog_addr =
        ioremap_nocache(Q6SS_WDOG_ENABLE, 8);

    send_q6_nmi();
    writel_relaxed(0x0, q6_wdog_addr);
    /* The write needs to go through before the q6 is shutdown. */
    mb();
    iounmap(q6_wdog_addr);

    pil_force_shutdown("q6");
    disable_irq_nosync(LPASS_Q6SS_WDOG_EXPIRED);

    if (get_restart_level() == RESET_SUBSYS_MIXED)
        smsm_reset_modem(SMSM_RESET);

    return 0;
}