Re: [PATCH v2 2/8] cpuidle: psci: Transition to the faux device interface
From: Sudeep Holla
Date: Tue Apr 15 2025 - 08:36:32 EST
On Tue, Apr 15, 2025 at 02:21:33PM +0200, Greg Kroah-Hartman wrote:
> On Tue, Mar 18, 2025 at 05:01:40PM +0000, Sudeep Holla wrote:
> > The PSCI cpuidle driver does not require the creation of a platform
> > device. Originally, this approach was chosen for simplicity when the
> > driver was first implemented.
> >
> > With the introduction of the lightweight faux device interface, we now
> > have a more appropriate alternative. Migrate the driver to utilize the
> > faux bus, given that the platform device it previously created was not
> > a real one anyway. This will simplify the code, reducing its footprint
> > while maintaining functionality.
> >
> > Cc: Lorenzo Pieralisi <lpieralisi@xxxxxxxxxx>
> > Cc: "Rafael J. Wysocki" <rafael@xxxxxxxxxx>
> > Cc: Daniel Lezcano <daniel.lezcano@xxxxxxxxxx>
> > Cc: linux-pm@xxxxxxxxxxxxxxx
> > Signed-off-by: Sudeep Holla <sudeep.holla@xxxxxxx>
> > ---
> > drivers/cpuidle/cpuidle-psci.c | 32 ++++----------------------------
> > 1 file changed, 4 insertions(+), 28 deletions(-)
> >
> > diff --git a/drivers/cpuidle/cpuidle-psci.c b/drivers/cpuidle/cpuidle-psci.c
> > index 2562dc001fc1de69732ef28f383d2809262a3d96..5d4d6daed36d8540ba2ce3dc54a3180731b03d22 100644
> > --- a/drivers/cpuidle/cpuidle-psci.c
> > +++ b/drivers/cpuidle/cpuidle-psci.c
> > @@ -16,7 +16,7 @@
> > #include <linux/kernel.h>
> > #include <linux/module.h>
> > #include <linux/of.h>
> > -#include <linux/platform_device.h>
> > +#include <linux/device/faux.h>
> > #include <linux/psci.h>
> > #include <linux/pm_domain.h>
> > #include <linux/pm_runtime.h>
> > @@ -404,14 +404,14 @@ static int psci_idle_init_cpu(struct device *dev, int cpu)
> > * to register cpuidle driver then rollback to cancel all CPUs
> > * registration.
> > */
> > -static int psci_cpuidle_probe(struct platform_device *pdev)
> > +static int psci_cpuidle_probe(struct faux_device *fdev)
> > {
> > int cpu, ret;
> > struct cpuidle_driver *drv;
> > struct cpuidle_device *dev;
> >
> > for_each_possible_cpu(cpu) {
> > - ret = psci_idle_init_cpu(&pdev->dev, cpu);
> > + ret = psci_idle_init_cpu(&fdev->dev, cpu);
> > if (ret)
> > goto out_fail;
> > }
> > @@ -431,28 +431,4 @@ static int psci_cpuidle_probe(struct platform_device *pdev)
> > return ret;
> > }
> >
> > -static struct platform_driver psci_cpuidle_driver = {
> > - .probe = psci_cpuidle_probe,
> > - .driver = {
> > - .name = "psci-cpuidle",
> > - },
> > -};
> > -
> > -static int __init psci_idle_init(void)
> > -{
> > - struct platform_device *pdev;
> > - int ret;
> > -
> > - ret = platform_driver_register(&psci_cpuidle_driver);
> > - if (ret)
> > - return ret;
> > -
> > - pdev = platform_device_register_simple("psci-cpuidle", -1, NULL, 0);
> > - if (IS_ERR(pdev)) {
> > - platform_driver_unregister(&psci_cpuidle_driver);
> > - return PTR_ERR(pdev);
> > - }
> > -
> > - return 0;
> > -}
> > -device_initcall(psci_idle_init);
> > +module_faux_driver(psci_cpuidle, psci_cpuidle_probe, NULL, true);
>
> See, what does "true" mean here?
>
> Why would you ever want "false"?
>
There were few efi platform devices that were created conditionally and
the idea with this true/false was to pass that condition. I agree it was
not clean. Anyways since efi platform devices can't be moved to faux
devices, this flag becomes useless as it is most true for all other users.
Also as mention in the other thread, the need for macro also become very
weak as efi devices can't be moved into faux.
So all the patches in v1 except efi and trng are now queued via respective
trees using faux device apis directly without this weird macro 😄.
--
Regards,
Sudeep