1*83d290c5STom Rini // SPDX-License-Identifier: GPL-2.0+ 22e192b24SSimon Glass /* 32e192b24SSimon Glass * (C) Copyright 2000-2003 42e192b24SSimon Glass * Wolfgang Denk, DENX Software Engineering, wd@denx.de. 52e192b24SSimon Glass */ 62e192b24SSimon Glass 72e192b24SSimon Glass /* 82e192b24SSimon Glass * Misc boot support 92e192b24SSimon Glass */ 102e192b24SSimon Glass #include <common.h> 112e192b24SSimon Glass #include <command.h> 122e192b24SSimon Glass #include <net.h> 132e192b24SSimon Glass 142e192b24SSimon Glass #ifdef CONFIG_CMD_GO 152e192b24SSimon Glass 162e192b24SSimon Glass /* Allow ports to override the default behavior */ 172e192b24SSimon Glass __attribute__((weak)) 182e192b24SSimon Glass unsigned long do_go_exec(ulong (*entry)(int, char * const []), int argc, 192e192b24SSimon Glass char * const argv[]) 202e192b24SSimon Glass { 212e192b24SSimon Glass return entry (argc, argv); 222e192b24SSimon Glass } 232e192b24SSimon Glass 242e192b24SSimon Glass static int do_go(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) 252e192b24SSimon Glass { 262e192b24SSimon Glass ulong addr, rc; 272e192b24SSimon Glass int rcode = 0; 282e192b24SSimon Glass 292e192b24SSimon Glass if (argc < 2) 302e192b24SSimon Glass return CMD_RET_USAGE; 312e192b24SSimon Glass 322e192b24SSimon Glass addr = simple_strtoul(argv[1], NULL, 16); 332e192b24SSimon Glass 342e192b24SSimon Glass printf ("## Starting application at 0x%08lX ...\n", addr); 352e192b24SSimon Glass 362e192b24SSimon Glass /* 372e192b24SSimon Glass * pass address parameter as argv[0] (aka command name), 382e192b24SSimon Glass * and all remaining args 392e192b24SSimon Glass */ 402e192b24SSimon Glass rc = do_go_exec ((void *)addr, argc - 1, argv + 1); 412e192b24SSimon Glass if (rc != 0) rcode = 1; 422e192b24SSimon Glass 432e192b24SSimon Glass printf ("## Application terminated, rc = 0x%lX\n", rc); 442e192b24SSimon Glass return rcode; 452e192b24SSimon Glass } 462e192b24SSimon Glass 472e192b24SSimon Glass /* -------------------------------------------------------------------- */ 482e192b24SSimon Glass 492e192b24SSimon Glass U_BOOT_CMD( 502e192b24SSimon Glass go, CONFIG_SYS_MAXARGS, 1, do_go, 512e192b24SSimon Glass "start application at address 'addr'", 522e192b24SSimon Glass "addr [arg ...]\n - start application at address 'addr'\n" 532e192b24SSimon Glass " passing 'arg' as arguments" 542e192b24SSimon Glass ); 552e192b24SSimon Glass 562e192b24SSimon Glass #endif 572e192b24SSimon Glass 582e192b24SSimon Glass U_BOOT_CMD( 592e192b24SSimon Glass reset, 1, 0, do_reset, 602e192b24SSimon Glass "Perform RESET of the CPU", 612e192b24SSimon Glass "" 622e192b24SSimon Glass ); 632e192b24SSimon Glass 642e192b24SSimon Glass #ifdef CONFIG_CMD_POWEROFF 652e192b24SSimon Glass U_BOOT_CMD( 662e192b24SSimon Glass poweroff, 1, 0, do_poweroff, 672e192b24SSimon Glass "Perform POWEROFF of the device", 682e192b24SSimon Glass "" 692e192b24SSimon Glass ); 702e192b24SSimon Glass #endif 71