Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit dadc37a8 authored by Kyle Yan's avatar Kyle Yan Committed by Gerrit - the friendly Code Review server
Browse files

Merge "soc: qcom: ssr: add crash status to know why subsys crashed" into msm-4.8

parents 41660abe 30af7d05
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -80,7 +80,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;
}
@@ -194,7 +194,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;
}
+3 −3
Original line number Diff line number Diff line
@@ -882,7 +882,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);

@@ -901,7 +901,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);

@@ -958,7 +958,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);
	}
+5 −4
Original line number Diff line number Diff line
@@ -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;
};
@@ -649,7 +649,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)
@@ -1130,12 +1130,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;
}
+14 −6
Original line number Diff line number Diff line
@@ -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;
}