]> git.sur5r.net Git - u-boot/blobdiff - arch/arm/mach-imx/imx_bootaux.c
imx: Create distinct pre-processed mkimage config files
[u-boot] / arch / arm / mach-imx / imx_bootaux.c
index b62dfbf6bf6c23741cc30b2892ae5118785b288b..6256b3a778f5d19da0b9037d0a3e6dbcf001c70a 100644 (file)
@@ -5,21 +5,51 @@
  */
 
 #include <common.h>
+#include <asm/io.h>
+#include <asm/mach-imx/sys_proto.h>
 #include <command.h>
+#include <imx_sip.h>
 #include <linux/compiler.h>
 
-/* Allow for arch specific config before we boot */
-int __weak arch_auxiliary_core_up(u32 core_id, u32 boot_private_data)
+int arch_auxiliary_core_up(u32 core_id, ulong boot_private_data)
 {
-       /* please define platform specific arch_auxiliary_core_up() */
-       return CMD_RET_FAILURE;
+       ulong stack, pc;
+
+       if (!boot_private_data)
+               return -EINVAL;
+
+       stack = *(ulong *)boot_private_data;
+       pc = *(ulong *)(boot_private_data + 4);
+
+       /* Set the stack and pc to M4 bootROM */
+       writel(stack, M4_BOOTROM_BASE_ADDR);
+       writel(pc, M4_BOOTROM_BASE_ADDR + 4);
+
+       /* Enable M4 */
+#ifdef CONFIG_MX8M
+       call_imx_sip(IMX_SIP_SRC, IMX_SIP_SRC_M4_START, 0, 0);
+#else
+       clrsetbits_le32(SRC_BASE_ADDR + SRC_M4_REG_OFFSET,
+                       SRC_M4C_NON_SCLR_RST_MASK, SRC_M4_ENABLE_MASK);
+#endif
+
+       return 0;
 }
 
-/* Allow for arch specific config before we boot */
-int __weak arch_auxiliary_core_check_up(u32 core_id)
+int arch_auxiliary_core_check_up(u32 core_id)
 {
-       /* please define platform specific arch_auxiliary_core_check_up() */
-       return 0;
+#ifdef CONFIG_MX8M
+       return call_imx_sip(IMX_SIP_SRC, IMX_SIP_SRC_M4_STARTED, 0, 0);
+#else
+       unsigned int val;
+
+       val = readl(SRC_BASE_ADDR + SRC_M4_REG_OFFSET);
+
+       if (val & SRC_M4C_NON_SCLR_RST_MASK)
+               return 0;  /* assert in reset */
+
+       return 1;
+#endif
 }
 
 /*