1*2e192b24SSimon Glass /* 2*2e192b24SSimon Glass * (C) Copyright 2000-2003 3*2e192b24SSimon Glass * Wolfgang Denk, DENX Software Engineering, wd@denx.de. 4*2e192b24SSimon Glass * 5*2e192b24SSimon Glass * SPDX-License-Identifier: GPL-2.0+ 6*2e192b24SSimon Glass */ 7*2e192b24SSimon Glass 8*2e192b24SSimon Glass /* 9*2e192b24SSimon Glass * Misc boot support 10*2e192b24SSimon Glass */ 11*2e192b24SSimon Glass #include <common.h> 12*2e192b24SSimon Glass #include <command.h> 13*2e192b24SSimon Glass #include <net.h> 14*2e192b24SSimon Glass 15*2e192b24SSimon Glass #ifdef CONFIG_CMD_GO 16*2e192b24SSimon Glass 17*2e192b24SSimon Glass /* Allow ports to override the default behavior */ 18*2e192b24SSimon Glass __attribute__((weak)) 19*2e192b24SSimon Glass unsigned long do_go_exec(ulong (*entry)(int, char * const []), int argc, 20*2e192b24SSimon Glass char * const argv[]) 21*2e192b24SSimon Glass { 22*2e192b24SSimon Glass return entry (argc, argv); 23*2e192b24SSimon Glass } 24*2e192b24SSimon Glass 25*2e192b24SSimon Glass static int do_go(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) 26*2e192b24SSimon Glass { 27*2e192b24SSimon Glass ulong addr, rc; 28*2e192b24SSimon Glass int rcode = 0; 29*2e192b24SSimon Glass 30*2e192b24SSimon Glass if (argc < 2) 31*2e192b24SSimon Glass return CMD_RET_USAGE; 32*2e192b24SSimon Glass 33*2e192b24SSimon Glass addr = simple_strtoul(argv[1], NULL, 16); 34*2e192b24SSimon Glass 35*2e192b24SSimon Glass printf ("## Starting application at 0x%08lX ...\n", addr); 36*2e192b24SSimon Glass 37*2e192b24SSimon Glass /* 38*2e192b24SSimon Glass * pass address parameter as argv[0] (aka command name), 39*2e192b24SSimon Glass * and all remaining args 40*2e192b24SSimon Glass */ 41*2e192b24SSimon Glass rc = do_go_exec ((void *)addr, argc - 1, argv + 1); 42*2e192b24SSimon Glass if (rc != 0) rcode = 1; 43*2e192b24SSimon Glass 44*2e192b24SSimon Glass printf ("## Application terminated, rc = 0x%lX\n", rc); 45*2e192b24SSimon Glass return rcode; 46*2e192b24SSimon Glass } 47*2e192b24SSimon Glass 48*2e192b24SSimon Glass /* -------------------------------------------------------------------- */ 49*2e192b24SSimon Glass 50*2e192b24SSimon Glass U_BOOT_CMD( 51*2e192b24SSimon Glass go, CONFIG_SYS_MAXARGS, 1, do_go, 52*2e192b24SSimon Glass "start application at address 'addr'", 53*2e192b24SSimon Glass "addr [arg ...]\n - start application at address 'addr'\n" 54*2e192b24SSimon Glass " passing 'arg' as arguments" 55*2e192b24SSimon Glass ); 56*2e192b24SSimon Glass 57*2e192b24SSimon Glass #endif 58*2e192b24SSimon Glass 59*2e192b24SSimon Glass U_BOOT_CMD( 60*2e192b24SSimon Glass reset, 1, 0, do_reset, 61*2e192b24SSimon Glass "Perform RESET of the CPU", 62*2e192b24SSimon Glass "" 63*2e192b24SSimon Glass ); 64*2e192b24SSimon Glass 65*2e192b24SSimon Glass #ifdef CONFIG_CMD_POWEROFF 66*2e192b24SSimon Glass U_BOOT_CMD( 67*2e192b24SSimon Glass poweroff, 1, 0, do_poweroff, 68*2e192b24SSimon Glass "Perform POWEROFF of the device", 69*2e192b24SSimon Glass "" 70*2e192b24SSimon Glass ); 71*2e192b24SSimon Glass #endif 72