| /* | |
| * (C) Copyright 2000 | |
| * Wolfgang Denk, DENX Software Engineering, wd@denx.de. | |
| * | |
| * SPDX-License-Identifier: GPL-2.0+ | |
| */ | |
| /* #define DEBUG */ | |
| #include <common.h> | |
| #include <autoboot.h> | |
| #include <cli.h> | |
| #include <version.h> | |
| #include <zircon-estelle/zircon.h> | |
| DECLARE_GLOBAL_DATA_PTR; | |
| /* | |
| * Board-specific Platform code can reimplement show_boot_progress () if needed | |
| */ | |
| __weak void show_boot_progress(int val) {} | |
| static void modem_init(void) | |
| { | |
| #ifdef CONFIG_MODEM_SUPPORT | |
| debug("DEBUG: main_loop: gd->do_mdm_init=%lu\n", gd->do_mdm_init); | |
| if (gd->do_mdm_init) { | |
| char *str = getenv("mdm_cmd"); | |
| setenv("preboot", str); /* set or delete definition */ | |
| mdm_init(); /* wait for modem connection */ | |
| } | |
| #endif /* CONFIG_MODEM_SUPPORT */ | |
| } | |
| static void run_preboot_environment_command(void) | |
| { | |
| #ifdef CONFIG_PREBOOT | |
| char *p; | |
| p = getenv("preboot"); | |
| if (p != NULL) { | |
| # ifdef CONFIG_AUTOBOOT_KEYED | |
| int prev = disable_ctrlc(1); /* disable Control C checking */ | |
| # endif | |
| run_command_list(p, -1, 0); | |
| # ifdef CONFIG_AUTOBOOT_KEYED | |
| disable_ctrlc(prev); /* restore Control C checking */ | |
| # endif | |
| } | |
| #endif /* CONFIG_PREBOOT */ | |
| } | |
| /* We come here after U-Boot is initialised and ready to process commands */ | |
| void main_loop(void) | |
| { | |
| puts("bootloader build variant: " BOOTLOADER_BUILD_VARIANT "\n"); | |
| const char *s; | |
| bootstage_mark_name(BOOTSTAGE_ID_MAIN_LOOP, "main_loop"); | |
| #ifndef CONFIG_SYS_GENERIC_BOARD | |
| puts("Warning: Your board does not use generic board. Please read\n"); | |
| puts("doc/README.generic-board and take action. Boards not\n"); | |
| puts("upgraded by the late 2014 may break or be removed.\n"); | |
| #endif | |
| modem_init(); | |
| #ifdef CONFIG_VERSION_VARIABLE | |
| setenv("ver", version_string); /* set version variable */ | |
| #endif /* CONFIG_VERSION_VARIABLE */ | |
| cli_init(); | |
| run_preboot_environment_command(); | |
| #if defined(CONFIG_UPDATE_TFTP) | |
| update_tftp(0UL); | |
| #endif /* CONFIG_UPDATE_TFTP */ | |
| s = bootdelay_process(); | |
| if (cli_process_fdt(&s)) | |
| cli_secure_boot_cmd(s); | |
| #if defined(CONFIG_AML_UBOOT_AUTO_TEST) | |
| //stick 0 and stick 1 will be used to check the boot process of uboot | |
| //stick 0 is the start counter (0xC8834400 + 0x7C<<2) = 0xc88345f0 | |
| //stick 1 is the end counter (0xC8834400 + 0x7D<<2) = 0xc88345f4 | |
| if (*((volatile unsigned int*)(0xc88345f0))) | |
| { | |
| printf("\n\naml log : TE = %d\n",*((volatile unsigned int*)0xc1109988)); | |
| *((volatile unsigned int*)(0xc88345f4)) += 1; //stick 1 | |
| printf("\n\naml log : Boot success %d times @ %d\n",*((volatile unsigned int*)(0xc88345f4)), | |
| *((volatile unsigned int*)(0xc88345f0))); //stick 0 set in bl2_main.c | |
| int ndelay = 10; | |
| int nabort = 0; | |
| while (ndelay) | |
| { | |
| udelay(1); | |
| if (tstc()) | |
| switch (getc()) | |
| { | |
| //case 0x20: /* Space */ | |
| case 0x0d: /* Enter */ | |
| nabort = 1; | |
| break; | |
| } | |
| ndelay -= 1; | |
| } | |
| if (!nabort) | |
| run_command("reset",0); | |
| } | |
| #endif //#if defined(CONFIG_AML_UBOOT_AUTO_TEST) | |
| autoboot_command(s); | |
| #if defined(CONFIG_CLI_ENABLED) | |
| cli_loop(); | |
| #endif /* CONFIG_CLI_ENABLED */ | |
| printf("FAILED to boot!\n"); | |
| for(;;); | |
| } |