RE: [PATCH 1/3] soc: renesas: rz-sysc: Register auxiliary device for PWRRDY power sequencer

From: Biju Das

Date: Mon Jul 27 2026 - 06:51:57 EST


Hi Philipp Zabel,

Thanks for the feedback.

> -----Original Message-----
> From: Philipp Zabel <p.zabel@xxxxxxxxxxxxxx>
> Sent: 27 July 2026 08:58
> Subject: Re: [PATCH 1/3] soc: renesas: rz-sysc: Register auxiliary device for PWRRDY power sequencer
>
> On Sa, 2026-07-25 at 13:34 +0100, Biju wrote:
> > From: Biju Das <biju.das.jz@xxxxxxxxxxxxxx>
> >
> > Some RZ SoCs (e.g. RZ/G3L) have a PWRRDY register that is controlled
> > through a power sequencer rather than directly by the SYSC driver.
> >
> > Add a pwrrdy_pwrseq flag to struct rz_sysc_soc_id_init_data to mark
> > SoCs with this property, and set it for RZ/G3L. When set,
> > rz_sysc_probe() registers a "pwrseq-pwrrdy" auxiliary device so a
> > dedicated driver can handle the PWRRDY sequencing, with automatic
> > teardown via devm_add_action_or_reset().
> >
> > Signed-off-by: Biju Das <biju.das.jz@xxxxxxxxxxxxxx>
> > ---
> > drivers/soc/renesas/r9a08g046-sysc.c | 1 +
> > drivers/soc/renesas/rz-sysc.c | 40 ++++++++++++++++++++++++++++
> > drivers/soc/renesas/rz-sysc.h | 2 ++
> > 3 files changed, 43 insertions(+)
> >
> > diff --git a/drivers/soc/renesas/r9a08g046-sysc.c
> > b/drivers/soc/renesas/r9a08g046-sysc.c
> > index 90db9d383539..cd129c727461 100644
> > --- a/drivers/soc/renesas/r9a08g046-sysc.c
> > +++ b/drivers/soc/renesas/r9a08g046-sysc.c
> > @@ -76,6 +76,7 @@ static const struct rz_sysc_soc_id_init_data rzg3l_sysc_soc_id_init_data __initc
> > .devid_offset = 0xa04,
> > .revision_mask = GENMASK(31, 28),
> > .specific_id_mask = GENMASK(27, 0),
> > + .pwrrdy_pwrseq = true,
> > };
> >
> > const struct rz_sysc_init_data rzg3l_sysc_init_data __initconst = {
> > diff --git a/drivers/soc/renesas/rz-sysc.c
> > b/drivers/soc/renesas/rz-sysc.c index 161e8c38eea6..ea49ca51e740
> > 100644
> > --- a/drivers/soc/renesas/rz-sysc.c
> > +++ b/drivers/soc/renesas/rz-sysc.c
> > @@ -5,6 +5,7 @@
> > * Copyright (C) 2024 Renesas Electronics Corp.
> > */
> >
> > +#include <linux/auxiliary_bus.h>
> > #include <linux/bitfield.h>
> > #include <linux/cleanup.h>
> > #include <linux/io.h>
> > @@ -84,6 +85,41 @@ static int rz_sysc_soc_init(struct rz_sysc *sysc, const struct of_device_id *mat
> > return 0;
> > }
> >
> > +static void rz_sysc_pwrrdy_pwrseq_unregister_adev(void *adev) {
> > + auxiliary_device_delete(adev);
> > + auxiliary_device_uninit(adev);
> > +}
> > +
> > +static int rz_sysc_pwrrdy_pwrseq_init(struct device *dev, const
> > +struct rz_sysc_init_data *data) {
> > + const struct rz_sysc_soc_id_init_data *soc_data = data->soc_id_init_data;
> > + struct auxiliary_device *adev;
> > + int ret;
> > +
> > + if (!soc_data->pwrrdy_pwrseq)
> > + return 0;
> > +
> > + adev = devm_kzalloc(dev, sizeof(*adev), GFP_KERNEL);
>
> The lifetime of this allocation should be tied to adev->dev, not its parent. Can't you just use
> devm_auxiliary_device_create() though?

Agreed. Will switch to devm_auxiliary_device_create().

Cheers,
Biju