Linux Power Management development
 help / color / mirror / Atom feed
* [PATCH v2 0/8] drivers: Transition to the faux device interface
@ 2025-03-18 17:01 Sudeep Holla
  2025-03-18 17:01 ` [PATCH v2 2/8] cpuidle: psci: " Sudeep Holla
  0 siblings, 1 reply; 7+ messages in thread
From: Sudeep Holla @ 2025-03-18 17:01 UTC (permalink / raw)
  To: linux-kernel
  Cc: Sudeep Holla, Greg Kroah-Hartman, Lorenzo Pieralisi,
	Rafael J. Wysocki, Daniel Lezcano, linux-pm, Andre Przywara,
	Herbert Xu, Jeff Johnson, linux-crypto, Ard Biesheuvel,
	Alexandre Belloni, linux-rtc, linux-efi, Borislav Petkov,
	linux-acpi, Andrew Lunn, David S. Miller, netdev

Recently when debugging why one of the scmi platform device was not
showing up under /sys/devices/platform/firmware:scmi instead was
appearing directly under /sys/devices/platform, I noticed the new
faux interface /sys/devices/faux.

Looking through the discussion and the background, I got excited and
took the opportunity to clear all the platform devices under
/sys/devices/platform on the Arm Juno/FVP platforms that are really
faux devices. Only the platform devices created for the device nodes
from the DT remain under /sys/devices/platform after these changes.

All the patches are independent of each other and are part of the series
just to demonstrate the use of macro module_faux_driver() where
applicable. The idea is to get the macro merged first and then push the
individual patches via respective subsystem later.

Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
---
Changes in v2:
- Dropped all the modalias expect efivars(reason in the patch)
- Defined new helper macro module_faux_driver() and moved most of the
  drivers to use it
- Dropped already queued ASoC and regulator changes
- Link to v1: https://lore.kernel.org/r/20250317-plat2faux_dev-v1-0-5fe67c085ad5@arm.com

---
Sudeep Holla (8):
      driver core: add helper macro for module_faux_driver() boilerplate
      cpuidle: psci: Transition to the faux device interface
      hwrng: arm-smccc-trng - transition to the faux device interface
      rtc: efi: Transition to the faux device interface
      virt: efi_secret: Transition to the faux device interface
      efi: efivars: Transition to the faux device interface
      ACPI: APEI: EINJ: Transition to the faux device interface
      net: phy: fixed_phy: transition to the faux device interface

 drivers/acpi/apei/einj-core.c             | 51 ++++---------------------------
 drivers/char/hw_random/arm_smccc_trng.c   | 19 +++++-------
 drivers/cpuidle/cpuidle-psci.c            | 32 +++----------------
 drivers/firmware/efi/efi-pstore.c         |  2 +-
 drivers/firmware/efi/efi.c                | 12 ++------
 drivers/firmware/smccc/smccc.c            | 17 -----------
 drivers/net/phy/fixed_phy.c               | 16 +++++-----
 drivers/rtc/rtc-efi.c                     | 16 +++-------
 drivers/virt/coco/efi_secret/efi_secret.c | 29 +++++-------------
 include/linux/device/faux.h               | 49 +++++++++++++++++++++++++++++
 10 files changed, 90 insertions(+), 153 deletions(-)
---
base-commit: 4701f33a10702d5fc577c32434eb62adde0a1ae1
change-id: 20250315-plat2faux_dev-8c28b35be96a
-- 
Regards,
Sudeep


^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH v2 2/8] cpuidle: psci: Transition to the faux device interface
  2025-03-18 17:01 [PATCH v2 0/8] drivers: Transition to the faux device interface Sudeep Holla
@ 2025-03-18 17:01 ` Sudeep Holla
  2025-04-15 12:21   ` Greg Kroah-Hartman
  2025-05-01 13:01   ` Jon Hunter
  0 siblings, 2 replies; 7+ messages in thread
From: Sudeep Holla @ 2025-03-18 17:01 UTC (permalink / raw)
  To: linux-kernel
  Cc: Sudeep Holla, Greg Kroah-Hartman, Lorenzo Pieralisi,
	Rafael J. Wysocki, Daniel Lezcano, linux-pm

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@kernel.org>
Cc: "Rafael J. Wysocki" <rafael@kernel.org>
Cc: Daniel Lezcano <daniel.lezcano@linaro.org>
Cc: linux-pm@vger.kernel.org
Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
---
 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);

-- 
2.34.1


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH v2 2/8] cpuidle: psci: Transition to the faux device interface
  2025-03-18 17:01 ` [PATCH v2 2/8] cpuidle: psci: " Sudeep Holla
@ 2025-04-15 12:21   ` Greg Kroah-Hartman
  2025-04-15 12:35     ` Sudeep Holla
  2025-05-01 13:01   ` Jon Hunter
  1 sibling, 1 reply; 7+ messages in thread
From: Greg Kroah-Hartman @ 2025-04-15 12:21 UTC (permalink / raw)
  To: Sudeep Holla
  Cc: linux-kernel, Lorenzo Pieralisi, Rafael J. Wysocki,
	Daniel Lezcano, linux-pm

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@kernel.org>
> Cc: "Rafael J. Wysocki" <rafael@kernel.org>
> Cc: Daniel Lezcano <daniel.lezcano@linaro.org>
> Cc: linux-pm@vger.kernel.org
> Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
> ---
>  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"?

thanks,

greg k-h

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH v2 2/8] cpuidle: psci: Transition to the faux device interface
  2025-04-15 12:21   ` Greg Kroah-Hartman
@ 2025-04-15 12:35     ` Sudeep Holla
  0 siblings, 0 replies; 7+ messages in thread
From: Sudeep Holla @ 2025-04-15 12:35 UTC (permalink / raw)
  To: Greg Kroah-Hartman
  Cc: linux-kernel, Lorenzo Pieralisi, Sudeep Holla, Rafael J. Wysocki,
	Daniel Lezcano, linux-pm

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@kernel.org>
> > Cc: "Rafael J. Wysocki" <rafael@kernel.org>
> > Cc: Daniel Lezcano <daniel.lezcano@linaro.org>
> > Cc: linux-pm@vger.kernel.org
> > Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
> > ---
> >  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

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH v2 2/8] cpuidle: psci: Transition to the faux device interface
  2025-03-18 17:01 ` [PATCH v2 2/8] cpuidle: psci: " Sudeep Holla
  2025-04-15 12:21   ` Greg Kroah-Hartman
@ 2025-05-01 13:01   ` Jon Hunter
  2025-05-01 16:07     ` Sudeep Holla
  1 sibling, 1 reply; 7+ messages in thread
From: Jon Hunter @ 2025-05-01 13:01 UTC (permalink / raw)
  To: Sudeep Holla, linux-kernel
  Cc: Greg Kroah-Hartman, Lorenzo Pieralisi, Rafael J. Wysocki,
	Daniel Lezcano, linux-pm, linux-tegra@vger.kernel.org

Hi Sudeep,

On 18/03/2025 17:01, 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@kernel.org>
> Cc: "Rafael J. Wysocki" <rafael@kernel.org>
> Cc: Daniel Lezcano <daniel.lezcano@linaro.org>
> Cc: linux-pm@vger.kernel.org
> Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
> ---
>   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);
> 


I have noticed the following error messages on some of our Tegra devices ...

  ERR KERN faux psci-cpuidle: probe did not succeed, tearing down the device
  ERR KERN CPUidle PSCI: Failed to create psci-cpuidle device

I had a quick look at this and this occurs because of the following code 
in the probe cpuidle-psci driver ...

         /*
          * If no DT idle states are detected (ret == 0) let the driver
          * initialization fail accordingly since there is no reason to
          * initialize the idle driver if only wfi is supported, the
          * default archictectural back-end already executes wfi
          * on idle entry.
          */
         ret = dt_init_idle_driver(drv, psci_idle_state_match, 1);
         if (ret <= 0)
                 return ret ? : -ENODEV;


So although it could be argued that the error message is valid, I am not 
sure if there is anything that mandates that we need to have the 
idle-states present.

We are always checking for new kernel errors and so if something new 
occurs, I am trying to figure out what is the correct way to fix. For 
this case I am not sure what is best.

Thanks
Jon

-- 
nvpublic


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH v2 2/8] cpuidle: psci: Transition to the faux device interface
  2025-05-01 13:01   ` Jon Hunter
@ 2025-05-01 16:07     ` Sudeep Holla
  2025-05-02 10:20       ` Jon Hunter
  0 siblings, 1 reply; 7+ messages in thread
From: Sudeep Holla @ 2025-05-01 16:07 UTC (permalink / raw)
  To: Jon Hunter
  Cc: linux-kernel, Greg Kroah-Hartman, Lorenzo Pieralisi,
	Rafael J. Wysocki, Daniel Lezcano, linux-pm,
	linux-tegra@vger.kernel.org

On Thu, May 01, 2025 at 02:01:19PM +0100, Jon Hunter wrote:
> Hi Sudeep,
> 
> On 18/03/2025 17:01, 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@kernel.org>
> > Cc: "Rafael J. Wysocki" <rafael@kernel.org>
> > Cc: Daniel Lezcano <daniel.lezcano@linaro.org>
> > Cc: linux-pm@vger.kernel.org
> > Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
> > ---
> >   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);
> > 
> 
> 
> I have noticed the following error messages on some of our Tegra devices ...
> 
>  ERR KERN faux psci-cpuidle: probe did not succeed, tearing down the device
>  ERR KERN CPUidle PSCI: Failed to create psci-cpuidle device
> 
> I had a quick look at this and this occurs because of the following code in
> the probe cpuidle-psci driver ...
> 
>         /*
>          * If no DT idle states are detected (ret == 0) let the driver
>          * initialization fail accordingly since there is no reason to
>          * initialize the idle driver if only wfi is supported, the
>          * default archictectural back-end already executes wfi
>          * on idle entry.
>          */
>         ret = dt_init_idle_driver(drv, psci_idle_state_match, 1);
>         if (ret <= 0)
>                 return ret ? : -ENODEV;
> 
> 
> So although it could be argued that the error message is valid, I am not
> sure if there is anything that mandates that we need to have the idle-states
> present.
> 
> We are always checking for new kernel errors and so if something new occurs,
> I am trying to figure out what is the correct way to fix. For this case I am
> not sure what is best.
> 

This is another case where probe was failing before too just that faux
device probe throws the error. I will take a look and see what can be done.
But yes, we shouldn't throw error if no idle-states are present in the DT.

-- 
Regards,
Sudeep

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH v2 2/8] cpuidle: psci: Transition to the faux device interface
  2025-05-01 16:07     ` Sudeep Holla
@ 2025-05-02 10:20       ` Jon Hunter
  0 siblings, 0 replies; 7+ messages in thread
From: Jon Hunter @ 2025-05-02 10:20 UTC (permalink / raw)
  To: Sudeep Holla
  Cc: linux-kernel, Greg Kroah-Hartman, Lorenzo Pieralisi,
	Rafael J. Wysocki, Daniel Lezcano, linux-pm,
	linux-tegra@vger.kernel.org


On 01/05/2025 17:07, Sudeep Holla wrote:

...

>> I have noticed the following error messages on some of our Tegra devices ...
>>
>>   ERR KERN faux psci-cpuidle: probe did not succeed, tearing down the device
>>   ERR KERN CPUidle PSCI: Failed to create psci-cpuidle device
>>
>> I had a quick look at this and this occurs because of the following code in
>> the probe cpuidle-psci driver ...
>>
>>          /*
>>           * If no DT idle states are detected (ret == 0) let the driver
>>           * initialization fail accordingly since there is no reason to
>>           * initialize the idle driver if only wfi is supported, the
>>           * default archictectural back-end already executes wfi
>>           * on idle entry.
>>           */
>>          ret = dt_init_idle_driver(drv, psci_idle_state_match, 1);
>>          if (ret <= 0)
>>                  return ret ? : -ENODEV;
>>
>>
>> So although it could be argued that the error message is valid, I am not
>> sure if there is anything that mandates that we need to have the idle-states
>> present.
>>
>> We are always checking for new kernel errors and so if something new occurs,
>> I am trying to figure out what is the correct way to fix. For this case I am
>> not sure what is best.
>>
> 
> This is another case where probe was failing before too just that faux
> device probe throws the error. I will take a look and see what can be done.
> But yes, we shouldn't throw error if no idle-states are present in the DT.


Yes exactly this was already failing. Thanks for taking a look!

Cheers
Jon

-- 
nvpublic


^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2025-05-02 10:21 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-03-18 17:01 [PATCH v2 0/8] drivers: Transition to the faux device interface Sudeep Holla
2025-03-18 17:01 ` [PATCH v2 2/8] cpuidle: psci: " Sudeep Holla
2025-04-15 12:21   ` Greg Kroah-Hartman
2025-04-15 12:35     ` Sudeep Holla
2025-05-01 13:01   ` Jon Hunter
2025-05-01 16:07     ` Sudeep Holla
2025-05-02 10:20       ` Jon Hunter

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox