[PATCHv1 1/5] cpu: add release_core callback

Z.Q. Hou zhiqiang.hou at nxp.com
Thu Jul 25 03:21:43 CEST 2024


Hi Simon,

> -----Original Message-----
> From: Simon Glass <sjg at chromium.org>
> Sent: Wednesday, July 24, 2024 10:37 PM
> To: Z.Q. Hou <zhiqiang.hou at nxp.com>
> Cc: u-boot at lists.denx.de; trini at konsulko.com; Peng Fan
> <peng.fan at nxp.com>; festevam at gmail.com
> Subject: Re: [PATCHv1 1/5] cpu: add release_core callback
> 
> Hi Zhiqiang,
> 
> On Tue, 23 Jul 2024 at 08:43, Zhiqiang Hou <Zhiqiang.Hou at nxp.com> wrote:
> >
> > From: Hou Zhiqiang <Zhiqiang.Hou at nxp.com>
> >
> > Add a new callback release_core to the cpu_ops, which is used to
> > release a CPU core to run baremetal or RTOS application on a SoC with
> > multiple CPU cores.
> >
> > Signed-off-by: Hou Zhiqiang <Zhiqiang.Hou at nxp.com>
> > ---
> >  drivers/cpu/cpu-uclass.c | 10 ++++++++++
> >  include/cpu.h            | 15 +++++++++++++++
> >  2 files changed, 25 insertions(+)
> >
> > diff --git a/drivers/cpu/cpu-uclass.c b/drivers/cpu/cpu-uclass.c index
> > 16f8f2e521..2c8e46c05e 100644
> > --- a/drivers/cpu/cpu-uclass.c
> > +++ b/drivers/cpu/cpu-uclass.c
> > @@ -104,6 +104,16 @@ int cpu_get_vendor(const struct udevice *dev,
> char *buf, int size)
> >         return ops->get_vendor(dev, buf, size);  }
> >
> > +int cpu_release_core(const struct udevice *dev, phys_addr_t addr) {
> > +       struct cpu_ops *ops = cpu_get_ops(dev);
> > +
> > +       if (!ops->release_core)
> > +               return -ENOSYS;
> > +
> > +       return ops->release_core(dev, addr); }
> > +
> >  U_BOOT_DRIVER(cpu_bus) = {
> >         .name   = "cpu_bus",
> >         .id     = UCLASS_SIMPLE_BUS,
> > diff --git a/include/cpu.h b/include/cpu.h index
> > 2077ff3063..0018910d61 100644
> > --- a/include/cpu.h
> > +++ b/include/cpu.h
> > @@ -102,6 +102,15 @@ struct cpu_ops {
> >          *         if not.
> >          */
> >         int (*is_current)(struct udevice *dev);
> > +
> > +       /**
> > +        * release_core() - Relase a CPU core to the given address to run
> application
> > +        *
> > +        * @dev:        Device to check (UCLASS_CPU)
> > +        * @addr:       Address to relese the CPU core
> > +        * @return 0 if OK, -ve on error
> > +        */
> > +       int (*release_core)(const struct udevice *dev, phys_addr_t
> > + addr);
> >  };
> >
> >  #define cpu_get_ops(dev)        ((struct cpu_ops *)(dev)->driver->ops)
> > @@ -164,4 +173,10 @@ int cpu_is_current(struct udevice *cpu);
> >   */
> >  struct udevice *cpu_get_current_dev(void);
> >
> > +/**
> > + * cpu_release_core() - Relase a CPU core to the given address to run
> > +application
> > + *
> > + * @return 0 if OK, -ve on error
> > + */
> > +int cpu_release_core(const struct udevice *dev, phys_addr_t addr);
> >  #endif
> > --
> > 2.17.1
> >
> 
> Please also add a test for this callback to test/dm/cpu.c

will add. Thanks!

- Zhiqiang


More information about the U-Boot mailing list