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>master
parent
6752195760
commit
9961a0b6fb
@ -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" |
@ -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, |
||||
}; |
@ -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