blob: 397e7561d4d9a39ee0ad90b5331e2b723f7b702d [file] [log] [blame]
Tom Rini10e47792018-05-06 17:58:06 -04001// SPDX-License-Identifier: GPL-2.0+
Simon Glassf1a6c762011-10-07 13:53:38 +00002/*
3 * Copyright (c) 2011 The Chromium OS Authors.
Simon Glassf1a6c762011-10-07 13:53:38 +00004 */
5
6#include <common.h>
Simon Glassfd173402014-02-27 13:26:13 -07007#include <cros_ec.h>
Simon Glassb4d70702014-02-26 15:59:25 -07008#include <dm.h>
Patrick Delaunay29bf6032018-07-27 16:37:09 +02009#include <led.h>
Matthias Weisser0d3dd142011-11-29 12:16:40 +010010#include <os.h>
Joe Hershberger74961352015-04-21 13:57:18 -050011#include <asm/test.h>
Simon Glassb9ddbf42014-02-27 13:26:19 -070012#include <asm/u-boot-sandbox.h>
Matthias Weisser0d3dd142011-11-29 12:16:40 +010013
Simon Glassf1a6c762011-10-07 13:53:38 +000014/*
15 * Pointer to initial global data area
16 *
17 * Here we initialize it.
18 */
19gd_t *gd;
20
Simon Glassb4d70702014-02-26 15:59:25 -070021/* Add a simple GPIO device */
22U_BOOT_DEVICE(gpio_sandbox) = {
23 .name = "gpio_sandbox",
24};
25
Simon Glassf1a6c762011-10-07 13:53:38 +000026void flush_cache(unsigned long start, unsigned long size)
27{
28}
29
Thomas Chou7b059dc2015-10-30 15:35:52 +080030#ifndef CONFIG_TIMER
Joe Hershberger74961352015-04-21 13:57:18 -050031/* system timer offset in ms */
32static unsigned long sandbox_timer_offset;
33
34void sandbox_timer_add_offset(unsigned long offset)
35{
36 sandbox_timer_offset += offset;
37}
38
Rob Herring86bd4e82013-11-08 08:40:44 -060039unsigned long timer_read_counter(void)
Simon Glassf1a6c762011-10-07 13:53:38 +000040{
Joe Hershberger74961352015-04-21 13:57:18 -050041 return os_get_nsec() / 1000 + sandbox_timer_offset * 1000;
Simon Glassf1a6c762011-10-07 13:53:38 +000042}
Thomas Chou7b059dc2015-10-30 15:35:52 +080043#endif
Simon Glassf1a6c762011-10-07 13:53:38 +000044
Simon Glassf1a6c762011-10-07 13:53:38 +000045int dram_init(void)
46{
Simon Glass62cf9122013-04-26 02:53:43 +000047 gd->ram_size = CONFIG_SYS_SDRAM_SIZE;
Simon Glassf1a6c762011-10-07 13:53:38 +000048 return 0;
49}
Simon Glassfd173402014-02-27 13:26:13 -070050
Patrick Delaunay29bf6032018-07-27 16:37:09 +020051int board_init(void)
52{
53 if (IS_ENABLED(CONFIG_LED))
54 led_default_state();
55
56 return 0;
57}
58
Simon Glassfd173402014-02-27 13:26:13 -070059#ifdef CONFIG_BOARD_LATE_INIT
60int board_late_init(void)
61{
Simon Glassfe3f6432018-11-06 15:21:26 -070062 struct udevice *dev;
63 int ret;
64
65 ret = uclass_first_device_err(UCLASS_CROS_EC, &dev);
66 if (ret && ret != -ENODEV) {
Simon Glassfd173402014-02-27 13:26:13 -070067 /* Force console on */
68 gd->flags &= ~GD_FLG_SILENT;
69
Simon Glassfe3f6432018-11-06 15:21:26 -070070 printf("cros-ec communications failure %d\n", ret);
Simon Glassfd173402014-02-27 13:26:13 -070071 puts("\nPlease reset with Power+Refresh\n\n");
72 panic("Cannot init cros-ec device");
73 return -1;
74 }
75 return 0;
76}
77#endif