wcnss: Subsystem restart phase 3 implementation for Riva
Include phase 3 methods for Riva. If Riva subsystem restart is
explicitly set, then invoke subsystem restart, othervice panic on
error.
Change-Id: I98c0139751a0c9636255c840cb79210e352a5f6d
Signed-off-by: Sameer Thalappil <sameert@codeaurora.org>
diff --git a/arch/arm/mach-msm/wcnss-ssr-8960.c b/arch/arm/mach-msm/wcnss-ssr-8960.c
index 2ef5c61..18b7334 100644
--- a/arch/arm/mach-msm/wcnss-ssr-8960.c
+++ b/arch/arm/mach-msm/wcnss-ssr-8960.c
@@ -21,6 +21,7 @@
#include <mach/scm.h>
#include <mach/subsystem_restart.h>
#include <mach/subsystem_notif.h>
+#include <mach/peripheral-loader.h>
#include "smd_private.h"
#include "ramdump.h"
@@ -35,10 +36,14 @@
static void *riva_ramdump_dev;
static int riva_crash;
static int ss_restart_inprogress;
+static int enable_riva_ssr;
static void riva_smsm_cb_fn(struct work_struct *work)
{
- panic(MODULE_NAME ": SMSM reset request received from Riva");
+ if (!enable_riva_ssr)
+ panic(MODULE_NAME ": SMSM reset request received from Riva");
+ else
+ subsystem_restart("riva");
}
static void smsm_state_cb_hdlr(void *data, uint32_t old_state,
@@ -74,13 +79,13 @@
/* Subsystem handlers */
static int riva_shutdown(const struct subsys_data *subsys)
{
- /* TODO for phase 3 */
+ pil_force_shutdown("wcnss");
return 0;
}
static int riva_powerup(const struct subsys_data *subsys)
{
- /* TODO for phase 3 */
+ pil_force_boot("wcnss");
return 0;
}
@@ -118,6 +123,23 @@
.crash_shutdown = riva_crash_shutdown
};
+static int enable_riva_ssr_set(const char *val, struct kernel_param *kp)
+{
+ int ret;
+
+ ret = param_set_int(val, kp);
+ if (ret)
+ return ret;
+
+ if (enable_riva_ssr)
+ pr_info(MODULE_NAME ": Subsystem restart activated for riva.\n");
+
+ return 0;
+}
+
+module_param_call(enable_riva_ssr, enable_riva_ssr_set, param_get_int,
+ &enable_riva_ssr, S_IRUGO | S_IWUSR);
+
static int __init riva_restart_init(void)
{
return ssr_register_subsystem(&riva_8960);