Blame view

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