1 if {! $sidtarget(arm)} then { untested "hw-timer-arm/ref-* not available"; return }
3 set test "sid configuration w/ scheduler"
4 sid_config_component_etc_test_with_tracing "sched.conf" \
5 "load [sid_find_file libtimers.la] timer_component_library" \
6 "hw-timer-arm/ref-sched" \
7 "load [sid_find_file libsched.la] sched_component_library
8 new sid-sched-sim sched
9 set sched num-clients 1
11 connect-pin sched 0-control <- wrapper divided-clock-control
12 connect-pin sched 0-event -> wrapper divided-clock-event
13 relate tester sched sched
17 set test "sid startup"
18 if [sid_start "sched.conf"] then { pass $test } else { fail $test ; return }
20 set test "test presence of scheduler component"
21 set sched [sid_cmd "set relationships(sched)"]
22 if {"$sched" == ""} then { fail $test } else { pass $test }
24 set test "attribute list"
25 sid_assert_success "sid::component::attribute_names $victim"
27 set test "reserved register write_h4_l4 (0x04)"
28 set bus [sid_cmd "sid::component::find_bus $victim registers"]
29 sid_assert_success "sid::bus::write_h4_l4 $bus 4 0"
30 set test "reserved register read_h4_l4 (0x04)"
31 sid_assert_success "sid::bus::read_h4_l4 $bus 4"
33 set test "reserved register write_h4_l4 (0x10)"
34 set bus [sid_cmd "sid::component::find_bus $victim registers"]
35 sid_assert_success "sid::bus::write_h4_l4 $bus 0x10 0"
36 set test "reserved register read_h4_l4 (0x010)"
37 sid_assert_success "sid::bus::read_h4_l4 $bus 0x10"
39 set test "set / retrieve a load value (byte)"
40 set bus [sid_cmd "sid::component::find_bus $victim registers"]
41 sid_cmd "sid::bus::write_h4_l1 $bus 0 0xAA"
42 set val [sid_cmd "sid::bus::read_h4_l1 $bus 0"]
43 if {[lindex $val 0] == "ok" && [lindex $val 1] == 0xAA} then {pass $test} else {fail $test}
45 set test "set / retrieve a load value (half-word)"
46 set bus [sid_cmd "sid::component::find_bus $victim registers"]
47 sid_cmd "sid::bus::write_h4_l2 $bus 0 0xAABB"
48 set val [sid_cmd "sid::bus::read_h4_l2 $bus 0"]
49 if {[lindex $val 0] == "ok" && [lindex $val 1] == 0xAABB} then {pass $test} else {fail $test}
51 set test "set / retrieve a load value (word)"
52 set bus [sid_cmd "sid::component::find_bus $victim registers"]
53 sid_cmd "sid::bus::write_h4_l4 $bus 0 0xC"
54 set val [sid_cmd "sid::bus::read_h4_l4 $bus 0x0"]
55 if {[lindex $val 0] == "ok" && [lindex $val 1] == 0xC} then {pass $test} else {fail $test}
57 set test "retrieve timer value (word)"
58 set bus [sid_cmd "sid::component::find_bus $victim registers"]
59 set val [sid_cmd "sid::bus::read_h4_l4 $bus 0x4"]
60 if {[lindex $val 0] == "ok" && [lindex $val 1] == 0xC} then {pass $test} else {fail $test}
62 set test "clear interrupts"
63 set bus [sid_cmd "sid::component::find_bus $victim registers"]
64 set val [sid_cmd "sid::bus::write_h4_l4 $bus 0x0C 0"]
65 if {$val == "ok"} then {pass $test} else {fail $test}
67 set test "get control word"
68 set bus [sid_cmd "sid::component::find_bus $victim registers"]
69 set val [sid_cmd "sid::bus::read_h4_l4 $bus 0x08"]
70 # XXX: assert also the current value of the control word?
71 if {[string match "ok*" $val]} then {pass $test} else {fail $test}
73 set test "turn timer on"
74 set bus [sid_cmd "sid::component::find_bus $victim registers"]
75 set val [sid_cmd "sid::bus::write_h4_l4 $bus 0x08 0xC4"]
76 # C4: enabled | periodic | prescale=01 (divide-by-16)
77 if {$val == "ok"} then {pass $test} else {fail $test}
79 set test "tick presence of scheduler clock pin"
80 set clock_pin [sid_cmd "sid::component::find_pin $sched advance"]
81 if {$clock_pin == ""} then { fail $test } else { pass $test }
83 # 0C = last value stored in timer, a few tests ago
84 set test "tick timer for almost 0x0C steps = 0xB scheduler ticks"
85 set sensor_pin [sid_cmd "sid::pin::new"]
86 sid_cmd "set sensor_count 0"
87 sid_cmd "set sensor_state 0"
88 sid_cmd "set hook_driven_h4($sensor_pin) {global driven_h4_value; incr sensor_count ; set sensor_state \$driven_h4_value}"
89 sid_cmd "sid::component::connect_pin $victim interrupt $sensor_pin"
90 # one less tick than enough
91 for {set i 0} {$i < 0xB} {incr i} {
92 sid_cmd "sid::pin::driven_h4 $clock_pin 0"
94 set val [sid_cmd "set sensor_count"]
95 if {$val == "0"} then {pass $test} else {fail $test}
97 # one more tick - timer should trigger
98 set test "tick timer for final tick"
99 sid_cmd "sid::pin::driven_h4 $clock_pin 0"
100 set val1 [sid_cmd "set sensor_count"]
101 set val2 [sid_cmd "set sensor_state"]
102 if {$val1 == "1" && $val2 == "1"} then {pass $test} else {fail $test}
104 set test "clear interrupt"
105 set bus [sid_cmd "sid::component::find_bus $victim registers"]
106 set val [sid_cmd "sid::bus::write_h4_l4 $bus 0x0C 0"]
107 set val1 [sid_cmd "set sensor_count"]
108 set val2 [sid_cmd "set sensor_state"]
109 if {$val1 == 2 && $val2 == 0} then {pass $test} else {fail $test}
113 if [sid_stop] then { pass $test } else { fail $test ; return }
116 # zap temp file if tests were successful
118 if {$exit_status == "0"} then { file delete "sched.conf" }