X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=arch%2Fsandbox%2Fcpu%2Fcpu.c;h=1aa397c5e773d8403293786838df63c7b539fa94;hb=490fdad5862d919f26793a484e2be4530740407a;hp=554cae85ef05874221cd38f9e59edf65bb8a51fd;hpb=4b0730d242fd203abfe60aed7d9d978bf6568b01;p=u-boot diff --git a/arch/sandbox/cpu/cpu.c b/arch/sandbox/cpu/cpu.c index 554cae85ef..1aa397c5e7 100644 --- a/arch/sandbox/cpu/cpu.c +++ b/arch/sandbox/cpu/cpu.c @@ -1,51 +1,55 @@ /* * Copyright (c) 2011 The Chromium OS Authors. - * See file CREDITS for list of people who contributed to this - * project. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of - * the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, - * MA 02111-1307 USA + * SPDX-License-Identifier: GPL-2.0+ */ #include +#include +#include +#include DECLARE_GLOBAL_DATA_PTR; +void reset_cpu(ulong ignored) +{ + if (state_uninit()) + os_exit(2); + + if (dm_uninit()) + os_exit(2); + + /* This is considered normal termination for now */ + os_exit(0); +} + int do_reset(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { - /* - * This is considered normal termination for now. We wil call os_exit() - * when available. - */ + reset_cpu(0); + return 0; } /* delay x useconds */ void __udelay(unsigned long usec) { - /* Ignore this for now */ + os_usleep(usec); } -unsigned long timer_get_us(void) +unsigned long __attribute__((no_instrument_function)) timer_get_us(void) { - return 0; + return os_get_nsec() / 1000; } int do_bootm_linux(int flag, int argc, char *argv[], bootm_headers_t *images) { - return -1; + if (flag & (BOOTM_STATE_OS_GO | BOOTM_STATE_OS_FAKE_GO)) { + bootstage_mark(BOOTSTAGE_ID_RUN_OS); + printf("## Transferring control to Linux (at address %08lx)...\n", + images->ep); + reset_cpu(0); + } + + return 0; } int cleanup_before_linux(void) @@ -55,7 +59,12 @@ int cleanup_before_linux(void) void *map_physmem(phys_addr_t paddr, unsigned long len, unsigned long flags) { - return (void *)(gd->ram_buf + paddr); + return (void *)(gd->arch.ram_buf + paddr); +} + +phys_addr_t map_to_sysmem(const void *ptr) +{ + return (u8 *)ptr - gd->arch.ram_buf; } void flush_dcache_range(unsigned long start, unsigned long stop)