[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20240818-pmic-glink-v6-11-races-v1-3-f87c577e0bc9@quicinc.com>
Date: Sun, 18 Aug 2024 16:17:39 -0700
From: Bjorn Andersson <quic_bjorande@...cinc.com>
To: Sebastian Reichel <sre@...nel.org>,
Bjorn Andersson
<andersson@...nel.org>,
Konrad Dybcio <konrad.dybcio@...aro.org>,
"Heikki
Krogerus" <heikki.krogerus@...ux.intel.com>,
Greg Kroah-Hartman
<gregkh@...uxfoundation.org>,
Neil Armstrong <neil.armstrong@...aro.org>
CC: Johan Hovold <johan+linaro@...nel.org>, Chris Lew <quic_clew@...cinc.com>,
Dmitry Baryshkov <dmitry.baryshkov@...aro.org>,
Stephen Boyd
<swboyd@...omium.org>,
Amit Pundir <amit.pundir@...aro.org>, <linux-arm-msm@...r.kernel.org>,
<linux-pm@...r.kernel.org>, <linux-kernel@...r.kernel.org>,
<linux-usb@...r.kernel.org>,
Bjorn Andersson
<quic_bjorande@...cinc.com>, <stable@...r.kernel.org>
Subject: [PATCH 3/3] soc: qcom: pmic_glink: Actually communicate with
remote goes down
When the pmic_glink state is UP and we either receive a protection-
domain (PD) notifcation indicating that the PD is going down, or that
the whole remoteproc is going down, it's expected that the pmic_glink
client instances are notified that their function has gone DOWN.
This is not what the code does, which results in the client state either
not updating, or being wrong in many cases. So let's fix the conditions.
Fixes: 58ef4ece1e41 ("soc: qcom: pmic_glink: Introduce base PMIC GLINK driver")
Cc: stable@...r.kernel.org
Signed-off-by: Bjorn Andersson <quic_bjorande@...cinc.com>
---
drivers/soc/qcom/pmic_glink.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/soc/qcom/pmic_glink.c b/drivers/soc/qcom/pmic_glink.c
index e4747f1d3da5..cb202a37e8ab 100644
--- a/drivers/soc/qcom/pmic_glink.c
+++ b/drivers/soc/qcom/pmic_glink.c
@@ -191,7 +191,7 @@ static void pmic_glink_state_notify_clients(struct pmic_glink *pg)
if (pg->pdr_state == SERVREG_SERVICE_STATE_UP && pg->ept)
new_state = SERVREG_SERVICE_STATE_UP;
} else {
- if (pg->pdr_state == SERVREG_SERVICE_STATE_UP && pg->ept)
+ if (pg->pdr_state == SERVREG_SERVICE_STATE_DOWN || !pg->ept)
new_state = SERVREG_SERVICE_STATE_DOWN;
}
--
2.34.1
Powered by blists - more mailing lists