2022-05-30 07:18:06

by Michael Walle

[permalink] [raw]
Subject: [PATCH 0/2] arm64: remove generic ARM cpuidle support

Playing with an own PSCI implementation, I've noticed that the cpuidle-arm
driver doesn't work on arm64. It doesn't probe because since commit
788961462f34 ("ARM: psci: cpuidle: Enable PSCI CPUidle driver") the
arm_cpuidle_init() can only return -EOPNOTSUPP, because the commit removed
the cpu_idle_init and cpu_suspend ops.

It left me puzzled for quite some time. It seems that the cpuidle-psci is
the preferred one and this has been the case for quite some time. The
mentioned commit first appeared in v5.4.

Remove the ARM64 support for the cpuidle-arm driver, which then let us
remove all the supporting arch code.

Michael Walle (2):
cpuidle: cpuidle-arm: remove arm64 support
arm64: cpuidle: remove generic cpuidle support

arch/arm64/include/asm/cpu_ops.h | 9 ---------
arch/arm64/include/asm/cpuidle.h | 15 ---------------
arch/arm64/kernel/cpuidle.c | 29 -----------------------------
drivers/cpuidle/Kconfig.arm | 3 ++-
4 files changed, 2 insertions(+), 54 deletions(-)

--
2.30.2



2022-05-30 08:45:47

by Michael Walle

[permalink] [raw]
Subject: [PATCH 2/2] arm64: cpuidle: remove generic cpuidle support

The arm64 support of the generic ARM cpuidle driver was removed. This
let us remove all support code for it.

Signed-off-by: Michael Walle <[email protected]>
---
arch/arm64/include/asm/cpu_ops.h | 9 ---------
arch/arm64/include/asm/cpuidle.h | 15 ---------------
arch/arm64/kernel/cpuidle.c | 29 -----------------------------
3 files changed, 53 deletions(-)

diff --git a/arch/arm64/include/asm/cpu_ops.h b/arch/arm64/include/asm/cpu_ops.h
index e95c4df83911..a444c8915e88 100644
--- a/arch/arm64/include/asm/cpu_ops.h
+++ b/arch/arm64/include/asm/cpu_ops.h
@@ -31,11 +31,6 @@
* @cpu_die: Makes a cpu leave the kernel. Must not fail. Called from the
* cpu being killed.
* @cpu_kill: Ensures a cpu has left the kernel. Called from another cpu.
- * @cpu_init_idle: Reads any data necessary to initialize CPU idle states for
- * a proposed logical id.
- * @cpu_suspend: Suspends a cpu and saves the required context. May fail owing
- * to wrong parameters or error conditions. Called from the
- * CPU being suspended. Must be called with IRQs disabled.
*/
struct cpu_operations {
const char *name;
@@ -49,10 +44,6 @@ struct cpu_operations {
void (*cpu_die)(unsigned int cpu);
int (*cpu_kill)(unsigned int cpu);
#endif
-#ifdef CONFIG_CPU_IDLE
- int (*cpu_init_idle)(unsigned int);
- int (*cpu_suspend)(unsigned long);
-#endif
};

int __init init_cpu_ops(int cpu);
diff --git a/arch/arm64/include/asm/cpuidle.h b/arch/arm64/include/asm/cpuidle.h
index 14a19d1141bd..2047713e097d 100644
--- a/arch/arm64/include/asm/cpuidle.h
+++ b/arch/arm64/include/asm/cpuidle.h
@@ -4,21 +4,6 @@

#include <asm/proc-fns.h>

-#ifdef CONFIG_CPU_IDLE
-extern int arm_cpuidle_init(unsigned int cpu);
-extern int arm_cpuidle_suspend(int index);
-#else
-static inline int arm_cpuidle_init(unsigned int cpu)
-{
- return -EOPNOTSUPP;
-}
-
-static inline int arm_cpuidle_suspend(int index)
-{
- return -EOPNOTSUPP;
-}
-#endif
-
#ifdef CONFIG_ARM64_PSEUDO_NMI
#include <asm/arch_gicv3.h>

diff --git a/arch/arm64/kernel/cpuidle.c b/arch/arm64/kernel/cpuidle.c
index 3006f4324808..4150e308e99c 100644
--- a/arch/arm64/kernel/cpuidle.c
+++ b/arch/arm64/kernel/cpuidle.c
@@ -13,35 +13,6 @@
#include <linux/of_device.h>
#include <linux/psci.h>

-#include <asm/cpuidle.h>
-#include <asm/cpu_ops.h>
-
-int arm_cpuidle_init(unsigned int cpu)
-{
- const struct cpu_operations *ops = get_cpu_ops(cpu);
- int ret = -EOPNOTSUPP;
-
- if (ops && ops->cpu_suspend && ops->cpu_init_idle)
- ret = ops->cpu_init_idle(cpu);
-
- return ret;
-}
-
-/**
- * arm_cpuidle_suspend() - function to enter a low-power idle state
- * @index: argument to pass to CPU suspend operations
- *
- * Return: 0 on success, -EOPNOTSUPP if CPU suspend hook not initialized, CPU
- * operations back-end error code otherwise.
- */
-int arm_cpuidle_suspend(int index)
-{
- int cpu = smp_processor_id();
- const struct cpu_operations *ops = get_cpu_ops(cpu);
-
- return ops->cpu_suspend(index);
-}
-
#ifdef CONFIG_ACPI

#include <acpi/processor.h>
--
2.30.2


2022-05-31 18:59:42

by Sudeep Holla

[permalink] [raw]
Subject: Re: [PATCH 2/2] arm64: cpuidle: remove generic cpuidle support

On Sun, May 29, 2022 at 08:13:29PM +0200, Michael Walle wrote:
> The arm64 support of the generic ARM cpuidle driver was removed. This
> let us remove all support code for it.
>

Thanks for doing this, we initially had plans to do this one release after
PSCI idle driver got merged but clearly slipped through the cracks.

Reviewed-by: Sudeep Holla <[email protected]>

--
Regards,
Sudeep

2022-06-01 20:49:04

by Daniel Lezcano

[permalink] [raw]
Subject: Re: [PATCH 0/2] arm64: remove generic ARM cpuidle support

On 29/05/2022 20:13, Michael Walle wrote:
> Playing with an own PSCI implementation, I've noticed that the cpuidle-arm
> driver doesn't work on arm64. It doesn't probe because since commit
> 788961462f34 ("ARM: psci: cpuidle: Enable PSCI CPUidle driver") the
> arm_cpuidle_init() can only return -EOPNOTSUPP, because the commit removed
> the cpu_idle_init and cpu_suspend ops.
>
> It left me puzzled for quite some time. It seems that the cpuidle-psci is
> the preferred one and this has been the case for quite some time. The
> mentioned commit first appeared in v5.4.
>
> Remove the ARM64 support for the cpuidle-arm driver, which then let us
> remove all the supporting arch code.
>
> Michael Walle (2):
> cpuidle: cpuidle-arm: remove arm64 support
> arm64: cpuidle: remove generic cpuidle support
>
> arch/arm64/include/asm/cpu_ops.h | 9 ---------
> arch/arm64/include/asm/cpuidle.h | 15 ---------------
> arch/arm64/kernel/cpuidle.c | 29 -----------------------------
> drivers/cpuidle/Kconfig.arm | 3 ++-
> 4 files changed, 2 insertions(+), 54 deletions(-)

Acked-by: Daniel Lezcano <[email protected]>


--
<http://www.linaro.org/> Linaro.org │ Open source software for ARM SoCs

Follow Linaro: <http://www.facebook.com/pages/Linaro> Facebook |
<http://twitter.com/#!/linaroorg> Twitter |
<http://www.linaro.org/linaro-blog/> Blog

2022-06-22 12:04:14

by Michael Walle

[permalink] [raw]
Subject: Re: [PATCH 0/2] arm64: remove generic ARM cpuidle support

Am 2022-05-29 20:13, schrieb Michael Walle:
> Playing with an own PSCI implementation, I've noticed that the
> cpuidle-arm
> driver doesn't work on arm64. It doesn't probe because since commit
> 788961462f34 ("ARM: psci: cpuidle: Enable PSCI CPUidle driver") the
> arm_cpuidle_init() can only return -EOPNOTSUPP, because the commit
> removed
> the cpu_idle_init and cpu_suspend ops.
>
> It left me puzzled for quite some time. It seems that the cpuidle-psci
> is
> the preferred one and this has been the case for quite some time. The
> mentioned commit first appeared in v5.4.
>
> Remove the ARM64 support for the cpuidle-arm driver, which then let us
> remove all the supporting arch code.
>
> Michael Walle (2):
> cpuidle: cpuidle-arm: remove arm64 support
> arm64: cpuidle: remove generic cpuidle support
>
> arch/arm64/include/asm/cpu_ops.h | 9 ---------
> arch/arm64/include/asm/cpuidle.h | 15 ---------------
> arch/arm64/kernel/cpuidle.c | 29 -----------------------------
> drivers/cpuidle/Kconfig.arm | 3 ++-
> 4 files changed, 2 insertions(+), 54 deletions(-)

Through which tree should this patchset go? I've seen it is marked as
"Handled Elsewere" in the linux pm patchwork [1].

-michael

[1]
https://patchwork.kernel.org/project/linux-pm/patch/[email protected]/

2022-06-22 14:44:49

by Sudeep Holla

[permalink] [raw]
Subject: Re: [PATCH 0/2] arm64: remove generic ARM cpuidle support

On Wed, Jun 22, 2022 at 01:59:07PM +0200, Michael Walle wrote:
> Am 2022-05-29 20:13, schrieb Michael Walle:
> > Playing with an own PSCI implementation, I've noticed that the
> > cpuidle-arm
> > driver doesn't work on arm64. It doesn't probe because since commit
> > 788961462f34 ("ARM: psci: cpuidle: Enable PSCI CPUidle driver") the
> > arm_cpuidle_init() can only return -EOPNOTSUPP, because the commit
> > removed
> > the cpu_idle_init and cpu_suspend ops.
> >
> > It left me puzzled for quite some time. It seems that the cpuidle-psci
> > is
> > the preferred one and this has been the case for quite some time. The
> > mentioned commit first appeared in v5.4.
> >
> > Remove the ARM64 support for the cpuidle-arm driver, which then let us
> > remove all the supporting arch code.
> >
> > Michael Walle (2):
> > cpuidle: cpuidle-arm: remove arm64 support
> > arm64: cpuidle: remove generic cpuidle support
> >
> > arch/arm64/include/asm/cpu_ops.h | 9 ---------
> > arch/arm64/include/asm/cpuidle.h | 15 ---------------
> > arch/arm64/kernel/cpuidle.c | 29 -----------------------------
> > drivers/cpuidle/Kconfig.arm | 3 ++-
> > 4 files changed, 2 insertions(+), 54 deletions(-)
>
> Through which tree should this patchset go? I've seen it is marked as
> "Handled Elsewere" in the linux pm patchwork [1].
>

Generally based on the changes, it is decided. I can see why Rafael would
have marked so in PM patchwork. Daniel has already acked small change in
CPUidle config file while the bulk is removal of arm64 code. So, it is
better to route it via arm64 tree.

Will,

Assuming you will handle v5.20, can you pick this up ?

--
Regards,
Sudeep

2022-06-23 13:28:14

by Will Deacon

[permalink] [raw]
Subject: Re: [PATCH 0/2] arm64: remove generic ARM cpuidle support

On Wed, Jun 22, 2022 at 03:07:48PM +0100, Sudeep Holla wrote:
> On Wed, Jun 22, 2022 at 01:59:07PM +0200, Michael Walle wrote:
> > Am 2022-05-29 20:13, schrieb Michael Walle:
> > > Playing with an own PSCI implementation, I've noticed that the
> > > cpuidle-arm
> > > driver doesn't work on arm64. It doesn't probe because since commit
> > > 788961462f34 ("ARM: psci: cpuidle: Enable PSCI CPUidle driver") the
> > > arm_cpuidle_init() can only return -EOPNOTSUPP, because the commit
> > > removed
> > > the cpu_idle_init and cpu_suspend ops.
> > >
> > > It left me puzzled for quite some time. It seems that the cpuidle-psci
> > > is
> > > the preferred one and this has been the case for quite some time. The
> > > mentioned commit first appeared in v5.4.
> > >
> > > Remove the ARM64 support for the cpuidle-arm driver, which then let us
> > > remove all the supporting arch code.
> > >
> > > Michael Walle (2):
> > > cpuidle: cpuidle-arm: remove arm64 support
> > > arm64: cpuidle: remove generic cpuidle support
> > >
> > > arch/arm64/include/asm/cpu_ops.h | 9 ---------
> > > arch/arm64/include/asm/cpuidle.h | 15 ---------------
> > > arch/arm64/kernel/cpuidle.c | 29 -----------------------------
> > > drivers/cpuidle/Kconfig.arm | 3 ++-
> > > 4 files changed, 2 insertions(+), 54 deletions(-)
> >
> > Through which tree should this patchset go? I've seen it is marked as
> > "Handled Elsewere" in the linux pm patchwork [1].
> >
>
> Generally based on the changes, it is decided. I can see why Rafael would
> have marked so in PM patchwork. Daniel has already acked small change in
> CPUidle config file while the bulk is removal of arm64 code. So, it is
> better to route it via arm64 tree.
>
> Will,
>
> Assuming you will handle v5.20, can you pick this up ?

Yup, on it.

Will

2022-06-23 20:13:51

by Will Deacon

[permalink] [raw]
Subject: Re: [PATCH 0/2] arm64: remove generic ARM cpuidle support

On Sun, 29 May 2022 20:13:27 +0200, Michael Walle wrote:
> Playing with an own PSCI implementation, I've noticed that the cpuidle-arm
> driver doesn't work on arm64. It doesn't probe because since commit
> 788961462f34 ("ARM: psci: cpuidle: Enable PSCI CPUidle driver") the
> arm_cpuidle_init() can only return -EOPNOTSUPP, because the commit removed
> the cpu_idle_init and cpu_suspend ops.
>
> It left me puzzled for quite some time. It seems that the cpuidle-psci is
> the preferred one and this has been the case for quite some time. The
> mentioned commit first appeared in v5.4.
>
> [...]

Applied to arm64 (for-next/cpuidle), thanks!

[1/2] cpuidle: cpuidle-arm: remove arm64 support
https://git.kernel.org/arm64/c/51280acad855
[2/2] arm64: cpuidle: remove generic cpuidle support
https://git.kernel.org/arm64/c/471f80db9ef1

Cheers,
--
Will

https://fixes.arm64.dev
https://next.arm64.dev
https://will.arm64.dev