1 // --------------------------------------------------------------------------
2 INTERFACE [arm && kirkwood]:
11 Control_Reg = Mem_layout::Reset_map_base + 0x20300,
12 Reload0_Reg = Mem_layout::Reset_map_base + 0x20310,
13 Timer0_Reg = Mem_layout::Reset_map_base + 0x20314,
14 Reload1_Reg = Mem_layout::Reset_map_base + 0x20318,
15 Timer1_Reg = Mem_layout::Reset_map_base + 0x2031c,
17 Bridge_cause = Mem_layout::Reset_map_base + 0x20110,
18 Bridge_mask = Mem_layout::Reset_map_base + 0x20114,
20 Timer0_enable = 1 << 0,
23 Timer0_bridge_num = 1 << 1,
24 Timer1_bridge_num = 1 << 2,
26 Reload_value = 200000,
32 // ----------------------------------------------------------------------
33 IMPLEMENTATION [arm && kirkwood]:
49 Io::write(0, Control_Reg);
51 // Set current timer value and reload value
52 Io::write<Mword>(Reload_value, Timer0_Reg);
53 Io::write<Mword>(Reload_value, Reload0_Reg);
55 Irq_chip::hw_chip->reserve(Config::Scheduling_irq);
58 Irq_chip::hw_chip->setup(&ib, Config::Scheduling_irq);
61 Io::set<Mword>(Timer0_enable | Timer0_auto, Control_Reg);
66 Timer::timer_to_us(Unsigned32 /*cr*/)
71 Timer::us_to_timer(Unsigned64 us)
72 { (void)us; return 0; }
74 IMPLEMENT inline NEEDS["io.h"]
75 void Timer::acknowledge()
77 Io::clear<Unsigned32>(Timer0_bridge_num, Bridge_cause);
80 IMPLEMENT inline NEEDS["irq_pin.h"]
83 Io::set<Unsigned32>(Timer0_bridge_num, Bridge_mask);
87 IMPLEMENT inline NEEDS["irq_pin.h"]
90 Io::clear<Unsigned32>(Timer0_bridge_num, Bridge_mask);
94 IMPLEMENT inline NEEDS["kip.h", "io.h", Timer::timer_to_us, Timer::us_to_timer]
96 Timer::update_one_shot(Unsigned64 /*wakeup*/)
100 IMPLEMENT inline NEEDS["config.h", "kip.h", "io.h", Timer::timer_to_us]
102 Timer::system_clock()
104 if (Config::scheduler_one_shot)
106 return Kip::k()->clock;