2021-03-12 08:54:08

by Ran Wang

[permalink] [raw]
Subject: [PATCH v6] soc: fsl: enable acpi support in RCPM driver

From: Peng Ma <[email protected]>

This patch enables ACPI support in RCPM driver.

Signed-off-by: Peng Ma <[email protected]>
Signed-off-by: Ran Wang <[email protected]>
---
Change in v6:
- Remove copyright udpate to rebase on latest mainline

Change in v5:
- Fix panic when dev->of_node is null

Change in v4:
- Make commit subject more accurate
- Remove unrelated new blank line

Change in v3:
- Add #ifdef CONFIG_ACPI for acpi_device_id
- Rename rcpm_acpi_imx_ids to rcpm_acpi_ids

Change in v2:
- Update acpi_device_id to fix conflict with other driver

drivers/soc/fsl/rcpm.c | 18 ++++++++++++++++--
1 file changed, 16 insertions(+), 2 deletions(-)

diff --git a/drivers/soc/fsl/rcpm.c b/drivers/soc/fsl/rcpm.c
index 4ace28cab314..7aa997b932d1 100644
--- a/drivers/soc/fsl/rcpm.c
+++ b/drivers/soc/fsl/rcpm.c
@@ -13,6 +13,7 @@
#include <linux/slab.h>
#include <linux/suspend.h>
#include <linux/kernel.h>
+#include <linux/acpi.h>

#define RCPM_WAKEUP_CELL_MAX_SIZE 7

@@ -78,10 +79,14 @@ static int rcpm_pm_prepare(struct device *dev)
"fsl,rcpm-wakeup", value,
rcpm->wakeup_cells + 1);

- /* Wakeup source should refer to current rcpm device */
- if (ret || (np->phandle != value[0]))
+ if (ret)
continue;

+ if (is_of_node(dev->fwnode))
+ /* Should refer to current rcpm device */
+ if (np->phandle != value[0])
+ continue;
+
/* Property "#fsl,rcpm-wakeup-cells" of rcpm node defines the
* number of IPPDEXPCR register cells, and "fsl,rcpm-wakeup"
* of wakeup source IP contains an integer array: <phandle to
@@ -172,10 +177,19 @@ static const struct of_device_id rcpm_of_match[] = {
};
MODULE_DEVICE_TABLE(of, rcpm_of_match);

+#ifdef CONFIG_ACPI
+static const struct acpi_device_id rcpm_acpi_ids[] = {
+ {"NXP0015",},
+ { }
+};
+MODULE_DEVICE_TABLE(acpi, rcpm_acpi_ids);
+#endif
+
static struct platform_driver rcpm_driver = {
.driver = {
.name = "rcpm",
.of_match_table = rcpm_of_match,
+ .acpi_match_table = ACPI_PTR(rcpm_acpi_ids),
.pm = &rcpm_pm_ops,
},
.probe = rcpm_probe,
--
2.25.1


2021-04-07 13:49:42

by Ran Wang

[permalink] [raw]
Subject: RE: [PATCH v6] soc: fsl: enable acpi support in RCPM driver

Hi Leo,

On Wednesday, April 7, 2021 5:45 AM, Li Yang wrote:
>
> On Fri, Mar 12, 2021 at 2:56 AM Ran Wang <[email protected]> wrote:
> >
> > From: Peng Ma <[email protected]>
> >
> > This patch enables ACPI support in RCPM driver.
> >
> > Signed-off-by: Peng Ma <[email protected]>
> > Signed-off-by: Ran Wang <[email protected]>
> > ---
> > Change in v6:
> > - Remove copyright udpate to rebase on latest mainline
> >
> > Change in v5:
> > - Fix panic when dev->of_node is null
> >
> > Change in v4:
> > - Make commit subject more accurate
> > - Remove unrelated new blank line
> >
> > Change in v3:
> > - Add #ifdef CONFIG_ACPI for acpi_device_id
> > - Rename rcpm_acpi_imx_ids to rcpm_acpi_ids
> >
> > Change in v2:
> > - Update acpi_device_id to fix conflict with other driver
> >
> > drivers/soc/fsl/rcpm.c | 18 ++++++++++++++++--
> > 1 file changed, 16 insertions(+), 2 deletions(-)
> >
> > diff --git a/drivers/soc/fsl/rcpm.c b/drivers/soc/fsl/rcpm.c index
> > 4ace28cab314..7aa997b932d1 100644
> > --- a/drivers/soc/fsl/rcpm.c
> > +++ b/drivers/soc/fsl/rcpm.c
> > @@ -13,6 +13,7 @@
> > #include <linux/slab.h>
> > #include <linux/suspend.h>
> > #include <linux/kernel.h>
> > +#include <linux/acpi.h>
> >
> > #define RCPM_WAKEUP_CELL_MAX_SIZE 7
> >
> > @@ -78,10 +79,14 @@ static int rcpm_pm_prepare(struct device *dev)
> > "fsl,rcpm-wakeup", value,
> > rcpm->wakeup_cells + 1);
> >
> > - /* Wakeup source should refer to current rcpm device */
> > - if (ret || (np->phandle != value[0]))
> > + if (ret)
> > continue;
> >
> > + if (is_of_node(dev->fwnode))
> > + /* Should refer to current rcpm device */
> > + if (np->phandle != value[0])
> > + continue;
>
> It looks like that we assume that in the ACPI scenario there will only be one RCPM controller and all devices are controlled by this single
> PM controller. This probably is true for all existing SoCs with a RCPM. But since the driver tried to support multiple RCPMs, maybe we
> should continue to support multiple RCPM controllers or at least mention that in the comment.

How about adding some comment as below:

/* For ACPI mode, currently we assume there is only one RCPM controller existing */

Regards,
Ran

>
> > +
> > /* Property "#fsl,rcpm-wakeup-cells" of rcpm node defines the
> > * number of IPPDEXPCR register cells, and "fsl,rcpm-wakeup"
> > * of wakeup source IP contains an integer array:
> > <phandle to @@ -172,10 +177,19 @@ static const struct of_device_id
> > rcpm_of_match[] = { }; MODULE_DEVICE_TABLE(of, rcpm_of_match);
> >
> > +#ifdef CONFIG_ACPI
> > +static const struct acpi_device_id rcpm_acpi_ids[] = {
> > + {"NXP0015",},
> > + { }
> > +};
> > +MODULE_DEVICE_TABLE(acpi, rcpm_acpi_ids); #endif
> > +
> > static struct platform_driver rcpm_driver = {
> > .driver = {
> > .name = "rcpm",
> > .of_match_table = rcpm_of_match,
> > + .acpi_match_table = ACPI_PTR(rcpm_acpi_ids),
> > .pm = &rcpm_pm_ops,
> > },
> > .probe = rcpm_probe,
> > --
> > 2.25.1
> >

2021-04-07 15:31:40

by Leo Li

[permalink] [raw]
Subject: Re: [PATCH v6] soc: fsl: enable acpi support in RCPM driver

On Fri, Mar 12, 2021 at 2:56 AM Ran Wang <[email protected]> wrote:
>
> From: Peng Ma <[email protected]>
>
> This patch enables ACPI support in RCPM driver.
>
> Signed-off-by: Peng Ma <[email protected]>
> Signed-off-by: Ran Wang <[email protected]>
> ---
> Change in v6:
> - Remove copyright udpate to rebase on latest mainline
>
> Change in v5:
> - Fix panic when dev->of_node is null
>
> Change in v4:
> - Make commit subject more accurate
> - Remove unrelated new blank line
>
> Change in v3:
> - Add #ifdef CONFIG_ACPI for acpi_device_id
> - Rename rcpm_acpi_imx_ids to rcpm_acpi_ids
>
> Change in v2:
> - Update acpi_device_id to fix conflict with other driver
>
> drivers/soc/fsl/rcpm.c | 18 ++++++++++++++++--
> 1 file changed, 16 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/soc/fsl/rcpm.c b/drivers/soc/fsl/rcpm.c
> index 4ace28cab314..7aa997b932d1 100644
> --- a/drivers/soc/fsl/rcpm.c
> +++ b/drivers/soc/fsl/rcpm.c
> @@ -13,6 +13,7 @@
> #include <linux/slab.h>
> #include <linux/suspend.h>
> #include <linux/kernel.h>
> +#include <linux/acpi.h>
>
> #define RCPM_WAKEUP_CELL_MAX_SIZE 7
>
> @@ -78,10 +79,14 @@ static int rcpm_pm_prepare(struct device *dev)
> "fsl,rcpm-wakeup", value,
> rcpm->wakeup_cells + 1);
>
> - /* Wakeup source should refer to current rcpm device */
> - if (ret || (np->phandle != value[0]))
> + if (ret)
> continue;
>
> + if (is_of_node(dev->fwnode))
> + /* Should refer to current rcpm device */
> + if (np->phandle != value[0])
> + continue;

It looks like that we assume that in the ACPI scenario there will only
be one RCPM controller and all devices are controlled by this single
PM controller. This probably is true for all existing SoCs with a
RCPM. But since the driver tried to support multiple RCPMs, maybe we
should continue to support multiple RCPM controllers or at least
mention that in the comment.

> +
> /* Property "#fsl,rcpm-wakeup-cells" of rcpm node defines the
> * number of IPPDEXPCR register cells, and "fsl,rcpm-wakeup"
> * of wakeup source IP contains an integer array: <phandle to
> @@ -172,10 +177,19 @@ static const struct of_device_id rcpm_of_match[] = {
> };
> MODULE_DEVICE_TABLE(of, rcpm_of_match);
>
> +#ifdef CONFIG_ACPI
> +static const struct acpi_device_id rcpm_acpi_ids[] = {
> + {"NXP0015",},
> + { }
> +};
> +MODULE_DEVICE_TABLE(acpi, rcpm_acpi_ids);
> +#endif
> +
> static struct platform_driver rcpm_driver = {
> .driver = {
> .name = "rcpm",
> .of_match_table = rcpm_of_match,
> + .acpi_match_table = ACPI_PTR(rcpm_acpi_ids),
> .pm = &rcpm_pm_ops,
> },
> .probe = rcpm_probe,
> --
> 2.25.1
>

2021-04-07 17:48:20

by Leo Li

[permalink] [raw]
Subject: RE: [PATCH v6] soc: fsl: enable acpi support in RCPM driver



> -----Original Message-----
> From: Ran Wang <[email protected]>
> Sent: Tuesday, April 6, 2021 8:32 PM
> To: Leo Li <[email protected]>
> Cc: Christophe Leroy <[email protected]>; linuxppc-dev
> <[email protected]>; moderated list:ARM/FREESCALE IMX / MXC
> ARM ARCHITECTURE <[email protected]>; lkml <linux-
> [email protected]>
> Subject: RE: [PATCH v6] soc: fsl: enable acpi support in RCPM driver
>
> Hi Leo,
>
> On Wednesday, April 7, 2021 5:45 AM, Li Yang wrote:
> >
> > On Fri, Mar 12, 2021 at 2:56 AM Ran Wang <[email protected]> wrote:
> > >
> > > From: Peng Ma <[email protected]>
> > >
> > > This patch enables ACPI support in RCPM driver.
> > >
> > > Signed-off-by: Peng Ma <[email protected]>
> > > Signed-off-by: Ran Wang <[email protected]>
> > > ---
> > > Change in v6:
> > > - Remove copyright udpate to rebase on latest mainline
> > >
> > > Change in v5:
> > > - Fix panic when dev->of_node is null
> > >
> > > Change in v4:
> > > - Make commit subject more accurate
> > > - Remove unrelated new blank line
> > >
> > > Change in v3:
> > > - Add #ifdef CONFIG_ACPI for acpi_device_id
> > > - Rename rcpm_acpi_imx_ids to rcpm_acpi_ids
> > >
> > > Change in v2:
> > > - Update acpi_device_id to fix conflict with other driver
> > >
> > > drivers/soc/fsl/rcpm.c | 18 ++++++++++++++++--
> > > 1 file changed, 16 insertions(+), 2 deletions(-)
> > >
> > > diff --git a/drivers/soc/fsl/rcpm.c b/drivers/soc/fsl/rcpm.c index
> > > 4ace28cab314..7aa997b932d1 100644
> > > --- a/drivers/soc/fsl/rcpm.c
> > > +++ b/drivers/soc/fsl/rcpm.c
> > > @@ -13,6 +13,7 @@
> > > #include <linux/slab.h>
> > > #include <linux/suspend.h>
> > > #include <linux/kernel.h>
> > > +#include <linux/acpi.h>
> > >
> > > #define RCPM_WAKEUP_CELL_MAX_SIZE 7
> > >
> > > @@ -78,10 +79,14 @@ static int rcpm_pm_prepare(struct device *dev)
> > > "fsl,rcpm-wakeup", value,
> > > rcpm->wakeup_cells + 1);
> > >
> > > - /* Wakeup source should refer to current rcpm device */
> > > - if (ret || (np->phandle != value[0]))
> > > + if (ret)
> > > continue;
> > >
> > > + if (is_of_node(dev->fwnode))
> > > + /* Should refer to current rcpm device */

Better to be /* Only handle devices with fsl,rcpm-wakeup pointing to the current rcpm node*/
> > > + if (np->phandle != value[0])
> > > + continue;
> >
> > It looks like that we assume that in the ACPI scenario there will only
> > be one RCPM controller and all devices are controlled by this single
> > PM controller. This probably is true for all existing SoCs with a RCPM. But
> since the driver tried to support multiple RCPMs, maybe we should continue
> to support multiple RCPM controllers or at least mention that in the
> comment.
>
> How about adding some comment as below:
>
> /* For ACPI mode, currently we assume there is only one RCPM controller
> existing */

Ok. On the other hand, it will be clearer to update the existing comment above.

>
> Regards,
> Ran
>
> >
> > > +
> > > /* Property "#fsl,rcpm-wakeup-cells" of rcpm node defines the
> > > * number of IPPDEXPCR register cells, and "fsl,rcpm-wakeup"
> > > * of wakeup source IP contains an integer array:
> > > <phandle to @@ -172,10 +177,19 @@ static const struct of_device_id
> > > rcpm_of_match[] = { }; MODULE_DEVICE_TABLE(of, rcpm_of_match);
> > >
> > > +#ifdef CONFIG_ACPI
> > > +static const struct acpi_device_id rcpm_acpi_ids[] = {
> > > + {"NXP0015",},
> > > + { }
> > > +};
> > > +MODULE_DEVICE_TABLE(acpi, rcpm_acpi_ids); #endif
> > > +
> > > static struct platform_driver rcpm_driver = {
> > > .driver = {
> > > .name = "rcpm",
> > > .of_match_table = rcpm_of_match,
> > > + .acpi_match_table = ACPI_PTR(rcpm_acpi_ids),
> > > .pm = &rcpm_pm_ops,
> > > },
> > > .probe = rcpm_probe,
> > > --
> > > 2.25.1
> > >