|
@@ -32,6 +32,23 @@
|
|
|
DECLARE_GLOBAL_DATA_PTR;
|
|
|
#endif
|
|
|
|
|
|
+static inline void go_setup(int argc, char *argv[])
|
|
|
+{
|
|
|
+#if defined(CONFIG_I386)
|
|
|
+ /*
|
|
|
+ * x86 does not use a dedicated register to pass the pointer
|
|
|
+ * to the global_data
|
|
|
+ */
|
|
|
+ argv[0] = (char *)gd;
|
|
|
+
|
|
|
+#elif defined(CONFIG_BLACKFIN)
|
|
|
+ if (dcache_status ())
|
|
|
+ dcache_disable ();
|
|
|
+ if (icache_status ())
|
|
|
+ icache_disable ();
|
|
|
+#endif
|
|
|
+}
|
|
|
+
|
|
|
int do_go (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
|
|
|
{
|
|
|
ulong addr, rc;
|
|
@@ -46,25 +63,20 @@ int do_go (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
|
|
|
|
|
|
printf ("## Starting application at 0x%08lX ...\n", addr);
|
|
|
|
|
|
+ go_setup(argc, argv);
|
|
|
+
|
|
|
+#if defined(CONFIG_NIOS)
|
|
|
/*
|
|
|
- * pass address parameter as argv[0] (aka command name),
|
|
|
- * and all remaining args
|
|
|
- */
|
|
|
-#if defined(CONFIG_I386)
|
|
|
- /*
|
|
|
- * x86 does not use a dedicated register to pass the pointer
|
|
|
- * to the global_data
|
|
|
+ * Nios function pointers are address >> 1
|
|
|
*/
|
|
|
- argv[0] = (char *)gd;
|
|
|
+ addr >>= 1;
|
|
|
#endif
|
|
|
-#if !defined(CONFIG_NIOS)
|
|
|
- rc = ((ulong (*)(int, char *[]))addr) (--argc, &argv[1]);
|
|
|
-#else
|
|
|
+
|
|
|
/*
|
|
|
- * Nios function pointers are address >> 1
|
|
|
+ * pass address parameter as argv[0] (aka command name),
|
|
|
+ * and all remaining args
|
|
|
*/
|
|
|
- rc = ((ulong (*)(int, char *[]))(addr>>1)) (--argc, &argv[1]);
|
|
|
-#endif
|
|
|
+ rc = ((ulong (*)(int, char *[]))addr) (--argc, &argv[1]);
|
|
|
if (rc != 0) rcode = 1;
|
|
|
|
|
|
printf ("## Application terminated, rc = 0x%lX\n", rc);
|