#include #include #include #include #include #include #include #include #include #include #include #include unsigned long ticks2usec(unsigned long ticks) { ulong tbclk = get_tbclk(); tbclk /= 1000000; ticks /= tbclk; return ((ulong)ticks); } unsigned long relocate_dtb(bootm_headers_t *bootm_hdr) { image_info_t os; void *image_buf; ulong image_size; if (!bootm_hdr) { pr_err("Invalid params for %s\n", __func__); return 0; } os = bootm_hdr->os; image_size = os.image_len; image_buf = map_sysmem(os.image_start, image_size); pr_info("Image addr 0x%lX, len 0x%lX\n", (ulong)image_buf, image_size); memmove((char *)CONFIG_DTB_BASE, (char *)(image_buf + image_size), CONFIG_DTB_MAX_SIZE); return CONFIG_DTB_BASE; } void show_boot_timestamp(void) { char *show_timestamp; TIME_STAMP(0); stopwatch_trigger(); show_timestamp = env_get("timestamp"); if (*show_timestamp == 'y') { serial_enable_output(true); timestamp_print(0); stopwatch_print(); } } #ifndef CONFIG_AUTOBOOT int board_run_command(const char *cmdline) { int ret = -1; int (*entry)(void *) = (void *)CONFIG_SBL_LOAD_ADDR; ret = flash_read(CONFIG_SBL_OFFSET, CONFIG_SBL_SIZE, (void *)CONFIG_SBL_LOAD_ADDR); if (ret != 0) { pr_err("Fail to read from flash\n"); goto error; } printf ("## Starting SBL at 0x%08lX ...\n", (ulong)CONFIG_SBL_LOAD_ADDR); dsb(); isb(); ret = entry(NULL); printf ("## SBL terminated, ret = %d\n", ret); error: return 1; } #endif