diff options
| author | Linux Build Service Account <lnxbuild@localhost> | 2019-05-07 16:55:14 -0700 |
|---|---|---|
| committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2019-05-07 16:55:13 -0700 |
| commit | 589a44d37aba30b24344ff833ae8b23807f794ba (patch) | |
| tree | c37a803e42c453f35f805f51f589f1af7145f93f /drivers/soc | |
| parent | 57cc803c86c0c29f7ed2a1302b76c43442cb11a1 (diff) | |
| parent | b08dd67c711f131cff76548f3f3f3db8f8a52a29 (diff) | |
Merge "icnss: Add a flag to indicate PDR"
Diffstat (limited to 'drivers/soc')
| -rw-r--r-- | drivers/soc/qcom/icnss.c | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/drivers/soc/qcom/icnss.c b/drivers/soc/qcom/icnss.c index c51006fda59e..384cbb22202b 100644 --- a/drivers/soc/qcom/icnss.c +++ b/drivers/soc/qcom/icnss.c @@ -302,6 +302,7 @@ enum icnss_driver_state { ICNSS_DRIVER_UNLOADING, ICNSS_REJUVENATE, ICNSS_BLOCK_SHUTDOWN, + ICNSS_PDR, }; struct ce_irq_list { @@ -495,6 +496,7 @@ static struct icnss_priv { u16 line_number; char function_name[QMI_WLFW_FUNCTION_NAME_LEN_V01 + 1]; struct completion unblock_shutdown; + bool is_ssr; } *penv; #ifdef CONFIG_ICNSS_DEBUG @@ -1217,6 +1219,15 @@ bool icnss_is_rejuvenate(void) } EXPORT_SYMBOL(icnss_is_rejuvenate); +bool icnss_is_pdr(void) +{ + if (!penv) + return false; + else + return test_bit(ICNSS_PDR, &penv->state); +} +EXPORT_SYMBOL(icnss_is_pdr); + int icnss_power_off(struct device *dev) { struct icnss_priv *priv = dev_get_drvdata(dev); @@ -2274,8 +2285,10 @@ static int icnss_pd_restart_complete(struct icnss_priv *priv) icnss_call_driver_shutdown(priv); - clear_bit(ICNSS_REJUVENATE, &penv->state); + clear_bit(ICNSS_PDR, &priv->state); + clear_bit(ICNSS_REJUVENATE, &priv->state); clear_bit(ICNSS_PD_RESTART, &priv->state); + priv->is_ssr = false; if (!priv->ops || !priv->ops->reinit) goto out; @@ -2609,6 +2622,8 @@ static int icnss_modem_notifier_nb(struct notifier_block *nb, if (code != SUBSYS_BEFORE_SHUTDOWN) return NOTIFY_OK; + priv->is_ssr = true; + if (code == SUBSYS_BEFORE_SHUTDOWN && !notif->crashed && test_bit(ICNSS_BLOCK_SHUTDOWN, &priv->state)) { if (!wait_for_completion_timeout(&priv->unblock_shutdown, @@ -2730,6 +2745,9 @@ static int icnss_service_notifier_notify(struct notifier_block *nb, if (notification != SERVREG_NOTIF_SERVICE_STATE_DOWN_V01) goto done; + if (!priv->is_ssr) + set_bit(ICNSS_PDR, &priv->state); + event_data = kzalloc(sizeof(*event_data), GFP_KERNEL); if (event_data == NULL) @@ -4015,6 +4033,9 @@ static int icnss_stats_show_state(struct seq_file *s, struct icnss_priv *priv) continue; case ICNSS_BLOCK_SHUTDOWN: seq_puts(s, "BLOCK SHUTDOWN"); + continue; + case ICNSS_PDR: + seq_puts(s, "PDR TRIGGERED"); } seq_printf(s, "UNKNOWN-%d", i); |
