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 Regards, Simon