Hi Simon, > -----Original Message----- > From: Simon Glass <s...@chromium.org> > Sent: Wednesday, July 24, 2024 10:37 PM > To: Z.Q. Hou <zhiqiang....@nxp.com> > Cc: u-boot@lists.denx.de; tr...@konsulko.com; Peng Fan > <peng....@nxp.com>; feste...@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....@nxp.com> wrote: > > > > From: Hou Zhiqiang <zhiqiang....@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....@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