xref: /openbmc/u-boot/test/dm/ofnode.c (revision cf033e04)
104ca8714SMasahiro Yamada // SPDX-License-Identifier: GPL-2.0+
204ca8714SMasahiro Yamada 
304ca8714SMasahiro Yamada #include <common.h>
404ca8714SMasahiro Yamada #include <dm.h>
5*e6c5c94aSSimon Glass #include <dm/of_extra.h>
604ca8714SMasahiro Yamada #include <dm/test.h>
704ca8714SMasahiro Yamada #include <test/ut.h>
804ca8714SMasahiro Yamada 
dm_test_ofnode_compatible(struct unit_test_state * uts)904ca8714SMasahiro Yamada static int dm_test_ofnode_compatible(struct unit_test_state *uts)
1004ca8714SMasahiro Yamada {
1104ca8714SMasahiro Yamada 	ofnode root_node = ofnode_path("/");
1204ca8714SMasahiro Yamada 
1304ca8714SMasahiro Yamada 	ut_assert(ofnode_valid(root_node));
1404ca8714SMasahiro Yamada 	ut_assert(ofnode_device_is_compatible(root_node, "sandbox"));
1504ca8714SMasahiro Yamada 
1604ca8714SMasahiro Yamada 	return 0;
1704ca8714SMasahiro Yamada }
1804ca8714SMasahiro Yamada DM_TEST(dm_test_ofnode_compatible, DM_TESTF_SCAN_PDATA | DM_TESTF_SCAN_FDT);
199bc7e96aSJens Wiklander 
dm_test_ofnode_by_prop_value(struct unit_test_state * uts)209bc7e96aSJens Wiklander static int dm_test_ofnode_by_prop_value(struct unit_test_state *uts)
219bc7e96aSJens Wiklander {
229bc7e96aSJens Wiklander 	const char propname[] = "compatible";
239bc7e96aSJens Wiklander 	const char propval[] = "denx,u-boot-fdt-test";
249bc7e96aSJens Wiklander 	const char *str;
259bc7e96aSJens Wiklander 	ofnode node = ofnode_null();
269bc7e96aSJens Wiklander 
279bc7e96aSJens Wiklander 	/* Find first matching node, there should be at least one */
289bc7e96aSJens Wiklander 	node = ofnode_by_prop_value(node, propname, propval, sizeof(propval));
299bc7e96aSJens Wiklander 	ut_assert(ofnode_valid(node));
309bc7e96aSJens Wiklander 	str = ofnode_read_string(node, propname);
319bc7e96aSJens Wiklander 	ut_assert(str && !strcmp(str, propval));
329bc7e96aSJens Wiklander 
339bc7e96aSJens Wiklander 	/* Find the rest of the matching nodes */
349bc7e96aSJens Wiklander 	while (true) {
359bc7e96aSJens Wiklander 		node = ofnode_by_prop_value(node, propname, propval,
369bc7e96aSJens Wiklander 					    sizeof(propval));
379bc7e96aSJens Wiklander 		if (!ofnode_valid(node))
389bc7e96aSJens Wiklander 			break;
399bc7e96aSJens Wiklander 		str = ofnode_read_string(node, propname);
409bc7e96aSJens Wiklander 		ut_assert(str && !strcmp(str, propval));
419bc7e96aSJens Wiklander 	}
429bc7e96aSJens Wiklander 
439bc7e96aSJens Wiklander 	return 0;
449bc7e96aSJens Wiklander }
459bc7e96aSJens Wiklander DM_TEST(dm_test_ofnode_by_prop_value, DM_TESTF_SCAN_FDT);
46*e6c5c94aSSimon Glass 
dm_test_ofnode_fmap(struct unit_test_state * uts)47*e6c5c94aSSimon Glass static int dm_test_ofnode_fmap(struct unit_test_state *uts)
48*e6c5c94aSSimon Glass {
49*e6c5c94aSSimon Glass 	struct fmap_entry entry;
50*e6c5c94aSSimon Glass 	ofnode node;
51*e6c5c94aSSimon Glass 
52*e6c5c94aSSimon Glass 	node = ofnode_path("/cros-ec/flash");
53*e6c5c94aSSimon Glass 	ut_assert(ofnode_valid(node));
54*e6c5c94aSSimon Glass 	ut_assertok(ofnode_read_fmap_entry(node, &entry));
55*e6c5c94aSSimon Glass 	ut_asserteq(0x08000000, entry.offset);
56*e6c5c94aSSimon Glass 	ut_asserteq(0x20000, entry.length);
57*e6c5c94aSSimon Glass 
58*e6c5c94aSSimon Glass 	return 0;
59*e6c5c94aSSimon Glass }
60*e6c5c94aSSimon Glass DM_TEST(dm_test_ofnode_fmap, DM_TESTF_SCAN_PDATA | DM_TESTF_SCAN_FDT);
61