coreboot-libre-fam15h-rdimm/3rdparty/chromeec/test/timer_calib.py

55 lines
1.8 KiB
Python

# Copyright 2011 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
#
# Check timers behavior
#
import time
def one_pass(helper):
helper.wait_output("=== Timer calibration ===")
res = helper.wait_output("back-to-back get_time : (?P<lat>[0-9]+) us",
use_re=True)["lat"]
minlat = int(res)
helper.trace("get_time latency %d us\n" % minlat)
helper.wait_output("sleep 1s")
t0 = time.time()
second = helper.wait_output("done. delay = (?P<second>[0-9]+) us",
use_re=True)["second"]
t1 = time.time()
secondreal = t1 - t0
secondlat = int(second) - 1000000
helper.trace("1s timer latency %d us / real time %f s\n" % (secondlat,
secondreal))
us = {}
for pow2 in range(7):
delay = 1 << (7-pow2)
us[delay] = helper.wait_output("%d us => (?P<us>[0-9]+) us" % delay,
use_re=True)["us"]
helper.wait_output("Done.")
return minlat, secondlat, secondreal
def test(helper):
one_pass(helper)
helper.ec_command("reboot")
helper.wait_output("--- UART initialized")
# get the timing results on the second pass
# to avoid binary translation overhead
minlat, secondlat, secondreal = one_pass(helper)
# check that the timings somewhat make sense
if minlat > 220 or secondlat > 500 or abs(secondreal-1.0) > 0.200:
helper.fail("imprecise timings " +
"(get_time %d us sleep %d us / real time %.3f s)" %
(minlat, secondlat, secondreal))
return True # PASS !