|
@@ -513,3 +513,41 @@ int checkboard(void)
|
|
|
|
|
|
return 0;
|
|
|
}
|
|
|
+
|
|
|
+static int do_m4go(cmd_tbl_t *cmdtp, int flag, int argc,
|
|
|
+ char * const argv[])
|
|
|
+{
|
|
|
+ ulong addr;
|
|
|
+
|
|
|
+ /* Consume 'm4go' */
|
|
|
+ argc--; argv++;
|
|
|
+
|
|
|
+ /*
|
|
|
+ * Parse provided address - default to load_addr in case not provided.
|
|
|
+ */
|
|
|
+
|
|
|
+ if (argc)
|
|
|
+ addr = simple_strtoul(argv[0], NULL, 16);
|
|
|
+ else
|
|
|
+ addr = load_addr;
|
|
|
+
|
|
|
+ /*
|
|
|
+ * Write boot address in PERSISTENT_ENTRY1[31:0] aka SRC_GPR2[31:0]
|
|
|
+ */
|
|
|
+ writel(addr + 0x401, 0x4006E028);
|
|
|
+
|
|
|
+ /*
|
|
|
+ * Start secondary processor by enabling its clock
|
|
|
+ */
|
|
|
+ writel(0x15a5a, 0x4006B08C);
|
|
|
+
|
|
|
+ return 1;
|
|
|
+}
|
|
|
+
|
|
|
+U_BOOT_CMD(
|
|
|
+ m4go, 2 /* one arg max */, 1 /* repeatable */, do_m4go,
|
|
|
+ "start the secondary Cortex-M4 from scatter file image",
|
|
|
+ "[<addr>]\n"
|
|
|
+ " - start secondary Cortex-M4 core using a scatter file image\n"
|
|
|
+ "The argument needs to be a scatter file\n"
|
|
|
+);
|