Blame view

drivers/timer/sandbox_timer.c 1.4 KB
9961a0b6f   Thomas Chou   sandbox: add a sa...
1
2
3
4
5
6
7
8
9
10
11
  /*
   * 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>
01476eaf0   Simon Glass   sandbox: timer: S...
12
  #define SANDBOX_TIMER_RATE	1000000
9961a0b6f   Thomas Chou   sandbox: add a sa...
13
14
15
16
17
18
19
  /* system timer offset in ms */
  static unsigned long sandbox_timer_offset;
  
  void sandbox_timer_add_offset(unsigned long offset)
  {
  	sandbox_timer_offset += offset;
  }
01476eaf0   Simon Glass   sandbox: timer: S...
20
21
22
23
24
25
26
27
28
29
30
  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 int sandbox_timer_get_count(struct udevice *dev, u64 *count)
9961a0b6f   Thomas Chou   sandbox: add a sa...
31
  {
01476eaf0   Simon Glass   sandbox: timer: S...
32
  	*count = timer_early_get_count();
9961a0b6f   Thomas Chou   sandbox: add a sa...
33
34
35
36
37
38
  
  	return 0;
  }
  
  static int sandbox_timer_probe(struct udevice *dev)
  {
bb883f824   Stephen Warren   timer: sandbox: w...
39
40
41
  	struct timer_dev_priv *uc_priv = dev_get_uclass_priv(dev);
  
  	if (!uc_priv->clock_rate)
01476eaf0   Simon Glass   sandbox: timer: S...
42
  		uc_priv->clock_rate = SANDBOX_TIMER_RATE;
bb883f824   Stephen Warren   timer: sandbox: w...
43

9961a0b6f   Thomas Chou   sandbox: add a sa...
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
  	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,
  };
bb883f824   Stephen Warren   timer: sandbox: w...
64
65
66
67
68
  
  /* This is here in case we don't have a device tree */
  U_BOOT_DEVICE(sandbox_timer_non_fdt) = {
  	.name = "sandbox_timer",
  };