sandbox: add a sandbox timer and basic test
Add a sandbox timer which get time from host os and a basic test. Signed-off-by: Thomas Chou <thomas@wytron.com.tw> Reviewed-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
6752195760
commit
9961a0b6fb
@ -177,6 +177,10 @@
|
||||
sides = <4>;
|
||||
};
|
||||
|
||||
timer {
|
||||
compatible = "sandbox,timer";
|
||||
};
|
||||
|
||||
tpm {
|
||||
compatible = "google,sandbox-tpm";
|
||||
};
|
||||
|
@ -26,6 +26,7 @@ void flush_cache(unsigned long start, unsigned long size)
|
||||
{
|
||||
}
|
||||
|
||||
#ifndef CONFIG_TIMER
|
||||
/* system timer offset in ms */
|
||||
static unsigned long sandbox_timer_offset;
|
||||
|
||||
@ -38,6 +39,7 @@ unsigned long timer_read_counter(void)
|
||||
{
|
||||
return os_get_nsec() / 1000 + sandbox_timer_offset * 1000;
|
||||
}
|
||||
#endif
|
||||
|
||||
int dram_init(void)
|
||||
{
|
||||
|
@ -53,6 +53,8 @@ CONFIG_SANDBOX_SERIAL=y
|
||||
CONFIG_SOUND=y
|
||||
CONFIG_SOUND_SANDBOX=y
|
||||
CONFIG_SANDBOX_SPI=y
|
||||
CONFIG_TIMER=y
|
||||
CONFIG_SANDBOX_TIMER=y
|
||||
CONFIG_TPM_TIS_SANDBOX=y
|
||||
CONFIG_USB=y
|
||||
CONFIG_DM_USB=y
|
||||
|
7
doc/device-tree-bindings/timer/sandbox_timer.txt
Normal file
7
doc/device-tree-bindings/timer/sandbox_timer.txt
Normal file
@ -0,0 +1,7 @@
|
||||
Sandbox timer
|
||||
|
||||
The sandbox timer device is an emulated device which gets time from
|
||||
host os.
|
||||
|
||||
Required properties:
|
||||
compatible: "sandbox,timer"
|
@ -16,4 +16,11 @@ config ALTERA_TIMER
|
||||
Select this to enable an timer for Altera devices. Please find
|
||||
details on the "Embedded Peripherals IP User Guide" of Altera.
|
||||
|
||||
config SANDBOX_TIMER
|
||||
bool "Sandbox Timer support"
|
||||
depends on SANDBOX && TIMER
|
||||
help
|
||||
Select this to enable an emulated timer for sandbox. It gets
|
||||
time from host os.
|
||||
|
||||
endmenu
|
||||
|
@ -6,3 +6,4 @@
|
||||
|
||||
obj-$(CONFIG_TIMER) += timer-uclass.o
|
||||
obj-$(CONFIG_ALTERA_TIMER) += altera_timer.o
|
||||
obj-$(CONFIG_SANDBOX_TIMER) += sandbox_timer.o
|
||||
|
53
drivers/timer/sandbox_timer.c
Normal file
53
drivers/timer/sandbox_timer.c
Normal file
@ -0,0 +1,53 @@
|
||||
/*
|
||||
* Copyright (C) 2015 Thomas Chou <thomas@wytron.com.tw>
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0+
|
||||
*/
|
||||
|
||||
#include <common.h>
|
||||
#include <dm.h>
|
||||
#include <errno.h>
|
||||
#include <timer.h>
|
||||
#include <os.h>
|
||||
|
||||
/* system timer offset in ms */
|
||||
static unsigned long sandbox_timer_offset;
|
||||
|
||||
void sandbox_timer_add_offset(unsigned long offset)
|
||||
{
|
||||
sandbox_timer_offset += offset;
|
||||
}
|
||||
|
||||
static int sandbox_timer_get_count(struct udevice *dev, unsigned long *count)
|
||||
{
|
||||
*count = os_get_nsec() / 1000 + sandbox_timer_offset * 1000;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int sandbox_timer_probe(struct udevice *dev)
|
||||
{
|
||||
struct timer_dev_priv *uc_priv = dev_get_uclass_priv(dev);
|
||||
|
||||
uc_priv->clock_rate = 1000000;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct timer_ops sandbox_timer_ops = {
|
||||
.get_count = sandbox_timer_get_count,
|
||||
};
|
||||
|
||||
static const struct udevice_id sandbox_timer_ids[] = {
|
||||
{ .compatible = "sandbox,timer" },
|
||||
{ }
|
||||
};
|
||||
|
||||
U_BOOT_DRIVER(sandbox_timer) = {
|
||||
.name = "sandbox_timer",
|
||||
.id = UCLASS_TIMER,
|
||||
.of_match = sandbox_timer_ids,
|
||||
.probe = sandbox_timer_probe,
|
||||
.ops = &sandbox_timer_ops,
|
||||
.flags = DM_FLAG_PRE_RELOC,
|
||||
};
|
@ -19,7 +19,9 @@
|
||||
#define CONFIG_IO_TRACE
|
||||
#define CONFIG_CMD_IOTRACE
|
||||
|
||||
#ifndef CONFIG_TIMER
|
||||
#define CONFIG_SYS_TIMER_RATE 1000000
|
||||
#endif
|
||||
|
||||
#define CONFIG_SYS_STDIO_DEREGISTER
|
||||
|
||||
|
@ -33,5 +33,6 @@ obj-y += syscon.o
|
||||
obj-$(CONFIG_DM_USB) += usb.o
|
||||
obj-$(CONFIG_DM_PMIC) += pmic.o
|
||||
obj-$(CONFIG_DM_REGULATOR) += regulator.o
|
||||
obj-$(CONFIG_TIMER) += timer.o
|
||||
obj-$(CONFIG_ADC) += adc.o
|
||||
endif
|
||||
|
27
test/dm/timer.c
Normal file
27
test/dm/timer.c
Normal file
@ -0,0 +1,27 @@
|
||||
/*
|
||||
* Copyright (C) 2015 Thomas Chou <thomas@wytron.com.tw>
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0+
|
||||
*/
|
||||
|
||||
#include <common.h>
|
||||
#include <dm.h>
|
||||
#include <timer.h>
|
||||
#include <dm/test.h>
|
||||
#include <test/ut.h>
|
||||
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
/*
|
||||
* Basic test of the timer uclass.
|
||||
*/
|
||||
static int dm_test_timer_base(struct unit_test_state *uts)
|
||||
{
|
||||
struct udevice *dev;
|
||||
|
||||
ut_assertok(uclass_get_device(UCLASS_TIMER, 0, &dev));
|
||||
ut_asserteq(1000000, timer_get_rate(dev));
|
||||
|
||||
return 0;
|
||||
}
|
||||
DM_TEST(dm_test_timer_base, DM_TESTF_SCAN_PDATA | DM_TESTF_SCAN_FDT);
|
Loading…
Reference in New Issue
Block a user