]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
cpu: add release_core callback
authorHou Zhiqiang <Zhiqiang.Hou@nxp.com>
Thu, 1 Aug 2024 03:59:47 +0000 (11:59 +0800)
committerFabio Estevam <festevam@gmail.com>
Fri, 2 Aug 2024 18:16:51 +0000 (15:16 -0300)
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@nxp.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
drivers/cpu/cpu-uclass.c
include/cpu.h

index 16f8f2e52194a33869ad733a33cb0b9297f8d3ee..2c8e46c05e39259e2d0a3e018f2ca26e3f8e1479 100644 (file)
@@ -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,
index 2077ff30634baa3f398daafcc61548c221d045e4..0018910d61fa4e7f83f3a9403c325b75967ed674 100644 (file)
@@ -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