20e442ab2d
The current macro is a misnomer since it does not declare a device directly. Instead, it declares driver_info record which U-Boot uses at runtime to create a device. The distinction seems somewhat minor most of the time, but is becomes quite confusing when we actually want to declare a device, with of-platdata. We are left trying to distinguish between a device which isn't actually device, and a device that is (perhaps an 'instance'?) It seems better to rename this macro to describe what it actually is. The macros is not widely used, since boards should use devicetree to declare devices. Rename it to U_BOOT_DRVINFO(), which indicates clearly that this is declaring a new driver_info record, not a device. Signed-off-by: Simon Glass <sjg@chromium.org>
71 lines
1.5 KiB
C
71 lines
1.5 KiB
C
// SPDX-License-Identifier: GPL-2.0+
|
|
/*
|
|
* Copyright (C) 2015 Thomas Chou <thomas@wytron.com.tw>
|
|
*/
|
|
|
|
#include <common.h>
|
|
#include <dm.h>
|
|
#include <errno.h>
|
|
#include <timer.h>
|
|
#include <os.h>
|
|
|
|
#define SANDBOX_TIMER_RATE 1000000
|
|
|
|
/* system timer offset in ms */
|
|
static unsigned long sandbox_timer_offset;
|
|
|
|
void timer_test_add_offset(unsigned long offset)
|
|
{
|
|
sandbox_timer_offset += offset;
|
|
}
|
|
|
|
u64 notrace timer_early_get_count(void)
|
|
{
|
|
return os_get_nsec() / 1000 + sandbox_timer_offset * 1000;
|
|
}
|
|
|
|
unsigned long notrace timer_early_get_rate(void)
|
|
{
|
|
return SANDBOX_TIMER_RATE;
|
|
}
|
|
|
|
static notrace u64 sandbox_timer_get_count(struct udevice *dev)
|
|
{
|
|
return timer_early_get_count();
|
|
}
|
|
|
|
static int sandbox_timer_probe(struct udevice *dev)
|
|
{
|
|
struct timer_dev_priv *uc_priv = dev_get_uclass_priv(dev);
|
|
|
|
if (dev_read_bool(dev, "sandbox,timebase-frequency-fallback"))
|
|
return timer_timebase_fallback(dev);
|
|
else if (!uc_priv->clock_rate)
|
|
uc_priv->clock_rate = SANDBOX_TIMER_RATE;
|
|
|
|
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,
|
|
};
|
|
|
|
/* This is here in case we don't have a device tree */
|
|
U_BOOT_DRVINFO(sandbox_timer_non_fdt) = {
|
|
.name = "sandbox_timer",
|
|
};
|