summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorSean Anderson <seanga2@gmail.com>2020-09-28 17:52:23 +0300
committerAndes <uboot@andestech.com>2020-09-30 03:54:45 +0300
commit7616e3687e447b5a838f472afb5275fe6a841f5b (patch)
tree805ce147c29cffb9b0c4027a7151f596bc5960ff /test
parent3576121687965ffe580fc44f5dd1d8e9ab434c5b (diff)
downloadu-boot-7616e3687e447b5a838f472afb5275fe6a841f5b.tar.xz
timer: Add a test for timer_timebase_fallback
To test this function, sandbox CPU must set cpu_platdata.timebase_freq on bind. It also needs to expose a method to set the current cpu. I also make some most members of cpu_sandbox_ops static. On the timer side, the device tree property sandbox,timebase-frequency-fallback controls whether sandbox_timer_probe falls back to time_timebase_fallback or to SANDBOX_TIMER_RATE. Signed-off-by: Sean Anderson <seanga2@gmail.com> Reviewed-by: Simon Glass <sjg@chromium.org>
Diffstat (limited to 'test')
-rw-r--r--test/dm/timer.c27
1 files changed, 26 insertions, 1 deletions
diff --git a/test/dm/timer.c b/test/dm/timer.c
index 95dab97665..70043b9eee 100644
--- a/test/dm/timer.c
+++ b/test/dm/timer.c
@@ -7,8 +7,10 @@
#include <dm.h>
#include <timer.h>
#include <dm/test.h>
+#include <dm/device-internal.h>
#include <test/test.h>
#include <test/ut.h>
+#include <asm/cpu.h>
/*
* Basic test of the timer uclass.
@@ -17,9 +19,32 @@ static int dm_test_timer_base(struct unit_test_state *uts)
{
struct udevice *dev;
- ut_assertok(uclass_get_device(UCLASS_TIMER, 0, &dev));
+ ut_assertok(uclass_get_device_by_name(UCLASS_TIMER, "timer@0", &dev));
ut_asserteq(1000000, timer_get_rate(dev));
return 0;
}
DM_TEST(dm_test_timer_base, UT_TESTF_SCAN_PDATA | UT_TESTF_SCAN_FDT);
+
+/*
+ * Test of timebase fallback
+ */
+static int dm_test_timer_timebase_fallback(struct unit_test_state *uts)
+{
+ struct udevice *dev;
+
+ cpu_sandbox_set_current("cpu-test1");
+ ut_assertok(uclass_get_device_by_name(UCLASS_TIMER, "timer@1", &dev));
+ ut_asserteq(3000000, timer_get_rate(dev));
+ ut_assertok(device_remove(dev, DM_REMOVE_NORMAL));
+
+ cpu_sandbox_set_current("cpu-test2");
+ ut_assertok(uclass_get_device_by_name(UCLASS_TIMER, "timer@1", &dev));
+ ut_asserteq(2000000, timer_get_rate(dev));
+
+ cpu_sandbox_set_current("cpu-test1");
+
+ return 0;
+}
+DM_TEST(dm_test_timer_timebase_fallback,
+ UT_TESTF_SCAN_PDATA | UT_TESTF_SCAN_FDT);