[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