1 // SPDX-License-Identifier: GPL-2.0+ 2 /* 3 * Copyright (C) 2015 Google, Inc 4 */ 5 6 #include <common.h> 7 #include <dm.h> 8 #include <mapmem.h> 9 #include <regmap.h> 10 #include <syscon.h> 11 #include <asm/test.h> 12 #include <dm/test.h> 13 #include <test/ut.h> 14 15 /* Base test of register maps */ 16 static int dm_test_regmap_base(struct unit_test_state *uts) 17 { 18 struct udevice *dev; 19 struct regmap *map; 20 int i; 21 22 ut_assertok(uclass_get_device(UCLASS_SYSCON, 0, &dev)); 23 map = syscon_get_regmap(dev); 24 ut_assertok_ptr(map); 25 ut_asserteq(1, map->range_count); 26 ut_asserteq(0x10, map->ranges[0].start); 27 ut_asserteq(4, map->ranges[0].size); 28 ut_asserteq(0x10, map_to_sysmem(regmap_get_range(map, 0))); 29 30 ut_assertok(uclass_get_device(UCLASS_SYSCON, 1, &dev)); 31 map = syscon_get_regmap(dev); 32 ut_assertok_ptr(map); 33 ut_asserteq(4, map->range_count); 34 ut_asserteq(0x20, map->ranges[0].start); 35 for (i = 0; i < 4; i++) { 36 const unsigned long addr = 0x20 + 8 * i; 37 38 ut_asserteq(addr, map->ranges[i].start); 39 ut_asserteq(5 + i, map->ranges[i].size); 40 ut_asserteq(addr, map_to_sysmem(regmap_get_range(map, i))); 41 } 42 43 /* Check that we can't pretend a different device is a syscon */ 44 ut_assertok(uclass_get_device(UCLASS_I2C, 0, &dev)); 45 map = syscon_get_regmap(dev); 46 ut_asserteq_ptr(ERR_PTR(-ENOEXEC), map); 47 48 return 0; 49 } 50 DM_TEST(dm_test_regmap_base, DM_TESTF_SCAN_PDATA | DM_TESTF_SCAN_FDT); 51 52 /* Test we can access a regmap through syscon */ 53 static int dm_test_regmap_syscon(struct unit_test_state *uts) 54 { 55 struct regmap *map; 56 57 map = syscon_get_regmap_by_driver_data(SYSCON0); 58 ut_assertok_ptr(map); 59 ut_asserteq(1, map->range_count); 60 61 map = syscon_get_regmap_by_driver_data(SYSCON1); 62 ut_assertok_ptr(map); 63 ut_asserteq(4, map->range_count); 64 65 map = syscon_get_regmap_by_driver_data(SYSCON_COUNT); 66 ut_asserteq_ptr(ERR_PTR(-ENODEV), map); 67 68 ut_asserteq(0x10, map_to_sysmem(syscon_get_first_range(SYSCON0))); 69 ut_asserteq(0x20, map_to_sysmem(syscon_get_first_range(SYSCON1))); 70 ut_asserteq_ptr(ERR_PTR(-ENODEV), 71 syscon_get_first_range(SYSCON_COUNT)); 72 73 return 0; 74 } 75 76 DM_TEST(dm_test_regmap_syscon, DM_TESTF_SCAN_PDATA | DM_TESTF_SCAN_FDT); 77