xref: /rk3399_rockchip-uboot/drivers/core/read.c (revision 47a0fd3bad3858ae2f58bc3b3368e16ed20f394c)
1*47a0fd3bSSimon Glass /*
2*47a0fd3bSSimon Glass  * Copyright (c) 2017 Google, Inc
3*47a0fd3bSSimon Glass  * Written by Simon Glass <sjg@chromium.org>
4*47a0fd3bSSimon Glass  *
5*47a0fd3bSSimon Glass  * SPDX-License-Identifier:	GPL-2.0+
6*47a0fd3bSSimon Glass  */
7*47a0fd3bSSimon Glass 
8*47a0fd3bSSimon Glass #include <common.h>
9*47a0fd3bSSimon Glass #include <dm.h>
10*47a0fd3bSSimon Glass #include <dm/of_access.h>
11*47a0fd3bSSimon Glass 
12*47a0fd3bSSimon Glass int dev_read_u32_default(struct udevice *dev, const char *propname, int def)
13*47a0fd3bSSimon Glass {
14*47a0fd3bSSimon Glass 	return ofnode_read_u32_default(dev_ofnode(dev), propname, def);
15*47a0fd3bSSimon Glass }
16*47a0fd3bSSimon Glass 
17*47a0fd3bSSimon Glass const char *dev_read_string(struct udevice *dev, const char *propname)
18*47a0fd3bSSimon Glass {
19*47a0fd3bSSimon Glass 	return ofnode_read_string(dev_ofnode(dev), propname);
20*47a0fd3bSSimon Glass }
21*47a0fd3bSSimon Glass 
22*47a0fd3bSSimon Glass bool dev_read_bool(struct udevice *dev, const char *propname)
23*47a0fd3bSSimon Glass {
24*47a0fd3bSSimon Glass 	return ofnode_read_bool(dev_ofnode(dev), propname);
25*47a0fd3bSSimon Glass }
26*47a0fd3bSSimon Glass 
27*47a0fd3bSSimon Glass ofnode dev_read_subnode(struct udevice *dev, const char *subnode_name)
28*47a0fd3bSSimon Glass {
29*47a0fd3bSSimon Glass 	return ofnode_find_subnode(dev_ofnode(dev), subnode_name);
30*47a0fd3bSSimon Glass }
31*47a0fd3bSSimon Glass 
32*47a0fd3bSSimon Glass ofnode dev_read_first_subnode(struct udevice *dev)
33*47a0fd3bSSimon Glass {
34*47a0fd3bSSimon Glass 	return ofnode_first_subnode(dev_ofnode(dev));
35*47a0fd3bSSimon Glass }
36*47a0fd3bSSimon Glass 
37*47a0fd3bSSimon Glass ofnode dev_read_next_subnode(ofnode node)
38*47a0fd3bSSimon Glass {
39*47a0fd3bSSimon Glass 	return ofnode_next_subnode(node);
40*47a0fd3bSSimon Glass }
41*47a0fd3bSSimon Glass 
42*47a0fd3bSSimon Glass int dev_read_size(struct udevice *dev, const char *propname)
43*47a0fd3bSSimon Glass {
44*47a0fd3bSSimon Glass 	return ofnode_read_size(dev_ofnode(dev), propname);
45*47a0fd3bSSimon Glass }
46*47a0fd3bSSimon Glass 
47*47a0fd3bSSimon Glass fdt_addr_t dev_read_addr_index(struct udevice *dev, int index)
48*47a0fd3bSSimon Glass {
49*47a0fd3bSSimon Glass 	if (ofnode_is_np(dev_ofnode(dev)))
50*47a0fd3bSSimon Glass 		return ofnode_get_addr_index(dev_ofnode(dev), index);
51*47a0fd3bSSimon Glass 	else
52*47a0fd3bSSimon Glass 		return devfdt_get_addr_index(dev, index);
53*47a0fd3bSSimon Glass }
54*47a0fd3bSSimon Glass 
55*47a0fd3bSSimon Glass fdt_addr_t dev_read_addr(struct udevice *dev)
56*47a0fd3bSSimon Glass {
57*47a0fd3bSSimon Glass 	return dev_read_addr_index(dev, 0);
58*47a0fd3bSSimon Glass }
59*47a0fd3bSSimon Glass 
60*47a0fd3bSSimon Glass fdt_addr_t dev_read_addr_size(struct udevice *dev, const char *property,
61*47a0fd3bSSimon Glass 				fdt_size_t *sizep)
62*47a0fd3bSSimon Glass {
63*47a0fd3bSSimon Glass 	return ofnode_get_addr_size(dev_ofnode(dev), property, sizep);
64*47a0fd3bSSimon Glass }
65*47a0fd3bSSimon Glass 
66*47a0fd3bSSimon Glass const char *dev_read_name(struct udevice *dev)
67*47a0fd3bSSimon Glass {
68*47a0fd3bSSimon Glass 	return ofnode_get_name(dev_ofnode(dev));
69*47a0fd3bSSimon Glass }
70*47a0fd3bSSimon Glass 
71*47a0fd3bSSimon Glass int dev_read_stringlist_search(struct udevice *dev, const char *property,
72*47a0fd3bSSimon Glass 			  const char *string)
73*47a0fd3bSSimon Glass {
74*47a0fd3bSSimon Glass 	return ofnode_stringlist_search(dev_ofnode(dev), property, string);
75*47a0fd3bSSimon Glass }
76*47a0fd3bSSimon Glass 
77*47a0fd3bSSimon Glass int dev_read_phandle_with_args(struct udevice *dev, const char *list_name,
78*47a0fd3bSSimon Glass 				const char *cells_name, int cell_count,
79*47a0fd3bSSimon Glass 				int index,
80*47a0fd3bSSimon Glass 				struct ofnode_phandle_args *out_args)
81*47a0fd3bSSimon Glass {
82*47a0fd3bSSimon Glass 	return ofnode_parse_phandle_with_args(dev_ofnode(dev), list_name,
83*47a0fd3bSSimon Glass 					      cells_name, cell_count, index,
84*47a0fd3bSSimon Glass 					      out_args);
85*47a0fd3bSSimon Glass }
86*47a0fd3bSSimon Glass 
87*47a0fd3bSSimon Glass int dev_read_addr_cells(struct udevice *dev)
88*47a0fd3bSSimon Glass {
89*47a0fd3bSSimon Glass 	return ofnode_read_addr_cells(dev_ofnode(dev));
90*47a0fd3bSSimon Glass }
91*47a0fd3bSSimon Glass 
92*47a0fd3bSSimon Glass int dev_read_size_cells(struct udevice *dev)
93*47a0fd3bSSimon Glass {
94*47a0fd3bSSimon Glass 	return ofnode_read_size_cells(dev_ofnode(dev));
95*47a0fd3bSSimon Glass }
96*47a0fd3bSSimon Glass 
97*47a0fd3bSSimon Glass int dev_read_phandle(struct udevice *dev)
98*47a0fd3bSSimon Glass {
99*47a0fd3bSSimon Glass 	ofnode node = dev_ofnode(dev);
100*47a0fd3bSSimon Glass 
101*47a0fd3bSSimon Glass 	if (ofnode_is_np(node))
102*47a0fd3bSSimon Glass 		return ofnode_to_np(node)->phandle;
103*47a0fd3bSSimon Glass 	else
104*47a0fd3bSSimon Glass 		return fdt_get_phandle(gd->fdt_blob, ofnode_to_offset(node));
105*47a0fd3bSSimon Glass }
106*47a0fd3bSSimon Glass 
107*47a0fd3bSSimon Glass const u32 *dev_read_prop(struct udevice *dev, const char *propname, int *lenp)
108*47a0fd3bSSimon Glass {
109*47a0fd3bSSimon Glass 	return ofnode_read_prop(dev_ofnode(dev), propname, lenp);
110*47a0fd3bSSimon Glass }
111*47a0fd3bSSimon Glass 
112*47a0fd3bSSimon Glass int dev_read_alias_seq(struct udevice *dev, int *devnump)
113*47a0fd3bSSimon Glass {
114*47a0fd3bSSimon Glass 	ofnode node = dev_ofnode(dev);
115*47a0fd3bSSimon Glass 	const char *uc_name = dev->uclass->uc_drv->name;
116*47a0fd3bSSimon Glass 	int ret;
117*47a0fd3bSSimon Glass 
118*47a0fd3bSSimon Glass 	if (ofnode_is_np(node)) {
119*47a0fd3bSSimon Glass 		ret = of_alias_get_id(ofnode_to_np(node), uc_name);
120*47a0fd3bSSimon Glass 		if (ret >= 0)
121*47a0fd3bSSimon Glass 			*devnump = ret;
122*47a0fd3bSSimon Glass 	} else {
123*47a0fd3bSSimon Glass 		ret = fdtdec_get_alias_seq(gd->fdt_blob, uc_name,
124*47a0fd3bSSimon Glass 					   ofnode_to_offset(node), devnump);
125*47a0fd3bSSimon Glass 	}
126*47a0fd3bSSimon Glass 
127*47a0fd3bSSimon Glass 	return ret;
128*47a0fd3bSSimon Glass }
129*47a0fd3bSSimon Glass 
130*47a0fd3bSSimon Glass int dev_read_u32_array(struct udevice *dev, const char *propname,
131*47a0fd3bSSimon Glass 		       u32 *out_values, size_t sz)
132*47a0fd3bSSimon Glass {
133*47a0fd3bSSimon Glass 	return ofnode_read_u32_array(dev_ofnode(dev), propname, out_values, sz);
134*47a0fd3bSSimon Glass }
135*47a0fd3bSSimon Glass 
136*47a0fd3bSSimon Glass const uint8_t *dev_read_u8_array_ptr(struct udevice *dev, const char *propname,
137*47a0fd3bSSimon Glass 				     size_t sz)
138*47a0fd3bSSimon Glass {
139*47a0fd3bSSimon Glass 	return ofnode_read_u8_array_ptr(dev_ofnode(dev), propname, sz);
140*47a0fd3bSSimon Glass }
141