mail archive of the barebox mailing list
 help / color / mirror / Atom feed
From: Sascha Hauer <s.hauer@pengutronix.de>
To: Ahmad Fatoum <a.fatoum@pengutronix.de>
Cc: barebox@lists.infradead.org
Subject: Re: [PATCH 3/4] poweroff: give all poweroff_handler::poweroff callbacks a flags parameter
Date: Tue, 22 Apr 2025 12:32:04 +0200	[thread overview]
Message-ID: <aAdwJKnnUD5n_y-8@pengutronix.de> (raw)
In-Reply-To: <20250422075615.220139-3-a.fatoum@pengutronix.de>

On Tue, Apr 22, 2025 at 09:56:14AM +0200, Ahmad Fatoum wrote:
> From: Ahmad Fatoum <a.fatoum@barebox.org>
> 
> Like done for restart handlers and the poweroff_machine function, give
> the callbacks a parameter as well and pass the flags along.

What kind of flags are you anticipating for poweroff?

Sascha

> 
> Signed-off-by: Ahmad Fatoum <a.fatoum@barebox.org>
> ---
>  arch/arm/cpu/psci-client.c            | 3 ++-
>  arch/arm/mach-imx/imx6.c              | 3 ++-
>  arch/arm/mach-pxa/pxa2xx.c            | 3 ++-
>  arch/arm/mach-pxa/pxa3xx.c            | 3 ++-
>  arch/kvx/lib/poweroff.c               | 3 ++-
>  arch/mips/mach-xburst/reset-jz4750.c  | 3 ++-
>  arch/sandbox/board/power.c            | 3 ++-
>  common/poweroff.c                     | 5 +++--
>  drivers/mfd/axp20x.c                  | 3 ++-
>  drivers/mfd/rk808.c                   | 3 ++-
>  drivers/power/reset/gpio-poweroff.c   | 3 ++-
>  drivers/power/reset/htif-poweroff.c   | 3 ++-
>  drivers/power/reset/syscon-poweroff.c | 3 ++-
>  drivers/regulator/pfuze.c             | 3 ++-
>  drivers/watchdog/bcm2835_wdt.c        | 5 +++--
>  drivers/watchdog/stpmic1_wdt.c        | 3 ++-
>  efi/payload/init.c                    | 3 ++-
>  include/mach/imx/imx6.h               | 3 ++-
>  include/poweroff.h                    | 6 ++++--
>  19 files changed, 42 insertions(+), 22 deletions(-)
> 
> diff --git a/arch/arm/cpu/psci-client.c b/arch/arm/cpu/psci-client.c
> index 70436bde0a3a..43293fe034e6 100644
> --- a/arch/arm/cpu/psci-client.c
> +++ b/arch/arm/cpu/psci-client.c
> @@ -25,7 +25,8 @@ static void __noreturn psci_invoke_noreturn(ulong function)
>  	hang();
>  }
>  
> -static void __noreturn psci_poweroff(struct poweroff_handler *handler)
> +static void __noreturn psci_poweroff(struct poweroff_handler *handler,
> +				     unsigned long flags)
>  {
>  	psci_invoke_noreturn(ARM_PSCI_0_2_FN_SYSTEM_OFF);
>  }
> diff --git a/arch/arm/mach-imx/imx6.c b/arch/arm/mach-imx/imx6.c
> index b0d3d8ef2fb0..ed6cde801ec7 100644
> --- a/arch/arm/mach-imx/imx6.c
> +++ b/arch/arm/mach-imx/imx6.c
> @@ -358,7 +358,8 @@ static int imx6_fixup_cpus_register(void)
>  }
>  device_initcall(imx6_fixup_cpus_register);
>  
> -void __noreturn imx6_pm_stby_poweroff(struct poweroff_handler *handler)
> +void __noreturn imx6_pm_stby_poweroff(struct poweroff_handler *handler,
> +				      unsigned long flags)
>  {
>  	void *ccm_base = IOMEM(MX6_CCM_BASE_ADDR);
>  	void *gpc_base = IOMEM(MX6_GPC_BASE_ADDR);
> diff --git a/arch/arm/mach-pxa/pxa2xx.c b/arch/arm/mach-pxa/pxa2xx.c
> index 496ceb39d513..ee50dca7a9aa 100644
> --- a/arch/arm/mach-pxa/pxa2xx.c
> +++ b/arch/arm/mach-pxa/pxa2xx.c
> @@ -47,7 +47,8 @@ void pxa_clear_reset_source(void)
>  	RCSR = RCSR_GPR | RCSR_SMR | RCSR_WDR | RCSR_HWR;
>  }
>  
> -static void __noreturn pxa2xx_poweroff(struct poweroff_handler *handler)
> +static void __noreturn pxa2xx_poweroff(struct poweroff_handler *handler,
> +				       unsigned long flags)
>  {
>  	shutdown_barebox();
>  
> diff --git a/arch/arm/mach-pxa/pxa3xx.c b/arch/arm/mach-pxa/pxa3xx.c
> index ec4998396253..ea84efc8b046 100644
> --- a/arch/arm/mach-pxa/pxa3xx.c
> +++ b/arch/arm/mach-pxa/pxa3xx.c
> @@ -49,7 +49,8 @@ void pxa_clear_reset_source(void)
>  
>  device_initcall(pxa_detect_reset_source);
>  
> -static void __noreturn pxa3xx_poweroff(struct poweroff_handler *handler)
> +static void __noreturn pxa3xx_poweroff(struct poweroff_handler *handler,
> +				       unsigned long flags)
>  {
>  	shutdown_barebox();
>  
> diff --git a/arch/kvx/lib/poweroff.c b/arch/kvx/lib/poweroff.c
> index d776cb087777..324144837a18 100644
> --- a/arch/kvx/lib/poweroff.c
> +++ b/arch/kvx/lib/poweroff.c
> @@ -9,7 +9,8 @@
>  
>  #include <asm/sfr.h>
>  
> -static void __noreturn kvx_poweroff(struct poweroff_handler *handler)
> +static void __noreturn kvx_poweroff(struct poweroff_handler *handler,
> +				    unsigned long flags)
>  {
>  	register int status asm("r0") = 0;
>  
> diff --git a/arch/mips/mach-xburst/reset-jz4750.c b/arch/mips/mach-xburst/reset-jz4750.c
> index a1d5976fb2c2..561654f80e90 100644
> --- a/arch/mips/mach-xburst/reset-jz4750.c
> +++ b/arch/mips/mach-xburst/reset-jz4750.c
> @@ -27,7 +27,8 @@ static void __noreturn jz4750d_halt(void)
>  	unreachable();
>  }
>  
> -static void __noreturn jz4750_poweroff(struct poweroff_handler *handler)
> +static void __noreturn jz4750_poweroff(struct poweroff_handler *handler,
> +				       unsigned long flags)
>  {
>  	u32 ctrl;
>  
> diff --git a/arch/sandbox/board/power.c b/arch/sandbox/board/power.c
> index 546e1a518fd3..9caaea5be2f0 100644
> --- a/arch/sandbox/board/power.c
> +++ b/arch/sandbox/board/power.c
> @@ -14,7 +14,8 @@ struct sandbox_power {
>  	struct nvmem_cell *reset_source_cell;
>  };
>  
> -static void sandbox_poweroff(struct poweroff_handler *poweroff)
> +static void sandbox_poweroff(struct poweroff_handler *poweroff,
> +			     unsigned long flags)
>  {
>  	struct sandbox_power *power = container_of(poweroff, struct sandbox_power, poweroff);
>  
> diff --git a/common/poweroff.c b/common/poweroff.c
> index d453a9a98025..896716bb258c 100644
> --- a/common/poweroff.c
> +++ b/common/poweroff.c
> @@ -43,7 +43,8 @@ int poweroff_handler_register(struct poweroff_handler *handler)
>   *
>   * return: 0 for success or negative error code
>   */
> -int poweroff_handler_register_fn(void (*poweroff_fn)(struct poweroff_handler *))
> +int poweroff_handler_register_fn(void (*poweroff_fn)(struct poweroff_handler *,
> +						     unsigned long flags))
>  {
>  	struct poweroff_handler *handler;
>  	int ret;
> @@ -78,7 +79,7 @@ void __noreturn poweroff_machine(unsigned long flags)
>  	if (handler) {
>  		pr_debug("using poweroff handler %s\n", handler->name);
>  		console_flush();
> -		handler->poweroff(handler);
> +		handler->poweroff(handler, flags);
>  	} else {
>  		pr_err("No poweroff handler found!\n");
>  	}
> diff --git a/drivers/mfd/axp20x.c b/drivers/mfd/axp20x.c
> index 666b9ea98cae..0f71131c9a2d 100644
> --- a/drivers/mfd/axp20x.c
> +++ b/drivers/mfd/axp20x.c
> @@ -233,7 +233,8 @@ static const struct mfd_cell axp813_cells[] = {
>  	},
>  };
>  
> -static void axp20x_power_off(struct poweroff_handler *handler)
> +static void axp20x_power_off(struct poweroff_handler *handler,
> +			     unsigned long flags)
>  {
>  	struct axp20x_dev *axp20x = container_of(handler, struct axp20x_dev, poweroff);
>  
> diff --git a/drivers/mfd/rk808.c b/drivers/mfd/rk808.c
> index 5b010e09ef33..1c5c705fa4fc 100644
> --- a/drivers/mfd/rk808.c
> +++ b/drivers/mfd/rk808.c
> @@ -222,7 +222,8 @@ static const struct rk808_reg_data rk818_pre_init_reg[] = {
>  						    VB_LO_SEL_3500MV },
>  };
>  
> -static void rk808_poweroff(struct poweroff_handler *handler)
> +static void rk808_poweroff(struct poweroff_handler *handler,
> +			   unsigned long flags)
>  {
>  	struct rk808 *rk808 = container_of(handler, struct rk808, poweroff);
>  	int ret;
> diff --git a/drivers/power/reset/gpio-poweroff.c b/drivers/power/reset/gpio-poweroff.c
> index cafa1387ce0b..1085c68b506f 100644
> --- a/drivers/power/reset/gpio-poweroff.c
> +++ b/drivers/power/reset/gpio-poweroff.c
> @@ -22,7 +22,8 @@ static u32 timeout = DEFAULT_TIMEOUT_MS;
>  static u32 active_delay = 100;
>  static u32 inactive_delay = 100;
>  
> -static void gpio_poweroff_do_poweroff(struct poweroff_handler *handler)
> +static void gpio_poweroff_do_poweroff(struct poweroff_handler *handler,
> +				      unsigned long flags)
>  {
>  	/* drive it active, also inactive->active edge */
>  	gpiod_direction_output(reset_gpio, true);
> diff --git a/drivers/power/reset/htif-poweroff.c b/drivers/power/reset/htif-poweroff.c
> index e24397f934dc..e193d96d9335 100644
> --- a/drivers/power/reset/htif-poweroff.c
> +++ b/drivers/power/reset/htif-poweroff.c
> @@ -10,7 +10,8 @@
>  
>  static void __iomem *htif = IOMEM(HTIF_DEFAULT_BASE_ADDR);
>  
> -static void __noreturn riscvemu_poweroff(struct poweroff_handler *pwr)
> +static void __noreturn riscvemu_poweroff(struct poweroff_handler *pwr,
> +					 unsigned long flags)
>  {
>  	shutdown_barebox();
>  
> diff --git a/drivers/power/reset/syscon-poweroff.c b/drivers/power/reset/syscon-poweroff.c
> index 321bd1fc7be0..0510b352d2c7 100644
> --- a/drivers/power/reset/syscon-poweroff.c
> +++ b/drivers/power/reset/syscon-poweroff.c
> @@ -17,7 +17,8 @@ static u32 offset;
>  static u32 value;
>  static u32 mask;
>  
> -static void syscon_poweroff(struct poweroff_handler *handler)
> +static void syscon_poweroff(struct poweroff_handler *handler,
> +			    unsigned long flags)
>  {
>  	/* Issue the poweroff */
>  	regmap_update_bits(map, offset, mask, value);
> diff --git a/drivers/regulator/pfuze.c b/drivers/regulator/pfuze.c
> index 3e8890b10cec..c9d89001f3a9 100644
> --- a/drivers/regulator/pfuze.c
> +++ b/drivers/regulator/pfuze.c
> @@ -94,7 +94,8 @@ static int pfuze_i2c_reg_write(void *ctx, unsigned int reg, unsigned int val)
>  	return ret == 1 ? 0 : ret;
>  }
>  
> -static void pfuze_power_off_prepare(struct poweroff_handler *handler)
> +static void pfuze_power_off_prepare(struct poweroff_handler *handler,
> +				    unsigned long flags)
>  {
>  	dev_info(pfuze_dev->dev, "Configure standy mode for power off");
>  
> diff --git a/drivers/watchdog/bcm2835_wdt.c b/drivers/watchdog/bcm2835_wdt.c
> index 48654780b121..233b82bbe280 100644
> --- a/drivers/watchdog/bcm2835_wdt.c
> +++ b/drivers/watchdog/bcm2835_wdt.c
> @@ -44,7 +44,8 @@ static void __noreturn bcm2835_restart_soc(struct restart_handler *rst,
>  	hang();
>  }
>  
> -static void __noreturn bcm2835_poweroff_soc(struct poweroff_handler *poweroff)
> +static void __noreturn bcm2835_poweroff_soc(struct poweroff_handler *poweroff,
> +					    unsigned long flags)
>  {
>  	struct bcm2835_wd *priv = container_of(poweroff, struct bcm2835_wd, poweroff);
>  	uint32_t val;
> @@ -55,7 +56,7 @@ static void __noreturn bcm2835_poweroff_soc(struct poweroff_handler *poweroff)
>  	val |= PM_PASSWORD | PM_RSTS_RASPBERRYPI_HALT;
>  	writel_relaxed(val, priv->base + PM_RSTS);
>  
> -	bcm2835_restart_soc(&priv->restart);
> +	bcm2835_restart_soc(&priv->restart, flags);
>  }
>  
>  static int bcm2835_wd_set_timeout(struct watchdog *wd, unsigned timeout)
> diff --git a/drivers/watchdog/stpmic1_wdt.c b/drivers/watchdog/stpmic1_wdt.c
> index ba58474799fa..f25656e75c12 100644
> --- a/drivers/watchdog/stpmic1_wdt.c
> +++ b/drivers/watchdog/stpmic1_wdt.c
> @@ -109,7 +109,8 @@ static void __noreturn stpmic1_restart_handler(struct restart_handler *rst,
>  	hang();
>  }
>  
> -static void __noreturn stpmic1_poweroff(struct poweroff_handler *handler)
> +static void __noreturn stpmic1_poweroff(struct poweroff_handler *handler,
> +					unsigned long flags)
>  {
>  	struct stpmic1_wdt *wdt = container_of(handler, struct stpmic1_wdt, poweroff);
>  
> diff --git a/efi/payload/init.c b/efi/payload/init.c
> index 12896c065115..ae8b9203737b 100644
> --- a/efi/payload/init.c
> +++ b/efi/payload/init.c
> @@ -233,7 +233,8 @@ static void __noreturn efi_restart_system(struct restart_handler *rst,
>  	hang();
>  }
>  
> -static void __noreturn efi_poweroff_system(struct poweroff_handler *handler)
> +static void __noreturn efi_poweroff_system(struct poweroff_handler *handler,
> +					   unsigned long flags)
>  {
>  	shutdown_barebox();
>  	RT->reset_system(EFI_RESET_SHUTDOWN, EFI_SUCCESS, 0, NULL);
> diff --git a/include/mach/imx/imx6.h b/include/mach/imx/imx6.h
> index a67cc9df9642..f36ac6ce408c 100644
> --- a/include/mach/imx/imx6.h
> +++ b/include/mach/imx/imx6.h
> @@ -10,7 +10,8 @@
>  
>  #include <poweroff.h>
>  
> -void __noreturn imx6_pm_stby_poweroff(struct poweroff_handler *handler);
> +void __noreturn imx6_pm_stby_poweroff(struct poweroff_handler *handler,
> +				      unsigned long flags);
>  
>  #define IMX6_ANATOP_SI_REV 0x260
>  #define IMX6SL_ANATOP_SI_REV 0x280
> diff --git a/include/poweroff.h b/include/poweroff.h
> index 307097c01541..df2d3125a98d 100644
> --- a/include/poweroff.h
> +++ b/include/poweroff.h
> @@ -5,14 +5,16 @@
>  void __noreturn poweroff_machine(unsigned long poweroff_flags);
>  
>  struct poweroff_handler {
> -	void (*poweroff)(struct poweroff_handler *);
> +	void (*poweroff)(struct poweroff_handler *,
> +			 unsigned long flags);
>  	int priority;
>  	const char *name;
>  	struct list_head list;
>  };
>  
>  int poweroff_handler_register(struct poweroff_handler *);
> -int poweroff_handler_register_fn(void (*poweroff_fn)(struct poweroff_handler *));
> +int poweroff_handler_register_fn(void (*poweroff_fn)(struct poweroff_handler *,
> +						     unsigned long flags));
>  
>  #define POWEROFF_DEFAULT_PRIORITY 100
>  #define POWEROFF_DEFAULT_NAME "default"
> -- 
> 2.39.5
> 
> 
> 

-- 
Pengutronix e.K.                           |                             |
Steuerwalder Str. 21                       | http://www.pengutronix.de/  |
31137 Hildesheim, Germany                  | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |



  reply	other threads:[~2025-04-22 11:13 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-04-22  7:56 [PATCH 1/4] restart: give poweroff_machine and restart_machine a flag parameter Ahmad Fatoum
2025-04-22  7:56 ` [PATCH 2/4] restart: give all restart_handler::restart callbacks a flags parameter Ahmad Fatoum
2025-04-22  7:56 ` [PATCH 3/4] poweroff: give all poweroff_handler::poweroff " Ahmad Fatoum
2025-04-22 10:32   ` Sascha Hauer [this message]
2025-04-22 10:42     ` Ahmad Fatoum
2025-04-22  7:56 ` [PATCH 4/4] restart: make warm reboot a callback argument Ahmad Fatoum
2025-04-22 11:36 ` [PATCH 1/4] restart: give poweroff_machine and restart_machine a flag parameter Sascha Hauer

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=aAdwJKnnUD5n_y-8@pengutronix.de \
    --to=s.hauer@pengutronix.de \
    --cc=a.fatoum@pengutronix.de \
    --cc=barebox@lists.infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox