[PATCH 2/2] pmdomain: thead: create auxiliary device for rebooting

Ulf Hansson ulf.hansson at linaro.org
Thu Sep 18 08:55:23 PDT 2025


On Thu, 18 Sept 2025 at 17:44, Icenowy Zheng <uwu at icenowy.me> wrote:
>
> 在 2025-09-04星期四的 12:14 +0200,Ulf Hansson写道:
> > On Mon, 18 Aug 2025 at 09:49, Icenowy Zheng <uwu at icenowy.me> wrote:
> > >
> > > The reboot / power off operations require communication with the
> > > AON
> > > firmware too.
> > >
> > > As the driver is already present, create an auxiliary device with
> > > name
> > > "reboot" to match that driver, and pass the AON channel by using
> > > platform_data.
> > >
> > > Signed-off-by: Icenowy Zheng <uwu at icenowy.me>
> > > ---
> > >  drivers/pmdomain/thead/th1520-pm-domains.c | 35
> > > ++++++++++++++++++++--
> > >  1 file changed, 33 insertions(+), 2 deletions(-)
> > >
> > > diff --git a/drivers/pmdomain/thead/th1520-pm-domains.c
> > > b/drivers/pmdomain/thead/th1520-pm-domains.c
> > > index 9040b698e7f7f..8285f552897b0 100644
> > > --- a/drivers/pmdomain/thead/th1520-pm-domains.c
> > > +++ b/drivers/pmdomain/thead/th1520-pm-domains.c
> > > @@ -129,12 +129,39 @@ static void th1520_pd_init_all_off(struct
> > > generic_pm_domain **domains,
> > >         }
> > >  }
> > >
> > > -static void th1520_pd_pwrseq_unregister_adev(void *adev)
> > > +static void th1520_pd_unregister_adev(void *adev)
> > >  {
> > >         auxiliary_device_delete(adev);
> > >         auxiliary_device_uninit(adev);
> > >  }
> > >
> > > +static int th1520_pd_reboot_init(struct device *dev, struct
> > > th1520_aon_chan *aon_chan)
> > > +{
> > > +       struct auxiliary_device *adev;
> > > +       int ret;
> > > +
> > > +       adev = devm_kzalloc(dev, sizeof(*adev), GFP_KERNEL);
> > > +       if (!adev)
> > > +               return -ENOMEM;
> > > +
> > > +       adev->name = "reboot";
> > > +       adev->dev.parent = dev;
> > > +       adev->dev.platform_data = aon_chan;
> > > +
> > > +       ret = auxiliary_device_init(adev);
> > > +       if (ret)
> > > +               return ret;
> > > +
> > > +       ret = auxiliary_device_add(adev);
> > > +       if (ret) {
> > > +               auxiliary_device_uninit(adev);
> > > +               return ret;
> > > +       }
> > > +
> > > +       return devm_add_action_or_reset(dev,
> > > th1520_pd_unregister_adev,
> > > +                                       adev);
> >
> > We have devm_auxiliary_device_create() now, I suggest we use that
> > instead.
>
> Should I send a v2 to convert to use this?

Please do, then I am ready to pick up the series.

[...]

Kind regards
Uffe



More information about the linux-riscv mailing list