xref: /rk3399_rockchip-uboot/arch/sandbox/cpu/cpu.c (revision 5c2859cdc30287b3593d9df88f48c31eecb0bbed)
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