[PATCHv1 1/5] cpu: add release_core callback

Simon Glass sjg at chromium.org
Wed Jul 24 16:37:13 CEST 2024


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

Regards,
Simon


More information about the U-Boot mailing list