We use syscon to test that the regmap functions work as expected. Signed-off-by: Simon Glass <sjg@chromium.org>master
parent
9f4629be8a
commit
86075bab27
@ -0,0 +1,82 @@ |
||||
/*
|
||||
* Copyright (C) 2015 Google, Inc |
||||
2 * |
||||
* SPDX-License-Identifier: GPL-2.0+ |
||||
*/ |
||||
|
||||
#include <common.h> |
||||
#include <dm.h> |
||||
#include <mapmem.h> |
||||
#include <regmap.h> |
||||
#include <syscon.h> |
||||
#include <asm/test.h> |
||||
#include <dm/test.h> |
||||
#include <test/ut.h> |
||||
|
||||
DECLARE_GLOBAL_DATA_PTR; |
||||
|
||||
/* Base test of register maps */ |
||||
static int dm_test_regmap_base(struct unit_test_state *uts) |
||||
{ |
||||
struct udevice *dev; |
||||
struct regmap *map; |
||||
int i; |
||||
|
||||
ut_assertok(uclass_get_device(UCLASS_SYSCON, 0, &dev)); |
||||
map = syscon_get_regmap(dev); |
||||
ut_assertok_ptr(map); |
||||
ut_asserteq(1, map->range_count); |
||||
ut_asserteq(0x10, map->base); |
||||
ut_asserteq(0x10, map->range->start); |
||||
ut_asserteq(4, map->range->size); |
||||
ut_asserteq_ptr(&map->base_range, map->range); |
||||
ut_asserteq(0x10, map_to_sysmem(regmap_get_range(map, 0))); |
||||
|
||||
ut_assertok(uclass_get_device(UCLASS_SYSCON, 1, &dev)); |
||||
map = syscon_get_regmap(dev); |
||||
ut_assertok_ptr(map); |
||||
ut_asserteq(4, map->range_count); |
||||
ut_asserteq(0x20, map->base); |
||||
ut_assert(&map->base_range != map->range); |
||||
for (i = 0; i < 4; i++) { |
||||
const unsigned long addr = 0x20 + 8 * i; |
||||
|
||||
ut_asserteq(addr, map->range[i].start); |
||||
ut_asserteq(5 + i, map->range[i].size); |
||||
ut_asserteq(addr, map_to_sysmem(regmap_get_range(map, i))); |
||||
} |
||||
|
||||
/* Check that we can't pretend a different device is a syscon */ |
||||
ut_assertok(uclass_get_device(UCLASS_I2C, 0, &dev)); |
||||
map = syscon_get_regmap(dev); |
||||
ut_asserteq_ptr(ERR_PTR(-ENOEXEC), map); |
||||
|
||||
return 0; |
||||
} |
||||
DM_TEST(dm_test_regmap_base, DM_TESTF_SCAN_PDATA | DM_TESTF_SCAN_FDT); |
||||
|
||||
/* Test we can access a regmap through syscon */ |
||||
static int dm_test_regmap_syscon(struct unit_test_state *uts) |
||||
{ |
||||
struct regmap *map; |
||||
|
||||
map = syscon_get_regmap_by_driver_data(SYSCON0); |
||||
ut_assertok_ptr(map); |
||||
ut_asserteq(1, map->range_count); |
||||
|
||||
map = syscon_get_regmap_by_driver_data(SYSCON1); |
||||
ut_assertok_ptr(map); |
||||
ut_asserteq(4, map->range_count); |
||||
|
||||
map = syscon_get_regmap_by_driver_data(SYSCON_COUNT); |
||||
ut_asserteq_ptr(ERR_PTR(-ENODEV), map); |
||||
|
||||
ut_asserteq(0x10, map_to_sysmem(syscon_get_first_range(SYSCON0))); |
||||
ut_asserteq(0x20, map_to_sysmem(syscon_get_first_range(SYSCON1))); |
||||
ut_asserteq_ptr(ERR_PTR(-ENODEV), |
||||
syscon_get_first_range(SYSCON_COUNT)); |
||||
|
||||
return 0; |
||||
} |
||||
|
||||
DM_TEST(dm_test_regmap_syscon, DM_TESTF_SCAN_PDATA | DM_TESTF_SCAN_FDT); |
Loading…
Reference in new issue