xref: /openbmc/u-boot/common/main.c (revision 00caae6d47645e68d6e5277aceb69592b49381a6)
1c609719bSwdenk /*
2c609719bSwdenk  * (C) Copyright 2000
3c609719bSwdenk  * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
4c609719bSwdenk  *
51a459660SWolfgang Denk  * SPDX-License-Identifier:	GPL-2.0+
6c609719bSwdenk  */
7c609719bSwdenk 
8a6c7ad2fSwdenk /* #define	DEBUG	*/
9a6c7ad2fSwdenk 
10c609719bSwdenk #include <common.h>
1166ded17dSSimon Glass #include <autoboot.h>
1218d66533SSimon Glass #include <cli.h>
1324b852a7SSimon Glass #include <console.h>
14fbcdf32aSSimon Glass #include <version.h>
15bdccc4feSwdenk 
169272a9b4SSimon Glass DECLARE_GLOBAL_DATA_PTR;
179272a9b4SSimon Glass 
18fad63407SHeiko Schocher /*
19fad63407SHeiko Schocher  * Board-specific Platform code can reimplement show_boot_progress () if needed
20fad63407SHeiko Schocher  */
213422299dSJeroen Hofstee __weak void show_boot_progress(int val) {}
22fad63407SHeiko Schocher 
231364a0e4SSimon Glass static void run_preboot_environment_command(void)
241364a0e4SSimon Glass {
25bc2b4c27SSimon Glass #ifdef CONFIG_PREBOOT
261364a0e4SSimon Glass 	char *p;
271364a0e4SSimon Glass 
28*00caae6dSSimon Glass 	p = env_get("preboot");
29bc2b4c27SSimon Glass 	if (p != NULL) {
30bc2b4c27SSimon Glass # ifdef CONFIG_AUTOBOOT_KEYED
31bc2b4c27SSimon Glass 		int prev = disable_ctrlc(1);	/* disable Control C checking */
32bc2b4c27SSimon Glass # endif
33bc2b4c27SSimon Glass 
34bc2b4c27SSimon Glass 		run_command_list(p, -1, 0);
35bc2b4c27SSimon Glass 
36bc2b4c27SSimon Glass # ifdef CONFIG_AUTOBOOT_KEYED
37bc2b4c27SSimon Glass 		disable_ctrlc(prev);	/* restore Control C checking */
38bc2b4c27SSimon Glass # endif
39bc2b4c27SSimon Glass 	}
40bc2b4c27SSimon Glass #endif /* CONFIG_PREBOOT */
411364a0e4SSimon Glass }
421364a0e4SSimon Glass 
43affb2156SSimon Glass /* We come here after U-Boot is initialised and ready to process commands */
441364a0e4SSimon Glass void main_loop(void)
451364a0e4SSimon Glass {
46affb2156SSimon Glass 	const char *s;
47affb2156SSimon Glass 
481364a0e4SSimon Glass 	bootstage_mark_name(BOOTSTAGE_ID_MAIN_LOOP, "main_loop");
491364a0e4SSimon Glass 
501364a0e4SSimon Glass #ifdef CONFIG_VERSION_VARIABLE
51382bee57SSimon Glass 	env_set("ver", version_string);  /* set version variable */
521364a0e4SSimon Glass #endif /* CONFIG_VERSION_VARIABLE */
531364a0e4SSimon Glass 
54c1bb2cd0SSimon Glass 	cli_init();
551364a0e4SSimon Glass 
561364a0e4SSimon Glass 	run_preboot_environment_command();
57bc2b4c27SSimon Glass 
58bc2b4c27SSimon Glass #if defined(CONFIG_UPDATE_TFTP)
59c7ff5528SLukasz Majewski 	update_tftp(0UL, NULL, NULL);
60bc2b4c27SSimon Glass #endif /* CONFIG_UPDATE_TFTP */
61bc2b4c27SSimon Glass 
62affb2156SSimon Glass 	s = bootdelay_process();
63affb2156SSimon Glass 	if (cli_process_fdt(&s))
64affb2156SSimon Glass 		cli_secure_boot_cmd(s);
65affb2156SSimon Glass 
66affb2156SSimon Glass 	autoboot_command(s);
67c1bb2cd0SSimon Glass 
686493ccc7SSimon Glass 	cli_loop();
69045e6f0dSSimon Glass 	panic("No CLI available");
70c609719bSwdenk }
71