linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] drivers: firmware: psci: use kernel restart handler functionality
@ 2019-10-12 21:47 Stefan Agner
  2019-10-14 10:07 ` Sudeep Holla
  0 siblings, 1 reply; 3+ messages in thread
From: Stefan Agner @ 2019-10-12 21:47 UTC (permalink / raw)
  To: mark.rutland, lorenzo.pieralisi
  Cc: linux-arm-kernel, linux-kernel, Stefan Agner

From: Stefan Agner <stefan.agner@toradex.com>

Use the kernels restart handler to register the PSCI system reset
capability. The restart handler use notifier chains along with
priorities. This allows to use restart handlers with higher priority
(in case available) while still supporting PSCI.

Since the ARM handler had priority over the kernels restart handler
before this patch, use a slightly elevated priority of 160 to make
sure PSCI is used before most of the other handlers are called.

Signed-off-by: Stefan Agner <stefan.agner@toradex.com>
---
 drivers/firmware/psci/psci.c | 17 +++++++++++++++--
 1 file changed, 15 insertions(+), 2 deletions(-)

diff --git a/drivers/firmware/psci/psci.c b/drivers/firmware/psci/psci.c
index 84f4ff351c62..d8677b54132f 100644
--- a/drivers/firmware/psci/psci.c
+++ b/drivers/firmware/psci/psci.c
@@ -82,6 +82,7 @@ static u32 psci_function_id[PSCI_FN_MAX];
 
 static u32 psci_cpu_suspend_feature;
 static bool psci_system_reset2_supported;
+static struct notifier_block psci_restart_handler;
 
 static inline bool psci_has_ext_power_state(void)
 {
@@ -250,7 +251,8 @@ static int get_set_conduit_method(struct device_node *np)
 	return 0;
 }
 
-static void psci_sys_reset(enum reboot_mode reboot_mode, const char *cmd)
+static int psci_sys_reset(struct notifier_block *this,
+			    unsigned long reboot_mode, void *cmd)
 {
 	if ((reboot_mode == REBOOT_WARM || reboot_mode == REBOOT_SOFT) &&
 	    psci_system_reset2_supported) {
@@ -263,6 +265,8 @@ static void psci_sys_reset(enum reboot_mode reboot_mode, const char *cmd)
 	} else {
 		invoke_psci_fn(PSCI_0_2_FN_SYSTEM_RESET, 0, 0, 0);
 	}
+
+	return NOTIFY_DONE;
 }
 
 static void psci_sys_poweroff(void)
@@ -411,6 +415,8 @@ static void __init psci_init_smccc(void)
 
 static void __init psci_0_2_set_functions(void)
 {
+	int ret;
+
 	pr_info("Using standard PSCI v0.2 function IDs\n");
 	psci_ops.get_version = psci_get_version;
 
@@ -431,7 +437,14 @@ static void __init psci_0_2_set_functions(void)
 
 	psci_ops.migrate_info_type = psci_migrate_info_type;
 
-	arm_pm_restart = psci_sys_reset;
+	psci_restart_handler.notifier_call = psci_sys_reset;
+	psci_restart_handler.priority = 160;
+
+	ret = register_restart_handler(&psci_restart_handler);
+	if (ret) {
+		pr_err("Cannot register restart handler, %d\n", ret);
+		return;
+	}
 
 	pm_power_off = psci_sys_poweroff;
 }
-- 
2.23.0


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

* Re: [PATCH] drivers: firmware: psci: use kernel restart handler functionality
  2019-10-12 21:47 [PATCH] drivers: firmware: psci: use kernel restart handler functionality Stefan Agner
@ 2019-10-14 10:07 ` Sudeep Holla
  2019-10-14 12:07   ` Stefan Agner
  0 siblings, 1 reply; 3+ messages in thread
From: Sudeep Holla @ 2019-10-14 10:07 UTC (permalink / raw)
  To: Stefan Agner
  Cc: mark.rutland, lorenzo.pieralisi, Stefan Agner, Sudeep Holla,
	linux-kernel, linux-arm-kernel

On Sat, Oct 12, 2019 at 11:47:35PM +0200, Stefan Agner wrote:
> From: Stefan Agner <stefan.agner@toradex.com>
> 
> Use the kernels restart handler to register the PSCI system reset
> capability. The restart handler use notifier chains along with
> priorities. This allows to use restart handlers with higher priority
> (in case available) while still supporting PSCI.
> 
> Since the ARM handler had priority over the kernels restart handler
> before this patch, use a slightly elevated priority of 160 to make
> sure PSCI is used before most of the other handlers are called.
> 

There's an attempt(rather pull request[1]) to consolidate these into new
system power/restart handler.

--
Regards,
Sudeep

[1] https://lore.kernel.org/linux-arm-kernel/20191002131228.4085560-1-thierry.reding@gmail.com

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

* Re: [PATCH] drivers: firmware: psci: use kernel restart handler functionality
  2019-10-14 10:07 ` Sudeep Holla
@ 2019-10-14 12:07   ` Stefan Agner
  0 siblings, 0 replies; 3+ messages in thread
From: Stefan Agner @ 2019-10-14 12:07 UTC (permalink / raw)
  To: Sudeep Holla
  Cc: mark.rutland, lorenzo.pieralisi, Stefan Agner, linux-kernel,
	linux-arm-kernel

Hi Sudeep,


On 2019-10-14 12:07, Sudeep Holla wrote:
> On Sat, Oct 12, 2019 at 11:47:35PM +0200, Stefan Agner wrote:
>> From: Stefan Agner <stefan.agner@toradex.com>
>>
>> Use the kernels restart handler to register the PSCI system reset
>> capability. The restart handler use notifier chains along with
>> priorities. This allows to use restart handlers with higher priority
>> (in case available) while still supporting PSCI.
>>
>> Since the ARM handler had priority over the kernels restart handler
>> before this patch, use a slightly elevated priority of 160 to make
>> sure PSCI is used before most of the other handlers are called.
>>
> 
> There's an attempt(rather pull request[1]) to consolidate these into new
> system power/restart handler.

Oh thanks for the pointer! Interesting timing :-)

--
Stefan

> 
> --
> Regards,
> Sudeep
> 
> [1]
> https://lore.kernel.org/linux-arm-kernel/20191002131228.4085560-1-thierry.reding@gmail.com

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

end of thread, other threads:[~2019-10-14 12:07 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-10-12 21:47 [PATCH] drivers: firmware: psci: use kernel restart handler functionality Stefan Agner
2019-10-14 10:07 ` Sudeep Holla
2019-10-14 12:07   ` Stefan Agner

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).