* [PATCH v2 0/2] soc: qcom: pmic_glink: Add support for subsystem restart (SSR)
@ 2025-07-16 0:40 Anjelique Melendez
2025-07-16 0:40 ` [PATCH v2 1/2] dt-bindings: soc: qcom: qcom,pmic-glink: Add qcom,subsys-restart property Anjelique Melendez
` (2 more replies)
0 siblings, 3 replies; 8+ messages in thread
From: Anjelique Melendez @ 2025-07-16 0:40 UTC (permalink / raw)
To: andersson, konradybcio, robh, krzk+dt, conor+dt
Cc: dmitry.baryshkov, linux-arm-msm, devicetree, linux-kernel
Add support for PMIC Glink subsystem restart (SSR) so that PMIC Glink
clients are aware of when subsytem come up or down.
Changes since v1:
- Add "qcom,subsys-restart" dt property to enable SSR
- Add ssr_name to platform data
- link: https://lore.kernel.org/all/20250624225535.2013141-1-anjelique.melendez@oss.qualcomm.com/
Anjelique Melendez (2):
dt-bindings: soc: qcom: qcom,pmic-glink: Add qcom,subsys-restart
property
soc: qcom: pmic_glink: Add support for subsystem restart (SSR)
.../bindings/soc/qcom/qcom,pmic-glink.yaml | 4 +
drivers/soc/qcom/pmic_glink.c | 80 ++++++++++++++-----
2 files changed, 63 insertions(+), 21 deletions(-)
--
2.34.1
^ permalink raw reply [flat|nested] 8+ messages in thread* [PATCH v2 1/2] dt-bindings: soc: qcom: qcom,pmic-glink: Add qcom,subsys-restart property 2025-07-16 0:40 [PATCH v2 0/2] soc: qcom: pmic_glink: Add support for subsystem restart (SSR) Anjelique Melendez @ 2025-07-16 0:40 ` Anjelique Melendez 2025-07-16 8:33 ` Krzysztof Kozlowski 2025-07-20 4:15 ` Bjorn Andersson 2025-07-16 0:40 ` [PATCH v2 2/2] soc: qcom: pmic_glink: Add support for subsystem restart (SSR) Anjelique Melendez 2025-07-16 8:36 ` [PATCH v2 0/2] " Krzysztof Kozlowski 2 siblings, 2 replies; 8+ messages in thread From: Anjelique Melendez @ 2025-07-16 0:40 UTC (permalink / raw) To: andersson, konradybcio, robh, krzk+dt, conor+dt Cc: dmitry.baryshkov, linux-arm-msm, devicetree, linux-kernel Add new "qcom,subsys-restart" property to enable subsystem restart (SSR) notifications. Signed-off-by: Anjelique Melendez <anjelique.melendez@oss.qualcomm.com> --- .../devicetree/bindings/soc/qcom/qcom,pmic-glink.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Documentation/devicetree/bindings/soc/qcom/qcom,pmic-glink.yaml b/Documentation/devicetree/bindings/soc/qcom/qcom,pmic-glink.yaml index 4c9e78f29523..90011096894e 100644 --- a/Documentation/devicetree/bindings/soc/qcom/qcom,pmic-glink.yaml +++ b/Documentation/devicetree/bindings/soc/qcom/qcom,pmic-glink.yaml @@ -49,6 +49,10 @@ properties: '#size-cells': const: 0 + qcom,subsys-restart: + description: If property is specified subsystem restart (SSR) notifications will be enabled. + type: boolean + orientation-gpios: description: Array of input gpios for the Type-C connector orientation indication. The GPIO indication is used to detect the orientation of the Type-C connector. -- 2.34.1 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH v2 1/2] dt-bindings: soc: qcom: qcom,pmic-glink: Add qcom,subsys-restart property 2025-07-16 0:40 ` [PATCH v2 1/2] dt-bindings: soc: qcom: qcom,pmic-glink: Add qcom,subsys-restart property Anjelique Melendez @ 2025-07-16 8:33 ` Krzysztof Kozlowski 2025-07-20 4:15 ` Bjorn Andersson 1 sibling, 0 replies; 8+ messages in thread From: Krzysztof Kozlowski @ 2025-07-16 8:33 UTC (permalink / raw) To: Anjelique Melendez Cc: andersson, konradybcio, robh, krzk+dt, conor+dt, dmitry.baryshkov, linux-arm-msm, devicetree, linux-kernel On Tue, Jul 15, 2025 at 05:40:03PM -0700, Anjelique Melendez wrote: > Add new "qcom,subsys-restart" property to enable subsystem restart (SSR) > notifications. > > Signed-off-by: Anjelique Melendez <anjelique.melendez@oss.qualcomm.com> > --- > .../devicetree/bindings/soc/qcom/qcom,pmic-glink.yaml | 4 ++++ > 1 file changed, 4 insertions(+) > > diff --git a/Documentation/devicetree/bindings/soc/qcom/qcom,pmic-glink.yaml b/Documentation/devicetree/bindings/soc/qcom/qcom,pmic-glink.yaml > index 4c9e78f29523..90011096894e 100644 > --- a/Documentation/devicetree/bindings/soc/qcom/qcom,pmic-glink.yaml > +++ b/Documentation/devicetree/bindings/soc/qcom/qcom,pmic-glink.yaml > @@ -49,6 +49,10 @@ properties: > '#size-cells': > const: 0 > > + qcom,subsys-restart: > + description: If property is specified subsystem restart (SSR) notifications will be enabled. Please wrap according to Linux coding style... if this stays, because this all sounds like Linux notificatons, so an OS property. The commit msg explains nothing - just repeats this. You need to describe the hardware and the reasons behind this change - WHY you are doing things - in terms of hardware. Best regards, Krzysztof ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v2 1/2] dt-bindings: soc: qcom: qcom,pmic-glink: Add qcom,subsys-restart property 2025-07-16 0:40 ` [PATCH v2 1/2] dt-bindings: soc: qcom: qcom,pmic-glink: Add qcom,subsys-restart property Anjelique Melendez 2025-07-16 8:33 ` Krzysztof Kozlowski @ 2025-07-20 4:15 ` Bjorn Andersson 1 sibling, 0 replies; 8+ messages in thread From: Bjorn Andersson @ 2025-07-20 4:15 UTC (permalink / raw) To: Anjelique Melendez Cc: konradybcio, robh, krzk+dt, conor+dt, dmitry.baryshkov, linux-arm-msm, devicetree, linux-kernel On Tue, Jul 15, 2025 at 05:40:03PM -0700, Anjelique Melendez wrote: > Add new "qcom,subsys-restart" property to enable subsystem restart (SSR) > notifications. > Please follow https://docs.kernel.org/process/submitting-patches.html#describe-your-changes and fully describe what problem your patch is solving. Most people have no idea what subsystem restart means, and those who do has to guess what it means for pmic-glink. > Signed-off-by: Anjelique Melendez <anjelique.melendez@oss.qualcomm.com> > --- > .../devicetree/bindings/soc/qcom/qcom,pmic-glink.yaml | 4 ++++ > 1 file changed, 4 insertions(+) > > diff --git a/Documentation/devicetree/bindings/soc/qcom/qcom,pmic-glink.yaml b/Documentation/devicetree/bindings/soc/qcom/qcom,pmic-glink.yaml > index 4c9e78f29523..90011096894e 100644 > --- a/Documentation/devicetree/bindings/soc/qcom/qcom,pmic-glink.yaml > +++ b/Documentation/devicetree/bindings/soc/qcom/qcom,pmic-glink.yaml > @@ -49,6 +49,10 @@ properties: > '#size-cells': > const: 0 > > + qcom,subsys-restart: And my guess is unfortunately that this doesn't describe the hardware/firmware, but that this is configuring the OS behavior. Please write a commit message that doesn't force me to guess. Regards, Bjorn > + description: If property is specified subsystem restart (SSR) notifications will be enabled. > + type: boolean > + > orientation-gpios: > description: Array of input gpios for the Type-C connector orientation indication. > The GPIO indication is used to detect the orientation of the Type-C connector. > -- > 2.34.1 > ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH v2 2/2] soc: qcom: pmic_glink: Add support for subsystem restart (SSR) 2025-07-16 0:40 [PATCH v2 0/2] soc: qcom: pmic_glink: Add support for subsystem restart (SSR) Anjelique Melendez 2025-07-16 0:40 ` [PATCH v2 1/2] dt-bindings: soc: qcom: qcom,pmic-glink: Add qcom,subsys-restart property Anjelique Melendez @ 2025-07-16 0:40 ` Anjelique Melendez 2025-07-16 8:35 ` Krzysztof Kozlowski 2025-07-20 4:18 ` Bjorn Andersson 2025-07-16 8:36 ` [PATCH v2 0/2] " Krzysztof Kozlowski 2 siblings, 2 replies; 8+ messages in thread From: Anjelique Melendez @ 2025-07-16 0:40 UTC (permalink / raw) To: andersson, konradybcio, robh, krzk+dt, conor+dt Cc: dmitry.baryshkov, linux-arm-msm, devicetree, linux-kernel [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #1: Type: text/plain; charset=y, Size: 7190 bytes --] Add support for PMIC Glink clients to receive notificiation when the subsystem goes down and comes up again. Signed-off-by: Anjelique Melendez <anjelique.melendez@oss.qualcomm.com> --- drivers/soc/qcom/pmic_glink.c | 80 ++++++++++++++++++++++++++--------- 1 file changed, 59 insertions(+), 21 deletions(-) diff --git a/drivers/soc/qcom/pmic_glink.c b/drivers/soc/qcom/pmic_glink.c index 0a6d325b195c..3e755073db60 100644 --- a/drivers/soc/qcom/pmic_glink.c +++ b/drivers/soc/qcom/pmic_glink.c @@ -2,6 +2,7 @@ /* * Copyright (c) 2019-2020, The Linux Foundation. All rights reserved. * Copyright (c) 2022, Linaro Ltd + * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. */ #include <linux/auxiliary_bus.h> #include <linux/cleanup.h> @@ -9,6 +10,7 @@ #include <linux/module.h> #include <linux/of.h> #include <linux/platform_device.h> +#include <linux/remoteproc/qcom_rproc.h> #include <linux/rpmsg.h> #include <linux/slab.h> #include <linux/soc/qcom/pdr.h> @@ -23,13 +25,18 @@ enum { PMIC_GLINK_CLIENT_UCSI, }; +struct pmic_glink_data { + unsigned long client_mask; + char *ssr_name; +}; + struct pmic_glink { struct device *dev; struct pdr_handle *pdr; struct rpmsg_endpoint *ept; - unsigned long client_mask; + const struct pmic_glink_data *data; struct auxiliary_device altmode_aux; struct auxiliary_device ps_aux; @@ -39,10 +46,14 @@ struct pmic_glink { struct mutex state_lock; unsigned int client_state; unsigned int pdr_state; + unsigned int ssr_state; /* serializing clients list updates */ spinlock_t client_lock; struct list_head clients; + + struct notifier_block ssr_nb; + void *ssr_handle; }; static struct pmic_glink *__pmic_glink; @@ -205,10 +216,13 @@ static void pmic_glink_state_notify_clients(struct pmic_glink *pg) unsigned long flags; if (pg->client_state != SERVREG_SERVICE_STATE_UP) { - if (pg->pdr_state == SERVREG_SERVICE_STATE_UP && pg->ept) + if ((pg->pdr_state == SERVREG_SERVICE_STATE_UP || + pg->ssr_state == QCOM_SSR_AFTER_POWERUP) && pg->ept) new_state = SERVREG_SERVICE_STATE_UP; } else { - if (pg->pdr_state == SERVREG_SERVICE_STATE_DOWN || !pg->ept) + if (pg->pdr_state == SERVREG_SERVICE_STATE_DOWN || + pg->ssr_state == QCOM_SSR_BEFORE_SHUTDOWN || + !pg->ept) new_state = SERVREG_SERVICE_STATE_DOWN; } @@ -231,6 +245,18 @@ static void pmic_glink_pdr_callback(int state, char *svc_path, void *priv) pmic_glink_state_notify_clients(pg); } +static int pmic_glink_ssr_callback(struct notifier_block *nb, unsigned long code, void *data) +{ + struct pmic_glink *pg = container_of(nb, struct pmic_glink, ssr_nb); + + mutex_lock(&pg->state_lock); + pg->ssr_state = code; + + pmic_glink_state_notify_clients(pg); + mutex_unlock(&pg->state_lock); + return 0; +} + static int pmic_glink_rpmsg_probe(struct rpmsg_device *rpdev) { struct pmic_glink *pg; @@ -280,7 +306,6 @@ static struct rpmsg_driver pmic_glink_rpmsg_driver = { static int pmic_glink_probe(struct platform_device *pdev) { - const unsigned long *match_data; struct pdr_service *service; struct pmic_glink *pg; int ret; @@ -297,12 +322,10 @@ static int pmic_glink_probe(struct platform_device *pdev) spin_lock_init(&pg->client_lock); mutex_init(&pg->state_lock); - match_data = (unsigned long *)of_device_get_match_data(&pdev->dev); - if (!match_data) + pg->data = of_device_get_match_data(&pdev->dev); + if (!pg->data) return -EINVAL; - pg->client_mask = *match_data; - pg->pdr = pdr_handle_alloc(pmic_glink_pdr_callback, pg); if (IS_ERR(pg->pdr)) { ret = dev_err_probe(&pdev->dev, PTR_ERR(pg->pdr), @@ -310,17 +333,17 @@ static int pmic_glink_probe(struct platform_device *pdev) return ret; } - if (pg->client_mask & BIT(PMIC_GLINK_CLIENT_UCSI)) { + if (pg->data->client_mask & BIT(PMIC_GLINK_CLIENT_UCSI)) { ret = pmic_glink_add_aux_device(pg, &pg->ucsi_aux, "ucsi"); if (ret) goto out_release_pdr_handle; } - if (pg->client_mask & BIT(PMIC_GLINK_CLIENT_ALTMODE)) { + if (pg->data->client_mask & BIT(PMIC_GLINK_CLIENT_ALTMODE)) { ret = pmic_glink_add_aux_device(pg, &pg->altmode_aux, "altmode"); if (ret) goto out_release_ucsi_aux; } - if (pg->client_mask & BIT(PMIC_GLINK_CLIENT_BATT)) { + if (pg->data->client_mask & BIT(PMIC_GLINK_CLIENT_BATT)) { ret = pmic_glink_add_aux_device(pg, &pg->ps_aux, "power-supply"); if (ret) goto out_release_altmode_aux; @@ -333,6 +356,16 @@ static int pmic_glink_probe(struct platform_device *pdev) goto out_release_aux_devices; } + if (device_property_present(&pdev->dev, "qcom,subsys-restart")) { + pg->ssr_nb.notifier_call = pmic_glink_ssr_callback; + pg->ssr_handle = qcom_register_ssr_notifier(pg->data->ssr_name, &pg->ssr_nb); + if (IS_ERR(pg->ssr_handle)) { + ret = dev_err_probe(&pdev->dev, PTR_ERR(pg->ssr_handle), + "failed adding ssr notifier\n"); + goto out_release_aux_devices; + } + } + mutex_lock(&__pmic_glink_lock); __pmic_glink = pg; mutex_unlock(&__pmic_glink_lock); @@ -340,13 +373,13 @@ static int pmic_glink_probe(struct platform_device *pdev) return 0; out_release_aux_devices: - if (pg->client_mask & BIT(PMIC_GLINK_CLIENT_BATT)) + if (pg->data->client_mask & BIT(PMIC_GLINK_CLIENT_BATT)) pmic_glink_del_aux_device(pg, &pg->ps_aux); out_release_altmode_aux: - if (pg->client_mask & BIT(PMIC_GLINK_CLIENT_ALTMODE)) + if (pg->data->client_mask & BIT(PMIC_GLINK_CLIENT_ALTMODE)) pmic_glink_del_aux_device(pg, &pg->altmode_aux); out_release_ucsi_aux: - if (pg->client_mask & BIT(PMIC_GLINK_CLIENT_UCSI)) + if (pg->data->client_mask & BIT(PMIC_GLINK_CLIENT_UCSI)) pmic_glink_del_aux_device(pg, &pg->ucsi_aux); out_release_pdr_handle: pdr_handle_release(pg->pdr); @@ -360,23 +393,28 @@ static void pmic_glink_remove(struct platform_device *pdev) pdr_handle_release(pg->pdr); - if (pg->client_mask & BIT(PMIC_GLINK_CLIENT_BATT)) + if (pg->ssr_handle) + qcom_unregister_ssr_notifier(pg->ssr_handle, &pg->ssr_nb); + if (pg->data->client_mask & BIT(PMIC_GLINK_CLIENT_BATT)) pmic_glink_del_aux_device(pg, &pg->ps_aux); - if (pg->client_mask & BIT(PMIC_GLINK_CLIENT_ALTMODE)) + if (pg->data->client_mask & BIT(PMIC_GLINK_CLIENT_ALTMODE)) pmic_glink_del_aux_device(pg, &pg->altmode_aux); - if (pg->client_mask & BIT(PMIC_GLINK_CLIENT_UCSI)) + if (pg->data->client_mask & BIT(PMIC_GLINK_CLIENT_UCSI)) pmic_glink_del_aux_device(pg, &pg->ucsi_aux); guard(mutex)(&__pmic_glink_lock); __pmic_glink = NULL; } -static const unsigned long pmic_glink_sm8450_client_mask = BIT(PMIC_GLINK_CLIENT_BATT) | - BIT(PMIC_GLINK_CLIENT_ALTMODE) | - BIT(PMIC_GLINK_CLIENT_UCSI); +static const struct pmic_glink_data pmic_glink_sm8450_data = { + .client_mask = BIT(PMIC_GLINK_CLIENT_BATT) | + BIT(PMIC_GLINK_CLIENT_ALTMODE) | + BIT(PMIC_GLINK_CLIENT_UCSI), + .ssr_name = "lpass", +}; static const struct of_device_id pmic_glink_of_match[] = { - { .compatible = "qcom,pmic-glink", .data = &pmic_glink_sm8450_client_mask }, + { .compatible = "qcom,pmic-glink", .data = &pmic_glink_sm8450_data }, {} }; MODULE_DEVICE_TABLE(of, pmic_glink_of_match); -- 2.34.1 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH v2 2/2] soc: qcom: pmic_glink: Add support for subsystem restart (SSR) 2025-07-16 0:40 ` [PATCH v2 2/2] soc: qcom: pmic_glink: Add support for subsystem restart (SSR) Anjelique Melendez @ 2025-07-16 8:35 ` Krzysztof Kozlowski 2025-07-20 4:18 ` Bjorn Andersson 1 sibling, 0 replies; 8+ messages in thread From: Krzysztof Kozlowski @ 2025-07-16 8:35 UTC (permalink / raw) To: Anjelique Melendez Cc: andersson, konradybcio, robh, krzk+dt, conor+dt, dmitry.baryshkov, linux-arm-msm, devicetree, linux-kernel On Tue, Jul 15, 2025 at 05:40:04PM -0700, Anjelique Melendez wrote: > @@ -333,6 +356,16 @@ static int pmic_glink_probe(struct platform_device *pdev) > goto out_release_aux_devices; > } > > + if (device_property_present(&pdev->dev, "qcom,subsys-restart")) { > + pg->ssr_nb.notifier_call = pmic_glink_ssr_callback; > + pg->ssr_handle = qcom_register_ssr_notifier(pg->data->ssr_name, &pg->ssr_nb); ... and that's srcu_notifier_chain_register, so clearly you described Linux in your bindings which is obvious NAK. Best regards, Krzysztof ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v2 2/2] soc: qcom: pmic_glink: Add support for subsystem restart (SSR) 2025-07-16 0:40 ` [PATCH v2 2/2] soc: qcom: pmic_glink: Add support for subsystem restart (SSR) Anjelique Melendez 2025-07-16 8:35 ` Krzysztof Kozlowski @ 2025-07-20 4:18 ` Bjorn Andersson 1 sibling, 0 replies; 8+ messages in thread From: Bjorn Andersson @ 2025-07-20 4:18 UTC (permalink / raw) To: Anjelique Melendez Cc: konradybcio, robh, krzk+dt, conor+dt, dmitry.baryshkov, linux-arm-msm, devicetree, linux-kernel On Tue, Jul 15, 2025 at 05:40:04PM -0700, Anjelique Melendez wrote: > Add support for PMIC Glink clients to receive notificiation when > the subsystem goes down and comes up again. > When I restart the adsp on my devices, I can see pmic glink reacting to that (and UCSI oopsing). So please describe what's actually missing in the current implementation. Regards, Bjorn > Signed-off-by: Anjelique Melendez <anjelique.melendez@oss.qualcomm.com> > --- > drivers/soc/qcom/pmic_glink.c | 80 ++++++++++++++++++++++++++--------- > 1 file changed, 59 insertions(+), 21 deletions(-) > > diff --git a/drivers/soc/qcom/pmic_glink.c b/drivers/soc/qcom/pmic_glink.c > index 0a6d325b195c..3e755073db60 100644 > --- a/drivers/soc/qcom/pmic_glink.c > +++ b/drivers/soc/qcom/pmic_glink.c > @@ -2,6 +2,7 @@ > /* > * Copyright (c) 2019-2020, The Linux Foundation. All rights reserved. > * Copyright (c) 2022, Linaro Ltd > + * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. > */ > #include <linux/auxiliary_bus.h> > #include <linux/cleanup.h> > @@ -9,6 +10,7 @@ > #include <linux/module.h> > #include <linux/of.h> > #include <linux/platform_device.h> > +#include <linux/remoteproc/qcom_rproc.h> > #include <linux/rpmsg.h> > #include <linux/slab.h> > #include <linux/soc/qcom/pdr.h> > @@ -23,13 +25,18 @@ enum { > PMIC_GLINK_CLIENT_UCSI, > }; > > +struct pmic_glink_data { > + unsigned long client_mask; > + char *ssr_name; > +}; > + > struct pmic_glink { > struct device *dev; > struct pdr_handle *pdr; > > struct rpmsg_endpoint *ept; > > - unsigned long client_mask; > + const struct pmic_glink_data *data; > > struct auxiliary_device altmode_aux; > struct auxiliary_device ps_aux; > @@ -39,10 +46,14 @@ struct pmic_glink { > struct mutex state_lock; > unsigned int client_state; > unsigned int pdr_state; > + unsigned int ssr_state; > > /* serializing clients list updates */ > spinlock_t client_lock; > struct list_head clients; > + > + struct notifier_block ssr_nb; > + void *ssr_handle; > }; > > static struct pmic_glink *__pmic_glink; > @@ -205,10 +216,13 @@ static void pmic_glink_state_notify_clients(struct pmic_glink *pg) > unsigned long flags; > > if (pg->client_state != SERVREG_SERVICE_STATE_UP) { > - if (pg->pdr_state == SERVREG_SERVICE_STATE_UP && pg->ept) > + if ((pg->pdr_state == SERVREG_SERVICE_STATE_UP || > + pg->ssr_state == QCOM_SSR_AFTER_POWERUP) && pg->ept) > new_state = SERVREG_SERVICE_STATE_UP; > } else { > - if (pg->pdr_state == SERVREG_SERVICE_STATE_DOWN || !pg->ept) > + if (pg->pdr_state == SERVREG_SERVICE_STATE_DOWN || > + pg->ssr_state == QCOM_SSR_BEFORE_SHUTDOWN || > + !pg->ept) > new_state = SERVREG_SERVICE_STATE_DOWN; > } > > @@ -231,6 +245,18 @@ static void pmic_glink_pdr_callback(int state, char *svc_path, void *priv) > pmic_glink_state_notify_clients(pg); > } > > +static int pmic_glink_ssr_callback(struct notifier_block *nb, unsigned long code, void *data) > +{ > + struct pmic_glink *pg = container_of(nb, struct pmic_glink, ssr_nb); > + > + mutex_lock(&pg->state_lock); > + pg->ssr_state = code; > + > + pmic_glink_state_notify_clients(pg); > + mutex_unlock(&pg->state_lock); > + return 0; > +} > + > static int pmic_glink_rpmsg_probe(struct rpmsg_device *rpdev) > { > struct pmic_glink *pg; > @@ -280,7 +306,6 @@ static struct rpmsg_driver pmic_glink_rpmsg_driver = { > > static int pmic_glink_probe(struct platform_device *pdev) > { > - const unsigned long *match_data; > struct pdr_service *service; > struct pmic_glink *pg; > int ret; > @@ -297,12 +322,10 @@ static int pmic_glink_probe(struct platform_device *pdev) > spin_lock_init(&pg->client_lock); > mutex_init(&pg->state_lock); > > - match_data = (unsigned long *)of_device_get_match_data(&pdev->dev); > - if (!match_data) > + pg->data = of_device_get_match_data(&pdev->dev); > + if (!pg->data) > return -EINVAL; > > - pg->client_mask = *match_data; > - > pg->pdr = pdr_handle_alloc(pmic_glink_pdr_callback, pg); > if (IS_ERR(pg->pdr)) { > ret = dev_err_probe(&pdev->dev, PTR_ERR(pg->pdr), > @@ -310,17 +333,17 @@ static int pmic_glink_probe(struct platform_device *pdev) > return ret; > } > > - if (pg->client_mask & BIT(PMIC_GLINK_CLIENT_UCSI)) { > + if (pg->data->client_mask & BIT(PMIC_GLINK_CLIENT_UCSI)) { > ret = pmic_glink_add_aux_device(pg, &pg->ucsi_aux, "ucsi"); > if (ret) > goto out_release_pdr_handle; > } > - if (pg->client_mask & BIT(PMIC_GLINK_CLIENT_ALTMODE)) { > + if (pg->data->client_mask & BIT(PMIC_GLINK_CLIENT_ALTMODE)) { > ret = pmic_glink_add_aux_device(pg, &pg->altmode_aux, "altmode"); > if (ret) > goto out_release_ucsi_aux; > } > - if (pg->client_mask & BIT(PMIC_GLINK_CLIENT_BATT)) { > + if (pg->data->client_mask & BIT(PMIC_GLINK_CLIENT_BATT)) { > ret = pmic_glink_add_aux_device(pg, &pg->ps_aux, "power-supply"); > if (ret) > goto out_release_altmode_aux; > @@ -333,6 +356,16 @@ static int pmic_glink_probe(struct platform_device *pdev) > goto out_release_aux_devices; > } > > + if (device_property_present(&pdev->dev, "qcom,subsys-restart")) { > + pg->ssr_nb.notifier_call = pmic_glink_ssr_callback; > + pg->ssr_handle = qcom_register_ssr_notifier(pg->data->ssr_name, &pg->ssr_nb); > + if (IS_ERR(pg->ssr_handle)) { > + ret = dev_err_probe(&pdev->dev, PTR_ERR(pg->ssr_handle), > + "failed adding ssr notifier\n"); > + goto out_release_aux_devices; > + } > + } > + > mutex_lock(&__pmic_glink_lock); > __pmic_glink = pg; > mutex_unlock(&__pmic_glink_lock); > @@ -340,13 +373,13 @@ static int pmic_glink_probe(struct platform_device *pdev) > return 0; > > out_release_aux_devices: > - if (pg->client_mask & BIT(PMIC_GLINK_CLIENT_BATT)) > + if (pg->data->client_mask & BIT(PMIC_GLINK_CLIENT_BATT)) > pmic_glink_del_aux_device(pg, &pg->ps_aux); > out_release_altmode_aux: > - if (pg->client_mask & BIT(PMIC_GLINK_CLIENT_ALTMODE)) > + if (pg->data->client_mask & BIT(PMIC_GLINK_CLIENT_ALTMODE)) > pmic_glink_del_aux_device(pg, &pg->altmode_aux); > out_release_ucsi_aux: > - if (pg->client_mask & BIT(PMIC_GLINK_CLIENT_UCSI)) > + if (pg->data->client_mask & BIT(PMIC_GLINK_CLIENT_UCSI)) > pmic_glink_del_aux_device(pg, &pg->ucsi_aux); > out_release_pdr_handle: > pdr_handle_release(pg->pdr); > @@ -360,23 +393,28 @@ static void pmic_glink_remove(struct platform_device *pdev) > > pdr_handle_release(pg->pdr); > > - if (pg->client_mask & BIT(PMIC_GLINK_CLIENT_BATT)) > + if (pg->ssr_handle) > + qcom_unregister_ssr_notifier(pg->ssr_handle, &pg->ssr_nb); > + if (pg->data->client_mask & BIT(PMIC_GLINK_CLIENT_BATT)) > pmic_glink_del_aux_device(pg, &pg->ps_aux); > - if (pg->client_mask & BIT(PMIC_GLINK_CLIENT_ALTMODE)) > + if (pg->data->client_mask & BIT(PMIC_GLINK_CLIENT_ALTMODE)) > pmic_glink_del_aux_device(pg, &pg->altmode_aux); > - if (pg->client_mask & BIT(PMIC_GLINK_CLIENT_UCSI)) > + if (pg->data->client_mask & BIT(PMIC_GLINK_CLIENT_UCSI)) > pmic_glink_del_aux_device(pg, &pg->ucsi_aux); > > guard(mutex)(&__pmic_glink_lock); > __pmic_glink = NULL; > } > > -static const unsigned long pmic_glink_sm8450_client_mask = BIT(PMIC_GLINK_CLIENT_BATT) | > - BIT(PMIC_GLINK_CLIENT_ALTMODE) | > - BIT(PMIC_GLINK_CLIENT_UCSI); > +static const struct pmic_glink_data pmic_glink_sm8450_data = { > + .client_mask = BIT(PMIC_GLINK_CLIENT_BATT) | > + BIT(PMIC_GLINK_CLIENT_ALTMODE) | > + BIT(PMIC_GLINK_CLIENT_UCSI), > + .ssr_name = "lpass", > +}; > > static const struct of_device_id pmic_glink_of_match[] = { > - { .compatible = "qcom,pmic-glink", .data = &pmic_glink_sm8450_client_mask }, > + { .compatible = "qcom,pmic-glink", .data = &pmic_glink_sm8450_data }, > {} > }; > MODULE_DEVICE_TABLE(of, pmic_glink_of_match); > -- > 2.34.1 > ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v2 0/2] soc: qcom: pmic_glink: Add support for subsystem restart (SSR) 2025-07-16 0:40 [PATCH v2 0/2] soc: qcom: pmic_glink: Add support for subsystem restart (SSR) Anjelique Melendez 2025-07-16 0:40 ` [PATCH v2 1/2] dt-bindings: soc: qcom: qcom,pmic-glink: Add qcom,subsys-restart property Anjelique Melendez 2025-07-16 0:40 ` [PATCH v2 2/2] soc: qcom: pmic_glink: Add support for subsystem restart (SSR) Anjelique Melendez @ 2025-07-16 8:36 ` Krzysztof Kozlowski 2 siblings, 0 replies; 8+ messages in thread From: Krzysztof Kozlowski @ 2025-07-16 8:36 UTC (permalink / raw) To: Anjelique Melendez Cc: andersson, konradybcio, robh, krzk+dt, conor+dt, dmitry.baryshkov, linux-arm-msm, devicetree, linux-kernel On Tue, Jul 15, 2025 at 05:40:02PM -0700, Anjelique Melendez wrote: > Add support for PMIC Glink subsystem restart (SSR) so that PMIC Glink > clients are aware of when subsytem come up or down. > > Changes since v1: > - Add "qcom,subsys-restart" dt property to enable SSR Now I noticed that I repeated feedback you received at v1, which you just ignored, so you ask us to do the thing twice. That's not the way to go and it is very dissapointing because I value my time. Address the feedback at v1. NAK Best regards, Krzysztof ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2025-07-20 4:18 UTC | newest] Thread overview: 8+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2025-07-16 0:40 [PATCH v2 0/2] soc: qcom: pmic_glink: Add support for subsystem restart (SSR) Anjelique Melendez 2025-07-16 0:40 ` [PATCH v2 1/2] dt-bindings: soc: qcom: qcom,pmic-glink: Add qcom,subsys-restart property Anjelique Melendez 2025-07-16 8:33 ` Krzysztof Kozlowski 2025-07-20 4:15 ` Bjorn Andersson 2025-07-16 0:40 ` [PATCH v2 2/2] soc: qcom: pmic_glink: Add support for subsystem restart (SSR) Anjelique Melendez 2025-07-16 8:35 ` Krzysztof Kozlowski 2025-07-20 4:18 ` Bjorn Andersson 2025-07-16 8:36 ` [PATCH v2 0/2] " Krzysztof Kozlowski
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox