Merge "soc: qcom: ssr: add crash status to know why subsys crashed" into msm-4.4
This commit is contained in:
commit
22198ab7fc
6 changed files with 28 additions and 18 deletions
|
@ -2472,7 +2472,7 @@ void *cnss_pci_get_virt_ramdump_mem(unsigned long *size)
|
|||
void cnss_pci_device_crashed(void)
|
||||
{
|
||||
if (penv && penv->subsys) {
|
||||
subsys_set_crash_status(penv->subsys, true);
|
||||
subsys_set_crash_status(penv->subsys, CRASH_STATUS_ERR_FATAL);
|
||||
subsystem_restart_dev(penv->subsys);
|
||||
}
|
||||
}
|
||||
|
@ -2491,7 +2491,7 @@ EXPORT_SYMBOL(cnss_get_virt_ramdump_mem);
|
|||
void cnss_device_crashed(void)
|
||||
{
|
||||
if (penv && penv->subsys) {
|
||||
subsys_set_crash_status(penv->subsys, true);
|
||||
subsys_set_crash_status(penv->subsys, CRASH_STATUS_ERR_FATAL);
|
||||
subsystem_restart_dev(penv->subsys);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -605,7 +605,8 @@ void cnss_sdio_device_crashed(void)
|
|||
return;
|
||||
ssr_info = &cnss_pdata->ssr_info;
|
||||
if (ssr_info->subsys) {
|
||||
subsys_set_crash_status(ssr_info->subsys, true);
|
||||
subsys_set_crash_status(ssr_info->subsys,
|
||||
CRASH_STATUS_ERR_FATAL);
|
||||
subsystem_restart_dev(ssr_info->subsys);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -82,7 +82,7 @@ static irqreturn_t modem_err_fatal_intr_handler(int irq, void *dev_id)
|
|||
return IRQ_HANDLED;
|
||||
|
||||
pr_err("Fatal error on the modem.\n");
|
||||
subsys_set_crash_status(drv->subsys, true);
|
||||
subsys_set_crash_status(drv->subsys, CRASH_STATUS_ERR_FATAL);
|
||||
restart_modem(drv);
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
|
@ -193,7 +193,7 @@ static irqreturn_t modem_wdog_bite_intr_handler(int irq, void *dev_id)
|
|||
!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);
|
||||
subsys_set_crash_status(drv->subsys, CRASH_STATUS_WDOG_BITE);
|
||||
restart_modem(drv);
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
|
|
|
@ -876,7 +876,7 @@ static irqreturn_t subsys_err_fatal_intr_handler (int irq, void *dev_id)
|
|||
d->subsys_desc.name);
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
subsys_set_crash_status(d->subsys, true);
|
||||
subsys_set_crash_status(d->subsys, CRASH_STATUS_ERR_FATAL);
|
||||
log_failure_reason(d);
|
||||
subsystem_restart_dev(d->subsys);
|
||||
|
||||
|
@ -895,7 +895,7 @@ static irqreturn_t subsys_wdog_bite_irq_handler(int irq, void *dev_id)
|
|||
!gpio_get_value(d->subsys_desc.err_fatal_gpio))
|
||||
panic("%s: System ramdump requested. Triggering device restart!\n",
|
||||
__func__);
|
||||
subsys_set_crash_status(d->subsys, true);
|
||||
subsys_set_crash_status(d->subsys, CRASH_STATUS_WDOG_BITE);
|
||||
log_failure_reason(d);
|
||||
subsystem_restart_dev(d->subsys);
|
||||
|
||||
|
@ -952,7 +952,7 @@ static void clear_wdog(struct pil_tz_data *d)
|
|||
if (!subsys_get_crash_status(d->subsys)) {
|
||||
pr_err("wdog bite received from %s!\n", d->subsys_desc.name);
|
||||
__raw_writel(BIT(d->bits_arr[ERR_READY]), d->irq_clear);
|
||||
subsys_set_crash_status(d->subsys, true);
|
||||
subsys_set_crash_status(d->subsys, CRASH_STATUS_WDOG_BITE);
|
||||
log_failure_reason(d);
|
||||
subsystem_restart_dev(d->subsys);
|
||||
}
|
||||
|
|
|
@ -178,7 +178,7 @@ struct subsys_device {
|
|||
struct cdev char_dev;
|
||||
dev_t dev_no;
|
||||
struct completion err_ready;
|
||||
bool crashed;
|
||||
enum crash_status crashed;
|
||||
int notif_state;
|
||||
struct list_head list;
|
||||
};
|
||||
|
@ -646,7 +646,7 @@ static void subsystem_powerup(struct subsys_device *dev, void *data)
|
|||
current, name);
|
||||
}
|
||||
subsys_set_state(dev, SUBSYS_ONLINE);
|
||||
subsys_set_crash_status(dev, false);
|
||||
subsys_set_crash_status(dev, CRASH_STATUS_NO_CRASH);
|
||||
}
|
||||
|
||||
static int __find_subsys(struct device *dev, void *data)
|
||||
|
@ -1126,12 +1126,13 @@ int subsystem_crashed(const char *name)
|
|||
}
|
||||
EXPORT_SYMBOL(subsystem_crashed);
|
||||
|
||||
void subsys_set_crash_status(struct subsys_device *dev, bool crashed)
|
||||
void subsys_set_crash_status(struct subsys_device *dev,
|
||||
enum crash_status crashed)
|
||||
{
|
||||
dev->crashed = crashed;
|
||||
}
|
||||
|
||||
bool subsys_get_crash_status(struct subsys_device *dev)
|
||||
enum crash_status subsys_get_crash_status(struct subsys_device *dev)
|
||||
{
|
||||
return dev->crashed;
|
||||
}
|
||||
|
|
|
@ -25,6 +25,12 @@ enum {
|
|||
RESET_LEVEL_MAX
|
||||
};
|
||||
|
||||
enum crash_status {
|
||||
CRASH_STATUS_NO_CRASH = 0,
|
||||
CRASH_STATUS_ERR_FATAL,
|
||||
CRASH_STATUS_WDOG_BITE,
|
||||
};
|
||||
|
||||
struct device;
|
||||
struct module;
|
||||
|
||||
|
@ -89,7 +95,7 @@ struct subsys_desc {
|
|||
|
||||
/**
|
||||
* struct notif_data - additional notif information
|
||||
* @crashed: indicates if subsystem has crashed
|
||||
* @crashed: indicates if subsystem has crashed due to wdog bite or err fatal
|
||||
* @enable_ramdump: ramdumps disabled if set to 0
|
||||
* @enable_mini_ramdumps: enable flag for minimized critical-memory-only
|
||||
* ramdumps
|
||||
|
@ -97,7 +103,7 @@ struct subsys_desc {
|
|||
* @pdev: subsystem platform device pointer
|
||||
*/
|
||||
struct notif_data {
|
||||
bool crashed;
|
||||
enum crash_status crashed;
|
||||
int enable_ramdump;
|
||||
int enable_mini_ramdumps;
|
||||
bool no_auth;
|
||||
|
@ -120,8 +126,9 @@ extern struct subsys_device *subsys_register(struct subsys_desc *desc);
|
|||
extern void subsys_unregister(struct subsys_device *dev);
|
||||
|
||||
extern void subsys_default_online(struct subsys_device *dev);
|
||||
extern void subsys_set_crash_status(struct subsys_device *dev, bool crashed);
|
||||
extern bool subsys_get_crash_status(struct subsys_device *dev);
|
||||
extern void subsys_set_crash_status(struct subsys_device *dev,
|
||||
enum crash_status crashed);
|
||||
extern enum crash_status subsys_get_crash_status(struct subsys_device *dev);
|
||||
void notify_proxy_vote(struct device *device);
|
||||
void notify_proxy_unvote(struct device *device);
|
||||
void complete_err_ready(struct subsys_device *subsys);
|
||||
|
@ -174,9 +181,10 @@ struct subsys_device *subsys_register(struct subsys_desc *desc)
|
|||
static inline void subsys_unregister(struct subsys_device *dev) { }
|
||||
|
||||
static inline void subsys_default_online(struct subsys_device *dev) { }
|
||||
static inline void subsys_set_crash_status(struct subsys_device *dev,
|
||||
enum crash_status crashed) { }
|
||||
static inline
|
||||
void subsys_set_crash_status(struct subsys_device *dev, bool crashed) { }
|
||||
static inline bool subsys_get_crash_status(struct subsys_device *dev)
|
||||
enum crash_status subsys_get_crash_status(struct subsys_device *dev)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue