14b0730d2SSimon Glass /* 24b0730d2SSimon Glass * Copyright (c) 2011 The Chromium OS Authors. 31a459660SWolfgang Denk * SPDX-License-Identifier: GPL-2.0+ 44b0730d2SSimon Glass */ 54b0730d2SSimon Glass 64b0730d2SSimon Glass #include <common.h> 77a9219c1SSimon Glass #include <os.h> 8*5c2859cdSSimon Glass #include <asm/state.h> 94b0730d2SSimon Glass 104b0730d2SSimon Glass DECLARE_GLOBAL_DATA_PTR; 114b0730d2SSimon Glass 1288bd0e9dSSimon Glass void reset_cpu(ulong ignored) 134b0730d2SSimon Glass { 14*5c2859cdSSimon Glass if (state_uninit()) 15*5c2859cdSSimon Glass os_exit(2); 16*5c2859cdSSimon Glass 177a9219c1SSimon Glass /* This is considered normal termination for now */ 187a9219c1SSimon Glass os_exit(0); 1988bd0e9dSSimon Glass } 2088bd0e9dSSimon Glass 2188bd0e9dSSimon Glass int do_reset(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) 2288bd0e9dSSimon Glass { 2388bd0e9dSSimon Glass reset_cpu(0); 2488bd0e9dSSimon Glass 254b0730d2SSimon Glass return 0; 264b0730d2SSimon Glass } 274b0730d2SSimon Glass 284b0730d2SSimon Glass /* delay x useconds */ 294b0730d2SSimon Glass void __udelay(unsigned long usec) 304b0730d2SSimon Glass { 31d99a6874SMatthias Weisser os_usleep(usec); 324b0730d2SSimon Glass } 334b0730d2SSimon Glass 34e2ee100fSSimon Glass unsigned long __attribute__((no_instrument_function)) timer_get_us(void) 354b0730d2SSimon Glass { 36d99a6874SMatthias Weisser return os_get_nsec() / 1000; 374b0730d2SSimon Glass } 384b0730d2SSimon Glass 394b0730d2SSimon Glass int do_bootm_linux(int flag, int argc, char *argv[], bootm_headers_t *images) 404b0730d2SSimon Glass { 4188bd0e9dSSimon Glass if (flag & (BOOTM_STATE_OS_GO | BOOTM_STATE_OS_FAKE_GO)) { 4288bd0e9dSSimon Glass bootstage_mark(BOOTSTAGE_ID_RUN_OS); 4388bd0e9dSSimon Glass printf("## Transferring control to Linux (at address %08lx)...\n", 4488bd0e9dSSimon Glass images->ep); 4588bd0e9dSSimon Glass reset_cpu(0); 4688bd0e9dSSimon Glass } 4788bd0e9dSSimon Glass 4888bd0e9dSSimon Glass return 0; 494b0730d2SSimon Glass } 504b0730d2SSimon Glass 514b0730d2SSimon Glass int cleanup_before_linux(void) 524b0730d2SSimon Glass { 534b0730d2SSimon Glass return 0; 544b0730d2SSimon Glass } 554b0730d2SSimon Glass 564b0730d2SSimon Glass void *map_physmem(phys_addr_t paddr, unsigned long len, unsigned long flags) 574b0730d2SSimon Glass { 588ee666a7SSimon Glass return (void *)(gd->arch.ram_buf + paddr); 594b0730d2SSimon Glass } 604b0730d2SSimon Glass 61781adb57SSimon Glass phys_addr_t map_to_sysmem(void *ptr) 62781adb57SSimon Glass { 63781adb57SSimon Glass return (u8 *)ptr - gd->arch.ram_buf; 64781adb57SSimon Glass } 65781adb57SSimon Glass 664b0730d2SSimon Glass void flush_dcache_range(unsigned long start, unsigned long stop) 674b0730d2SSimon Glass { 684b0730d2SSimon Glass } 69